Chiedo scusa per essermi spiegato male.
Posto il codice così si capisce quello che voglio:
- Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.numeric_std.all;
--use ieee.std_logic_arith.all;
entity moltiplicatore is
generic (size : integer :=12);
port(
m1 : in signed(size-1 downto 0);
m2 : in signed(size-1 downto 0);
out_parity :out signed(size-1 downto 0)
);
end moltiplicatore;
architecture moltiplicatore of moltiplicatore is
component mymux
port(
a : in signed (size-1 downto 0);
b : in signed (size-1 downto 0);
s : in std_logic;
out_mux : out signed (size-1 downto 0)
);
end component;
component select_mux
port(
msb_in: in signed (size-1 downto 0);
msb_out : out std_logic
);
end component;
signal m_full,m_round,one : signed (2*size-1 downto 0);
signal aux1 : std_logic;
signal msb,lsb : signed (size-1 downto 0);
begin
m_full<=m1*m2;
m_round<=m_full + "000000000000100000000000";
msb<= m_round(2*size-1 downto size);
lsb<= m_round(size-1 downto 0);
blocco1 : mymux
port map(msb,lsb,aux1,out_parity);
blocco2:select_mux
port map(msb,aux1);
end moltiplicatore;
Praticamente vorrei realizzare un moltiplicatore rounding (NxN=N) in cui mi serve sommare ad m_round
un 1 shiftato a sinistra di 2*size-1 posizioni.
Il problema è che non so come scrivere 1 formato da size elementi per poi shiftarlo.
Per cui al momento ho scritto "000000000000100000000000"...