Тестовый стенд VHDL не меняет вывод ALU 32bit

Видите ли, я уже закончил описывать ALU на VHDL с помощью modelsim, однако тестовый стенд, похоже, не обновляет решение, когда я вижу симуляцию, ответ 32-битной схемы всегда говорит "UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" Я не знаю, что я написал неправильно на testbench также есть предупреждение компилятора об ответе схемы, в котором говорится

** Предупреждение: (vsim-8683) Неинициализированный выходной порт /alu_tb/ALU_test/res(32 вниз до 0) не имеет драйвера. Этот порт будет вносить вклад (UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU) в сигнальную сеть.

и вот код тестового стенда:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity ALU_tb is        
end ALU_tb;

architecture bhv_ALU_tb of ALU_tb is
component ALU
    port(
        a, b: in std_logic_vector(31 downto 0);
        c: in std_logic;
        s: in std_logic_vector(3 downto 0);
        res: out std_logic_vector(32 downto 0));
end component;

signal a, b: std_logic_vector(31 downto 0);
signal c: std_logic;
signal s: std_logic_vector(3 downto 0);
signal re: std_logic_vector(32 downto 0);

begin 
    ALU_test: ALU port map (a => a, b => b, c => c, s => s, res => re);
process begin
    b <= "00000000000010100111010100011110";
    a <= "00000000011010000100110011101110";
    c <= '0';
    s <= "1111";
    wait for 2 ns;
    b <= "00000000000010100111010100011110";
    a <= "00000000011010000100110011101110";
    c <= '0';
    s <= "0100";
    wait for 2 ns;
    s <= "0000";
    wait for 2 ns;
    s <= "0001";
    wait for 2 ns;
    s <= "0010";
    wait for 2 ns;
    s <= "0011";
    wait for 2 ns;
    s <= "0100";
    wait for 2 ns;
    s <= "0101";
    wait for 2 ns;
    s <= "0110";
    wait for 2 ns;
    s <= "0111";
    wait for 2 ns;
    s <= "1000";
    wait for 2 ns;
    s <= "1001";
    wait for 2 ns;
    s <= "1010";
    wait for 2 ns;
    s <= "1011";
    wait for 2 ns;
    s <= "1100";
    wait for 2 ns;
    s <= "1101";
    wait for 2 ns;
    s <= "1110";
    wait for 2 ns;
    s <= "1111";
    wait for 2 ns;
end process;
end bhv_ALU_tb;

я знаю, что ошибка кажется тривиальной «res не инициализирован», но я слишком долго не использовал vhdl и, честно говоря, не знаю, как это исправить, есть идеи?


person user145708    schedule 16.05.2017    source источник
comment
Ответ на этот вопрос находится внутри вашего компонента - res является значением out, поэтому, если он не связан ни с чем внутри него, он не управляется изнутри модуля.   -  person Staszek    schedule 16.05.2017


Ответы (1)


во-первых

use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

Плохо.. не используйте. Они вам даже не нужны в этом файле. Если вам когда-нибудь понадобится арифметика, используйте numeric_std.

Тогда: ошибка в компоненте ALU, потому что должен "гонять" res. Но поскольку вы не опубликовали код этого, мы не можем вам помочь (пока).

p.s. в настоящее время вам больше не нужно определять компонент в VHDL. Вы могли бы просто написать:

ALU_test: entity work.ALU port map
person JHBonarius    schedule 16.05.2017