输入和输出端口的行为类似于触发器吗? (VHDL)

时间:2017-11-20 19:36:01

标签: process vhdl fpga flip-flop

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完全相同,还是延迟了一个时钟周期?

3 个答案:

答案 0 :(得分:2)

y <= y_q只是&#34;连线&#34; yy_q。没有额外的逻辑暗示,所以没有延迟。

或者,您可以查看为此模块生成的RTL!以下屏幕截图来自Xilinx ISE。 (&#34; fd&#34;是Dilin型触发器的Xilinx名称。)

enter image description here

答案 1 :(得分:1)

因为你问过。 下面的代码被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年之前的过程中使用它。

答案 2 :(得分:0)

至于你的问题,信号y与信号y_q相同,答案是YES。     y&lt; = y_q; 它是任何过程中的并行分配,只是说两个信号y和y_q应该连接在一起,所以当然它们是相同的。

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