ALU in VHDL - come si può descrivere ?

Posted:
10 Jan 2013, 22:50
by execute
Ciao a tutti,
come va?, intanto buon anno a tutti anche se in ritardo.
non so se avete letto su altra sezione: sto cercando di realizzare una semplice cpu con relativa alu utilizzando solamente integrati TTL.
ovviamente cercando sulla rete mi sono imbattuto su architetture di tutti i tipi e su alu realizzate e scritte in VHDL (che sto iniziando a studiare).
domanda. come si può descrivere una semplice alu 8bit in vhdl che possa eseguire le funzioni principali sia aritmetiche che booleane?
qualcuno potrebbe mostrarmi un esempio di codice?
vi ringrazio tanto.
Re: ALU in VHDL - come si può descrivere ?

Posted:
16 Jan 2013, 22:04
by deluca
ti mostro un semplice codice per descrivere una alu a 8bit:
- Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity simple_alu is
port(A,B : in signed(3 downto 0); -- input operands
Op : in unsigned(2 downto 0); -- Operation to be performed
R : out signed(3 downto 0) -- output of ALU
);
end simple_alu;
architecture Behavioral of simple_alu is
signal Reg1 : signed(3 downto 0) := (others => '0');
signal Reg2 : signed(3 downto 0) := (others => '0');
signal Reg3 : signed(3 downto 0) := (others => '0');
begin
alu:process(op,Reg1,Reg2,Reg3)
begin
case Op is
when "000" => Reg3 <= Reg1 + Reg2; -- somma
when "001" => Reg3 <= Reg1 - Reg2; -- sottrazione
when "010" => Reg3 <= Reg1 + 1; -- incr
when "011" => Reg3 <= Reg1 - 1; -- decr
when "100" => Reg3 <= not Reg1; -- NOT R1
when "101" => Reg3 <= Reg1 and Reg2; -- AND R1 R2
when "110" => Reg3 <= Reg1 or Reg2; -- OR R1 R2
when "111" => Reg3 <= Reg1 xor Reg2; -- XOR R1 R2
when others => NULL;
end case;
end process;
Reg1 <= A;
Reg2 <= B;
R <= Reg3;
end Behavioral;
Re: ALU in VHDL - come si può descrivere ?

Posted:
20 Jan 2013, 17:26
by execute
grazie deluca per il codice, proverò ad interpretarlo visto che ancora mastico pochissimo vhdl.
nel codice vedo descritta una alu che può fare un certo numero di operazioni aritmetiche e manipolazioni booleane.
non vedo nè la moltiplicazione, nè la divisione; domanda : come mai? non dovrebbe essere semplice a questo punto implementare anche queste operazioni ?
c'è un nesso allora con il fatto che molti microcontrollori non supportano la moltiplicazione e la divisione hardware e tutto è affidato al compilatore ? è veramente così difficile?
grazie