Проблема с выводом мультиплексора 4to1, сделанного с использованием мультиплексора 2to1 в Modelsim

После успешной компиляции и симуляции с помощью Modelsim приведенного ниже кода, представляющего собой простой мультиплексор 4to1, построенный с использованием двух мультиплексоров 2to1, я провел тест формы сигнала, чтобы увидеть, как он будет выглядеть, выход постоянно находился в состоянии U независимо от значения входных данных, вот код вместе с результатами:

а. Код мультиплексора 2to1:

entity mux2_1 is
port( a,b:in std_logic_vector(2 downto 0);
s:in std_logic;
e:out std_logic_vector(2 downto 0));
end mux2_1;


architecture wx of mux2_1 is

begin

process

begin
if (s='0') then
e<=a;
else
e<=b;
end if;
wait;

end process;
end wx;

б. Код для мультиплексора 4to1:


entity mux4_1 is

port( a,b,c,d:in std_logic_vector(2 downto 0);
       s1,s0:in std_logic;
       e :out std_logic_vector (2 downto 0));

end mux4_1;


architecture nj of mux4_1 is

signal t1,t2:std_logic_vector (2 downto 0);


begin

k1: entity work.mux2_1 port map (a,b,s0,t1);
k2: entity work.mux2_1 port map (c,d,s0,t2);
k3: entity work.mux2_1 port map (t1,t2,s1,e);

end nj;

Вот консольный отчет сразу после симуляции:

Проблема с выводом мультиплексора 4to1, сделанного с использованием мультиплексора 2to1 в Modelsim

И, наконец, осциллограммы с непоследовательным выходом:

Проблема с выводом мультиплексора 4to1, сделанного с использованием мультиплексора 2to1 в Modelsim

Ошибок: 4, Предупреждений: 2 - вы их читали?

mkrieger1 04.07.2019 22:02

Что ты делаешь с c и d в mux4_1? (Подсказка: ничего)

mkrieger1 04.07.2019 22:02

А за что вы объявили j?

mkrieger1 04.07.2019 22:03

@mkrieger1 mkrieger1 Я только что отредактировал код и перезапустил симуляцию, и, по-видимому, проблема все еще сохраняется (я также обновил сообщение), я не могу найти способ открыть ошибку, о которой сообщается в стенограмму, простой щелчок по ней ничего не делает, а двойной щелчок перенаправит меня в самый низ окна стенограммы.

Norbert 05.07.2019 00:04

Укажите минимальный воспроизводимый пример. Обратите внимание, что непомеченный процесс в архитектуре wx из mux2_1 не имеет списка конфиденциальности, но включает окончательный оператор ожидания без условия тайм-аута и не возобновится после приостановки в начале моделирования. Этот проект не может реагировать на изменения на его входах (экземпляр k3) в следующем дельта-цикле.

user1155120 05.07.2019 01:39

@user1155120 user1155120 Пожалуйста, простите мою неопытность, потому что я новичок в этой области. Спасибо, ваше предложение действительно решило проблему.

Norbert 05.07.2019 10:42
Стоит ли изучать 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
6
225
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Сначала я предлагаю вам прочитать код VHDL от других и попытаться понять, что они делают. У вас есть код, который будет что-то делать, но не обязательно то, что вы хотите. Большая ошибка, которую люди совершают, когда начинают кодировать VHDL, состоит в том, что они думают, что это программное обеспечение и что его можно запрограммировать так же, как программное обеспечение; это не так. Чтобы преуспеть в этом, вы должны думать с точки зрения аппаратного обеспечения и того, какая логика объявляется для вашего кода.

Оператор ожидания является проблемой. Единственное место, где следует использовать оператор ожидания, - это тестовая среда, поскольку они не могут быть сопоставлены с логическими ячейками. Итак, что вы хотите сделать, это удалить оператор ожидания и создать список чувствительности процесса (где в этом случае вам это даже не нужно, но это хорошая практика).

p_MUX_2x1 : process (a, b, s)
begin
   if (s = '0') then
      e <= a;
   else
      e <= b;
   end if;
end process p_MUX_2x1;
Ответ принят как подходящий

Я считаю, что ошибка связана с оператором ожидания в мультиплексоре 2:1. Пожалуйста, удалите его.

Вот еще одно замечание: используйте операторы ожидания как можно чаще только в тестовом стенде. Поскольку ожидания не синтезируются, вы столкнетесь с несколькими ошибками.

Спасибо

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