Синхронный сброс не работает (VHDL) в симуляции, но почему?

Я действительно запутался, потому что это простой код, и я не нахожу ошибку. Синтаксис в порядке, но в Simulation значения Dready и acc_value не меняются.

Это мой модуль MVM.vhd:

entity MVM is
  port (
    CLK:        IN  std_logic;
    RST:        IN  std_logic;
    DREADY:     OUT std_logic
  );
end entity MVM;

architecture base of MVM is
begin
  process(CLK)
  variable acc_value : signed(15 downto 0);
  begin
   IF rising_edge(CLK) then   
      IF RST='1' THEN
        acc_value := (OTHERS => '0'); -- reset 
        DREADY <= '0';
      END IF;
    END IF;
  END process;
end base;

Если Reset высокий, он должен установить значения Dready и acc_value на «0».

Мой тестовый стенд:

entity tb_MVM is
--  Port ( );
end tb_MVM;

architecture TEST of tb_MVM is

  Component MVM
  port (
    CLK:        IN  std_logic;
    RST:        IN  std_logic;
    DREADY:     OUT std_logic
  );
    End component;
    
    signal CLK:        std_logic;
    signal RST:        std_logic;
    signal DREADY:     std_logic;

    BEGIN
          uut:  MVM Port Map(
                CLK=>CLK,
                RST=>RST,
                DREADY => DREADY
                );
           
        tb: process    
        BEGIN
            wait for 100ns;
            CLK <= '1';
            RST <= '1';
            wait for 100ns;
            CLK <= '0';
            wait for 100ns;
            CLK <= '1';
            RST <= '0';
        END PROCESS;   
end TEST;

В моделировании значения DREADY и acc_value не определены ('X').

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что вы имеете в виду выход до 300 нс...

Упрощенно: rising_edge() проверяет переход от '0' к '1' и неверно для переходов от 'X' к '1'.

Вы также можете убедиться, что RST стабилен, когда CLK действительно растет, например:

        tb: process    
        BEGIN
            CLK <= '0';
            RST <= '1';
            wait for 100ns;
            CLK <= '1';
            wait for 100ns;
            CLK <= '0';
            RST <= '0';
        END PROCESS;   

Это приводит к нулю DREADY и acc_value через 100 нс.

Мы называем эти типографские ошибки или, в просторечии, размышлениями, когда вы имели в виду одно, а написали другое.

user16145658 08.12.2022 16:55

Вы правы, он должен установить его на «0», а не на «1». Во всяком случае, в симуляции, но это не 0 и не 1, это "x" (не определено/неизвестно)

hajo 09.12.2022 09:41

Другие вопросы по теме