MIG 7系列RLDRAM II和QDRII +  –  K / K#时钟偏差会导致校准失败-Altera-Intel社区-FPGA CPLD-ChipDebug

MIG 7系列RLDRAM II和QDRII + – K / K#时钟偏差会导致校准失败

描述

找到版本: v1.3
已解决的版本和其他已知问题:请参阅(Xilinx答复45195)

在某些情况下,由于发送到存储器的K / K#输出时钟发生偏斜,MIG 7系列RLDRAM II和QDRII +设计可能无法校准。

这可能导致地址和数据错误地输入内存并导致校准失败。

造成这种情况的原因是如何在qdr_rld_mc_phy模块中定义PO_OCLK_DELAY参数,因为对于小于666.67 MHz的频率没有额外的分配。

例如,qdr_rld_mc_phy.v文件(用于生成的Verilog代码)使用:

localparam整数PO_OCLK_DELAY =(SIMULATION ==“TRUE”)? MC_OCLK_DELAY:

(CLK_PERIOD <= 938)? 23:
(CLK_PERIOD <= 1072)? 24:
(CLK_PERIOD <= 1250)? 25:
(CLK_PERIOD <= 1500)? 26:27;

如果您的目标是RLDRAM II设计,则使用以下内容替换qdr_rld_mc_phy.v中的第325-360行以解决此问题:

// ********* ************************************************** *****************
// OCLK_DELAYED 90度相移计算
// ********* ************************************************** *****************
//对于MEM_RefClk <= 300 MHz,90度相当于0.25,对于Mem_RefClk> 300 MHz,则为1.25

localparam PO_OCLKDELAY_INV =((SIMULATION ==“FALSE”&& CLK_PERIOD> 2500)|| CLK_PERIOD> = 3333)? “FALSE”:“TRUE”;

// DIV1:MemRefClk> = 400 MHz,DIV2:200 <= MemRefClk <400,DIV4:MemRefClk <200 MHz

localparam PHY_FREQ_REF_MODE = CLK_PERIOD> 5000? “DIV4”:CLK_PERIOD> 2500? “DIV2”:“无”;
localparam FREQ_REF_DIV =(PHY_FREQ_REF_MODE ==“DIV4”?4:PHY_FREQ_REF_MODE ==“DIV2”?2:1);

// FreqRefClk(MHz)比MemRefClk快1,2.4倍

localparam real FREQ_REF_MHZ = 1.0 /((CLK_PERIOD / FREQ_REF_DIV / 1000.0)/ 1000);
localparam real MEM_REF_MHZ = 1.0 /((CLK_PERIOD / 1000.0)/ 1000);

// OCLK和OCLK_DELAYED Phaser输出之间的固有延迟

localparam real INT_DELAY = 0.4392 / FREQ_REF_DIV + 100.0 / CLK_PERIOD; // MemRefClk的分数

// OCLK_DELAY输出是否反转

localparam real HALF_CYCLE_DELAY = 0.5 *(PO_OCLKDELAY_INV ==“TRUE”?1:0); // MemRefClk的分数

// Phaser-Out Stage3点击延迟90度。最大抽头延迟是FreqRefClk周期,分布在64个抽头上
// localparam real TAP_DELAY = MC_OCLK_DELAY / 63 / FREQ_REF_DIV;
// Equation:INT_DELAY + HALF_CYCLE_DELAY + TAP_DELAY = 0.25或1.25 MemRefClk周期

localparam real MC_OCLK_DELAY =((PO_OCLKDELAY_INV ==“TRUE”?1.25:0.25) – (INT_DELAY + HALF_CYCLE_DELAY))* 63 * FREQ_REF_DIV;

// localparam integer PO_OCLK_DELAY = MC_OCLK_DELAY; // MC_OCLK_DELAY + 0.5;

localparam整数PO_OCLK_DELAY
=(SIMULATION ==“TRUE”)? MC_OCLK_DELAY:
(CLK_PERIOD> 2500)? 8:
(CLK_PERIOD <= 938)? 23:
(CLK_PERIOD <= 1072)? 24:
(CLK_PERIOD <= 1250)? 25:
(CLK_PERIOD <= 1500)? 26:27;

如果您要定位QDRII +设计,请使用以下内容替换qdr_rld_mc_phy.v中的第325-360行以解决此问题:

// ********* ************************************************** *****************
// OCLK_DELAYED 90度相移计算
// ********* ************************************************** *****************
//对于MEM_RefClk <= 300 MHz,90度相当于0.25,对于Mem_RefClk> 300 MHz,则为1.25
localparam PO_OCLKDELAY_INV =((SIMULATION ==“FALSE”&& CLK_PERIOD> 2500)|| CLK_PERIOD> = 3333)? “FALSE”:“TRUE”;

// DIV1:MemRefClk> = 400 MHz,DIV2:200 <= MemRefClk <400,DIV4:MemRefClk <200 MHz
localparam PHY_FREQ_REF_MODE = CLK_PERIOD> 5000? “DIV4”:CLK_PERIOD> 2500? “DIV2”:“无”;

localparam FREQ_REF_DIV =(PHY_FREQ_REF_MODE ==“DIV4”?4:PHY_FREQ_REF_MODE ==“DIV2”?2:1);

// FreqRefClk(MHz)比MemRefClk快1,2.4倍
localparam real FREQ_REF_MHZ = 1.0 /((CLK_PERIOD / FREQ_REF_DIV / 1000.0)/ 1000);
localparam real MEM_REF_MHZ = 1.0 /((CLK_PERIOD / 1000.0)/ 1000);

// OCLK和OCLK_DELAYED Phaser输出之间的固有延迟
localparam real INT_DELAY = 0.4392 / FREQ_REF_DIV + 100.0 / CLK_PERIOD; // MemRefClk的分数

// OCLK_DELAY输出是否反转
localparam real HALF_CYCLE_DELAY = 0.5 *(PO_OCLKDELAY_INV ==“TRUE”?1:0); // MemRefClk的分数

// Phaser-Out Stage3点击延迟90度。最大抽头延迟是FreqRefClk周期,分布在64个抽头上
// localparam real TAP_DELAY = MC_OCLK_DELAY / 63 / FREQ_REF_DIV;

// Equation:INT_DELAY + HALF_CYCLE_DELAY + TAP_DELAY = 0.25或1.25 MemRefClk周期
localparam real MC_OCLK_DELAY =((PO_OCLKDELAY_INV ==“TRUE”?1.25:0.25) – (INT_DELAY + HALF_CYCLE_DELAY))* 63 * FREQ_REF_DIV;
// localparam integer PO_OCLK_DELAY = MC_OCLK_DELAY; // MC_OCLK_DELAY + 0.5;

localparam整数PO_OCLK_DELAY
=(SIMULATION ==“TRUE”)? MC_OCLK_DELAY:
(CLK_PERIOD> 2500)? 8:1;

请登录后发表评论

    没有回复内容