完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,
我正在研究Virtex 5 VLX50设计,其中包括一个高速360MHz时钟,驱动一些分布式RAM,向芯片周围的ODDR输出任意二进制波形。 来自RAM的一些相同信号必须被发送到多个输出引脚,这导致我在尝试实现时序收敛时遇到麻烦,这仅仅是由于RAM输出到ODDR的路由延迟。 设备利用率非常低。 显而易见的解决方案是扇出来自RAM的信号,并添加一个或两个流水线触发器以减少路由延迟。 不幸的是,ISE似乎尽力阻止我改善这种状况。 当我在VHDL中添加一些流水线寄存器时,例如在以下伪代码中: 过程(hs_clk_bufg) 开始 如果rising_edge(hs_clk_bufg)那么 pipelinea ISE将从流水线推断移位寄存器,并将这些寄存器打包到单个切片中,从而无法实现时序改进。 同样,当我尝试扇出信号时,例如: 过程(hs_clk_bufg) 开始 如果rising_edge(hs_clk_bufg)那么 fanout1 ISE将尽最大努力将扇出寄存器组合到一个触发器中,当我添加足够的KEEP属性来防止这种情况时,它仍然会将扇出触发器打包到同一个片段中(可能它认为它们是数据总线,并且优先放置 他们在同一片?),再次使得无法改善时机。 有没有人有任何建议可以分享如何鼓励ISE做正确的事情? 我通常可以通过全局禁用合成选项中的移位寄存器提取来避免流水线寄存器变为移位寄存器,并且我通常可以通过全局禁用等效寄存器移除来避免扇出寄存器的合并,并且我似乎能够将ISE欺骗到 如果我将扇出寄存器推送到一个单独的VHDL组件并将它们并行实例化,那么将一组扇出寄存器分组到总线中,但这些看起来都是非常笨重,不可靠的解决方案。 打开全局优化总是会导致计时失败,因为尽管在综合和实现选项中取消选中“等效寄存器删除”,但扇出和流水线寄存器始终会合并。 这是令人失望的,因为全局优化启用了重定时选项,这听起来就像我去的那样(在结构周围移动pipline寄存器以改善时序)。 我浪费了大量时间重新编译,添加和删除寄存器,KEEP属性,EQUIVALENT_REGISTER_REMOVAL属性等。更改全局优化选项以获得设计的一部分以满足时序似乎是错误的方法。 有没有更好的办法? 也许某种方法强制切片只用于单个流水线寄存器,这样工具就可以自由地在织物周围移动以满足时序要求? 向这些信号中的一个添加3个或更多个流水线级是令人沮丧的,只是看到ISE将它们全部放在同一个切片中或者彼此相邻,然后跟踪到不符合时序的ODDR块的looong跟踪 。 谢谢你的帮助, -Greg |
|
相关推荐
7个回答
|
|
好的,成功。
对于drjohnsmith:我认为实例化ODDR迫使它进入IOB。 通过使用以下用于RAM和输出缓冲区的代码片段,我能够使用所有默认选项来编译和满足时序。 CLK是360 MHz。 列出的属性和每个模块中的流水线量是使设计满足时序所需的最小值。 高速记忆: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 实体hsmem是 港口 ( clk:在std_logic中; 我们:在std_logic; addr:在std_logic_vector中(4 downto 0); din:在std_logic_vector(7 downto 0); clkb:在std_logic中; addrb:在std_logic_vector中(4 downto 0); doutb:out std_logic_vector(7 downto 0) ); 结束hsmem; 建筑行为的hsmem是 type ram_type是std_logic_vector的数组(31 downto 0)(7 downto 0); 信号RAM:ram_type:=(31 downto 0 => X“00”); signal pipe_reg:std_logic_vector(7 downto 0); signal pipe_addrb:std_logic_vector(4 downto 0); 开始 - 写端口 过程(clk) 开始 如果rising_edge(clk)那么 如果我们='1'那么 RAM(conv_integer(地址)) 基本输出缓冲区: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 图书馆UNISIM; 使用UNISIM.VComponents.all; 实体simple_obuf是 港口 ( clk:在std_logic中; din:in std_logic; invert:在std_logic中; dout:out std_logic ); 结束simple_obuf; 体系结构simple_obuf的行为是 信号dina,dinx:std_logic; 属性equivalent_register_removal:string; 属性equivalent_register_removal of dina:signal is“no”; dinx的属性equivalent_register_removal:signal是“no”; 属性shreg_extract:string; 属性shreg_extract of dina:signal is“no”; 属性shreg_extract of dinx:signal是“no”; 属性iob:string; 属性iob of dinx:signal为“TRUE”; 开始 OBUF_SIMPLE:OBUF 端口映射(O => dout,I => dinx); 过程(clk) 开始 如果rising_edge(clk)那么 迪娜 基本ODDR缓冲区: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 图书馆UNISIM; 使用UNISIM.VComponents.all; 实体simple_obuf是 港口 ( clk:在std_logic中; din:in std_logic; invert:在std_logic中; dout:out std_logic ); 结束simple_obuf; 体系结构simple_obuf的行为是 信号dina,dinx:std_logic; 属性equivalent_register_removal:string; 属性equivalent_register_removal of dina:signal is“no”; dinx的属性equivalent_register_removal:signal是“no”; 属性shreg_extract:string; 属性shreg_extract of dina:signal is“no”; 属性shreg_extract of dinx:signal是“no”; 属性iob:string; 属性iob of dinx:signal为“TRUE”; 开始 OBUF_SIMPLE:OBUF 端口映射(O => dout,I => dinx); 过程(clk) 开始 如果rising_edge(clk)那么 迪娜 希望这将有助于处于类似情况的其他人。 在原帖中查看解决方案 |
|
|
|
|
|
|
|
您还可以使用重置项定义管道寄存器
将阻止使用SRL并需要织物触发器。 process(hs_clk_bufg)如果rising_edge(hs_clk_bufg)则开始,然后if(reset ='1')然后pipelinea'0'); pipelineb'0'); ODDR_input'0'); else pipelinea pipelineb ODDR_input end if; 结束如果;结束过程; HTH, 的Gabor - Gabor |
|
|
|
成功!
我发现当我将流水线寄存器放在声明分布式RAM的相同代码块中而不是作为RAM之后的信号时,我的所有时序问题都消失了。 我能够消除所有其他KEEP,SHREG_EXTRACT等属性,并且仍然能够快速地满足时序并且具有良好的余量,只有默认选项。 感谢您的帮助,我发现了流水线分布式RAM示例,同时通过XST手册查看了各种更为神秘的属性。 |
|
|
|
|
|
|
|
|
|
|
|
好的,成功。
对于drjohnsmith:我认为实例化ODDR迫使它进入IOB。 通过使用以下用于RAM和输出缓冲区的代码片段,我能够使用所有默认选项来编译和满足时序。 CLK是360 MHz。 列出的属性和每个模块中的流水线量是使设计满足时序所需的最小值。 高速记忆: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 实体hsmem是 港口 ( clk:在std_logic中; 我们:在std_logic; addr:在std_logic_vector中(4 downto 0); din:在std_logic_vector(7 downto 0); clkb:在std_logic中; addrb:在std_logic_vector中(4 downto 0); doutb:out std_logic_vector(7 downto 0) ); 结束hsmem; 建筑行为的hsmem是 type ram_type是std_logic_vector的数组(31 downto 0)(7 downto 0); 信号RAM:ram_type:=(31 downto 0 => X“00”); signal pipe_reg:std_logic_vector(7 downto 0); signal pipe_addrb:std_logic_vector(4 downto 0); 开始 - 写端口 过程(clk) 开始 如果rising_edge(clk)那么 如果我们='1'那么 RAM(conv_integer(地址)) 基本输出缓冲区: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 图书馆UNISIM; 使用UNISIM.VComponents.all; 实体simple_obuf是 港口 ( clk:在std_logic中; din:in std_logic; invert:在std_logic中; dout:out std_logic ); 结束simple_obuf; 体系结构simple_obuf的行为是 信号dina,dinx:std_logic; 属性equivalent_register_removal:string; 属性equivalent_register_removal of dina:signal is“no”; dinx的属性equivalent_register_removal:signal是“no”; 属性shreg_extract:string; 属性shreg_extract of dina:signal is“no”; 属性shreg_extract of dinx:signal是“no”; 属性iob:string; 属性iob of dinx:signal为“TRUE”; 开始 OBUF_SIMPLE:OBUF 端口映射(O => dout,I => dinx); 过程(clk) 开始 如果rising_edge(clk)那么 迪娜 基本ODDR缓冲区: 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 图书馆UNISIM; 使用UNISIM.VComponents.all; 实体simple_obuf是 港口 ( clk:在std_logic中; din:in std_logic; invert:在std_logic中; dout:out std_logic ); 结束simple_obuf; 体系结构simple_obuf的行为是 信号dina,dinx:std_logic; 属性equivalent_register_removal:string; 属性equivalent_register_removal of dina:signal is“no”; dinx的属性equivalent_register_removal:signal是“no”; 属性shreg_extract:string; 属性shreg_extract of dina:signal is“no”; 属性shreg_extract of dinx:signal是“no”; 属性iob:string; 属性iob of dinx:signal为“TRUE”; 开始 OBUF_SIMPLE:OBUF 端口映射(O => dout,I => dinx); 过程(clk) 开始 如果rising_edge(clk)那么 迪娜 希望这将有助于处于类似情况的其他人。 |
|
|
|
只有小组成员才能发言,加入小组>>
2427 浏览 7 评论
2828 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2295 浏览 9 评论
3377 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2467 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1276浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
592浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
455浏览 1评论
2010浏览 0评论
736浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 13:03 , Processed in 1.335598 second(s), Total 57, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号