sunrise_edge (clk) не обнаруживает ребра при ручном изменении значения часов - PullRequest
0 голосов
/ 02 декабря 2018

Я любитель, когда дело доходит до 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, вручную установив часы (и не работая):

Screenshot of me trying to trigger the FF by manually setting the clock

Здесь вы можете видеть, как он работает, когда я переключаю clk с «Force constant» на «Force clock»:

here you can see it working when I switch clk from

...