Я прочитал все другие вопросы, заданные с той же проблемой, но ни один из них не помог. Либо было дано недостаточно информации и поэтому вопрос остался без ответа, либо ответы не относились к моему случаю. Я получаю эту ошибку (как показано ниже), и я не могу понять, что ее вызывает.
# vsim -novopt -c -t 1ps -L fiftyfivenm -L altera -L altera_mf -L 220model -L sgate -L altera_lnsim work.demultiplexer_vhd_vec_tst
# Start time: 19:44:15 on Apr 10,2023
# Loading std.standard
# Loading std.textio(body)
# Loading ieee.std_logic_1164(body)
# Loading work.demultiplexer_vhd_vec_tst(demultiplexer_arch)
# Loading ieee.vital_timing(body)
# Loading ieee.vital_primitives(body)
# Loading fiftyfivenm.fiftyfivenm_atom_pack(body)
# Loading fiftyfivenm.fiftyfivenm_components
# Loading work.demultiplexer(structure)
# ** Fatal: (vsim-3807) Types do not match between component and entity for port "out1".
# Time: 0 ps Iteration: 0 Instance: /demultiplexer_vhd_vec_tst/i1 File: LabNine.vho Line: 39
# FATAL ERROR while loading design
# Error loading design
# End time: 19:44:15 on Apr 10,2023, Elapsed time: 0:00:00
# Errors: 1 Warnings: 0
Error
Вот рассматриваемый код:
ENTITY demultiplexer IS
PORT ( out1 : OUT BIT_VECTOR (0 TO 7);
out2 : OUT BIT_VECTOR (0 TO 7);
out3 : OUT BIT_VECTOR (0 TO 7);
CLR : OUT BIT;
inbus : IN BIT_VECTOR(0 TO 7);
S0 : IN BIT; S1 : IN BIT);
END demultiplexer;
ARCHITECTURE dataflow OF demultiplexer IS
BEGIN
process(S0, S1)
BEGIN
IF (S0 = '0') and (S1 = '0') THEN
CLR <= '1';
ELSIF (S0 = '1') and (S1 = '0') THEN
out1(0) <= inbus(0);
out1(1) <= inbus(1);
out1(2) <= inbus(2);
out1(3) <= inbus(3);
out1(4) <= inbus(4);
out1(5) <= inbus(5);
out1(6) <= inbus(6);
out1(7) <= inbus(7);
CLR <= '0';
ELSIF (S0 = '0') and (S1 = '1') THEN
out2(0) <= inbus(0);
out2(1) <= inbus(1);
out2(2) <= inbus(2);
out2(3) <= inbus(3);
out2(4) <= inbus(4);
out2(5) <= inbus(5);
out2(6) <= inbus(6);
out2(7) <= inbus(7);
CLR <= '0';
ELSIF (S0 = '1') and (S1 = '1') THEN
out3(0) <= inbus(0);
out3(1) <= inbus(1);
out3(2) <= inbus(2);
out3(3) <= inbus(3);
out3(4) <= inbus(4);
out3(5) <= inbus(5);
out3(6) <= inbus(6);
out3(7) <= inbus(7);
CLR <= '0';
END IF;
END process;
END dataflow;
В файле сигнала переходы переменных должны происходить каждые:
S0 = 50 нс
S1 = 100 нс
вход[0] = 200 нс
вход[1] = 400 нс
вход[2] = 800 нс
вход[3] = 1600 нс
inbus[4] = 3200 нс
inbus[5] = 6400 нс
inbus[6] = 12800 нс
inbus[7] = 25600 нс
И конечное время установлено на 51200ns
А вот файл LabNine.vho с рассматриваемой строкой:
ARCHITECTURE structure OF demultiplexer IS
SIGNAL gnd : std_logic := '0';
SIGNAL vcc : std_logic := '1';
SIGNAL unknown : std_logic := 'X';
SIGNAL devoe : std_logic := '1';
SIGNAL devclrn : std_logic := '1';
SIGNAL devpor : std_logic := '1';
SIGNAL ww_devoe : std_logic;
SIGNAL ww_devclrn : std_logic;
SIGNAL ww_devpor : std_logic;
SIGNAL ww_out1 : std_logic_vector(0 TO 7);
SIGNAL ww_out2 : std_logic_vector(0 TO 7);
SIGNAL ww_out3 : std_logic_vector(0 TO 7);
SIGNAL ww_CLR : std_logic;
SIGNAL ww_inbus : std_logic_vector(0 TO 7);
SIGNAL ww_S0 : std_logic;
SIGNAL ww_S1 : std_logic;
SIGNAL \out1[7]~output_o\ : std_logic;
SIGNAL \out1[6]~output_o\ : std_logic;
SIGNAL \out1[5]~output_o\ : std_logic;
SIGNAL \out1[4]~output_o\ : std_logic;
SIGNAL \out1[3]~output_o\ : std_logic;
SIGNAL \out1[2]~output_o\ : std_logic;
SIGNAL \out1[1]~output_o\ : std_logic;
SIGNAL \out1[0]~output_o\ : std_logic;
SIGNAL \out2[7]~output_o\ : std_logic;
SIGNAL \out2[6]~output_o\ : std_logic;
SIGNAL \out2[5]~output_o\ : std_logic;
SIGNAL \out2[4]~output_o\ : std_logic;
SIGNAL \out2[3]~output_o\ : std_logic;
SIGNAL \out2[2]~output_o\ : std_logic;
SIGNAL \out2[1]~output_o\ : std_logic;
SIGNAL \out2[0]~output_o\ : std_logic;
SIGNAL \out3[7]~output_o\ : std_logic;
SIGNAL \out3[6]~output_o\ : std_logic;
SIGNAL \out3[5]~output_o\ : std_logic;
SIGNAL \out3[4]~output_o\ : std_logic;
SIGNAL \out3[3]~output_o\ : std_logic;
SIGNAL \out3[2]~output_o\ : std_logic;
SIGNAL \out3[1]~output_o\ : std_logic;
SIGNAL \out3[0]~output_o\ : std_logic;
...
Любая помощь приветствуется! Если вас интересуют названия лабораторий, то лаборатория уже проводилась, и демультиплексор отлично работал во время физической демонстрации с платой DE10-Lite. Вот почему я еще больше озадачен тем, почему сейчас возникают проблемы с симуляцией.
исправлено, извините за это.
похоже, вы используете функцию quartus, которая требует использования типов на основе std_logic для совместимости с автоматическим созданием тестового стенда. Поиск Verror для vsim-3807: «Сообщение vsim # 3807: тип порта объекта не соответствует типу порта компонента, который его создает». Либо используйте типы на основе std_logic, либо напишите свой собственный тестовый стенд.
Итак, вы говорите, что мои типы данных нужно изменить, или мне нужно импортировать библиотеку, чтобы сделать это менее подверженным ошибкам?
Вы не показываете, где создается экземпляр компонента демультиплексора. В сообщении об ошибке говорится, что между компонентом и сущностью существуют несоответствия типов. Это можно исправить, только изменив объект и его архитектуру (архитектуры) или код, пытающийся создать его экземпляр. Вы не показываете последнее. Предоставьте минимальный воспроизводимый пример.
У меня нет никакого другого кода, кроме того, что я опубликовал.
И вы все еще не опубликовали достаточно информации, чтобы воспроизвести проблему, описанную в сообщении об ошибке.
ой... черт возьми, ты прав. Я редактирую его сейчас.
Процесс должен иметь inbus в списке чувствительности. Написанный вручную тестовый стенд может быть простым и переносимым между инструментами здесь ghdl и gtkwave имитируют тестовый стенд). В противном случае вам нужно будет перейти от типов на основе битов к типам на основе std_logic в конструкции демультиплексора.
Несмотря на то, что он никоим образом не используется симулятором формы волны, вы должны иметь расположение контактов (и сделать это правильно), чтобы симуляция действительно работала.
См. Как спросить Помогите другим воспроизвести проблему • НЕ публикуйте изображения кода, данных, сообщений об ошибках и т. д. — скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста. Для получения дополнительной информации см. запись Meta FAQ Почему бы не загружать изображения кода/ошибок при задании вопроса?