Вывод «UUU» в ModelSim для определенного вывода

#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», когда другие; Я получил тот же результат в моделях. Я не понимаю: