Forum: FPGA, VHDL & Co. DSP48 Kaskadierung für FIR Filter auf Zynq7010


von Martin O. (ossi-2)


Lesenswert?

Ich baue ein FIR Filter mit 72 Taps. Der zentrale Code ist:

integer k ;
always @(posedge dac_clk_i) begin
  for(k=0 ; k<nTaps-1 ; k=k+1 ) begin
    A1[k] <= A2[k+1] ;
    A2[k] <= A1[k] ;
    D1[k] <= FIRinputD ;
    AD1[k] <= $signed(A2[k]+D1[k]) ;
    M1[k] <= AD1[k]*bk[k] ;
    P1[k] <= M1[k] + P1[k+1]  ; // works fully signed infers dsp48e1
    end
  end

Dabei wird das A-Signal kaskadiert (2 Register pro Stufe) und
das P1 Signal (1 Register pro Stufe). Vivado erkennt auch, dass
jede Stufe mit einem einzelnen DSP48 Block realisiert werden kann und
kaskadiert immer ACOUT->ACIN und PCOUT->PCIN, aber das ganze
nur 10 Stufen lang, dann wird ein zusätzlices "Bypass" Schiebegister
benutzt, um das A-Signal für die folgende Kette zu liefern. Das
passiert vermutlich, weil das nächste DSP48 slice nicht
kaskadiert werden kann. Das Design als solches funktioniert
einwandfrei. Die 10-kaskadierten DSP48 Blöcke liegen aber
im von Vivado angezeigten Floorplan teils an unterschiedlichen
Positionen, und mitunter werden an einigen Stellen DSP48 Blöcke
kaskadiert und an anderen nicht. Ich erkenne keine Systematik.

Hier meine Fragen:
Ist der Floorplan des Zynq7010 anders als der,der von Vivado angezeigt 
wird?

Kann man FIR Filter mit Länge>10 durch Kaskadieren vollständig in
DSP48 slices realisieren, ohne zusätzliche Logik?

von Michael W. (Gast)


Lesenswert?

warum sollte das nicht gehen? Du kannst sie ja mal von Hand platzieren.

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.