Nu när jag är sjuk så tänkte jag friska upp mina VHDL kunskaper.
Så tog och gjorde ett projekt in ISE WebPack och tänkte börja enkelt med en 16 bitars multiplikator för komplexa tal som start på en enkel FFT implementation.
Jag och gjort så blev koden såhär:
Kod: Markera allt
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
-- Complex multiplication: (a + bi) * (c + di) = (ac - bd) + (ad + bc)i
entity cmul_16to32 is
port (
ar: in signed (15 downto 0); -- Real input a of the first term
bi: in signed (15 downto 0); -- Imaginary input b of the first term
cr: in signed (15 downto 0); -- Real input c of the second term
di: in signed (15 downto 0); -- Imaginary input d of the second term
yr: out signed (31 downto 0); -- Real output
yi: out signed (31 downto 0) -- Imaginary output
);
end cmul_16to32;
architecture Behavioral of cmul_16to32 is
signal res_ac : signed (31 downto 0);
signal res_bd : signed (31 downto 0);
signal res_ad : signed (31 downto 0);
signal res_bc : signed (31 downto 0);
begin
res_ac <= ar * cr;
res_bd <= bi * di;
res_ad <= ar * di;
res_bc <= bi * cr;
yr <= res_ac - res_bd;
yi <= res_ad + res_bc;
end Behavioral;
Den är ganska självsägande så jag använder mer av FPGAn än det finns, så jag kollar i rapporten vad som jag har för lite av för detta.
Då säger den såhär: "Number of bonded IOBs: 128 of 83 - 153% OVERMAPPED", så jag använder för många IOBs.
Första frågan, kan någon förklara lite varför min design drar så många IOBs?
Andra frågan, gör jag något med en vektorbredd på 32 bitar så får jag samma error - så hur mappar vektorbredd till IOBs?
Hjälp en FPGA nybörjare i hårdvaruvärlden!