两个 ip 实现高速的 核心部分phy 是由 xiphy 和 iob 构成

其中 ddr 的 iob 根据管脚的不同 由  OBUF(ADDR or CTRL),   IBUF,  IOBUFE3(DQ or DM),    OBUFDS (CK),  IBUFDS ,  IOBUFDS(DQS) 等组成

case (IOBTYPE[bitNum*3+:3])3'b001:                                                             //ADDR or CTRLbeginOBUF OBUF(.I(phy2iob_q_out_byte[bitNum]),.O(iob_pin[bitNum]));assign iob2phy_d_in_byte[bitNum] = '0;end3'b010: beginIBUF IBUF(.O(iob2phy_d_in_byte[bitNum]),.I(iob_pin[bitNum]));end3'b011: begin                                                        //DQ or DMif (DRAM_TYPE  == "DDR4") beginif (EN_LVAUX == "TRUE") begin IOBUFE3 IOBUF(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]),.OSC_EN (1'b0),.OSC (4'b0000),.DCITERMDISABLE ((USE_DYNAMIC_DCI == 1) ? phy2iob_odt_out_byte[bitNum] : 1'b0),.IBUFDISABLE (1'b0));endelse begin IOBUFE3 IOBUF(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]),.VREF (Vref),.OSC_EN (1'b0),.OSC (4'b0000),.DCITERMDISABLE ((USE_DYNAMIC_DCI == 1) ? phy2iob_odt_out_byte[bitNum] : 1'b0),.IBUFDISABLE (1'b0));endendelse beginif (BANK_TYPE == "HP_IO") beginIOBUFE3 IOBUF(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]),.VREF (1'b0),.OSC_EN (1'b0),.OSC (4'b0000),.DCITERMDISABLE ((USE_DYNAMIC_DCI == 1) ? phy2iob_odt_out_byte[bitNum] : 1'b0),.IBUFDISABLE (1'b0));end else if (BANK_TYPE == "HR_IO") beginIOBUF_INTERMDISABLE #(.SIM_DEVICE ("ULTRASCALE"))IOBUF(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]),.INTERMDISABLE ((USE_DYNAMIC_DCI == 1) ? phy2iob_odt_out_byte[bitNum] : 1'b0),.IBUFDISABLE (1'b0));end else beginIOBUF IOBUF(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]));endendend3'b101:                                                               // CK if (bitNum % 2 == 0) begin // generate for even onlyOBUFDS OBUFDS(.I(phy2iob_q_out_byte[bitNum]),.O(iob_pin[bitNum]),.OB(iob_pin[bitNum+1]));assign iob2phy_d_in_byte[bitNum] = '0;end3'b110: if (bitNum % 2 == 0) beginIBUFDS #(.DQS_BIAS(DQS_BIAS)) IBUFDS(.O(iob2phy_d_in_byte[bitNum]),.I(iob_pin[bitNum]),.IB(iob_pin[bitNum+1]));end3'b111:                                                               // DQSif (bitNum % 2 == 0) beginIOBUFDS #(.DQS_BIAS(DQS_BIAS))  IO_BUFDS(.I(phy2iob_q_out_byte[bitNum]),.T(phy2iob_t[bitNum]),.O(iob2phy_d_in_byte[bitNum]),.IO(iob_pin[bitNum]),.IOB(iob_pin[bitNum+1]));enddefault: begin// No IO buffer!end
endcase

xiphy 由 txrx_bitslice / tx_bitslice / rx_bitslice 组成,xxx_bitslice 是一个4:1或者 8:1的串并转换FIFO,给串行数据打拍的 高速clk ,直接由 FIFO_RD_CLK 或者 FIFO_WR_CLK   8倍频或 4倍频 得到,不需要额外提供高速clk;

此元器件即为实现高速的核心元件,在内部较低速度的并行逻辑下,实现接口的高速串行输出。

DQS或者CK信号都是由2倍速的串行高速clk打拍形成,为普通逻辑信号,所以可以实现上下沿同时采集,FIFO_RD_CLK 或者 FIFO_WR_CLK 为实际速率的1/8或1/4,

即传输速率为2400Mbps的DDR4,其串行clk频率即为2400M,其接口CK_T/CK_C的频率为1200M,内部逻辑的clk(FIFO_RD_CLK) 为300M ([7:0],1/8).

如下所示 rx_bitslice, 其中CLK是给LOAD,CE,INC 打拍的低速clk,如果不用delay功能,此clk可不接;

实际即为从 DATAIN 串行输入,Q[7:0] 为 FIFO 的输出FIFO_RD_CLK,  FIFO_RD_EN,  FIFO_EMPTY 为指示信号

如果是tx_bitslice 或者 txrx_bitslice 则方向相反,

xx_bitslice 由  bitslice_control 控制

元器件库参考:

UltraScale Architecture  Libraries Guide : ug974  ug571

下面是 iodelay 元件的使用

使用 VAR_LOAD的 LOAD或者  VARIABLE 的 INC 功能时要求 EN_VTC = 0;

而在FIXED 模式时 IDELAYCTRL 没有rdy 之前,要求 EN_VTC =1;

IDELAYCTRL  的每个 nibble 共用一个,即每个bank有 8个 IDELAYCTRL;

iodelay 使用 time 模式  并且 对应的 nibble 中没有例化过 bitslice类型的元件(bitslice中含有IDELAYCTRL, bitslice 为 native primitive,iodelay 等 是 Component Primitives,Component Primitives 是 native primitive 的特殊配置生成,用于等效老器件的元件 ),则应使用 IDELAYCTRL

module project(input         sysclk_p,input         sysclk_n,//    input rst,output out0,output out1,output out2);wire clk_in;wire clk;wire rdy;reg out0_reg;
reg out1_reg;
reg out2_reg ;
wire [8:0] CNTVALUEOUT;
wire [8:0] CNTVALUEIN;
wire probe_out0;
wire LOAD,INC,CE,RST,EN_VTC;IBUFDS IBUFDS_refclk (.O(clk_in),   // 1-bit output: Buffer output.I(sysclk_p),   // 1-bit input: Diff_p buffer input (connect directly to top-level port).IB(sysclk_n)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)); clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk),     // output clk_out1// Status and control signals.reset(1'b0), // input reset.locked(),       // output locked// Clock in ports.clk_in1(clk_in));  always @(posedge clk or posedge RST)  if(RST)beginout0_reg <= 'h0;out1_reg <= 'h0;out2_reg <= 'h0;  endelsebeginout0_reg <= ~out0_reg;out1_reg <= ~out1_reg;out2_reg <= ~out2_reg;end  assign out1 = out1_reg;assign out2 = out2_reg;IDELAYCTRL #(.SIM_DEVICE("ULTRASCALE")  // Must be set to "ULTRASCALE" )IDELAYCTRL_inst (.RDY(rdy),       // 1-bit output: Ready output.REFCLK(clk), // 1-bit input: Reference clock input.RST(RST)        // 1-bit input: Active high reset input. Asynchronous assert, synchronous deassert to// REFCLK.);ODELAYE3 #(.CASCADE("NONE"),               // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE).DELAY_FORMAT("TIME"),          // (COUNT, TIME).DELAY_TYPE("VAR_LOAD"),           // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD).DELAY_VALUE('d1100),                // Output delay tap setting.IS_CLK_INVERTED(1'b0),         // Optional inversion for CLK.IS_RST_INVERTED(1'b0),         // Optional inversion for RST.REFCLK_FREQUENCY(300.0),       // IDELAYCTRL clock input frequency in MHz (200.0-2667.0)..SIM_DEVICE("ULTRASCALE_PLUS"), // Set the device version (ULTRASCALE, ULTRASCALE_PLUS,// ULTRASCALE_PLUS_ES1, ULTRASCALE_PLUS_ES2).UPDATE_MODE("ASYNC")           // Determines when updates to the delay will take effect (ASYNC, MANUAL,// SYNC))ODELAYE3_inst (.CASC_OUT(),       // 1-bit output: Cascade delay output to IDELAY input cascade.CNTVALUEOUT(CNTVALUEOUT), // 9-bit output: Counter value output.DATAOUT(out0),         // 1-bit output: Delayed data from ODATAIN input port.CASC_IN(),         // 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT.CASC_RETURN(), // 1-bit input: Cascade delay returning from slave IDELAY DATAOUT.CE(CE),                   // 1-bit input: Active high enable increment/decrement input.CLK(clk),                 // 1-bit input: Clock input.CNTVALUEIN(CNTVALUEIN),   // 9-bit input: Counter value input.EN_VTC(EN_VTC),           // 1-bit input: Keep delay constant over VT.INC(INC),                 // 1-bit input: Increment/Decrement tap delay input.LOAD(LOAD),               // 1-bit input: Load DELAY_VALUE input.ODATAIN(out0_reg),         // 1-bit input: Data input.RST(~rdy)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE);    ila_0 ila_0 (.clk(clk), // input wire clk.probe0(CNTVALUEOUT), // input wire [0:0] probe0.probe1(rdy)
);   vio_0 vio_0 (.clk(clk),                // input wire clk.probe_in0(CNTVALUEOUT),    // input wire [8 : 0] probe_in0.probe_out0(RST),  // output wire [0 : 0] probe_out0.probe_out1(LOAD),.probe_out2(INC),.probe_out3(CE),.probe_out4(CNTVALUEIN),.probe_out5(EN_VTC)
);   endmodule

ddr 和 selectio ip 为什么能实现高速相关推荐

  1. Anydesk远程桌面及IP直连实现高速远程桌面

    Anydesk远程桌面及IP直连实现高速远程桌面 下载: Anydesk官网 于官网下载Anydesk,于本地以及你想要远程连接的电脑,我后面都称本地机器为客户端,远程电脑为服务端. 量子互联 htt ...

  2. 【TCP/IP入门】18.高速PLC(华为全屋智能)

    这里的PLC不是工业控制上的控制器,而是power line communication(高速电力线通信) 这个最近华为的全屋智能应该是有用,可以了解下 不错的参考文档: 电力线通信(Power Li ...

  3. 基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH05 PS 千兆 UDP 加速

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  4. 基于SelectIO的高速ADC时序实现(二)

    Learning is the only thing the mind never exhausts, never fears and never regrets.                   ...

  5. 紫光fpga logos2 pango design 开发工具 黑金 axp100开发板资料 带 ddr 以及高速收发器例子

    紫光fpga logos2 pango design 开发工具 黑金 axp100开发板资料 带 ddr 以及高速收发器例子 有双相机采集存储 ddr 后进行hdmi输出叠加显示的工程 包含1多个例子 ...

  6. PCB模块化设计13——FLASH、DDR和eMMC高速PCB布局布线设计规范

    目录 PCB模块化设计13--FLASH和DDR高速PCB布局布线设计规范 一.Flash高速PCB布局布线设计规范 1.Flash介绍 2.NOR和NAND性能比较 3. NAND Flash的用途 ...

  7. 双通道14位、500 MSPS采样率的AD9684 高速并行LVDS ADC接口介绍

    双通道14位.500 MSPS采样率的AD9684 高速并行LVDS ADC接口 本文为明德扬原创文章,转载请注明出处! AD9684是一款双通道14位.500 MSPS采样率 ,并行LVDS接口的模 ...

  8. 物联网之IP Camera解决方案简介

    不看这几篇好文,就别说自己了解物联网 前言 IP Camera即网络摄像头,是物联网领域中的一个重要场景.本文将带领读者了解IP Camera这一典型物联网场景的市场.IP Camera的重要组成部分 ...

  9. xilinx项目XDMA/PCIE高速传输解决方案传输效率90%

    明德扬在PCIE高速传输方案积累了丰富的技术,传输的带宽利用率可达到90%以上,延迟可达到理论的最低延迟值. 明德扬能够根据客户的需求(需求.延迟和应用等),为客户提供定制的PCIE解决方案,欢迎您与 ...

最新文章

  1. 计算机系统与网络技术简答题,计算机与网络技术基础 简答题
  2. 经典设计模式——策略模式
  3. linux各个服务器的软件自启动
  4. linux aspnet服务器,在Linux中安装ASPNET.Core3.0运行时的示例代码
  5. 一、AJAX学习笔记——原生AJAX (ajax简介、XML简介、ajax优缺点、ajax的使用)
  6. androidbyte数组使用_android byte的用法
  7. Nunit中如何进行事务性单元测试
  8. redis五种数据类型的使用场景
  9. Bailian4022 买房子【迭代】
  10. 计算机round是什么函数,计算机roundup函数是什么意思
  11. Mariadb 安装FederatedX引擎
  12. 【2018年12月04日】钢铁行业的估值高度排名
  13. 齐大计算机与控制学院在哪个校区阮,齐齐哈尔大学各个学院所在校区做个介绍...
  14. numpy使用np.dot函数或者@操作符计算两个numpy数组的点积数量积(dot product、scalar product)
  15. FPGA开发第四弹:触摸按键控制LED灯实验
  16. 2015校园O2O商业模式解析——从物流切入
  17. 关于移动宽带连不上某些网站的解决办法
  18. 探究阿里云物联网开发板1-Haas 100
  19. 【问题描述】编写一个程序计算出球、圆柱和圆锥的表面积和体积。
  20. C++技术的主要应用领域

热门文章

  1. 你不得不知的数字营销四大趋势,开启2019年“营销新世界”
  2. java和vue的学生健康管理系统疫情打卡系统
  3. python 爬虫(一)
  4. 池馆刷题助手一键答题显示答案综合教程交互英语
  5. [转载]C#开源项目(国外的还是很多)
  6. spring5.3.x源码阅读环境搭建
  7. Ruby on Rails 教程之快速入门
  8. 计算机搜索没办法打汉字,Win10左下角搜索框无法输入字符的两种解决方法
  9. 百度实习面经2022-4-24(第一次面试,暂时只面了一场,感觉人无了)
  10. Codeforces9C dfs暴力