* Fix scaler

- Add generic to select between signed and unsigned
This commit is contained in:
Greek 2020-04-29 17:34:16 +02:00
parent 89182e8060
commit 29036ded6f
2 changed files with 39 additions and 18 deletions

View File

@ -12,7 +12,8 @@ entity mult is
generic ( generic (
A_WIDTH : integer := 12; A_WIDTH : integer := 12;
B_WIDTH : integer := 4; B_WIDTH : integer := 4;
PIPELINE_STAGES : integer := 1 PIPELINE_STAGES : integer := 1;
UNSIGNED : boolean := true
); );
port ( port (
clk : in std_logic; clk : in std_logic;
@ -27,19 +28,37 @@ architecture arch of mult is
begin begin
MULT_MACRO_inst : MULT_MACRO mult_gen : if (UNSIGNED = true) generate
generic map ( MULT_MACRO_inst : MULT_MACRO
DEVICE => "7SERIES", -- Target Device: "VIRTEX5", "7SERIES", "SPARTAN6" generic map (
LATENCY => PIPELINE_STAGES, -- Desired clock cycle latency, 0-4 DEVICE => "7SERIES", -- Target Device: "VIRTEX5", "7SERIES", "SPARTAN6"
WIDTH_A => A_WIDTH, -- Multiplier A-input bus width, 1-25 LATENCY => PIPELINE_STAGES, -- Desired clock cycle latency, 0-4
WIDTH_B => B_WIDTH) -- Multiplier B-input bus width, 1-18 WIDTH_A => A_WIDTH+1, -- Multiplier A-input bus width, 1-25
port map ( WIDTH_B => B_WIDTH+1) -- Multiplier B-input bus width, 1-18
P => P, -- Multiplier ouput bus, width determined by WIDTH_P generic port map (
A => A, -- Multiplier input A bus, width determined by WIDTH_A generic P(A_WIDTH+B_WIDTH+1 downto A_WIDTH+B_WIDTH) => open,
B => B, -- Multiplier input B bus, width determined by WIDTH_B generic P(A_WIDTH+B_WIDTH-1 downto 0) => P,
CE => '1', -- 1-bit active high input clock enable A => "0" & A,
CLK => clk, -- 1-bit positive edge clock input B => "0" & B,
RST => '0' -- 1-bit input active high reset CE => '1',
); CLK => clk,
RST => '0'
);
else generate
MULT_MACRO_inst : MULT_MACRO
generic map (
DEVICE => "7SERIES", -- Target Device: "VIRTEX5", "7SERIES", "SPARTAN6"
LATENCY => PIPELINE_STAGES, -- Desired clock cycle latency, 0-4
WIDTH_A => A_WIDTH, -- Multiplier A-input bus width, 1-25
WIDTH_B => B_WIDTH) -- Multiplier B-input bus width, 1-18
port map (
P => P,
A => A,
B => B,
CE => '1',
CLK => clk,
RST => '0'
);
end generate;
end architecture; end architecture;

View File

@ -26,7 +26,8 @@ architecture arch of scaler is
generic ( generic (
A_WIDTH : integer := 12; A_WIDTH : integer := 12;
B_WIDTH : integer := 4; B_WIDTH : integer := 4;
PIPELINE_STAGES : integer := 1 PIPELINE_STAGES : integer := 1;
UNSIGNED : boolean := true
); );
port ( port (
clk : in std_logic; clk : in std_logic;
@ -42,7 +43,8 @@ begin
generic map( generic map(
A_WIDTH => DATA_WIDTH, A_WIDTH => DATA_WIDTH,
B_WIDTH => FACTOR_WIDTH, B_WIDTH => FACTOR_WIDTH,
PIPELINE_STAGES => PIPELINE_STAGES PIPELINE_STAGES => PIPELINE_STAGES,
UNSIGNED => true
) )
port map( port map(
clk => clk, clk => clk,