繁体   English   中英

带 R & S 的 VHDL 行为 D 触发器

[英]VHDL behavioural D Flip-Flop with R & S

嗨,你们中的任何一个对 VHDL Quartus II 有更多经验的人,请让我明白这一点。 我有以下用于设置和重置的 D 触发器的实体和行为架构。

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;

ENTITY Q1 IS
PORT (D,R,S,CLK :   IN      std_logic;
        Q               :   OUT std_logic
        );
END ENTITY Q1;

ARCHITECTURE behavioural OF Q1 IS
BEGIN
D_FF    :   PROCESS (CLK,R,S)
BEGIN
    IF          R = '0' THEN Q <= '0';
    ELSIF       S = '0' THEN Q <=   '1';
    ELSIF   (rising_edge(CLK)) THEN Q <= D;
    END IF;
END PROCESS D_FF;
END ARCHITECTURE behavioural;

当我使用 Quartus II 编译代码时,出现以下错误消息:

警告 (335093):TimeQuest 时序分析器正在分析 1 个组合循环作为锁存器。

我认为这是对 R & S 输入的不完整输出分配的警告,但是当我制作一个仅具有 SET 输入的 D 触发器锁存器时,编译时不会出现此错误消息。 这让我想也许我在编写架构时犯了错误? 如果有人有任何答案或有用的信息,我们将不胜感激。

您已经描述了具有异步复位和异步设置的时钟边沿触发触发器 (FF)。 同时只支持其中一个,因为 AFAIK,Altera FPGA 上的所有 FF 只有异步复位。

通过反转 FF 数据输入和输出,然后将其重置为低而不是将其设置为高,在 Altera FPGA 上仿真异步集。 它看起来像这样:

Altera FPGA 上的异步设置

不要忽视 FF 的D输入上的反相器。 如果S很低,则 FF本身被异步重置,但由于事后Q输出的否定,它表现为实体Q1的一组异步输出Q 如果S为高电平,FF 会在时钟上升沿存储取反的输入,并在输出端再次取反。 如您所见, FF的异步重置端口已被使用,因此不能用于实体Q1的额外异步重置。

我建议改用同步设置和重置的触发器:

ARCHITECTURE sync_rs OF Q1 IS
BEGIN
D_FF    :   PROCESS (CLK)
BEGIN
    IF (rising_edge(CLK)) THEN
        IF          R = '0' THEN Q <= '0';
        ELSIF       S = '0' THEN Q <= '1';
        ELSE                     Q <= D;
        END IF;
    END IF;
END PROCESS D_FF;
END ARCHITECTURE sync_rs;

FPGA 器件中的触发器通常具有异步设置或复位功能,但不能同时具有这两种功能,因此 Altera Quartus 尝试使用锁存器而不是专用硬件来制作所请求的电路。

但是,在大多数情况下,这不是您想要的,因此请改用具有异步复位或设置的触发器,或者按照 Martin Zabel 在他的回答中建议的那样使用同步设置和复位。

请注意,异步复位在高速设计中优于同步复位,因为异步复位不会在主同步数据路径中添加任何登录,而主同步数据路径通常是高速设计的关键路径。

最后,对于异步复位,使用两个if单独语句是一个好习惯,reset 最后一个,因此计时不依赖于复位断言。 对于单位触发器来说这不是问题,但如果在同一过程中控制更多信号,并且复位不适用于所有信号,那么时钟不应该依赖于那些没有复位的信号的复位,因为这将推断闩锁。 代码如下:

D_FF : PROCESS (CLK, R)
BEGIN
  IF rising_edge(CLK) THEN
    Q <= D;
  END IF;
  IF R = '0' THEN
    Q <= '0';
  END IF;
END PROCESS D_FF;

感谢您的回复,我是故意让 R&S 输入异步的。 我一直在研究 VHDL 教科书“Free Range VHDL”,并在练习中遇到以下问题: 在此处输入图像描述

该问题要求两个输入都是异步的。 你说这可以通过反转输入和输出并将其重置为低而不是高来用 Altera 进行仿真。 你能稍微扩展一下吗? 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM