generische Beschreibung eines multipliers mit preadder

#3430392
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;
Gast #3430747
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren