DSP48 Kaskadierung für FIR Filter auf Zynq7010

OP #4407832
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?

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