Intel® Quartus® Prime Pro Edition用户指南: 设计建议

ID 683082
日期 9/28/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

1.5.3.2. 正确地推断锁存器

综合工具可以推断一个锁存器,该锁存器不会表现出与组合环路相关的毛刺和时序危险问题。 Intel® Quartus® Prime Pro Edition 软件在Compilation Report的User-Specified and Inferred Latches部分中报告综合推断的锁存器。此报告指出锁存器是否存在时序危险,以及用户指定和推断的锁存器总数。
注: 在某些情况下,时序分析不会完全仿真锁存器时序。作为最佳实践,要避免锁存器,除非设计要求,并且对其影响要有全面了解。

如果设计中的锁存器或组合环路未出现在User Specified and Inferred Latches部分中,那么 Intel® Quartus® Prime综合没有将锁存器推断为一个安全锁存器,因此该锁存器不被视为无毛刺。

Compilation Report中的Analysis & Synthesis Logic Cells Representing Combinational Loops表中列出的所有组合环路都存在时序风险。这些条目表明设计可能存在的问题,需要进一步研究。但是,正确的设计可以包括组合环路。例如,组合环路可能无法被识别。当硬件中存在电气路径时,会发生这种情况,但是其中一种:

  • 设计人员知道电路永远不会遇到导致该路径被激活的数据,或者
  • 周围的逻辑以相互排斥的方式进行设置,以防止该路径敏感化,而与数据输入无关。

对于基于6输入LUT的器件, Intel® Quartus® Prime综合利用组合环路中的单个自适应查找表(ALUT)实现所有锁存器输入。因此,当单个输入发生变化时,User-Specified and Inferred Latches表中的所有锁存器都没有时序风险。

如果 Intel® Quartus® Prime综合报告将一个锁存器列为安全的锁存器,那么其他优化(例如Fitter中的物理综合网表优化)可保持无危险性能。为确保无危险行为,一次只能更改一个控制输入。同时更改两个输入(例如同时置低setreset),或者同时更改数据和使能可能会在锁存器中产生错误的行为。

Intel® Quartus® Prime综合从Verilog HDL中的always和VHDL中的process语句推断锁存器。然而, Intel® Quartus® Prime综合不从Verilog HDL中连续的assignment和VHDL中并发信号assignment推断锁存器。这些规则与寄存器推断的规则相同。 Intel® Quartus® Prime综合仅从always模块和process语句推断寄存器和触发器。

Verilog HDL Set-Reset Latch

module simple_latch (
   input SetTerm,
   input ResetTerm,
   output reg LatchOut
   );
   always @ (SetTerm or ResetTerm) begin
      if (SetTerm)
         LatchOut = 1'b1;
      else if (ResetTerm)
         LatchOut = 1'b0;
   end
endmodule

VHDL Data Type Latch

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITY simple_latch IS
	PORT (
		enable, data    : IN STD_LOGIC;
		q               : OUT STD_LOGIC
	);
END simple_latch;
ARCHITECTURE rtl OF simple_latch IS
BEGIN
	latch : PROCESS (enable, data)
		BEGIN
		IF (enable = '1') THEN
			q <= data;
		END IF;
	END PROCESS latch;
END rtl;

Verilog Continuous Assignment不推断锁存器

以下示例显示了一个Verilog HDL连续assignment,此assignment在 Intel® Quartus® Prime软件不推断锁存器:

assign latch_out = (~en & latch_out) | (en & data);

assignment的行为类似于锁存器,但它可能无法正确用作锁存器,并且其时序也不会被分析成锁存器。 Intel® Quartus® Prime Pro Edition 综合在可能的情况下也可以创建安全的锁存器以实例化Intel FPGA latch IP core。Intel FPGA latch IP允许您使用数据,使能,设置和复位输入的任意组合定义一个锁存器。创建安全的锁存器的限制与从HDL代码推断锁存器的限制相同。

在另一个综合工具中推断Intel FPGA latch IP coore可确保 Intel® Quartus® Prime综合也也是识别作为锁存器的实现。如果第三方综合工具使用Intel FPGA latch IP core实现一个锁存器,那么 Intel® Quartus® Prime Pro Edition 综合报告User-Specified and Inferred Latches表中的锁存器,其方式与在HDL源代码中定义的锁存器列出的方式相同。生成Intel FPGA latch IP core实现所需的编码风格取决于综合工具。某些第三方综合工具列出了推断的Intel FPGA latch IP core的数量。

Fitter对控制信号使用全局布线,包括综合识别为锁存使能的信号。在某些情况下,全局插入延迟会降低时序性能。如有必要,您可以关闭 Intel® Quartus® Prime Global Signal逻辑选项以手动阻止全局信号的使用。Compilation Report的Global & Other Fast Signals表报告了Global锁存使能。