FPGA中推荐的HDL设计方法之组合逻辑

现在FPGA应用以及达到了ASIC级别的性能和复杂程度。在一个复杂的系统设计开发中,好的设计方法会对FPGA上系统的可靠性,逻辑资源利用率,及时序性能产生巨大的影响。即使重新定位到不同的系列或速度等级,编码良好的设计也能以可预测和可靠的方式运行。良好的设计实践也有助于FPGA和ASIC实现之间原型设计和产品的移植。

为了在使用Altera器件进行设计时获得最佳性能,可靠性和更快的上市时间,您应遵循以下准则:

•了解同步设计实践的影响

•遵循推荐的设计技术,包括层次化的设计和时序收敛指南

•发挥FPGA器件架构特性的优势

  • 了解同步设计实践的影响

良好设计方法的第一步是了解您的设计实践和技术的含义。 本节概述了最佳同步设计实践的好处以及其他设计技术所涉及的危害。良好的同步设计实践可以帮助您始终如一地实现设计目标。 其他设计技术的问题可能包括依赖于设备中的传播延迟,这可能导致竞争条件,不完整的时序分析以及可能的毛刺。在同步设计中,时钟信号触发每个事件。 只要您确保满足寄存器的所有时序要求,同步设计就可以在所有过程,电压和温度(PVT)条件下以可预测和可靠的方式。 您可以轻松地将同步设计迁移到不同的设备系列或速度等级。

实现同步设计:

在同步设计中,时钟信号控制所有输入和输出的活动过程。在时钟(Clk端口)的每个有效边沿(通常是上升沿),下图左边寄存器(D触发器)的数据输入(D端口)被采样并传输到输出(Q端口)。 之后,数据输入组合逻辑后,并更新组合逻辑的输出值,然而在这个过程当中,组合电路的可能经历过多个不稳定的电路状态(其原因是由于通过逻辑的传播延迟而导致的不稳定,如竞争冒险现象),才最终稳定到新的输出值。然而右边寄存器的数据输入上发生的更改不会影响其输出值,直到下一个有效时钟沿之后才进行数据的采样更新。

由于寄存器的内部电路将数据输出与输入隔离,因此只要满足以下时序要求,组合逻辑中的不稳定性就不会影响设计的运行(如可以将组合电路中的毛刺进行隔离):

•在有效时钟沿之前,必须确保数据输入至少在寄存器的建立时间(setup time)内保持稳定。

•在有效时钟沿之后,必须确保数据输入至少在寄存器的保持时间(hold time)内保持稳定。

  • HDL设计指南

组合逻辑:

组合逻辑结构由逻辑函数构成,逻辑函数仅依赖于当前的输入状态。 在Altera FPGA中,这些功能在具有逻辑元件(LE)或自适应逻辑模块(ALM)的查找表(LUT)中实现。

避免组合逻辑循环:

组合逻辑循环是数字设计中不稳定性和不可靠性的最常见原因。 组合循环通常通过建立不包含寄存器的直接反馈循环来违反同步设计原则。你应该尽可能避免组合循环。 在同步设计中,反馈环路应包括寄存器。 例如,当算术表达式的左侧的符号也出现在算数表达式的右侧时(如:当计算a = a +b时候),会发生组合循环。 当您通过组合逻辑将寄存器的输出反馈到同一寄存器的异步(置位)引脚时,也会发生组合循环。如下图所示:

由于以下原因,组合逻辑循环本质上是高风险的设计结构:1.组合逻辑循环的行为通常取决于组合逻辑循环中所涉及的逻辑的相对传播延迟。 如上所述,传播延迟可能会发生变化,这意味着循环的行为是不可预测的(同时也是难以进行分析的)。2.组合逻辑循环会导致无限的循环计算。大多数设计工具以打破组合逻辑循环的方式来处理设计。然而设计中使用的各种工具可能以其他方式来处理组合逻辑循环,这可能会导致最终结果与原始设计意图不一致。

避免无意义的锁存器:

锁存器是具有组合反馈的小电路,其保持值直到分配新值。您可以使用Quartus II文本编辑器或块编辑器实现锁存器。
HDL代码中的错误通常会导致意外的锁存推断;如果发生这种情况,Quartus II Synthesis会发出警告信息。与其他技术不同,FPGA架构中的锁存器并不比寄存器小得多。该架构未针对锁存器实现进行优化,并且与等效寄存器电路相比,锁存器通常具有较慢的定时性能。
锁存器具有透明模式,其中数据从输入传递到输出(相当于一根线的效果)。当使能信号为高电平时,正锁存器处于透明模式(与之对应的负锁存器为低电平)。在透明模式下,由于创建了直接路径,输入上的毛刺可以传递到输出。这为时序分析带来了极大的复杂性。典型的锁存使用方案是利用多个使能阶段来防止发生长时间的路径透明。但是,时序分析工具无法识别这些安全应用。
如TimeQuest分析器默认将锁存器分析为在正锁存信号下降沿计时的同步元件,并允许您将锁存器视为具有不透明的起点和终点。请注意,即使锁存器的透明模式实际极短,也可能导致毛刺传播。 TimeQuest分析器无法执行循环借用分析。由于各种时序复杂性,锁存器在形式验证工具中的支持有限。因此,您不应该依赖于包含锁存器的设计。

避免时钟路径中添加延迟链:

当你使用延时链对一个输入或输出进行延时。例如,将多个非门链接在一起并作为延时链进行使用。 延迟链有时用于解决由其他异步设计中的竞争冒险现象。在一些ASIC设计中,延迟链用于在某些信号需要绕设备路由时缓冲其他信号,以匹配延时。 FPGA器件不需要此功能,因为在FPGA中路由结构已经提供信号缓冲的功能。您可以使用延迟链生成一个脉冲(脉冲发生器)或一系列脉冲(多谐振荡器)。 脉冲生成有两种常用方法。 这些技术纯粹是异步的,必须避免在FPGA中使用。

当你必须使用脉冲发生器时,推荐在FPGA中使用同步脉冲发生器技术,如下图所示:

猜你喜欢

转载自blog.csdn.net/taidaohualang/article/details/81136985
今日推荐