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
accumulator.vhd
test_accumulator.vhd
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:
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: