Forum: FPGA, VHDL & Co. generische Beschreibung eines multipliers mit preadder


von Otto N. (gelenkeharald)


Lesenswert?

Hallo,

mein Ziel ist es ein generisches Modul zu schreiben, welches einen 
multiplier mit einem preadder in eine Struktur abbildet mit so wenig wie 
möglich dsp slices (konkret im xilinx spartan6)

dsp slices haben neben den multipliziereingängen noch pre- und post-add 
eingänge und diverse andere

Leider spuckt mir die Synthese mit dem vorliegenden vhdl code eine 
struktur mit 2 dsp slices aus. im ersten dsp slice wird addiert und im 
zweiten multipliziert. hat jemand eine idee wie ich der synthese 
klarmachen kann, dass sie auch den preadd eingang benutzten soll, ohne 
das ich den dsp slice direkt instantiieren muss?

für jeden tipp bin ich sehr dankbar

1
entity dsp is
2
   generic(
3
      WIDTH_G : integer := 17
4
   );
5
   Port(clk_i    : in  std_logic;
6
        a_i      : in  unsigned(WIDTH_G - 1 downto 0);
7
        b_i      : in  unsigned(WIDTH_G - 1 downto 0);
8
        d_i      : in  unsigned(WIDTH_G - 1 downto 0);
9
        result_o : out unsigned(2 * WIDTH_G - 1 downto 0)
10
   );
11
   attribute USE_DSP48 : string;
12
   attribute USE_DSP48 of dsp : entity is "YES";
13
end dsp;
14
15
architecture syn of dsp is
16
   signal a_q, b_q, d_q : unsigned(WIDTH_G - 1 downto 0)     := (others => '0');
17
   signal result        : unsigned(2 * WIDTH_G - 1 downto 0) := (others => '0');
18
   
19
20
begin
21
   process(clk_i)
22
   begin
23
      if rising_edge(clk_i) then
24
         a_q    <= a_i;
25
         b_q    <= b_i;
26
         d_q    <= d_i;
27
         
28
         result <= a_q * (b_q + d_q)
29
      end if;
30
   end process;
31
   result_o <= result;
32
33
end syn;

von daniel__m (Gast)


Lesenswert?

hi,

sieht eigentlich und grundsätzlich gut aus: Bit-Breiten passen.

Was sagt den der Synthese-Report, darin gibt es oft "ADVICEs", wie z.b. 
(Zwischen-)Register für den Pre-Adder nutzen.


Mal das Template zum DSP angeschaut (aus dem User Guide):
ISE → Edit → Language Templates → VHDL || Verilog → Device
Primitive Instantiation → FPGA → Spartan-6 → Arithmetic
Functions → Multi-Functional, Cascadable, 48-bit Output,
Arithmetic Block (DSP48A1)

oder mal im XST-Guide unter Coding-Guideline für DSP schauen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.