8-bit full adder issue...

M

Marco De Luca

Guest
stavo seguendo la lezione del mio insegnante e ho copiato il suo codice. Il suo compilatore
non ha dato alcun avviso o errore, ma quando provo a compilarlo con my
PC, viene visualizzato un avviso sui componenti non limitati. ci ho provato
usa anche std_logic invece di bit, ma niente (idk ho ​​provato tutto).
Sto iniziando a odiare vhdl e non so cosa devo fare. Ragazzi
hai qualche idea?
Grazie a tutti in anticipo

SCRIPT 1
entity addern is
generic (enne: integer:=8);
port( c_in: in bit;
x_in: in bit_vector (enne-1 downto 0);
y_in: in bit_vector (enne-1 downto 0);
c_out, s: out bit;
s_out: out bit_vector (enne-1 downto 0)
);
end entity;
-- quello che ho fatto qui è definire praticamente una serie di 8 full adder, praticamente lo posso immaginare come una black box in cui all\'interno ho tutti i componenti
-- che sto per andare a definire all\'interno dell\'architecture
architecture archi of addern is
signal carry_chain : bit_vector (enne-2 downto 0);

component cfa is
port(
a: in bit;
b: in bit;
ci:in bit;
s: out bit;
co: out bit
);
end component;
begin
--qui è necessario fare attenzione perchè tutti i blocchetti non sono uguali, i due estremi non sono collegati a nulla, mentre quelli interni invece sono collegati tra di loro
gen_stat: for index in 0 to (enne-1) generate
--fino all\'end generate qui è come se stessimo mettendo uno dopo l\'altro n pezzi.
--come già detto abbiamo 3 differenti casi di blocchetti: estremo destro, estremo sinistro e interni:
begin
prima_cella:if (index=0) generate
begin
cella_0: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>c_in,
s=>s_out(index),
co=>carry_chain(index)
);
end generate;
ultima_cella:if (index=(enne-1)) generate
begin
cella_n: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>carry_chain(index-1),
s=>s_out(index),
co=>c_out
);
end generate;

altre_celle:if ((index/=0) and (index/=(enne-1)))generate
begin
celle: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>carry_chain(index-1),
s=>s_out(index),
co=>carry_chain(index)
);
end generate;
end generate;
end architecture;





TESTBENCH (SCRIPT2)
entity tb is
end entity;

architecture struct of tb is
signal add1,add2,somma : bit_vector (7 downto 0);
signal riporto : bit;
begin
sommatore: entity work.addern
generic map (enne=>8)
port map(x_in=>add1, y_in=>add2, c_in=>\'0\',c_out=>riporto, s_out=>somma);

process is
begin
add1<=\"00000000\";
add2<=\"00000000\";
wait for 50 ns;
add1<=\"00001100\";
add2<=\"11100000\";
wait for 50 ns;
add1<=\"00011100\";
add2<=\"00011111\";
wait for 50 ns;
add1<=\"00001111\";
add2<=\"11100000\";
wait for 50 ns;
add1<=\"01111111\";
add2<=\"00000111\";
wait for 50 ns;
add1<=\"00011100\";
add2<=\"00010000\";
wait for 50 ns;
add1<=\"01110010\";
add2<=\"00000111\";
wait for 50 ns;
add1<=\"00111100\";
add2<=\"01111100\";
wait for 50 ns;
wait;
end process;
end architecture;


ERRORS:
adder_n.vhd:35:40:warning: component instance \"cella_sin\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))
adder_n.vhd:45:41:warning: component instance \"cella_des\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))
adder_n.vhd:56:40:warning: component instance \"celle\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))
 
On Monday, April 17, 2023 at 11:36:46 AM UTC-4, Marco De Luca wrote:
stavo seguendo la lezione del mio insegnante e ho copiato il suo codice. Il suo compilatore
non ha dato alcun avviso o errore, ma quando provo a compilarlo con my
PC, viene visualizzato un avviso sui componenti non limitati. ci ho provato
usa anche std_logic invece di bit, ma niente (idk ho ​​provato tutto).
Sto iniziando a odiare vhdl e non so cosa devo fare. Ragazzi
hai qualche idea?
Grazie a tutti in anticipo

SCRIPT 1
entity addern is
generic (enne: integer:=8);
port( c_in: in bit;
x_in: in bit_vector (enne-1 downto 0);
y_in: in bit_vector (enne-1 downto 0);
c_out, s: out bit;
s_out: out bit_vector (enne-1 downto 0)
);
end entity;
-- quello che ho fatto qui è definire praticamente una serie di 8 full adder, praticamente lo posso immaginare come una black box in cui all\'interno ho tutti i componenti
-- che sto per andare a definire all\'interno dell\'architecture
architecture archi of addern is
signal carry_chain : bit_vector (enne-2 downto 0);

component cfa is
port(
a: in bit;
b: in bit;
ci:in bit;
s: out bit;
co: out bit
);
end component;
begin
--qui è necessario fare attenzione perchè tutti i blocchetti non sono uguali, i due estremi non sono collegati a nulla, mentre quelli interni invece sono collegati tra di loro
gen_stat: for index in 0 to (enne-1) generate
--fino all\'end generate qui è come se stessimo mettendo uno dopo l\'altro n pezzi.
--come già detto abbiamo 3 differenti casi di blocchetti: estremo destro, estremo sinistro e interni:
begin
prima_cella:if (index=0) generate
begin
cella_0: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>c_in,
s=>s_out(index),
co=>carry_chain(index)
);
end generate;
ultima_cella:if (index=(enne-1)) generate
begin
cella_n: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>carry_chain(index-1),
s=>s_out(index),
co=>c_out
);
end generate;

altre_celle:if ((index/=0) and (index/=(enne-1)))generate
begin
celle: component cfa
port map(a=>x_in(index),
b=>y_in(index),
ci=>carry_chain(index-1),
s=>s_out(index),
co=>carry_chain(index)
);
end generate;
end generate;
end architecture;





TESTBENCH (SCRIPT2)
entity tb is
end entity;

architecture struct of tb is
signal add1,add2,somma : bit_vector (7 downto 0);
signal riporto : bit;
begin
sommatore: entity work.addern
generic map (enne=>8)
port map(x_in=>add1, y_in=>add2, c_in=>\'0\',c_out=>riporto, s_out=>somma);

process is
begin
add1<=\"00000000\";
add2<=\"00000000\";
wait for 50 ns;
add1<=\"00001100\";
add2<=\"11100000\";
wait for 50 ns;
add1<=\"00011100\";
add2<=\"00011111\";
wait for 50 ns;
add1<=\"00001111\";
add2<=\"11100000\";
wait for 50 ns;
add1<=\"01111111\";
add2<=\"00000111\";
wait for 50 ns;
add1<=\"00011100\";
add2<=\"00010000\";
wait for 50 ns;
add1<=\"01110010\";
add2<=\"00000111\";
wait for 50 ns;
add1<=\"00111100\";
add2<=\"01111100\";
wait for 50 ns;
wait;
end process;
end architecture;


ERRORS:
adder_n.vhd:35:40:warning: component instance \"cella_sin\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))
adder_n.vhd:45:41:warning: component instance \"cella_des\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))
adder_n.vhd:56:40:warning: component instance \"celle\" is not bound
adder_n.vhd:15:14:warning: (in default configuration of addern(archi))

Remove the extra \"begin\" statements after each generate (in 4 places). For example:

gen_stat: for index in 0 to (enne-1) generate
--REMOVE begin

--Marc
 
On Monday, April 17, 2023 at 5:35:10 PM UTC-4, Marc Guardiani wrote:
On Monday, April 17, 2023 at 11:36:46 AM UTC-4, Marco De Luca wrote:
stavo seguendo la lezione del mio insegnante e ho copiato il suo codice.. Il suo compilatore
non ha dato alcun avviso o errore, ma quando provo a compilarlo con my
PC, viene visualizzato un avviso sui componenti non limitati. ci ho provato
usa anche std_logic invece di bit, ma niente (idk ho ​​provato tutto).
Sto iniziando a odiare vhdl e non so cosa devo fare. Ragazzi
hai qualche idea?
Grazie a tutti in anticipo

<snip vhdl code>

Remove the extra \"begin\" statements after each generate (in 4 places). For example:
gen_stat: for index in 0 to (enne-1) generate
--REMOVE begin

--Marc

OK, if you haven\'t gotten it yet. Here\'s another hint:
You have to define an entity named cfa that does your one bit adder.

--Marc
 

Welcome to EDABoard.com

Sponsor

Back
Top