总线合集-video总线

Posted on 2024-04-07 21:56  绿叶落秋风  阅读(23)  评论(0编辑  收藏  举报

模板-V1

模型功能

  1. 将视频传输中的数据导入到总线上,方便后续的处理和拓展

模型框图

video_interface.sv

`include "../public_files/public_macro.svh"
interface video_interface;
logic clk;
logic rst_n;
logic fsync;
logic vsync;
logic hsync;
logic psync;
logic [`WD_VIDEO_VDATA - 1:0] vdata;

logic assert_open; //assert open flag
endinterface

public_macro.svh

// --------------------------------------------------------------------
// width macro
`define WD_VIDEO_VDATA 24

public_libs.svh

// ######################################################################
// lib include

`include "../public_interface/video_interface.sv"

tb_video_system_top.sv

// --------------------------------------------------------------------
// add sim libs of every scene
`include "./public_files/public_libs.svh"
`include "./public_files/public_macro.svh"

`timescale 1ns / 1ps
module tb_video_system_top #(
    
   )(
    
);
// --------------------------------------------------------------------
// add system clock and rst
reg i_sys_clk    = 0;
reg i_sys_resetn = 0;
always #5 i_sys_clk = ~i_sys_clk;
initial #1000 i_sys_resetn = 1;
// --------------------------------------------------------------------
// add video interface
//src
video_interface src_video_itf();
assign src_video_itf.clk = i_sys_clk;
assign src_video_itf.rst_n = i_sys_resetn;
//dst
video_interface dst_video_itf();
assign dst_video_itf.clk = i_sys_clk;
assign dst_video_itf.rst_n = i_sys_resetn;

// --------------------------------------------------------------------
// add DUT to test
video_gray_cacu#(
    .MD_SIM_ABLE       ( 0 ),
    .WD_DATA           ( 24 ),
    .WD_BYTE           ( 8 ),
    .WD_ERR_INFO       ( 4 )
)u_video_gray_cacu(
    .i_sys_clk         ( i_sys_clk         ),
    .i_sys_resetn      ( i_sys_resetn      ),
    .s_video_src_fsync ( src_video_itf.fsync ),
    .s_video_src_vsync ( src_video_itf.vsync ),
    .s_video_src_hsync ( src_video_itf.hsync ),
    .s_video_src_psync ( src_video_itf.psync ),
    .s_video_src_vdata ( src_video_itf.vdata ),
    .m_video_dst_fsync ( dst_video_itf.fsync ),
    .m_video_dst_vsync ( dst_video_itf.vsync ),
    .m_video_dst_hsync ( dst_video_itf.hsync ),
    .m_video_dst_psync ( dst_video_itf.psync ),
    .m_video_dst_vdata ( dst_video_itf.vdata ),
    .m_err_video_info1 (   )
);


endmodule

层次说明

  • 除了顶层文件,其他所有文件都在二级目录,包括后面新增的文件,都将以一二级目录的形式进行
    • 顶层调用场景scene,scene调用对应阶段phase的对应任务
    • 由于每次的调用都应该是可以任意连接的,所以将scene和phase放置在同一级没有问题

实现步骤

建立总线合集

  1. 如模型所示,编写带有各种信息的总线
  2. 由于总线具有指代性,所以可以在不改变原有信号的基础上,不断拓展而不需要考虑中间层的连接
  3. 总线主要是提供数据通道,同时也是驱动的最小单元
  • 基于总线的驱动可以更好地满足后续地拓展和维护地需求

构建公共文件

  1. 使用public_macro将所有的常数汇集,以免后续由于硬件升级导致需要大量修改参数
  2. 使用public_libs将所有的类以及各种结构包含在一个文件中方便顶层调用,这些调用是存在顺序的,在仿真时尤为注意

构建带总线集合的仿真顶层

  1. 例化video总线,
  2. 连接总线的各个元素。如时钟、信号,由于暂时未加入断言,所以断言标志未连接
  3. 例化DUT,完成一个系统仿真所需的基本要件

最终效果

vivado视图

调用接口

源码压缩包

工程源码