verilog 代码分析与仿真

verilog 代码分析与仿真

注意:使用vivado 自带的仿真工具, regwire等信号需要赋予初始值

边沿检测

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信号的生成

猜你喜欢

转载自www.cnblogs.com/chensimin1990/p/9073395.html