2017-05-16 6 views
0

Vous voyez, j'ai déjà fini de décrire un ALU sur vhdl avec modelsim, mais le test ne semble pas mettre à jour la solution, quand je vois la simulation, la réponse du circuit 32 bits dit toujours "UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" Je ne sais pas ce que j'ai écrit mal sur le banc d'essai aussi il y a un avertissement sur le compilateur de la réponse du circuit qui ditVHDL testbench ne change pas de sortie ALU 32bit

** Attention: (vsim-8683) UNINITIALIZED port de sortie/alu_tb/ALU_test/res (32 downto 0) n'a pas de pilote. Ce port apportera de la valeur (UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU) au réseau de signaux.

et voici le code testbench:

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; 

je sais que l'erreur semble trivial « res est non initialisé » mais je suis parti de façon VHDL trop longtemps et honnêtement ne sais pas comment arrête ça, des idées?

+2

La réponse à cette question est à l'intérieur de votre composant - 'res' est en valeur, donc si elle est connectée à rien à l'intérieur, il n'est pas entraîné à l'intérieur du module. – Staszek

Répondre

1

Tout d'abord

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

Bad .. ne pas utiliser. Vous n'avez même pas besoin d'eux dans ce fichier. Si vous avez besoin d'un calcul, utilisez numeric_std.

Ensuite: l'erreur est dans le composant ALU, car cela devrait «conduire» res. Mais puisque vous n'avez pas publié le code, nous ne pouvons pas vous aider (encore).

p.s. Actuellement, vous n'avez plus besoin de définir un composant en VHDL. Vous pourriez simplement écrire:

ALU_test: entity work.ALU port map