弄清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} */