Я любитель, когда дело доходит до VHDL и аппаратного обеспечения в целом, но я работал над проектом для школы и наткнулся на то, чего не могу понять.
У меня есть реестр(тип D FF), который обрабатывает тактовый сигнал для хранения входного значения, и в симуляции он работает нормально, если я использую «Force clock» на входе clk, но если я пытаюсь «смоделировать» часы, вручную изменив их с помощью«Force Constant» от нуля до единицы и т. Д. Он не «улавливает» нарастающий фронт.
Это нормальное поведение?Я предполагал, что он все равно обнаружит нарастающий фронт при переходе от 0 к 1.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity register_D is
generic (
WIDTH : POSITIVE := 1
);
Port ( CLK : in STD_LOGIC;
RST : in STD_LOGIC;
EN : in STD_LOGIC;
D : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
Q : out STD_LOGIC_VECTOR(WIDTH-1 downto 0));
end register_D;
architecture Behavioral of register_D is
begin
process (CLK, RST, EN)
begin
if (RST='1') then
Q <= (others=>'0');
elsif (rising_edge(CLK) and EN = '1') then
Q <= D;
end if;
end process;
end Behavioral;
Снимок экрана, на котором я пытаюсь запустить FF, вручную установив часы (и не работая):
Здесь вы можете видеть, как он работает, когда я переключаю clk с «Force constant» на «Force clock»: