模板-V1
模型功能
- 輸入視頻總線
- 輸出視頻總線
- 將RGB24數(shù)據(jù)轉(zhuǎn)化為灰度數(shù)據(jù)
模型框圖
控制模型

實(shí)現(xiàn)步驟
源碼編寫(xiě)
- 未經(jīng)仿真的原始代碼
`timescale 1ns / 1ps
/*
*/
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2024/04/05 13:24:26
// Design Name:
// Module Name: video_gray_cacu
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// FUNC1: output gray
//////////////////////////////////////////////////////////////////////////////////
module video_gray_cacu #(
//mode
parameter MD_SIM_ABLE = 0,
//number
//width
parameter WD_DATA = 24,
parameter WD_BYTE = 8,
parameter WD_ERR_INFO = 4
)(
//system signals
input i_sys_clk ,
input i_sys_resetn,
//video src
input s_video_src_fsync,
input s_video_src_vsync,
input s_video_src_hsync,
input s_video_src_psync,
input [WD_DATA-1:0] s_video_src_vdata,
//video dst
output m_video_dst_fsync,
output m_video_dst_vsync,
output m_video_dst_hsync,
output m_video_dst_psync,
output [WD_DATA-1:0] m_video_dst_vdata,
//error info feedback
output [WD_ERR_INFO-1:0] m_err_video_info1
);
//========================================================
//function to math and logic
//========================================================
//localparam to converation and calculate
localparam NB_CACU_STEP = 2;
//========================================================
//register and wire to time sequence and combine
// ----------------------------------------------------------
// FUNC1: output gray
reg [NB_CACU_STEP-1:0] r_video_dst_fsync_dn = 0;
reg [NB_CACU_STEP-1:0] r_video_dst_vsync_dn = 0;
reg [NB_CACU_STEP-1:0] r_video_dst_hsync_dn = 0;
reg [NB_CACU_STEP-1:0] r_video_dst_psync_dn = 0;
reg [WD_DATA-1:0] r_video_dst_vdata = 0;
assign m_video_dst_fsync = r_video_dst_fsync_dn[NB_CACU_STEP-1];
assign m_video_dst_vsync = r_video_dst_vsync_dn[NB_CACU_STEP-1];
assign m_video_dst_hsync = r_video_dst_hsync_dn[NB_CACU_STEP-1];
assign m_video_dst_psync = r_video_dst_psync_dn[NB_CACU_STEP-1];
assign m_video_dst_vdata = r_video_dst_vdata;
//cacu-1
reg [WD_DATA+1-1:0] r_video_R_add_B;
reg [WD_DATA+1-1:0] r_video_G_mul_2;
//cacu-2
wire [WD_DATA+2-1:0] w_video_R_add_B_add_2G;
//========================================================
//always and assign to drive logic and connect
// ----------------------------------------------------------
// FUNC1: output gray
always@(posedge i_sys_clk)
begin
if(!i_sys_resetn) //system reset
begin
r_video_R_add_B <= 1'b0; //
r_video_G_mul_2 <= 1'b0;
end
else if(1) //
begin
r_video_R_add_B <= s_video_src_vdata[WD_BYTE*1-1:WD_BYTE*0] //R
+ s_video_src_vdata[WD_BYTE*3-1:WD_BYTE*2]; //B //
r_video_G_mul_2 <= {s_video_src_vdata[WD_BYTE*2-1:WD_BYTE*1],1'b0};
end
end
assign w_video_R_add_B_add_2G = r_video_R_add_B + r_video_G_mul_2;
always@(posedge i_sys_clk)
begin
if(!i_sys_resetn) //system reset
begin
r_video_dst_fsync_dn <= 1'b0;
r_video_dst_vsync_dn <= 1'b0;
r_video_dst_hsync_dn <= 1'b0;
r_video_dst_psync_dn <= 1'b0;
r_video_dst_vdata <= 1'b0;//
end
else if(1) //
begin
r_video_dst_fsync_dn <= {r_video_dst_fsync_dn[NB_CACU_STEP-2:0],s_video_src_fsync};
r_video_dst_vsync_dn <= {r_video_dst_vsync_dn[NB_CACU_STEP-2:0],s_video_src_vsync};
r_video_dst_hsync_dn <= {r_video_dst_hsync_dn[NB_CACU_STEP-2:0],s_video_src_hsync};
r_video_dst_psync_dn <= {r_video_dst_psync_dn[NB_CACU_STEP-2:0],s_video_src_psync};
r_video_dst_vdata <={(3){w_video_R_add_B_add_2G[WD_BYTE+2-1:2]}};// //
end
end
//========================================================
//module and task to build part of system
//========================================================
//expand and plug-in part with version
//========================================================
//ila and vio to debug and monitor
endmodule
/* end verilog
*/
video總線描述
- 使用自定義video總線,包括幀同步、垂直同步、水平同步、像素點(diǎn)同步和數(shù)據(jù)五個(gè)信號(hào)
- 總線的時(shí)序圖如下:

獲取測(cè)試端口
| 測(cè)試端口 | 測(cè)試目標(biāo) |
|---|---|
| 復(fù)位測(cè)試 | 仿真無(wú)非0和1的值進(jìn)入初始化即可 |
| video輸入 | 總線的數(shù)據(jù)同步格式正常; |
| video輸出 | 總線的數(shù)據(jù)和輸入的理論計(jì)算結(jié)果一致 |
| 報(bào)錯(cuò)信息 | 無(wú) |
最終效果
封裝模型

調(diào)用接口
調(diào)用參數(shù)配置

- 只是演示仿真仿真系統(tǒng)如何搭建,所以DUT可以比較簡(jiǎn)單,只需要引入基本的總線概念即可
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:綠葉落秋風(fēng),專注FPGA技術(shù)分析和分享,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/electricdream/p/18115642,文中資源鏈接如下:
1. GITHUB開(kāi)源倉(cāng)庫(kù)
浙公網(wǎng)安備 33010602011771號(hào)