Initial commit
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
ARCHITECTURE noPipe OF pipelineAdder IS
|
||||
|
||||
constant stageBitNb : positive := sum'length/stageNb;
|
||||
subtype stageOperandType is signed(stageBitNb-1 downto 0);
|
||||
type stageOperandArrayType is array(stageNb-1 downto 0) of stageOperandType;
|
||||
subtype carryType is std_ulogic_vector(stageNb downto 0);
|
||||
|
||||
signal a_int, b_int, sum_int : stageOperandArrayType;
|
||||
signal carryIn : carryType;
|
||||
|
||||
COMPONENT parallelAdder
|
||||
GENERIC (
|
||||
bitNb : positive := 32
|
||||
);
|
||||
PORT (
|
||||
sum : OUT signed (bitNb-1 DOWNTO 0);
|
||||
cIn : IN std_ulogic ;
|
||||
cOut : OUT std_ulogic ;
|
||||
a : IN signed (bitNb-1 DOWNTO 0);
|
||||
b : IN signed (bitNb-1 DOWNTO 0)
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
BEGIN
|
||||
|
||||
carryIn(0) <= cIn;
|
||||
|
||||
pipeline: for index in stageOperandArrayType'range generate
|
||||
a_int(index) <= a(index*stageBitNb+stageBitNb-1 downto index*stageBitNb);
|
||||
b_int(index) <= b(index*stageBitNb+stageBitNb-1 downto index*stageBitNb);
|
||||
partialAdder: parallelAdder
|
||||
GENERIC MAP (bitNb => stageBitNb)
|
||||
PORT MAP (
|
||||
a => a_int(index),
|
||||
b => b_int(index),
|
||||
sum => sum_int(index),
|
||||
cIn => carryIn(index),
|
||||
cOut => carryIn(index+1)
|
||||
);
|
||||
sum(index*stageBitNb+stageBitNb-1 downto index*stageBitNb) <= sum_int(index);
|
||||
end generate pipeline;
|
||||
|
||||
cOut <= carryIn(carryIn'high);
|
||||
|
||||
END ARCHITECTURE noPipe;
|
||||
Reference in New Issue
Block a user