博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

弄清SDI显示工程中的每一个信号,每一个逻辑

Posted on 2017-11-29 11:09  沉默改良者  阅读(394)  评论(0编辑  收藏  举报

弄清SDI显示工程中的每一个信号,每一个逻辑

1. FIFO外部逻辑控制

    FIFO的读和写在不同的时钟域,所以读和写的控制逻辑应当分开写在不同的两个always块语句中。

2.播出端复位信号的产生

reg [2:0]tx_fabric_reset_sss;
always @ (posedge tx_usrclk or negedge tx_change_done)
    if (~tx_change_done)
        tx_fabric_reset_sss <= 3'b111;
    else
        tx_fabric_reset_sss <= {tx_fabric_reset_sss[1:0], ~tx_change_done};

assign tx_fabric_reset = tx_fabric_reset_sss[2];


/*
add_force {/top/tx_usrclk} -radix hex {0 0ns} {1 50000ps} -repeat_every 100000ps
add_force {/top/tx_change_done} -radix hex {1 0ns} {0 900000ps}
*/

仿真结果:

 

 

 

 

 3.

    当tx_change_done产生下降沿时,tx_fabric_reset信号拉高,保持3个时钟周期。

    tx_sd_ce信号的产生

reg [2:0]tx_fabric_reset_sss;
wire tx_fabric_reset;
always @ (posedge tx_usrclk or negedge tx_change_done)
    if (~tx_change_done)
        tx_fabric_reset_sss <= 3'b111;
    else
        tx_fabric_reset_sss <= {tx_fabric_reset_sss[1:0], ~tx_change_done};

assign tx_fabric_reset = tx_fabric_reset_sss[2];


reg [10:0]tx_gen_sd_ce;
always @ (posedge tx_usrclk)
    if (tx_fabric_reset)
        tx_gen_sd_ce <= 11'b00000100001;
    else
        tx_gen_sd_ce <= {tx_gen_sd_ce[9:0], tx_gen_sd_ce[10]};

reg tx_sd_ce;
always @ (posedge tx_usrclk)
    tx_sd_ce <= tx_gen_sd_ce[10];

assign tx_gen_sd_ce_w = tx_gen_sd_ce;
assign tx_sd_ce_w = tx_sd_ce;



/*
add_force {/top/tx_usrclk} -radix hex {0 0ns} {1 50000ps} -repeat_every 100000ps
add_force {/top/tx_change_done} -radix hex {1 0ns} {0 900000ps} {1 950000ps}
*/