【发布时间】: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 <= x when rising_edge(clk);。 -
@JHBonarius 我想我明白您想要表达的意思,但这与该术语在 FPGA/ASIC 开发中的使用方式不一致。在这种情况下,“触发器”总是指边沿触发的结构;使用电平触发结构时使用“latch”(不常见)。
标签: process vhdl fpga flip-flop