FPGA逻辑设计注意事项.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这是一个在逻辑设计中注意事项列表,由此引起的错误常使得设计不可靠或速度较慢,为了提高设计性能和提高速度的可靠性,必须确定设计通过所有的这些检查。 可靠性 1. 为时钟信号选用全局时钟缓冲器BUFG 不选用全局时钟缓冲器的时钟将会引入偏差。 2. 只用一个时钟沿来寄存数据 使用时钟的两个沿是不可靠的,因为时钟的某沿或者两个沿会漂移。如果时钟有漂移而且你只使用了时钟的一个沿,你就降低了时钟边沿漂移的风险。这个问题可以这样来解决:就是允许CLKDLL自动纠正时钟的占空比,以达百分之五十的占空比。否则强烈建议只使用一个时钟沿。 3. 除了用CLKDLL或DCM产生的时钟外不要在内部产生时钟 这包括产生门控时钟和分频时钟。作为替代,可以建立时钟使能或使用CLKDLL或DCM来产生不同的时钟信号。对于一个纯同步设计,建议在任何可能的情况下只使用一个时钟。 4. 不要在内部产生异步的控制信号(例如复位信号或者置位信号) 内部产生的异步控制信号会产生毛刺,作为替代,可以产生一个同步的复位/置位信号。要比需要作用的时刻提前一个时钟周期进行这个异步信号的同步。 5. 不要使用没有相位关系的多个时钟 也许并不总能避免这个条件,在这些情况下确定已使用了适当的同步电路来跨越时钟域,并已适当地约束了跨越时钟域的路径。 6. 不要使用内部锁存器 内部锁存器会混淆时序,而且常常会引入另外的时钟信号。内部锁存器在透明门打开时可以被看成是组合逻辑,但在门被锁存时可以被看成是同步元件,这将会混淆时序分析。内部锁存器常常会引入门控时钟,门控时钟会产生毛刺使得设计变得不可靠。 ?性能 1. 逻辑级的时延不要超过时序预算的百分之五十 每个路径逻辑级时延可以在逻辑级时序报告或布局后时序报告中找到,详细分析了每个路径之后,时序分析器将生成每个路径时延的统计量,检查一下总共的逻辑级时延,确保不超过时序预算的百分之五十。 2. IOB 寄存器 IOB寄存器提供了最快的时钟到输出和输入到时钟的时延。首先,有一些限制。 对于输入寄存器在从管脚到寄存器间不能有组合逻辑存在。对于输出寄存器,在寄存器和管脚之间也不能有组合逻辑存在。对于三态输出,在IOB中的所有的寄存器必须使用同一个时钟信号和复位信号,而且IOB三态寄存器必须低电平有效才能放到IOB中(三态缓冲器低电平有效,所以在寄存器和三态缓冲器之间不需要一个反相器)。 必须使软件能够选用IOB寄存器,可以设置全局实现选项:为输入、输出或输入输出选择IOB寄存器。缺省值为关 off。 你也可在综合工具或在用户约束文件UCF中设定,使得能够使用IOB寄存器。句法为: INST io_register_name IOB = TRUE; 3. 对于关键的输出选择快速转换速率 可以为LVCMOS和LVTTL电平选择转换速率,快速的转换速率会降低输出时延,但会增加地弹,所以必须在仔细考虑的基础之上选择快速转换速率。 4. 流水逻辑 如果你的设计允许增加延迟,对组合逻辑采用流水操作可以提高性能。在Xilinx的FPGA中有大量的寄存器,对每一个四输入LUT有一个对应的寄存器,在牺牲延迟的情况下,利用这些寄存器可以增加数据吞吐量。 5. 为四输入的LUT结构进行代码优化 记住每一个查找表可以建立一个四输入的组合逻辑函数。如果需要更大的功能,可根据“四输入组合逻辑”这个特性,分析、优化实现该功能所需的查找表的数目。 6. 使用Case语句而不是if-then-else语句 复杂的if-then-else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延(现在大部分综合工具,可以把if-else的优先级逻辑层次打平)。用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑。对于Verilog,可以使用约束parallel_case。 7. 多用Xilinx自带Core generate Core generate针对 Xilinx的结构进行了优化,许多块都可以允许用户配置,包括大小、宽度和流水延迟。查看设计中的关键路径,是否可以在核生成器中产生一个核来提高关键路径性能。避免由代码来推断,又麻烦,又不可靠。 8. FSM的设计限制在一个层次中 为了允许综合工具完全优化FSM,它必须在它自己的块中优化。如果不是这样的话,这将使得综合工具将FSM逻辑和它周围的逻辑一起优化。FSM不能包括任何的算术逻辑、数据通路逻辑或者其它与状态机不相关的组合逻辑。 9. 使用两个进程或always块的有限状态机 下一个状态和输出译码逻辑必须放在独立的进程或always块中,这将不允许综合工具在输出和下一个状态译码逻辑之间共享资源。便于代码维护。 10. 使用一位有效编码(one-hot、gray)FSM 一位有效编码通常会在富含寄存器的FPGA中提供最高

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档