#vhdl #modelsim #quartus
#vhdl #modelsim #квартус
Вопрос:
Сердечные приветствия, ваша помощь сослужила мне хорошую службу. У меня такая ситуация:
Я создаю ALU, который добавляет, вычитает, умножает (3X2 бита) и выполняет логические операции. Для этого я использую библиотеки «IEEE.std_logic_arith.all», «IEEE.std_logic_unsigned.all» и «IEEE.numeric_std.all»; я сделал множитель отдельно, включил его в проект и «вызвал» его.
Проблема в множителе. Код, который я вам представлю, компилируется, однако моделирование RTL (в ModelSim) дает следующий ответ:
введите описание изображения здесь
Вывод «UUUUU» происходит именно тогда, когда указано «010», то есть вывод множителя.
Это код:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity alu is
port(
s: in std_logic_vector (2 downto 0);
a: in std_logic_vector (4 downto 0);
b: in std_logic_vector (4 downto 0);
ci: in std_logic;
co: out std_logic;
r: out std_logic_vector (4 downto 0);
f: out std_logic_vector (4 downto 0)
);
end alu;
architecture comportamiento of alu is
component multiplicador
port(
a: in std_logic_vector (2 downto 0);
b: in std_logic_vector (1 downto 0);
ci: in std_logic;
co: out std_logic;
r: out std_logic_vector (4 downto 0)
);
end component;
signal ri: std_logic_vector (4 downto 0);
begin
with s select
f<= a b when "000",
a-b when "001",
ri when "010",
a or b when "011",
a xor b when "100",
a and b when "101",
"00000" when others;
end comportamiento;
Я очень благодарен за вашу помощь.
Комментарии:
1. В вашем коде нет экземпляра объекта, только объявление компонента. Следовательно
ri
, он ни к чему не подключен и инициализируется"UUUUU"
точно так, как вы получаете в симуляции. Вам нужно создать экземпляр множителя.2. вау, да, моя ошибка. как мне вызвать вывод множителя в «with … s select … f<=»?
3. @Tricky (нет экземпляра компонента, даже с зарезервированным словом entity.)
4. как мне вызвать вывод множителя в «with … s select … f<=»? Связать сигнал
r1
как фактический для порта ‘r’ в карте портов компонентного экземпляра multiplicador.. Это уже вход для выходного мультиплексора f (выбранное назначение сигнала).5. Я что-то там прочитал и присвоил ему сигнал, поскольку «r» равно «out», код: signal ri: std_logic_vector (от 4 до 0); начать r<= ri; с помощью s выбрать f<= a b при «000», a-b при «001», ri, когда «010», a или b, когда «011», a xor b, когда «100», a и b, когда «101», «00000», когда другие; Я получил тот же результат в моделях. Я не понимаю: