我必须实现一个D-latch,当aclrn = 0时跟随异步复位,当sclrn = 0时同步。实现应该能够遵循两种重置方法。
这是我在基于D-latches的VHDL中提出的(我只包括过程)。
process(aclrn,clock)
begin
if (aclrn='0') then
q <= '0';
elsif (rising_edge(clock)) then
if (sclrn='0') then
q <= '0';
else
q <= d;
end if;
end if;
end process;
,其中
clock, d, aclrn, sclrn : in std_logic; q : out std_logic
我是否正确,该过程不需要将sclrn作为参数,但只需要aclrn和clock?还有其他不一致之处吗?
提前谢谢。
答案 0 :(得分:2)
你说的是D-latch而是编码的触发器。你真的需要一个D-latch,或者你只是不小心使用闩锁而不是寄存器? 如果你真的需要一个触发器,你就做对了。 你把aclrn和时钟放在灵敏度列表中是正确的。您不需要将sclrn放在列表中,因为它是同步的。 具有正边沿时钟和同步集的触发器的Xilinx XST教程示例
architecture archi of registers_3 is
begin
process (C)
begin
if (C'event and C='1') then
if (S='1') then
Q <= '1';
else
Q <= D;
end if;
end if;
end process;
end archi;
和具有正边沿时钟和异步复位的触发器的XST编码示例
architecture archi of registers_2 is
begin
process (C, CLR)
begin
if (CLR = '1')then
Q <= '0';
elsif (C'event and C='1')then
Q <= D;
end if;
end process;
end archi;
通过混合这两个你得到你的答案。我认为您的代码没有任何问题。最好的方法是知道你是否编码了你所要求的是模拟它。
如果需要锁存,请注意锁存器对电平而不是边缘敏感。这是具有正门和异步复位的LATCH的示例
architecture archi of latches_2 is
begin
process (CLR, D, G)
begin
if (CLR='1') then
Q <= '0';
elsif (G='1') then
Q <= D;
end if;
end process;
end archi;