模板-V1
模型功能
- 将视频传输中的数据导入到总线上,方便后续的处理和拓展
模型框图
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放置在同一级没有问题
实现步骤
建立总线合集
- 如模型所示,编写带有各种信息的总线
- 由于总线具有指代性,所以可以在不改变原有信号的基础上,不断拓展而不需要考虑中间层的连接
- 总线主要是提供数据通道,同时也是驱动的最小单元
- 基于总线的驱动可以更好地满足后续地拓展和维护地需求
构建公共文件
- 使用public_macro将所有的常数汇集,以免后续由于硬件升级导致需要大量修改参数
- 使用public_libs将所有的类以及各种结构包含在一个文件中方便顶层调用,这些调用是存在顺序的,在仿真时尤为注意
构建带总线集合的仿真顶层
- 例化video总线,
- 连接总线的各个元素。如时钟、信号,由于暂时未加入断言,所以断言标志未连接
- 例化DUT,完成一个系统仿真所需的基本要件
最终效果
vivado视图
调用接口
源码压缩包
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:绿叶落秋风,专注FPGA技术分析和分享,转载请注明原文链接:https://www.cnblogs.com/electricdream/p/18119904,文中资源链接如下:
1. GITHUB开源仓库