赛灵思
直播中

汤敏树

7年用户 199经验值
私信 关注
[问答]

如何使用iodelay_group示例的idelayctrl

你好,
有人可以发一个简单的工作约束脚本,其中一个IDELAYCTRL正在驱动9个IODELAY,其中每个3个在一个单独的库中(3x3)。
Target是一款virtex-6芯片。
有约束IODELAY_GROUP,但用法并不完全清楚。
在UG中,据说对于每个银行,我必须创建一个新的组 - 但是如何为它们分配单个IDELAYCTRL实例?
为一个IDELAYCTRL分配多个组不起作用。
问候

回帖(7)

陈玉筠

2020-6-16 09:24:07
IODELAY_GROUP将特定的IODELAYCTRL与一堆IODELAY相关联。
只有当IODELAYCTRL对于一堆IODELAY与其他IODELAY不同时,才需要这样做。
如果您的目标是拥有所有IODELAYCTRL 
- 由同一时钟(200MHz)提供时钟 
- 由相同的复位信号复位 
- 只有一个组合就绪信号
那么你不需要指定多个IODELAY_GROUP。
只需实例化一个IODELAYCTRL(没有IODELAY_GROUP)并且不设置IODELAY的IODELAY_GROUP,该工具将自动将一个(并且只有一个)IODELAYCTRL复制到三个所需的库中。
如果你确实想要三个银行中的每一个都有不同的组,那么你会 
- 实例化三个IODELAYCTRL,每个IODELAYCTRL具有不同的IODELAY_GROUP 
- 对于特定银行中的三个IODELAY中的每一个,我们使用与IODELAYCTRL之一相同的IODELAY_GROUP 
- 同一银行中的三个必须使用相同的IODELAY_GROUP
但是再一次 - 这在大多数情况下都不是必需的......只是实例化一个没有IODELAY_GROUP的IODELAYCTRL。
Avrum
举报

陈洁

2020-6-16 09:34:03
很好的答案,谢谢。
举报

张文琳

2020-6-16 09:43:17
Avrum,
这也适用于Vivado吗?
我试过离开IDELAY&
IDELAYCTRL实例都没有受到训练,并且还将它们与一个组相关联,我无法让Vivado接受任何一个。
这是我的Verilog的片段,其中使用了这些片段(此处显示的IODELAY_GROUP属性已被注释掉,因为我无法让它们工作):
IBUFDS#(。IOSTANDARD(“LVDS_25”),. DIFF_TERM(“TRUE”))IdsRefClk200(.O(refclk200_pre),. I(refclk200_p),. IB(refclk200_n));
/ *(* IODELAY_GROUP =“IODLY_GROUP”*)* / IDELAYCTRL IdelayCtl(.RDY(),。REFCLK(refclk200_pre),. RST(Reset));
genvar i;
生成for(i = 2; i / * IN LVDS解码* / IBUFDS#(。IOSTANDARD(“LVDS_25”),. DIFF_TERM(“TRUE”))Iibuf(.O(dif_in ),. I(dif_in_p [
i]),. IB(dif_in_n )); / * IDELAY为零保持时间* // *(* IODELAY_GROUP =“IODLY_GROUP”*)* / IDELAY Idel(.O(dif_in_delayed ),.
I(dif_in [I]),. C(1'b0),. CE(1'b0),. INC(1'b0),. RST(1'b0))
以下是vivado.log文件中的一些选定消息:
信息:[Synth 8-638]合成模块'hrt_xrc7v1'[/home/otto/prj/HRT/code/fpga/hrt_xrc7.v:6]INFO:[Synth 8-638]合成模块'IBUFGDS'[/ v /
sgl-opt / Xilinx2013.2 / Vivado / 2013.2 / scripts / rt / data / unisim_comp.v:6384]参数CAPACITANCE绑定到:DONT_CARE - 类型:字符串参数DIFF_TERM绑定到:TRUE - 类型:字符串参数IBUF_DELAY_VALUE绑定到:0
- type:string参数IBUF_LOW_PWR绑定到:TRUE - 类型:字符串参数IOSTANDARD绑定到:LVDS_25 - 类型:字符串INFO:[Synth 8-256]完成合成模块'IBUFGDS'(1#30)[/ v / sgl-opt
/Xilinx2013.2/Vivado/2013.2/scripts/rt/data/unisim_comp.v:6384]警告:[Synth 8-4446]此实例的所有输出均未连接,逻辑可能被删除[/ home / otto / prj / HRT
/code/fpga/hrt_xrc7.v:95]INFO:(Synth 8-638)合成模块'IDELAYCTRL'[/v/sgl-opt/Xilinx2013.2/Vivado/2013.2/scripts/rt/data/unisim_comp.v:
7918] INFO:[Synth 8-256]完成合成模块'IDELAYCTRL'(2#30)[/v/sgl-opt/Xilinx2013.2/Vivado/2013.2/scrip
ts / rt / data / unisim_comp.v:7918] INFO:[Synth 8-638]合成模块'IBUFDS'[/v/sgl-opt/Xilinx2013.2/Vivado/2013.2/scripts/rt/data/unisim_comp.v
:6074]参数CAPACITANCE绑定到:DONT_CARE - 类型:字符串参数DIFF_TERM绑定到:TRUE - 类型:字符串参数DQS_BIAS绑定到:FALSE - 类型:字符串参数IBUF_DELAY_VALUE绑定到:0 - 类型:字符串参数IBUF_LOW_PWR绑定到:TRUE -
type:string参数IFD_DELAY_VALUE绑定到:AUTO - 类型:字符串参数IOSTANDARD绑定到:LVDS_25 - 类型:字符串INFO:[Synth 8-256]完成合成模块'IBUFDS'(3#30)[/ v / sgl-opt /
Xilinx2013.2 / Vivado / 2013.2 / scripts / rt / data / unisim_comp.v:6074] INFO:[Synth 8-638]合成模块'IDELAY'[/v/sgl-opt/Xilinx2013.2/Vivado/2013.2/scripts
/rt/data/unisim_comp.v:7898]参数IOBDELAY_TYPE绑定到:DEFAULT - 类型:字符串参数IOBDELAY_VALUE绑定到:0 - 类型:整数INFO:[Synth 8-256]完成合成模块'IDELAY'(4#30)
[/v/sgl-opt/Xilinx2013.2/Vivado/2013.2/scr
IPTS / RT /数据/ unisim_comp.v:7898] .....
阶段1.8 IO放置/时钟放置/构建放置器DeviceERROR:[放置30-578]在设计中找到未关联的IO延迟实例。
没有关联的IdelayCtrl的IO延迟实例列表如下:difbit [12] .Idel difbit [3] .Idel difbit [10] .Idel difbit [8] .Idel difbit [4] .Idel difbit [2] .Idel
difbit [7] .Idel difbit [6] .Idel difbit [11] .Idel difbit [5] .IdelResolution:请修改设计,以便每个IO延迟实例都有一个关联的IdealCtrl实例.Phase 1.8 IO Placement
/ Clock Placement / Build Placer Device |
校验和:6d58c733时间:cpu = 00:01:09;
逝去了= 00:01:08。
记忆(MB):峰值= 2898.457;
增益= 24.012第1阶段初始化|
校验和:6d58c733时间:cpu = 00:01:09;
逝去了= 00:01:08。
记忆(MB):峰值= 2898.457;
增益= 24.012ERROR:[放置30-99] Placer因错误而失败:'设计具有未关联的IO延迟实例'请在放置期间查看所有错误,严重警告和警告消息,以了解失败原因。结束Placer任务|
校验和:6d58c733
感谢您提供的任何反馈,
玫瑰油
举报

张文琳

2020-6-16 09:48:59
我终于开始工作了。
我不得不通过BUFG原始路由200 MHz参考时钟,以便IDELAYCTRL不会被优化掉。
从IBUFGDS,甚至IBUFG开车都行不通。
似乎只有一个BUFG才能做到这一点。
我还将IDELAY更改为IDELAYE2。
不确定这是否重要。
-Otto
举报

更多回帖

×
20
完善资料,
赚取积分