Codice per accumulatore in VHDL

BuonSalve

Nuovo Utente
1
0
Ciao a tutti!! :ciaociao:
Mi è stato chiesto come esercizio di realizzare un accumulatore a N bit in VHDL, ma dato che ho cominciato solo da pochi giorni a usare questo linguaggio, non riesco a rendere il mio codice funzionante. :grat: Devo usare come componenti un adder a N bit e un registro a N bit, che ho già realizzato e che funzionano perfettamente. Il mio codice è questo:

cfg_accumulator.vhd
Codice:
CONFIGURATION cfg OF accumulator_tb IS   FOR accumulator_test
      -- use default configuration
   END FOR;
END cfg;

accumulator.vhd
Codice:
LIBRARY IEEE;USE IEEE.std_logic_1164.all;


ENTITY accumulator is
	generic (N: Positive :=8);
	port (
		clk		: in std_logic;
		reset	: in std_logic;
		d		: in std_logic_vector(N-1 downto 0);
		q		: out std_logic_vector(N-1 downto 0));
END accumulator;		  


ARCHITECTURE arc of accumulator is


COMPONENT registro  
	port (						 				 
		clk		: in std_logic;
		reset	: in std_logic;
		d		: in std_logic_vector(N-1 downto 0);
		q		: out std_logic_vector(N-1 downto 0)
		);
END COMPONENT registro;	 


component adder				 
   port( a          : in  std_logic_VECTOR (N-1 downto 0);
         b          : in  std_logic_VECTOR (N-1 downto 0);
         carry_in   : in  std_logic;
         s          : out std_logic_VECTOR (N-1 downto 0);
         carry_out  : out std_logic);	  
end component adder;


signal 	  reg_temp_in: std_logic_VECTOR (N-1 downto 0);
signal	  adder_temp_in: std_logic_VECTOR (N-1 downto 0);
		 
begin		
		add : adder
		port map(
			a			=> adder_temp_in,
			b			=> d,
			carry_in	=> '0',
			s			=> reg_temp_in); 				
		reg : registro
		port map(					 
			clk		 => clk,
			reset	 => reset,	
			d		 => reg_temp_in,
			q		 => adder_temp_in);  			 
			
END ARCHITECTURE arc;

test_accumulator.vhd
Codice:
LIBRARY IEEE;USE IEEE.std_logic_1164.all;


ENTITY accumulator_tb IS


END accumulator_tb;


ARCHITECTURE accumulator_test OF accumulator_tb IS


COMPONENT accumulator   
	generic (N: Positive :=8);
	port (
		clk		: in std_logic;
		reset	: in std_logic;
		d		: in std_logic_vector(N-1 downto 0);
		q		: out std_logic_vector(N-1 downto 0));


   END COMPONENT accumulator;
   
   ----------------------------------------------------------------------------	  
   CONSTANT N		:  INTEGER	:= 8;
   CONSTANT MckPer  :  TIME     := 200 ns;  -- Master Clk period
   CONSTANT TestLen :  INTEGER  := 28;      -- No. of Count (MckPer/2) for test




-- I N P U T     S I G N A L S


   SIGNAL   clk   : std_logic := '0';
   SIGNAL   reset : std_logic := '0';
   SIGNAL   d     : std_logic_vector(N-1 downto 0) := "10101010";


-- O U T P U T     S I G N A L S


   SIGNAL   q     : std_logic_vector(N-1 downto 0);


   SIGNAL clk_cycle : INTEGER;
   SIGNAL Testing: Boolean := True;


BEGIN


   I : accumulator PORT MAP(clk, reset, d, q);


   ----------------------------------------------------------------------------


   -- Generates clk


      clk     <= NOT clk AFTER MckPer/2 WHEN Testing ELSE '0';


   -- Runs simulation for TestLen cycles;


   Test_Proc: PROCESS(clk)
      VARIABLE count: INTEGER:= 0;
   BEGIN
     clk_cycle <= (count+1)/2;


     CASE count IS
          WHEN   4  => reset <= '1';
          --WHEN  11  => d     <= "00000000" AFTER 2 ns;
          --WHEN  17  => d     <= "11111111" AFTER 2 ns;
          WHEN  24  => reset <= '0';


          WHEN (TestLen - 1) =>   Testing <= False;
          WHEN OTHERS => NULL;
     END CASE;


     count:= count + 1;
   END PROCESS Test_Proc;


END accumulator_test;


Spero proprio che qualcuno possa aiutarmi. So che certamente sto facendo qualche errore che un esperto riterrà "banale" :look:, ma mi sarebbe davvero utile sapere dove sto sbagliando, perchè al momento non riesco a capire quale sia il problema! :asd: Grazie a chiunque vuole aiutarmi!! :ciaociao:
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili