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

时间:2023-03-09 17:59:23
弄清SDI显示工程中的每一个信号,每一个逻辑

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

1. FIFO外部逻辑控制

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

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

reg [:]tx_fabric_reset_sss;
always @ (posedge tx_usrclk or negedge tx_change_done)
if (~tx_change_done)
tx_fabric_reset_sss <= 'b111;
else
tx_fabric_reset_sss <= {tx_fabric_reset_sss[:], ~tx_change_done}; assign tx_fabric_reset = tx_fabric_reset_sss[]; /*
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}
*/

仿真结果:

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

3.

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

tx_sd_ce信号的产生

reg [:]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 <= 'b111;
else
tx_fabric_reset_sss <= {tx_fabric_reset_sss[:], ~tx_change_done}; assign tx_fabric_reset = tx_fabric_reset_sss[]; reg [:]tx_gen_sd_ce;
always @ (posedge tx_usrclk)
if (tx_fabric_reset)
tx_gen_sd_ce <= 'b00000100001;
else
tx_gen_sd_ce <= {tx_gen_sd_ce[:], tx_gen_sd_ce[]}; reg tx_sd_ce;
always @ (posedge tx_usrclk)
tx_sd_ce <= tx_gen_sd_ce[]; 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}
*/

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