verilog 代码分析与仿真
注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值
边沿检测
module signal_test( input wire cmos_pclk_i, input wire cmos_vsync_i ); // 上升沿捕获 reg [1:0] vsync_d; wire vsync_start; wire vsync_end; always @(posedge cmos_pclk_i) begin vsync_d <= {vsync_d[0], cmos_vsync_i}; end assign vsync_start = vsync_d[1] && (!vsync_d[0]); assign vsync_end = (!vsync_d[1]) && vsync_d[0]; endmodule /* add_force {/signal_test/cmos_pclk_i} -radix hex {1 0ns} {0 50000ps} -repeat_every 100000ps add_force {/signal_test/cmos_vsync_i} -radix hex {1 0ns} {0 300ns} {1 700ns} */
仿真结果:
时钟二分频的巧用
//在一定区域内,将时钟cmos_pclk_i 进行二分频 reg byte_flag = 0; always@(posedge cmos_pclk_i) begin if(rst) byte_flag <= 0; else if(cmos_href_i) //控制信号,固定区域 byte_flag <= ~byte_flag; else byte_flag <= 0; end //将byte_flag 延时一拍,从仿真图中才可以看出此处的用意 reg byte_flag_r0 = 0; always@(posedge cmos_pclk_i) begin if(rst) byte_flag_r0 <= 0; else byte_flag_r0 <= byte_flag; end
仿真结果
数据采集与数据融合
注意rgb565信号的生成