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?
Gast
#4408730
warum sollte das nicht gehen? Du kannst sie ja mal von Hand platzieren.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.