问题描述
GTP和GTH重置例程中有一些DRP写操作会使SIM_RESET_SPEEDUP标志无法工作。
重置将更快但仿真将失败。
这些DRP写入的原因在设计咨询(Xilinx答复53561)和(Xilinx答复53779)中有所描述。
解决/修复方法
解决此问题的一种方法是绕过DRP写入。
但是,这可能很困难,因为需要更改的区域是“只读”代码。
另一个问题是,实现中的更改不得到位,否则重置将在硬件中失败。
还有另一种方法可以通过向测试平台添加2行代码来解决此问题。
因为它们只在测试平台中,所以不会影响常规实现。
首先将SIM_RESET_SPEEDUP标志设置为true。这不能在RTL中完成,因为此标志的层次结构存在中断。
第二种是强制DRPWE为0进行仿真。这将阻止写入。
DRPWE总线的宽度将根据设计中的车道数量而变化。
除了您使用DRP之外,通常不需要DRP,但是根据您的线路速率,您可以在延迟大约30 us后强制执行DRPWE。
2个命令中显示的层次结构使用gtwizard0的默认命名,并将根据您命名实例化的内容而更改。
以下代码适用于GTP,但类似的方法可用于GTH。
通过这些更改,GT应该在30到80 us之间启动并运行,具体取决于线路速率而不是正常的1.5 ms。
......
initial
begin
force gtwizard_0_exdes_i.gtwizard_0_support_i.gtwizard_0_init_i.inst.gtwizard_0_i.gt0_gtwizard_0_i.gtpe2_i.DRPWE = 1'h0 ; ////////////////////////////////////////////////////////////////////////// for simulation speed up only
track_data_low_r = 1'b0;
#3500000;
@(negedge track_data_i) begin
track_data_low_r = 1'b1;
end
end
defparam gtwizard_0_exdes_i.gtwizard_0_support_i.gtwizard_0_init_i.inst.EXAMPLE_SIM_GTRESET_SPEEDUP = "TRUE"; /////////////////////////////////////////////////////////////////////////////////for simulation speedup only
//----------------- Instantiate an gtwizard_0_exdes module -----------------
gtwizard_0_exdes
gtwizard_0_exdes_i
(
.Q0_CLK1_GTREFCLK_PAD_N_IN (tx_refclk_n_r),
.Q0_CLK1_GTREFCLK_PAD_P_IN (tx_refclk_p_r),
.DRP_CLK_IN_P (drp_clk_r),
.DRP_CLK_IN_N (~drp_clk_r),
.GTTX_RESET_IN (gttx_reset_i),
.GTRX_RESET_IN (gtrx_reset_i),
.PLL0_RESET_IN (pll0_reset_i),
.PLL1_RESET_IN (pll1_reset_i),
.TRACK_DATA_OUT (track_data_i),
.RXN_IN (rxn_in_i),
.RXP_IN (rxp_in_i),
.TXN_OUT (txn_out_i),
.TXP_OUT (txp_out_i)
);
endmodule
没有回复内容