【问题标题】:Do input and output ports behave like flip-flops? (VHDL)输入和输出端口的行为是否像触发器? (VHDL)
【发布时间】:2018-05-04 03:03:51
【问题描述】:

VHDL 中的输入和输出端口的行为是否类似于触发器,即它们是在时钟的上升沿还是下降沿更新?这是我的意思的一个例子。

entity main is
    port(
        clk : in std_logic; -- FPGA clock
        x : in std_logic; -- input signal
        y : out std_logic -- sampled input signal
    );
end entity main;

architecture RTL of main is
    signal y_q : std_logic;
begin

    y <= y_q; -- set the output

    copy : process(clk, x) is
        variable y_d : std_logic;
    begin
        y_d := x; -- continuously sample x
        if rising_edge(clk) then -- synchronous logic
            y_q <= y_d; -- update flip-flop
        end if;
    end process copy;

end architecture RTL;

上面的程序只是简单地对输入信号x进行采样,并将其发送到输出y。信号y_q 是采样的输入信号x,而在时钟clk 的每个上升沿进行采样。但是,我对y 信号感到困惑——该信号与y_q 完全相同,还是延迟了一个时钟周期?

【问题讨论】:

  • 这不是对寄存器进行编程的非常有效的方法。 (寄存器是两个串联的顺序触发器,又名锁存器)。它甚至可能导致合成问题。
  • @JHBonarius 我不是想实现一个寄存器,我只是想了解信号y 会发生什么。您所说的“不是对寄存器进行编程的一种非常有效的方法”是什么意思。能不能说的具体点?
  • @JHBonarius 嗯? if rising_edge(clk) 块已经暗示了一个边沿触发的触发器(即寄存器)。
  • 嗯,现代合成软件已经可以只用一行:y &lt;= x when rising_edge(clk);
  • @JHBonarius 我想我明白您想要表达的意思,但这与该术语在 FPGA/ASIC 开发中的使用方式不一致。在这种情况下,“触发器”总是指边沿触发的结构;使用电平触发结构时使用“latch”(不常见)。

标签: process vhdl fpga flip-flop


【解决方案1】:

y &lt;= y_q 只是“连接”yy_q。没有隐含额外的逻辑,所以没有延迟。

或者,您可以只查看为此模块生成的 RTL!下面的屏幕截图来自 Xilinx ISE。 (“fd”是赛灵思 D 型触发器的名称。)

【讨论】:

  • 谢谢,我是 VHDL 新手,我仍然需要学习如何使用所有这些很酷的功能。 :) 还有一个问题——像上面的例子一样,在一个进程中拥有并发语句和同步逻辑是否正常?还是应该将同步逻辑移至单独的进程?我更喜欢原始帖子中的解决方案,因为在这种情况下,我可以使用变量来实现“电线”,但我不确定这是否是一种好的编程习惯。
【解决方案2】:

因为你问了。 以下代码被 Intel/Altera 和 Xilinx 综合所接受。

entity main is
    port(
        clk : in std_logic; -- FPGA clock
        x : in std_logic; -- input signal
        y : out std_logic -- sampled input signal
    );
end entity main;

architecture RTL of main is begin
    y <= x when rising_edge(clk);
end architecture RTL;

是的,您可以使用when。您只是不能在 2008 年之前的流程中使用它。

【讨论】:

    【解决方案3】:

    至于你的问题,信号 y 是否与信号 y_q 相同,答案是肯定的。 y

    您不应该以这种方式编写寄存器,尽管您的代码在逻辑上看起来是正确的。您可以查看 xilinx XST 用户指南,它会告诉您如何描述几种寄存器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多