Oppure

Loading
15/05/11 15:24
Manu89
Buongiorno!
Ho cercato sul forum, ma ho visto che non c'è nulla riguardo il VHDL, però potrebbe esserci qualcuno che lo conosce.
Sono diversi giorni che sto letteralmente sclerando per un problema di simulazione.
Dovrei fare un semplice registro che inverte il byte che gli arriva in ingresso.
Dalla simulazione dell'oggetto interno sembrerebbe funzionare, ma appena lo inserisco in un testbench non riesco a farlo comunicare fuori. Ora vi posto il codice, ho commentato dove potrebbe essere il problema, cioè, wordout è sempre Undefined nella simulazione.
Ho trasferito il registro invertitore nel testbench solo per vedere i nodi interni
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;

entity tb_reverseline is
  
end tb_reverseline;

architecture tb of tb_reverseline is
  
  --component reverseline
--    port(ingresso, rst_n, clk, en : in std_logic;
--         uscita : out std_logic);
--  end component;
  
  signal wordin : std_logic_vector(7 downto 0) := "10011010";
  signal wordout: std_logic_vector(7 downto 0);
  signal clk_0  : std_logic := '0';
  signal start  : std_logic;
  signal rst_sys: std_logic;
  signal Q    : std_logic_vector(7 downto 0);
  
  begin
    --reverser: reverseline
--      port map(ingresso => wordin(7),
--               rst_n => rst_sys,
--               clk => clk_0,
--               en => start,
--               uscita => wordout(0));
                         
  clk_0 <= not clk_0 after 10 ns;
               
  reset_wave: process
    begin

    rst_sys <= '0';
    wait for 42 ns;
    rst_sys <= '1';
    wait for 1000 ns;

  end process reset_wave;
  
  enable_wave: process
    begin
      
    start <= '1';
    wait for 10 ns;
    start <= '0';
    wait for 54 ns;
    start <= '1';
    wait for 500 ns;
    start <= '0';
    
  end process enable_wave;

  -- questo process rappresenta nient'altro che 2 buffer 
  -- uno all'ingresso e uno all'uscita del registro invertitore
  -- è proprio questo che mi dà il problema
  trasmissione: process(clk_0,rst_sys,start)
    variable c: integer := 0;
    begin
      
       if rising_edge(clk_0) and rst_sys = '1' then
        if start = '1' then
          if c = 8 then
            c := 0;
            wordout(0) <= '0';
          else
          c := c + 1;
          wordin(0) <= wordin(1) xor wordin(6);
          wordout(0) <= Q(Q'left);
          for i in 0 to 6 loop
            wordin(i+1) <= wordin(i);
            wordout(i+1) <= wordout(i);
          end loop;
          end if;
        end if;
      end if;
   
   end process trasmissione; 
   
   -- questo è il registro invertitore
   rx : process(CLK_0, RST_sys, start)
    --variabile che fa scattare l'operazione di conversione; 
    --potrebbe diventare un contatore
      variable count: integer;
      
      begin  
    --effetto del reset e dell'enable asincrono
        if RST_SYS = '0' or start = '0' then
          Q <= (others => '0');
          count := 0;
        elsif rising_edge(clk_0) then 
          count := count + 1;
          if count = 9 then
            for i in 0 to Q'left loop
              Q(i) <= Q(Q'left - i);
            end loop;
            count := 0;
            wordout(0) <= '1';
          else
            Q(0) <= wordin(7);
            for i in 1 to Q'left loop
              Q(i) <= Q(i-1);
            end loop;
            --wordout(0) <= Q(Q'left);
          end if;
          
         
        end if;
        
      end process rx;
      
      
   
 end architecture tb;
  
aaa