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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.