+ All Categories
Home > Documents > VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

Date post: 12-Jan-2017
Category:
Upload: bernd
View: 247 times
Download: 9 times
Share this document with a friend
112
9 Modellierung digitaler Filter Die digitale Signalverarbeitung ist eine Kernfunktion in Anwendungen, die von der Daten- kommunikation, der Sprach-, Audio-, und biomedizinischen Signalverarbeitung bis hin zur Automatisierungstechnik und Robotertechnik reichen. Umfangreiche Beispielübersichten zu Anwendungsbereichen der digitalen Signalverarbeitung sind z.B. in [70], [71], [72], [73] dargestellt. Programmierbare digitale Signalprozessoren (DSP) waren bisher die wesentli- chen Vertreter der Hardware-Plattformen mit sequentieller Befehlsabarbeitung. Mit der Verfügbarkeit von FPGAs, die Taktfrequenzen von über 100 MHz und mehreren Millionen Gatteräquivalente anbieten, nimmt deren Einsatz in der Signalverarbeitung zu. Insbesonde- re auch die parallele Implementierung einer großen Anzahl von Multiplizierer- Akkumulator-Blöcken (MAC-Einheiten) stützt die Anwendungsvorteile der FPGAs für rechenintensive Algorithmen (Xilinx Spartan-6 [91]; Altera Stratix III [82]). Eine der häufigsten Anwendungen in der digitalen Signalverarbeitung ist die Filterung von Signalen zur Unterdrückung von Störanteilen oder zur Selektion von Spektralanteilen. Die synthesefähige Modellierung der zwei Hauptklassen von digitalen Filtern wird in diesem Kapitel vorgestellt: Finite Impulse Response Filter (FIR-Filter) und Infinite Impulse Res- ponse Filter (IIR-Filter) [74]. Exemplarische Entwurfsbeispiele demonstrieren, wie paral- lele oder sequentielle Filterstrukturen mit VHDL im RTL-Codierstil auf FPGA-Hardware abgebildet werden. Die Modelle für diese digitalen Filter können auch als Entwurfsmuster für Arithmetik-Implementierungen in anderen Signalflussanwendungen genutzt werden. Hier sei auf die digitale Bildverarbeitung mit linearen Filtern hingewiesen, die auf Nach- barschaftsoperationen mit strukturierenden Elementen in Form von Bewertungsmatrizen beruhen, wie sie z.B. für die Objektkantenerkennung zum Einsatz kommen [76], [77]. Ausgangspunkt der Filtermodellierung sind Darstellungen mit zeitdiskreten Differenzen- gleichungen und mit z-Übertragungsfunktionen im Frequenzbereich. Grundlage für die VHDL-Beschreibungen bildet die vorzeichenbehaftete Festkommaarithmetik auf Basis des 2er-Komplements. Als Zahlendarstellung kommt hierbei das Q-Format mit Vorzeichen und Bruchzahlenanteil für Werte im Intervall -1 < x < 1 zum Einsatz. Das Q-Format hat sich bei der Softwareentwicklung für Festkomma-DSPs aufgrund der begrenzten Multiplikati- onsergebnisse bewährt und lässt sich mit dem Signaltyp signed der Bibliothek ieee.numeric_std umsetzen (vgl. Kap. 5.4 u. Kap. 5.5) [37], [42]. Gegenüber einer Ganzzahlendarstellung mit dem Signaltyp integer liefert eine Implementierung des Q- Formats zusätzlich eine Einarbeitung in die Vektorbreitendimensionierung von Funktions- blockschnittstellen und Operatoren, wie sie beim Entwurf komplexer Signalverarbei- tungssysteme mit dem Simulator und VHDL-Codegenerator „Xilinx System Generator for DSP“ genutzt werden [83]. Brought to you by | Brown University Rockefeller Library Authenticated | 128.148.252.35 Download Date | 6/11/14 8:46 PM
Transcript
Page 1: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

9 Modellierung digitaler Filter

Die digitale Signalverarbeitung ist eine Kernfunktion in Anwendungen, die von der Daten-

kommunikation, der Sprach-, Audio-, und biomedizinischen Signalverarbeitung bis hin zur

Automatisierungstechnik und Robotertechnik reichen. Umfangreiche Beispielübersichten

zu Anwendungsbereichen der digitalen Signalverarbeitung sind z.B. in [70], [71], [72], [73]

dargestellt. Programmierbare digitale Signalprozessoren (DSP) waren bisher die wesentli-

chen Vertreter der Hardware-Plattformen mit sequentieller Befehlsabarbeitung. Mit der

Verfügbarkeit von FPGAs, die Taktfrequenzen von über 100 MHz und mehreren Millionen

Gatteräquivalente anbieten, nimmt deren Einsatz in der Signalverarbeitung zu. Insbesonde-

re auch die parallele Implementierung einer großen Anzahl von Multiplizierer-

Akkumulator-Blöcken (MAC-Einheiten) stützt die Anwendungsvorteile der FPGAs für

rechenintensive Algorithmen (Xilinx Spartan-6 [91]; Altera Stratix III [82]).

Eine der häufigsten Anwendungen in der digitalen Signalverarbeitung ist die Filterung von

Signalen zur Unterdrückung von Störanteilen oder zur Selektion von Spektralanteilen. Die

synthesefähige Modellierung der zwei Hauptklassen von digitalen Filtern wird in diesem

Kapitel vorgestellt: Finite Impulse Response Filter (FIR-Filter) und Infinite Impulse Res-

ponse Filter (IIR-Filter) [74]. Exemplarische Entwurfsbeispiele demonstrieren, wie paral-

lele oder sequentielle Filterstrukturen mit VHDL im RTL-Codierstil auf FPGA-Hardware

abgebildet werden. Die Modelle für diese digitalen Filter können auch als Entwurfsmuster

für Arithmetik-Implementierungen in anderen Signalflussanwendungen genutzt werden.

Hier sei auf die digitale Bildverarbeitung mit linearen Filtern hingewiesen, die auf Nach-

barschaftsoperationen mit strukturierenden Elementen in Form von Bewertungsmatrizen

beruhen, wie sie z.B. für die Objektkantenerkennung zum Einsatz kommen [76], [77].

Ausgangspunkt der Filtermodellierung sind Darstellungen mit zeitdiskreten Differenzen-

gleichungen und mit z-Übertragungsfunktionen im Frequenzbereich. Grundlage für die

VHDL-Beschreibungen bildet die vorzeichenbehaftete Festkommaarithmetik auf Basis des

2er-Komplements. Als Zahlendarstellung kommt hierbei das Q-Format mit Vorzeichen und

Bruchzahlenanteil für Werte im Intervall -1 < x < 1 zum Einsatz. Das Q-Format hat sich

bei der Softwareentwicklung für Festkomma-DSPs aufgrund der begrenzten Multiplikati-

onsergebnisse bewährt und lässt sich mit dem Signaltyp signed der Bibliothek

ieee.numeric_std umsetzen (vgl. Kap. 5.4 u. Kap. 5.5) [37], [42]. Gegenüber einer

Ganzzahlendarstellung mit dem Signaltyp integer liefert eine Implementierung des Q-

Formats zusätzlich eine Einarbeitung in die Vektorbreitendimensionierung von Funktions-

blockschnittstellen und Operatoren, wie sie beim Entwurf komplexer Signalverarbei-

tungssysteme mit dem Simulator und VHDL-Codegenerator „Xilinx System Generator for

DSP“ genutzt werden [83].

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 2: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

240 9 Modellierung digitaler Filter

Dieses Kapitel gibt dem Leser die Methoden an die Hand, mit denen Signalflussanwendun-

gen je nach Datenrate in kompakte RTL-Modelle umgesetzt werden. Vorgestellt werden

Modellierungstechniken, die Symmetrieeigenschaften nutzen, um die Signallaufzeiten der

Arithmetikstufen zu verkürzen. Die Integration von Pipelining-Registerstufen wird als

Maßnahme zur Steigerung der Taktfrequenz für parallele Filterstrukturen demonstriert. Zur

Vermeidung von Überlaufeffekten der 2er-Komplementzahlen wird eine Skalierung des

Filterübertragungsverhaltens durchgeführt. Die Erweiterung des Q-Formats mit so genann-

ten Guard-Bits, die temporäre Integerergebnisanteile aufnehmen, liefert einen zusätzlichen

Überlaufschutz.

Die Zahlenrepräsentation im Q-Format unterstützt die Umsetzung der Erkenntnisse, die

durch Analysen der Auswirkungen einer Wortlängenwahl auf die Genauigkeit der Signal-

verarbeitung gewonnen werden. Es wird davon ausgegangen, dass der Leser Kenntnisse zu

Grundlagen des Filterentwurfs und zu den Darstellungsformen im Zeit- und Frequenzbe-

reich hat [70], [72].

Der erste Abschnitt behandelt die Realisierung von Filtern mit endlicher Reaktionszeit

(FIR-Filter), die aufgrund ihres linearen Phasengangs eine verzerrungsfreie Übertragung

bieten, wie sie für Audio- und nachrichtentechnische Anwendungen erforderlich ist. Dieser

spezielle Phasengang geht auf die Symmetrie der Filterkoeffizienten zurück, die durch das

Filterentwurfsverfahren bedingt ist und für eine Ressourcen sparende Implementierung von

parallelen Strukturen genutzt wird.

Der zweite Abschnitt stellt eine VHDL-Repräsentation von Filtern mit nicht endlichem

Einschwingverhalten (IIR-Filter) vor. Diese Filter besitzen aufgrund der internen Signal-

rückführungen Frequenzgänge, die im Vergleich zu FIR-Filtern bei gleicher Filterordnung

steilere Übergänge zwischen Sperr- und Durchlassbereich aufweisen. Ein zweistufiges

Skalierungsverfahren wird vorgestellt und auf zwei Filtermodelle mit Symmetrievorteilen

angewandt.

Der folgende Abschnitt 9.1 nimmt einen größeren Raum ein, da zur Einführung einige

Grundlagen der Filtermodellierung vorangestellt werden:

– Parallele FIR-Filterstrukturen mit den typischen Summen von Produkten.

– Die Zahlendarstellung im Q-Format für die binäre Addition und Multiplikation.

– Eine Skalierung mit normierten Koeffizienten zur Vermeidung von Überlaufeffekten.

– Eine Schnittstellensynchronisation zur Kopplung von unterschiedlichen Taktbereichen.

Als didaktisches Konzept wird die ausführliche Darstellung von VHDL-Modellen für die

Direktform und die Linear-Phasen-Struktur verfolgt. Diese eignen sich insbesondere als

Erprobungsbeispiele für die Modellierung von mehrstufiger Arithmetik mit gekoppelten

Prozessen, die die Arithmetik mit lokalen Variablen abbilden. Mit diesen parallelen Filter-

strukturen wird das Instrumentarium eines synthesefähigen VHDL-Entwurfs, das in den

vorherigen Kapiteln mit Einzelbeispielen eingeführt wurde, für Arithmetikanwendungen in

einem komplexeren Zusammenhang dargestellt und erweitert. Dabei werden Vektor-Arrays

zur Modellierung der parallelen Funktionselemente und der verketteten Stufen eingesetzt,

die sich mit for loops und Aggregaten bearbeiten lassen. Der Abschnitt zum Entwurf

der parallelen FIR-Filterstrukturen schließt mit der für die praktische Anwendung relevan-

ten transponierten Form.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 3: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

241 9.1 FIR-Filter

9.1 FIR-Filter

Dieser Abschnitt stellt parallele Filterstrukturen vor, die auf die Verarbeitung von Signalen

mit Abtastraten bis hin zur Systemtaktfrequenz ausgerichtet sind. Es ist dabei das Ziel, dass

mit jedem neuen in die Eingangsregisterstufe aufgenommenen Signalwert auch ein aktuali-

sierter Ausgangswert zur Verfügung gestellt wird. Für geringere Datenraten, wie z.B. in der

Audiosignalverarbeitung mit 48 kHz, bieten sich sequentiell ablaufende Berechnungen an,

die weniger Hardwareressourcen benötigen, da sie eine einzige Multiplizierer-Akku-

mulator-Einheit in aufeinander folgenden Rechenzyklen mehrfach nutzen. Hierzu zeigt

dieser Abschnitt zum Abschluss den Ansatz als Prozessorelement mit Arithmetik-

Datenpfad, Block-RAM-Speichermodulen [84] und einem Automaten als Steuerpfad.

Die Finite Impulse Response Filter mit endlicher Reaktion auf einen Eingangspuls nutzen

nur den aktuellen Eingangssignalabtastwert x[n] und eine bestimmte Anzahl N von vorhe-

rigen Eingangswerten x[n-k], um den aktuellen Ausgangswert y[n] zu berechnen. Damit

gehören sie zu den nicht rekursiven Filtern, die über keine Signalrückkopplungen verfügen.

Die allgemeine Beschreibung von FIR-Filtern ist im Zeitbereich durch die Differenzenglei-

chung Gl. 9-1 gegeben, die jeden Eingangssignalwert x[n] mit einem speziellen Koeffizien-

ten ck gewichtet. Die Anzahl der zu speichernden vorherigen Eingangssignalwerte x[n-k] ist

die Filterordnung N, sodass insgesamt für jede Ausgangssignalaktualisierung L=N+1 Pro-

dukte zu addieren sind (L ist die Filterlänge).

Gl. 9-1

N

0kk ]kn[xc]n[y

9.1.1 Parallele FIR-Filterstrukturen

Zur analytischen Auswertung zeitdiskreter Systeme erfolgt die Transformation in den z-

Bereich (vgl. Gl. 9-2), sodass eine Übertragungsfunktion H(z) das transiente Verhalten

eines Filters beschreibt.

Gl. 9-2

N

0k

kk )z(X)z(H)z(X)zc()z(Y

Als Übertragungsfunktion H(z) für FIR-Filter ergibt sich ein Polynom (vgl. Gl. 9-3) im

Zeitverschiebungsoperator z-k=e-k(jω+σ)T, der eine zeitliche Rechtsverschiebung um kT

Abtastintervalle bewirkt, wobei T=1/fa die Abtastperiode angibt [74].

Gl. 9-3 N

N)1N(

1N2

21

10

0 zczc...zczczc)z(H

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 4: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

242 9 Modellierung digitaler Filter

Diese Addition der mit Koeffizienten gewichteten und verzögerten Eingangssignalwerte

repräsentiert die Direktform in Bild 9-1. Die Kette der N Verschiebungsoperatoren bildet

darin ein N-stufiges Schieberegister, das mit der Abtastfrequenz fa getaktet wird. Nachdem

ein aktualisierter Eingangswert x[n] mit einer Breite von j Bit bereitgestellt wurde, ist die-

ser nach N positiven Taktflanken in der letzten Registerstufe verfügbar. Die Blöcke mit den

Koeffizienten ck der Bitbreite l repräsentieren die L Multiplikationen, die die L Produkte

P[k] mit der Bitbreite m=j+l liefern. Für die Hardware-Implementierung der Summe von L

Produkten stehen auf Bitebene Volladdierer als ASIC-Bibliothekselemente bzw. FPGA-

Makros mit zwei Summanden zur Verfügung, sodass in FPGAs m-Bit-Ripple-Carry-

Addierer realisiert werden (vgl. Abschnitte 2.3, 3.2.1, 7.3.1) [78], [79], [84]. Eine einzeilige

VHDL-Codierung der Addition aller Summanden P[k] oder eine for loop führen also

im Synthese-Ergebnis zur Verkettung von N Addierern mit je zwei Summanden (vgl. Bild

9-1b). Diese mit der Filterordnung N wachsende Addiererkette dominiert dann die Signal-

laufzeit von den Registerstufen x[n-k] zum Ausgang y[n].

Bild 9-1: a) FIR-Filter in Direktform mit Ordnung N=4; b) Addiererkette; c) balancierter Addierer-

baum mit ld(N+1)=3 Addiererstufen

Die Signallaufzeit in solchen Summen lässt sich durch paarweise Addition der Produkte

und weitere paarweise Verknüpfungen der Addiererausgänge zu einem balancierten

Addiererbaum deutlich verringern (vgl. Bild 9-1c). So reduziert sich die maximale Anzahl

der verketteten Addiererstufen von N auf ld(N+1)=3.32log(N+1). Der Operator kenn-

zeichnet darin die Rundung auf den nächst größeren Integerwert (ceiling). Ein vollständig

symmetrischer Aufbau mit gleich langen Signalwegen von den Registerausgängen x[n-k]

+

+

+

+

P[0] P[1] P[2] P[3] P[4]

y[n]

+

P[0] P[1] P[2] P[3] P[4]

+

+

+

y[n]

Pipelining-

register

l Bit Koeffizienten

+

-1

Z

-1

Z

-1

Z

-1

Z

C0 C1 C2 C3 C4

x[n] x[n-1] x[n-2] x[n-3] x[n-4]

P[4]P[3]P[2]P[1]P[0]

j

m

y[n]

m + g

a)

c)b)

Register zum

Laufzeitaus-

gleich

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 5: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

243 9.1 FIR-Filter

über alle Pfade bis zum Ausgang y[n] ergibt sich für ungerade Filterordnungen N in den

Spezialfällen mit N+1=L=2p (p ganz).

Als weitere Maßnahme zur Erhöhung der Systemtaktfrequenz dienen Pipeliningregister, die

das Arithmetikschaltnetz in Abschnitte mit ähnlichen Signallaufzeiten aufteilen sollen (vgl.

Kap. 6.4.2.2). So kann z.B. die Additionsebene der Produktpaare im balancierten

Addiererbaum von den folgenden Addiererstufen separiert werden (vgl. Bild 9-1b, c). Eine

Entkopplung der Addiererstufen ist bei großen Filterordnungen N>12 ggf. nur in Gruppen

erforderlich, da die Multipliziererebene je nach Vektorbreite eine vielfach größere Signal-

laufzeit einbringt als eine Addiererstufe. Jede Pipeliningstufe erhöht die Latenz, mit der

sich eine Eingangsaktualisierung x[n] am Ausgang y[n] verzögert auswirkt. Wenn die

Pipeliningstufen gefüllt sind, steht allerdings mit jedem Takt ein aktualisiertes Ergebnis am

Ausgang zur Verfügung.

Die Register zum Laufzeitausgleich (vgl. Bild 9-1b u. c) sind nur für den Fall in die Pfade

mit weniger Arithmetikelementen zu integrieren, dass die aktualisierten Eingangswerte x[n]

mit einer Abtastrate 1/T eintreffen, die dem Systemtakt 1/TCLK entspricht, mit dem das

Schieberegister und die Pipeliningstufen getaktet werden. An den Eingängen der Addierer-

stufen müssen nämlich Werte anliegen, die den gleichen zeitlichen Ursprung aufweisen.

Bei geringeren Datenraten (T >>TCLK) liegen zwischen den Aktualisierungszeitpunkten kT,

zu denen das Schieberegister gefüllt wird, sehr viele Systemtakte TCLK. Während des Inter-

valls kT bleiben die gespeicherten Eingangswerte x[n-k] und die Produkte P[k] konstant,

sodass für diese keine weitere Zwischenspeicherung im Addiererbaum erforderlich ist.

Auch aus Sicht der deutlich kleineren Anzahl an erforderlichen Pipeliningregistern und

Registern für den Laufzeitausgleich sowie der geringeren Latenz ist der balancierte

Addiererbaum einer Addiererkette vorzuziehen. Die folgende Tabelle 9-1 gibt im Vergleich

die zu implementierenden Pipeliningregister (PR) und Register für den Laufzeitausgleich

(LAR) für zwei Fälle an: a) Pipeliningstufe nur hinter den Addierern der Produkte und b)

komplettes Pipelining des Addiererschaltnetzes.

Anzahl Addiererkette Balancierter Addiererbaum

Addierer N N

Addiererstufen N 3.32log(N+1)

Register a)

Latenz: 1 Takt 1 PR, N-1 LAR N gerade: N/2 PR, 1 LAR;

N ungerade: (N+1)/2 PR

Register b)

Latenz N-1 PR, (N-1)N/2 LAR

N-1 Takte

N-1 PR , für N+1 = 2p

3.32log(N+1) Takte

Tabelle 9-1: Hardware-Ressourcen für die Realisierung des Addiererschaltnetzes eines FIR-Filters

der Ordnung N mit u. ohne Pipelining; PR Pipeliningregister, LAR Register zum Laufzeitausgleich

Neben diesen bisher erläuterten makroskopischen Struktureigenschaften des FIR-Filters

bestimmen die gewählten Wortlängen für das Eingangssignal x[n], die Koeffizienten ck und

die weiterverarbeiteten Produkte P[k] den Hardwarebedarf und die Signallaufzeiten in den

Arithmetikschaltnetzen. Als Dimensionierungskriterien kommen hier die jeweils anwen-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 6: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

244 9 Modellierung digitaler Filter

dungsspezifischen Anforderungen an die Signalauflösung und an das angestrebte Übertra-

gungsverhalten des Filters im Durchlass- und Sperrbereich hinzu (vgl. Kap. 9.1.3).

In vielen praktischen Anwendungen sind linearphasige FIR-Filter erforderlich, die aufgrund

der von der Frequenz unabhängigen Gruppenlaufzeit τg=NT/2 eine verzerrungsfreie Über-

tragung bieten. Diese sind nur mit einem symmetrischen Koeffizientensatz realisierbar, der

z.B. über die Fenstermethode aus einem ideal rechteckförmig vorgegebenen Referenzfre-

quenzgang gewonnen wird. Im Fall der positiven Symmetrie sind die Koeffizienten ck zu

einer Symmetrieachse spiegelsymmetrisch, sodass nur eine Hälfte des Koeffizientensatzes

als Konstanten oder als RAM-Speicherplätze implementiert werden muss [70], [72], [74].

Auf Basis dieser Symmetrie nach Gl. 9-4 lassen sich alle wesentlichen Filtercharakteristi-

ken wie Tiefpass, Hochpass, Bandpass und Bandsperre realisieren. Als Einschränkung gilt,

dass FIR-Filter mit ungerader Ordnung N keine Hochpassfilter unterstützen. Die Frequenz-

gänge solcher Hochpassfilter sind bei der Nyquistfrequenz fNy=fa/2 an der oberen Fre-

quenzbereichsgrenze durch eine Verstärkung > 0 charakterisiert. Linearphasige Filter mit

ungerader Ordnung weisen jedoch bei fNy gerade eine Nullstelle auf [70], [75].

Gl. 9-4

Entsprechend zum kleineren Koeffizientensatz soll eine verringerte Anzahl an Multiplizie-

rern erreicht werden, um HW-Ressourcen im Arithmetikschaltnetz einzusparen. Die Über-

tragungsfunktion H(z) nach Gl. 9-3 lässt sich dazu durch Ausklammern gleicher Koeffi-

zienten ck mit weniger Produkten kürzer formulieren:

Gl. 9-5 2N

2N)1N(1

1N0

0 zc...)zz(c)zz(c)z(H Typ1, N gerade

Gl. 9-6 )zz(c...)zz(c)zz(c)z(H 2)1N(2)1N(2)1N(

)1N(11

N00

Typ2, N ungerade

Jeweils die Summe x[n-k]+x[n-(N-k)] von zwei gespeicherten Signalwerten geht in die

Multiplikationen ein, sodass die daraus resultierende Linear-Phasen-Struktur wie in Bild

9-2 mit etwa der Hälfte der Multiplizierer auskommt. Für gerade Filterordnungen (Typ 1)

verbleiben N/2+1 Multiplikationen, wobei immer die Multiplikation mit dem Koeffizienten

cN/2 separat aus der Mitte der Registerkette mit x[n-N/2] gespeist wird. Im Fall ungerader

Filterordnungen (Typ 2) sind (N+1)/2 Multiplikationen zu realisieren. Da die Anzahl der

Addierer und damit auch die der Addiererstufen gleich bleibt, ergibt sich ein schmalerer

balancierter Addiererbaum mit ld(N+1)-1 Stufen.

Ein weiterer Vorteil für den Hardware-Aufwand entsteht dadurch, dass nun im Fall

des Symmetrietyps 1 die Hälfte der Addierer vor den Multiplizierern nur noch die Signal-

vektoren mit der Breite j+1 addieren muss und die verbleibende Hälfte im balancierten

Addiererbaum die Produkte mit m=j+1+l Bits zusammenfasst. Durch die kürzere Ripple-

Positive Koeffizientensymmetrie mit Symmetrieachse bei N/2:

ck = cN-k mit k = 0, 1, 2, …, N/2 für N gerade; N/2+1 Koeff.

mit k = 0, 1, 2, …, (N-1)/2 für N ungerade; (N+1)/2 Koeff.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 7: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

245 9.1 FIR-Filter

Carry-Kette der Addierer vor den Multiplizierern kann sich eine Reduzierung der Sig-

nallaufzeiten des Arithmetikschaltnetzes ergeben.

Bild 9-2: Linear-Phasen-Struktur für N=6 mit (N/2+1) Multiplizieren u. balanciertem Addiererbaum

Eine dritte Strukturvariante für FIR-Filter erhält man mit dem Transponierungstheorem für

Signalflussgraphen, ohne dass die Übertragungseigenschaften des Filters verändert werden

[75]. Diese transponierte Form folgt aus der Direktform nach Bild 9-1 durch folgende

Schritte (vgl. Bild 9-3):

Vertauschen von Ein- und Ausgang.

Umkehr der Richtung aller Übertragungszweige.

Ersatz der Addierer durch Verzweigungen und umgekehrt.

Bild 9-3: FIR-Filter in transponierter Form; Filterordnung N=4

Den Hauptvorteil der transponierten Form liefert die zweifache Nutzung der Verzögerungs-

register, die hier auch die Entkopplung der Addiererstufen übernehmen. Der Aufbau der

transponierten Form ist durch die Verkettung von N Addiererstufen gekennzeichnet, die die

Ergebnisse vorausgehender Stufen mit jeweils einer Multiplikation x[n]ck kombinieren. Es

ist also kein balancierter Addiererbaum zu modellieren und ein Pipelining liegt auch schon

vor. Da die Registerstufen die Summe von Produkten aufnehmen, werden hier für die

Grundstruktur mehr D-FFs benötigt als im Fall der Direktform. Linearphasige Filter in

+ -1

Z

-1

Z

-1

Z

-1

Z

C4 C3 C2 C1 C0

x[n]

P[0]P[1]P[2]P[3]P[4]

j

m

l Bit Koeffizienten

y[n]+ + +

q

x[n] x[n-6]

+

+

+

+

Pipelining-

register

l Bit Koeffizienten

-1

Z

C0 C1 C2

x[n-1] x[n-2] x[n-3] x[n-4]

P[3]P[2]P[1]P[0]

j

m

y[n]

-1

Z

-1

Z

-1

Z

-1

Z

x[n-5]

++

-1

Z

C3

j+1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 8: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

246 9 Modellierung digitaler Filter

transponierter Form erfordern keinen veränderten Aufbau, da alle Multiplikationen auf das

gleiche Eingangsignal x[n] wirken und aufgrund der Koeffizientensymmetrie je nach

Symmetrietyp N/2 bzw. (N+1)/2 Produkte gemeinsam in zwei Hälften der Addiererkette

genutzt werden können.

Die prinzipiell vorteilhaft erscheinende Verteilung nur eines einzigen Eingangssignals x[n]

an die Multiplizierer führt jedoch zu einem großen Fanout der treibenden Eingangsstufe:

Die Ausgänge der Eingangssynchronisationsregister werden durch die Vielzahl der

Verteilleitungen und der Multiplizierereingänge stark kapazitiv belastet, sodass die Signal-

laufzeit auf den Verdrahtungsressourcen des FPGAs zusätzlich zu den Schaltnetzverzöge-

rungen der Arithmetikpfade ins Gewicht fallen kann [8], [78].

Ein umfangreiches und weiterführendes Kompendium zur Implementierung von Kompo-

nenten der digitalen Signalverarbeitung mit FPGAs ist in [80] zusammen mit dem mathe-

matischen Entwurfshintergrund enthalten. Die dort vorgeschlagenen VHDL- und Verilog-

Modelle sind für FIR-Filter niedriger Ordnung mit Integer-Arithmetik formuliert und be-

rücksichtigen insbesondere spezielle Zahlendarstellungen für die Synthese mit Altera

Werkzeugen [82]. Ein Schwerpunktthema bildet die Implementierung der Summe von

Produkten (Sum Of Product) mit der „Distributed Arithmetic“ (DA)-Technologie, die auf

LUT-basierte FPGA-Strukturen zugeschnitten ist: Für FIR-Filter mit konstanten Koeffi-

zienten lassen sich durch Neuordnung der Summe nach Gl. 9-1 sequentielle Berechnungen

ableiten, die mit Bit-Schieberegistern, LUT-basierten Koeffiziententabellen und einem

Akkumulator realisiert werden. Diese Lösungen zeichnen sich insbesondere durch extrem

kurze Signallaufzeiten aus. Die Latenz kann je nach paralleler oder rein sequentieller Aus-

prägung höher ausfallen, als im Fall der diskreten Realisierung, wie sie im Folgenden vor-

gestellt wird. Ein DA-Entwurfsbeispiel unter Einsatz des Xilinx Core Generators behandelt

das Kapitel 7.4.2 [87].

9.1.2 Zahlendarstellung im Q-Format

Signale und Variablen in digitalen Systemen auf Basis von FPGA- und ASIC-Hardware-

Plattformen werden mit VHDL auf Bitvektorebene modelliert. Für die unsigned and

signed Vektordatentypen sind die arithmetischen Operatoren +, - und * in der Bibliothek

ieee.numeric_std definiert. Damit stehen dann Integerzahlen und rein gebrochene

Zahlendarstellungen, d.h. die Fractional-Zahlen, sowie deren Kombination für die 2er-

Komplementarithmetik zur Verfügung.

Für eine Integerdarstellung als Bitstring mit der Wortlänge B+1 und einem Binärpunkt ( )

gilt [74], [75]:

xBin = bB bB-1 ... b1 b0 mit b (0,1).

Negative Zahlen sind durch ein Vorzeichenbit bB=1 gekennzeichnet und die größte dar-

stellbare Zahl ist xDezmax=2B-1. Die äquivalente Dezimalzahl zu xBin ergibt sich aus:

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 9: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

247 9.1 FIR-Filter

Gl. 9-7

1B

0i

ii

BBDez 2b2bx

Für Fractional-Zahlen im Q-Format gilt ein Bitstring mit der Form:

xBin = bB bB-1 ... b1 b0 mit b (0,1) und einem Vorzeichenbit bB =1 für xDez < 0.

Dieses QB-Format repräsentiert Zahlen im Intervall -1 xDez < 1 mit:

Gl. 9-8

B

1i

iiBBDez 2bbx

Bewährt hat sich die Fractional-Darstellung im Q-Format für die Eingangs- und Ausgangs-

signale, Koeffizienten sowie Rechengrößen in digitalen Systemen, da Multiplikationser-

gebnisse im Bereich -1 ≤ xDez < 1 begrenzt bleiben und betragsmäßig in Richtung des LSBs

b0=2-B streben. Die QB-Notation angewandt auf Vektordatentypen sagt aus, dass die Binär-

darstellung B Bits rechts des impliziten Binärpunktes enthält. Dies ist hier in einer beispiel-

haften Schreibweise dargestellt, die zur Erklärung der Vektorbreitenwahl und von Ergeb-

niszahlendarstellungen in den folgenden Abschnitten genutzt wird:

QB: sign bit B significant bits = sign msb … lsb z.B. für das Signal x[sign. B-1 : 0]

Ein internes Signal X mit B+1=12 Bits, das der Anwender im Q11-Format sieht, ist dann

deklariert als:

signal X: signed(B downto 0); -- Generic B : postive := 11

Nur der Anwender hat diese Betrachtungsweise des QB-Formates und bringt die entspre-

chend konsistent skalierten Eingangsgrößen und Koeffizienten in die Deklarationen,

Testbenches und Schnittstellen der FPGA-Plattform ein. Der VHDL-Simulator und das

Synthesewerkzeug hingegen nehmen die Größen so wie angeboten und arbeiten mit der

Binärdarstellung des Integerstrings, der zur Gl. 9-7 gehört. Die Ergebnisse der 2er-

Komplementarithmetik sind auf Bitebene selbstverständlich unabhängig von der speziellen

Interpretation als Q-Formatgrößen, da es sich um eine spezifische Sicht der Bitpositionen

handelt. Die Darstellung der Gl. 9-8 geht nämlich aus der in Gl. 9-7 durch B-Schiebevor-

gänge nach rechts hervor.

Ein B+1=5-Bit-Filterkoeffizient im Q4-Format hat z.B. folgende Deklaration:

constant C0: signed(4 downto 0):= 01011; -- 0.6875 = 11/16

Für zwei exemplarische Wortlängen sind in Tabelle 9-2 einige Kennwerte der Zahlendar-

stellung des Q-Formates zusammengestellt. Der maximale Quantisierungsfehler 2-(B+1), der

beim Runden von LSB-Bitpositionen auftritt, wird auch als Präzision bezeichnet. Eine

Vektorverkürzung durch Abschneiden von niederwertigen Bitpositionen führt hingegen zu

unsymmetrischen Wertveränderungen [74]:

positive Größen mit Wertverkleinerung um maximal 2-B,

negative Größen mit Betragszunahme um maximal 2-B.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 10: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

248 9 Modellierung digitaler Filter

Tabelle 9-2: Q-Formatkennwerte für Q7- und Q11-Zahlendarstellungen.

9.1.2.1 Addition mit vorzeichenrichtiger Erweiterung der Summanden

Für eine überlauffreie Realisierung von 2er-Komplement-Summen und die Interpretation

von Multiplikationsergebnissen sind auch Kombinationen aus dem Q-Format und der

Integerdarstellung erforderlich. Eine Addition zweier QB-Größen A und C, die jeweils den

positiven Maximalwert 1-2-B annehmen können, liefert maximal den Wert 2-2-B+1, der

aufgrund des Integeranteils nicht im QB-Format allein darstellbar ist. Der Ergebnisvektor

SUM ist also um eine Bitstelle breiter zu wählen, die den Integeranteil (Übertrag) aufnimmt

(vgl. Bild 9-2). Da Signal- und Variablenzuweisungen auf beiden Seiten der Zuweisung den

gleichen Datentyp und die gleiche Vektorbreite aufweisen müssen, sind die Summanden A

und C zusätzlich mit einer vorzeichenrichtigen Erweiterung an die Breite des Summenvek-

tors SUM anzupassen [78]:

... signal A, C: signed(7 downto 0); -- inputs

signal SUM: signed(8 downto 0); -- result

begin

SUM <= (A(A’left) & A) + (C(C’left) & C) after 5 ns;

Das Attribut A’left definiert das linke Element aus dem Vektor A und liefert den Index

des MSBs zur Zeit der Compilierung, sodass jeweils eine Verkettung mit dem Vorzeichen-

bit erfolgt [13], [37]. Die Klammern um die erweiterten Summanden sind notwendig, da

der Additionsoperator stärker bindet als der Verkettungsoperator [37].

Zur Kennzeichnung der mehrfachen Vorzeichenbits und deren Bedeutung für die Aufnah-

me der ganzzahligen Summenanteile dient hier die symbolische Schreibweise der Bitpositi-

onen:

SUM[sign. 7 : 0] = SUM[sign,guard. 6 : 0] = A[sign,sign. 6 : 0] + C[sign,sign. 6 : 0]

Die in SUM angegebene Bitposition „guard“ stellt ein Sicherheitsbit dar, das den Übertrag

aus der Summe der Fractional-Anteile von A und C aufnimmt. Geht man vom maximalen

Wertebereich der Summanden aus, so sind bei n Summanden im Ergebnisvektor insgesamt

3.32log(n) Guard-Bits einzurichten.

Wortlänge, Vektorlänge B+1 8 Bit 12 Bit

Quantisierungstufe (LSB) D = 2-B 2-7 = 0.0078125 2-11 = 0.000488281

Größte positive Zahl (1 – 1LSB) 1 – 2-B 0.9921875 0.999511718

Kleinste negative Zahl -1 -1 -1

Dynamik = Max/Min 2B – 1 2B 128 –1 = 127 2048 –1 = 2047

Maximaler Quantisierungsfehler D/2 = 2-(B+1) 0.00390625 0.00024414

Abschneiden niederwertiger Bits -D= -2-B -0.0078125 -0.000488281

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 11: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

249 9.1 FIR-Filter

9.1.2.2 Binäre Multiplikation

Auch bei der Multiplikation ist die Vektorbreite des Ergebnisses auf die der Faktoren anzu-

passen. Eine Multiplikation mit einem QB1-Multiplikanden und einem QB2-Multiplikator

ergibt ein QB3-Ergebnis. Darin stehen B3=B2+B1 Bits rechts vom impliziten Binärpunkt

und der gesamte Vektor enthält B3+2 Bits [8], [70], [73]. Eine Q-Format-Multiplikation

liefert nämlich zwei Vorzeichenbits, von denen das linke Bit ein „echtes“ Vorzeichen ist

und das rechte Bit vor dem Binärpunkt als Guard-Bit genutzt werden kann. Zu den folgen-

den Codezeilen lässt sich zur Verdeutlichung wieder eine symbolische Beschreibung der

Bitpositionen angeben.

...

constant COEFF: signed(7 downto 0) := x"7f"; -- 127/128 multiplier Q7

signal STAGE: signed(11 downto 0); -- multiplicand Q11

signal MUL: signed(19 downto 0); -- result Q18

begin

MUL <= STAGE * COEFF after 6 ns;

Der Ergebnisvektor ist also so breit zu wählen, wie die Summe der Vektorbreiten auf der

rechten Seite. In Filterstrukturen bilden die Multipliziererergebnisse die Summanden für die

Addiererbäume, sodass das zweite Vorzeichen einen Beitrag zur vorzeichenrichtigen Er-

weiterung liefert und zugleich für eine Addition die Position eines Guard-Bits vorbereitet.

MUL[sign,sign. 17 : 0] = MUL[sign,guard. 17 : 0] =

STAGE[sign. 10 : 0] * COEF[sign. 6 : 0]

Ein Überlaufschutz der 2er-Komplementarithmetik lässt sich für interne Signale allein mit

Guard-Bits korrekt realisieren. In der Direktform nach Bild 9-1 ist die maximale Breite

m+g des Summenvektors Y[n] für den Fall angegeben, dass ohne Skalierung für jedes

Produkt P[k] der Maximalwert 1 angenommen werden muss. Die Erweiterung um g Guard-

Bits ergibt sich zu ld(N+1)-1, da die Produktbreite m schon ein Guard-Bit berücksichtigt.

Dies führt jedoch zu einer Worst-Case-Auslegung der Vektorbreiten mit einem unnötig

erhöhten Bedarf an HW-Ressourcen für die Addiererlogik, die Pipelining-Flipflops und die

Verdrahtung. Im Fall von konstanten Filterkoeffizienten ist die Begrenzung der Signalwerte

durch eine Skalierung der Koeffizienten zusammen mit einer Absicherung auf Basis weni-

ger Guard-Bits effizienter realisierbar. Dieser Entwurfsweg wird im nächsten Abschnitt für

die ausgewählten FIR-Filterstrukturen vorgestellt.

Die Entscheidung zur Hardware-Struktur, in der der Multiplikationsoperator realisiert wird,

kann über Parameter des jeweiligen Synthesewerkzeugs gesteuert werden. In FPGAs stehen

dedizierte Multiplizierer mit festgelegter maximaler Operanden- und Ergebnisbreite zur

Verfügung, die für eine minimale Signallaufzeit ausgelegt sind. Ebenso lassen sich

Multiplizierer mit den Look-Up-Tabellen und der Carry-Logik realisieren [78], [82], [84].

Zur Veranschaulichung der HW-Struktur, die den parallelen Array-Multiplizierern in

FPGAs zu Grunde liegt, dient hier ein Beispiel für eine binäre, vorzeichenbehaftete Multi-

plikation von Zahlen im Q-Format (vgl. Bild 9-4) [8], [78]. Die handschriftliche Multiplika-

tion von Dezimalzahlen gibt dafür das Schema vor: Teilprodukte, die durch Multiplikation

des Multiplikanden mit den einzelnen Stellen des Multiplizierers entstehen, werden sukzes-

sive addiert. Die Hardware-Struktur der binären Multiplikation in Bild 9-4 setzt sich im

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 12: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

250 9 Modellierung digitaler Filter

Wesentlichen aus verketteten 2er-Komplement-Additionen zusammen. Die zu addierenden

Teilprodukte entstehen hier durch Bewertung des Multiplikanden mit der jeweiligen Bit-

stelle des Multiplizierers, wobei mit dessen LSB begonnen wird. Eine Bitstelle mit „1“

reproduziert den Multiplikanden und eine „0“ erzeugt einen Null-Summanden. Je nach

Position der Bitstelle im Multiplizierer ist der Multiplikand entsprechend oft nach links zu

schieben, um das Gewicht der bewertenden Bitstelle zu berücksichtigen.

Damit die Additionen überlauffrei erfolgen, ist jeweils eine Vorzeichenerweiterung der

Summanden durchzuführen, die in Bild 9-4 kursiv gekennzeichnet sind. Überträge der

Summen über die Länge der Summanden hinaus sind solange zu verwenden bis sich keine

Änderung bei den führenden Summenbits mehr ergibt (vgl. 2. Teilsumme). Dabei ist die

vorzeichenrichtige Erweiterung der Summanden zu beachten. Eine besondere Stellung

nimmt in diesem Beispiel das 5. Teilprodukt ein, da das MSB des Multiplizierers als Vor-

zeichenbit eine 2er-Komplementbildung des Multiplikanden verlangt (01110). Abschlie-

ßend ist der Binärpunkt so zu platzieren, dass die Länge des Fractional-Anteils der Summe

der QB-Formate aus den beiden Faktoren entspricht. Das 10 Bit breite Ergebnis enthält ein

Q8-Format und die beiden Vorzeichenbits der positiven Zahl.

Bild 9-4: Binäre Multiplikation von negativen Zahlen im Q4-Format; Summen von Teilprodukten

bilden ein Q8-Ergebnis mit zwei Vorzeichenbits

9.1.3 Filterskalierung und Beispielfilter

Mit der Filterskalierung durch Modifikation der Filterkoeffizienten sollen Überlaufeffekte

in den Addierern der Produkte verhindert werden. Findet nämlich ein Übertrag auf das

Vorzeichenbit statt, so wird der jeweilige 2er-Komplement-Zahlenbereich überschritten und

positive Werte werden zu negativen Werten verfälscht bzw. umgekehrt. Dies führt zu Sig-

nalverzerrungen, die zusätzliche harmonische Frequenzanteile erzeugen und sogar die

Grundschwingung auslöschen können. Überlaufeffekte, die z.B. durch versetzte Sinuskup-

pen erkennbar sind, zeigt das Ausgangsignal yn eines Sinusgenerators mit einer 2 kHz

Grundschwingung in Bild 9-5. Ein 12-Bit-Vektor bildet das Intervall [-1 , +1) auf den Be-

reich 800Hex ≤ yn < 7FF Hex ab.

Multiplikand * Multiplizierer

-0.875 * (-0.6875)

04375

61250

065625

700000

0765625

5250000

0.6015625

1. Teilprodukt

2. Teilprodukt

1. Teilsumme

3. Teilprodukt

2. Teilsumme

4. Teilprodukt

3. Teilsumme

5. Teilprodukt

1.0010 * 1.0101

110010

000000

11110010

11001000

110111010

000000000

1110111010

0011100000

00.10011010

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 13: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

251 9.1 FIR-Filter

Bild 9-5: Simulation eines Sinusgenerators; 0.5 ms Periodendauer, 48 kHz Abtastfrequenz, Über-

laufeffekte

Die Herleitungen aller Skalierungsvorschriften basieren darauf, dass zentrale Summations-

knoten wie in Bild 9-1a überlauffrei arbeiten sollen [70], [74], [75]. Der hier gewählte

Skalierungsansatz verlangt, dass das Ausgangssignal y[n] bei begrenztem Eingangssignal

│x[n]│≤ 1 innerhalb des 2er-Komplement-Zahlenbereiches bleibt. Aus Gl. 9-1 ergibt sich

für │y[n]│die folgende Betragsungleichung, da auf der rechten Seite keine Kompensation

von negativen und positiven Summanden erfolgen kann:

Gl. 9-9

N

0kk ]kn[xc]n[y

Im abzusichernden Worst-Case wird │x[n]│ maximal 1, so dass gilt:

Gl. 9-10

N

0kkc]n[y

Wird die rechte Seite in Gl. 9-10 mit modifizierten Koeffizienten kleiner 1 eingestellt, dann

bleibt der Summationsknoten des FIR-Filters in Direktform überlauffrei. Die so genannte

L1-Norm ergibt sich aus der Betragssumme der Koeffizienten:

Gl. 9-11

N

0kk1 cL

Die einzelnen Koeffizienten werden mit 1/L1 multipliziert. Damit einher geht eine verklei-

nerte Filterverstärkung, sodass die Ausnutzung des mit der gewählten Vektorbreite verfüg-

baren Signalhubs und das Verhältnis Signal/Quantisierungsrauschen verschlechtert werden.

Diese Effekte können bei der L1-Norm verstärkt auftreten, da sie von drei üblichen Skalie-

rungsverfahren den konservativsten Ansatz darstellt [75]. Falls in der jeweiligen Anwen-

dung im unteren Aussteuerungsbereich ein störendes Quantisierungsrauschen nachweisbar

ist, das durch Runden oder Abschneiden von Multiplikationsergebnissen entsteht, sind

Untersuchungen mit den anderen Skalierungsvarianten durchzuführen.

Es ist insbesondere zu beachten, dass die bei der Herleitung der Skalierungsvorschriften

angenommenen zentralen Summationsknoten weder in FPGAs noch in Software mit Fest-

Überlauf

Überlauf

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 14: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

252 9 Modellierung digitaler Filter

kommaarithmetik für digitale Signalprozessoren so realisierbar sind. Nach Bild 9-1 liegen

immer Ketten von Addierern vor, sodass die Skalierung nur für den letzten Summations-

punkt gilt. Die Überlauffreiheit der inneren Additionen ist gesondert zu prüfen. Dieser

Sachverhalt wird im Rahmen der VHDL-Modellierung und der Diskussion der Syntheseer-

gebnisse behandelt.

Als Beispielfilter für die VHDL-Modellierungen wird ein Tiefpass mit der Filterordnung

N=22 (Typ 1), einer Eckfrequenz fc=10 kHz für eine Abtastfrequenz von fa=48 kHz ge-

nutzt. Die Koeffizientenberechnung erfolgte mit der MATLAB-Funktion fir1, der das

Fensterentwurfsverfahren zugrunde liegt und die eine Gewichtung der symmetrischen

Koeffizienten mit dem Hamming-Fenster implementiert. Für die Skalierung mit der L1-

Norm hat sich die Betragssumme der Koeffizienten zu L1=1.5009 ergeben.

In der Frequenzgangdarstellung |H(f)| nach sind neben dem genauen Verlauf auch die Fre-

quenzgänge für 8 Bit und 12 Bit breite Koeffizienten angegeben. Um den Einfluss einer

Festkommadarstellung der Koeffizienten mit begrenzter Wortlänge aufzuzeigen, wurden

diese zuerst in eine binäre Form mit 8 Bit bzw. 12 Bit und anschließend zurück in eine

Gleitkommadarstellung gewandelt. In der Fixed-Point Toolbox von MATLAB steht dafür

die Funktion quantize zur Verfügung, die eine parametrisierbare Quantisierung der

Koeffizienten durchführt, zu denen das Filter-Visualisierungswerkzeug FVTool bzw. die

Funktion fvtool die modifizierten Frequenzgänge darstellt [85].

Bild 9-6: Mit L1 skalierte Frequenzgänge |H(f)| des FIR-Tiefpassfilters; VHmax=1/L1=0.663; N=22,

fc=10 kHz, fa=48 kHz

0 5 10 15 20

10-4

10-3

10-2

10-1

100

f/kHz

|H(f

)|

8 Bit Koeffizienten

12 Bit Koeffizienten

fc

0.5/1.50091/1.5009

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 15: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

253 9.1 FIR-Filter

Die 12-Bit-Koeffizienten werden für die VHDL-Modellierung genutzt, da sie für die Ziele

dieser Einführung in die Filtermodellierung einen akzeptablen Kompromiss zwischen aus-

reichender Frequenzganggenauigkeit und realistischem Bedarf an FPGA-Ressourcen lie-

fern.

Die Koeffizienten des Tiefpasses erscheinen direkt in der symmetrischen Impulsantwort

(x[n]=1 für n=0), da ein einzelner Wert x[n]=1 durch die Registerkette des FIR-Filters

getaktet wird und so die Produkte sukzessive den Ausgang y[n] bestimmen (vgl. Bild 9-7).

Als Referenz für die VHDL-Simulationen wird die Sprungantwort dienen, die die sukzessi-

ve Summation der Koeffizienten repräsentiert und damit proportional zum zeitlichen Integ-

ral der Impulsantwort verläuft. Am stationären Endwert der Sprungantwort (x[n]=1 für alle

n) ist die auf 1/L1 reduzierte Verstärkung des Tiefpasses ablesbar. Eine Übersteuerung des

Scheitelwerts von y[n]max=0.721 für n=13 (t=271 µs) liegt auch nicht vor. Der Aussteue-

rungsbereich lässt sich verbessern, indem der Scheitelwert y[n]max der nicht skalierten

Sprungantwort oder andere L-Normen zur Skalierung genutzt werden [74]. Die Verbin-

dungslinien zwischen den jeweils N+1 diskreten Werten in Bild 9-7 dienen nur zur Unter-

scheidung der beiden Systemantworten, sie sollen nicht als Interpolation verstanden wer-

den. Erstellt wurden die Systemantworten mit den MATLAB-Funktionen impz, stepz

und plot.

Bild 9-7: Mit L1 skalierte Impuls- und Sprungantwort des Tiefpassfilters; ymax=0.721, N=22, fc=10

kHz, fa=48 kHz

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5

x 10-4

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

Am

pli

tud

e

t/s

Sprungantwort

Impulsantwort

1/L1 = 0.6663

0.721096

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 16: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

254 9 Modellierung digitaler Filter

9.1.4 VHDL-Modelle paralleler FIR-Filterstrukturen

Zu den im ersten Abschnitt erläuterten FIR-Filterstrukturen erfolgt in diesem Abschnitt die

Beschreibung von VHDL-Modellen, deren Entwurf die Inhalte aus den Kapiteln 3 und 5

vertieft und erweitert. Der Schwerpunkt der Modellierungstechnik für die parallelen Struk-

turen ist auf eine Wiederverwendbarkeit für den weiten Bereich der digitalen Signalverar-

beitung ausgerichtet. Die Ausführungen zur Abbildung von Algorithmen auf FPGA-

Hardware und der vorgestellte Codierstil stehen unter folgenden Leitlinien:

Transfer der auf Übertragungsfunktionen oder Differenzengleichungen basierenden

Systembeschreibung in getaktete und kombinatorische Prozesse.

Einsatz von Arrays und Variablen mit Vektordatentypen zur Arithmetikmodellierung in

wenigen kombinatorischen Prozessen, sodass die Anzahl der internen Koppelsignale ge-

ring bleibt. Dies unterstützt einerseits die Übersichtlichkeit der Codiermuster für Filter

und anderseits wird damit die Effizienz der VHDL-Simulation erhöht.

Nutzung von for loop-Konstrukten in einem kompakten Coderahmen zur Steuerung

des Synthesecompilers mit dem Ziel der Verkettung von Registern, Addierern und

Multiplizierern.

Anwendung von Integerarithmetik zur Vektor-Arrayindizierung und zur Abarbeitungs-

kontrolle innerhalb der for loop-Konstrukte.

Überprüfung der Implikationen des Codierstils auf die Struktur der Syntheseergebnisse

und auf das FPGA-Timing.

Aufzeigen von geeigneten Strukturerweiterungen mit Pipeliningstufen zur Steigerung

der erreichbaren Taktfrequenz mit Blick auf eine minimale Latenz.

Zum Vergleich der hier vorgestellten Modelle schließt dieser Abschnitt deshalb auch ab mit

einer Übersicht zu exemplarischen Synthese- und Implementierungsergebnissen, die den

Bedarf an FPGA-Ressourcen wie Daten-Flipflops und Look-Up-Tabellen sowie die reali-

sierbaren Taktfrequenzen aufzeigen.

9.1.4.1 Kopplung von unterschiedlichen Taktbereichen

Eingebettet sind die FIR-Filtermodelle in ein Freigabekonzept, das eine für die Praxis typi-

sche Kopplung von unterschiedlichen Taktbereichen beschreibt. Die erforderliche Synchro-

nisation zwischen den Taktbereichen zur Vermeidung von metastabilen Zuständen in den

Datenpfadregistern erfolgt mit dem Aufbau nach Bild 9-8. Für die Taktbereiche sind hier

exemplarisch folgende Frequenzen gewählt worden:

Die Abtastsignalerfassung erfolgt durch einen Audiocodec, der mit fI=12 MHz arbeitet,

sodass das Delta-Sigma-ADU-Verfahren mit Überabtastung betrieben werden kann

[70]. Abtastfrequenz: 1/T=fa=48 kHz.

Das Steuerinterface auf der FPGA-Seite, das den Codec im Slavebetrieb mit fI=12 MHz

versorgt, nimmt den Abtastwert als seriellen Bitstrom auf und stellt diesen als parallelen

20-Bit-Signalvektor X (h=20) zur Verfügung. Mit der Abtastperiode T=1/fa=20.83 µs

erzeugt das Interface einen Freigabepuls READY, der die Aktualisierung des Signal-

vektors X anzeigt und eine Dauer von 1/fI=83.33 ns hat.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 17: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

255 9.1 FIR-Filter

Das digitale Filter und die ggf. vorhandenen weiteren Signalverarbeitungsstufen werden

durch das Signal CLK mit fCLK=48 MHz getaktet.

Bild 9-8: Synchronisation zwischen den Taktbereichen fI=12 MHz und fCLK=48 MHz mit Freigabe-

pulsverkürzung für die Filter-Direktform nach Bild 9-1; h=20, j=12, m=24

Die Dauer des Freigabepulses READY ist um den Faktor fCLK/fI=4 zu verkürzen, damit auf

der höheren Frequenzebene von fCLK das Abtastsignal X mit dem synchronisierten Freiga-

bepuls RD_S nur einmal in die Registerkette der Direktform nach Bild 9-1 eingetaktet wird.

Mit mehrfach eingetakteten, gleichen X-Werten findet quasi eine Interpolation zwischen

den Abtastzeitpunkten mit gleichen Werten statt, sodass die Registerkette z.B. bei Sprung-

anregung schon nach weniger als N*T Abtastzyklen gefüllt ist. Dies bewirkt eine scheinba-

re Erhöhung der Abtastfrequenz fa, woraus eine Verschiebung der wirksamen Filtereckfre-

quenz fc hin zu höheren Werten resultiert. Mit der Beziehung für die Koeffizienten eines

idealen Tiefpasses auf Basis der Fensterentwurfsmethode lässt sich dies verdeutlichen (vgl.

Gl. 9-12) [70], [72]:

Gl. 9-12 k)Tkf2sin(c ck ; k;0k

Tf2c ck ; 0k

Bei unveränderten Koeffizienten ck und demnach jeweils konstantem Argument der Sinus-

funktion steigt das realisierte fc mit reduziertem T. Da das Filter mit der Ordnung N=22 für

fCLK/fI=4 schon nach 6 Abtastzyklen gefüllt ist, lässt sich der Anstieg der Eckfrequenz mit

Gl. 9-12 auf fc*22/6 abschätzen. Plausibel wird die vergrößerte Eckfrequenz fc auch durch

die Grenzbetrachtung, die komplette Registerkette nach Bild 9-1 in einem Abtastschritt mit

einem Wert X=1 (7FFHex , j=12) zu füllen. Das Filter berechnet dann die Summe der Koef-

fizienten ck, sodass für den unskalierten Fall ein Einsverstärker entsteht, der als Allpass

keine Eckfrequenz hat.

Dem digitalen Filter ist in Bild 9-8 ein Übernahmeregister vorgeschaltet, das den kombina-

torischen Pfad bestehend aus der Multiplikation mit c0 zusammen mit der Addiererkette

von vorausgehenden Stufen entkoppelt (vgl. Bild 9-1 u. Abschnitt 6.4.2). Im Anschluss an

den Puls RD_S ist die Registerkette aktualisiert und die Berechnung des Filterausgangs

ADDA hat innerhalb einer Periode des Taktsignals CLK zu erfolgen. Das Ergebnis ADDA

wird von einem Übergaberegister Y aufgenommen, das durch den Puls FIR_EN freigege-

ben wird, der gegenüber dem Puls RD_S um einen Takt (CLK) verzögert ist. Dieses

Q

QSET

CLR

D

Q

QSET

CLR

D

Q

QSET

CLR

D

&0

0

0

X

Digitales

FilterCEQ

QSET

CLR

D

CE Q

QSET

CLR

D

CE

Y

CLK

READY

TEMP_1

TEMP_2

RD_S

ADDA

FIR_EN

h m h

CLK

j

RD_S

Pulsverkürzung

Übernahmeregister

Übergaberegister

fCLK = 48 MHz

X u. READY periodisch mit

fa = 48 kHz,

synchronisiert auf

fI = 12 MHz

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 18: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

256 9 Modellierung digitaler Filter

Übergaberegister entkoppelt die Filterarithmetik von den Eingangsstufen der ggf. folgenden

Signalverarbeitungsmodule bzw. vom Codec-Interface. Die verzögerte Freigabe des Über-

gaberegisters realisiert die sprungförmige Übertragungseigenschaft des FIR-Filters (vgl. Gl.

9-1). Eine gemeinsame Freigabe aller Register durch den Puls RD_S führt nämlich dazu,

dass die Aktualisierung des Ausgangs Y um eine Abtastperiode T verspätet erfolgen würde.

Durch diese Kapselung des Filters (vgl. Bild 9-8) liegt ein lokalisierbarer längster Signal-

laufzeitpfad in der Filterstruktur vor, sodass die Timingeigenschaften der verschiedenen

Filterstrukturen isoliert analysiert und miteinander verglichen werden können.

Als Ersatz für ein Codec- und ein Interfacemodell dient eine Testbench, die die Filterstimu-

li CLK und READY sowie die Sprunganregung X generiert (vgl. Code 9-1). Darin ist die

höchste Frequenz fCLK mit einem generic parametrisiert, sodass alle niedrigeren Zeit-

kennwerte daraus ableitbar sind. Der Prozess CODEC erzeugt das Zeitraster der Abtastpe-

riode T als Vielfaches der Taktperiode 1/fCLK in einer WHILE LOOP mit N+2 READY-

Pulsen. Es sind N+1 READY-Pulse erforderlich, damit nach N Abtastperioden die Sprung-

antwort stationär ist, da dann das Übergaberegister und die Registerkette des Filters mit

dem Wert X gefüllt sind. Jeder Durchlauf des Prozesses dauert in der Summe der beiden

wait for-Verzögerungen T=20.83 µs. Mit der flexiblen generic-Arithmetik lässt sich

das Zeitraster der READY-Pulsdauer 1/fI=4/fCLK innerhalb der WHILE LOOP-Zyklen

präzise einstellen. Nach Abschluss der WHILE LOOP bleibt der X-Pegel konstant und es

werden keine weiteren READY-Pulse mehr gesendet. Die Filterregisterkette führt demzu-

folge keine Schiebevorgänge mehr aus und der stationäre Endwert des Filters bleibt erhal-

ten. Als „Device Under Test“ (DUT) ist hier die Direktform FIR_DIRECT_AK instanziiert,

die im folgenden Abschnitt als erstes Filtermodell vorgestellt wird.

-- Testbench simuliert Codec und Interfacekomponente

-- Codec liefert X mit 20 Bit Signalauflösung library IEEE;

use IEEE.std_logic_1164.all;

entity FIR_TB is -- keine externen Schnittstellen

generic( PERIODE48MHZHALBE: time:= 10.41666667 ns;-- 1/(2fclk)

VB: positive := 20; -- Vektorbreite h

N: positive := 22); -- Filterordnung

end entity FIR_TB;

architecture FIR_FILTER of FIR_TB is

component FIR_DIREKT_AK -- Direktform mit Addiererkette

generic(DAC_WIDTH: positive; ADC_WIDTH: positive; -- Vektorbreite h

N: positive ); -- Filterordnung

port

(CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- active-low

RD: in bit; -- Anzeige eines aktualisierten Abtastwertes X

XN: in bit_vector(ADC_WIDTH -1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH -1 downto 0) -- Signal zum DAC

);

end component;

signal CLK, CLR_N, READY: bit; -- Stimuli

signal X, Y: bit_vector(VB -1 downto 0); -- Codec-Schnittstellen Q(VB-1)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 19: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

257 9.1 FIR-Filter

begin

CLOCK: process -- 48 MHz Takt

begin

CLK <= '0'; wait for PERIODE48MHZHALBE;

CLK <= '1'; wait for PERIODE48MHZHALBE;

end process CLOCK;

RESET: process

begin

CLR_N <= '0';

wait for (PERIODE48MHZHALBE * 2); -- low active reset

CLR_N <= '1';

wait; -- keine Veränderung nach unbedingtem wait

end process RESET;

CODEC: process -- N + 2 READY-Pulse im Abstand T=1/(48 kHz)

variable NUM: integer range 0 to N +2; -- zählt die Abtastwerte X

begin

NUM := 0; -- Zählt die Abtasterte x

WHILE ( NUM <= N + 1) LOOP

READY <= '1';

X <=x"7ffff"; -- 20 Bit Sprunganregung mit maximal positivem Pegel

wait for (PERIODE48MHZHALBE *2 *4); -- Pulsdauer 1/12 MHz

READY <= '0';

wait for ((PERIODE48MHZHALBE * 2000) - (PERIODE48MHZHALBE * 2 * 4));

-- 48 kHz Abtastperiode

NUM := NUM + 1;

END LOOP;

wait; -- unbedingter Halt nach N + 2 Abtastperioden T

end process CODEC;

DUT: entity work.FIR_DIRECT_AK(PARALLEL) -- Instanziierung des Filters

generic map(DAC_WIDTH => VB, ADC_WIDTH => VB, N => N)

port map(CLK => CLK, RESET_N => CLR_N, RD => READY, XN => X, YN => Y);

end FIR_FILTER; -- named association of ports: formal => actual

Code 9-1: Testbench FIR_TB generiert die Filteransteuerung mit dem Takt CLK, der Freigabe

READY und der positiven Sprunganregung X=7FFFFHex

9.1.4.2 Basismodell der Direktform

Das Basismodell für die FIR-Filter nach Code 9-2 realisiert eine Direktform mit

Addiererkette. Dieses Modell dient vorab zur Erläuterung der Invarianten aller nachfolgend

vorgestellten FIR-Filterstrukturen:

Synchronisation und Kopplung der Taktbereiche.

for loop zur Mehrfachgenerierung von verketteten und parallelen Funktionselemen-

ten auf Basis von Array-Typen.

Simulationsergebnisse der Sprungantwort im Vergleich zu den MATLAB-Referenzen.

Auswirkung der Vektorbreitenwahl auf die quantitativen Eigenschaften der Berech-

nungsergebnisse.

Abgleich des Codierstils für die Filterarithmetik mit den zu erwartenden Syntheseer-

gebnissen der Addiererbäume.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 20: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

258 9 Modellierung digitaler Filter

Prozesse gliedern das Modell ausgehend von den Strukturen in Bild 9-1a und Bild 9-8:

Der Prozess PULSE_SHORTER fasst alle Daten-Flipflops der Pulsverkürzung und der

Pulsverzögerung zusammen.

Der Prozess STAGES modelliert die Registerkette und die Schiebevorgänge, wobei das

Übernahmeregister die erste Stufe bildet.

Die Filterarithmetik mit der Summe der N+1 Produkte ist im kombinatorischen Prozess

MULL_ADD mit Variablen formuliert.

Die Ausgangsschnittstelle bildet das Übergaberegister im Prozess A_REG.

Die symbolischen Signalverzögerungen in den getakteten Prozessen passen mit 3 ns

besser zu den Flipflop-Timingeigenschaften aktueller FPGAs als die z.B. in Kap. 6 an-

gegebenen Werte [84].

Die Deklarationen von Vektorarray-Typen mit Integerindizierung unterstützen hier die

Modellierung der Signalverarbeitung in mehrstufigen Systemen. Parametrisiert ist die Ele-

mentanzahl jeweils in Abhängigkeit von der Filterordnung N nach den Angaben in Ab-

schnitt 9.1.1. Die Vektorbreiten für die Registerkette STAGE und die Koeffizienten

COEFF sind beide als Q11-Vektoren (j=l=12) gewählt worden (vgl. Abschnitt 9.1.3). Dem-

entsprechend müssen die Produktvariablen PRODUCTS mit Q22 in folgender Form als

24-Bit-Vektoren formuliert werden (vgl. Abschnitt 9.1.2.2, Breite m in Bild 9-1):

PRODUCTS(I)[sign,sign. 21:0] = PRODUCTS(I)[sign,guard. 21:0]

Diese Vektorbreite hat hier auch die Addierervariable ADD (m=24) im Prozess

MUL_ADD, die so mit dem Guard-Bit zusätzlich zur Filterskalierung einen Überlaufschutz

bietet, da Werte im Intervall -2 ≤ ADD ≤ 2 - 1 LSB darstellbar sind (1 LSB=2-22).

-- FIR Filter in Direktform, fc = 10 kHz, Abtastfrequenz 48 kHz -- Addiererkette für N = 22, skaliert mit L1 = 1.5009

library IEEE;

use IEEE.std_logic_1164.all; -- unterstützt Type Casting

use IEEE.numeric_std.all; -- liefert Vektortyp signed

entity FIR_DIRECT_AK is

generic(DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20; -- h

N: positive := 22); -- Filterordnung N gerade

port

(CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- asynchron, active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0) -- Signal zum DAC

);

end FIR_DIRECT_AK;

architecture PARALLEL of FIR_DIRECT_AK is

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 21: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

259 9.1 FIR-Filter

type STAGE_TYPE is array(0 to N) of signed(11 downto 0); -- Registerkette

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0); -- Koeffizienten

type PRODUCTS_TYPE is array(0 to N) of signed(23 downto 0);-- Produkte

--

signal STAGE: STAGE_TYPE; -- Registerkette mit Übernahmestufe; j Bits Q11

signal COEFF: COEFF_TYPE; -- Koeffizienten mit pos. Symmetrie; l Bits Q11

signal ADDA: signed(23 downto 0); -- letzter Addierer; m Bits, 2sign.Q22

signal TEMP_1, TEMP_2,RD_S, FIR_EN: bit; -- Freigabesignalkette

begin -- Koeffizienten alternativ auch als Hex-Werte

COEFF(0) <= "000000000011"; -- x"003"; 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618

COEFF(2) <= "111111111011"; -- -0.00254297568453

COEFF(3) <= "111111110101"; -- -0.00546703115960

COEFF(4) <= "000000000110"; -- 0.00272867876211

COEFF(5) <= "000000100010"; -- 0.01672858094360

COEFF(6) <= "000000001110"; -- 0.00662913854437

COEFF(7) <= "111110111011"; -- -0.03347988549507

COEFF(8) <= "111110101010"; -- -0.04193952517288

COEFF(9) <= "000001100100"; -- 0.04901745208684

COEFF(10) <= "000110011011"; -- 0.20050124258743

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N) -- 3 D-FFs

begin

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns;

TEMP_2 <= '0'after 3 ns;

FIR_EN <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interfaces

TEMP_2 <= TEMP_1 after 3 ns;

FIR_EN <= RD_S after 3 ns;

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter, synchroner Puls

--

STAGES: process(CLK)

begin

if CLK='1' and CLK'event then -- Registerkette mit synchronem Reset

if RESET_N='0' then

for I in 0 to N loop

STAGE(I) <= (others=>'0') after 3 ns;

end loop;

elsif RD_S = '1' then -- Enable Shifting

-- Laden des Übernahmeregisters, nur sign und 11 significant bits

STAGE(0)<= signed(to_stdlogicvector(XN(19 downto 8))) after 3 ns;

for I in N downto 1 loop

STAGE(I) <= STAGE(I-1) after 3 ns;-- shifting

end loop;

end if;

end if;

end process STAGES;

MUL_ADD: process(COEFF,STAGE) -- Filterarithmetik

variable PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

variable ADD: signed(23 downto 0); -- Addierer, m Bits

begin

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 22: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

260 9 Modellierung digitaler Filter

MUL: for I in 0 to N loop -- N+1 Multiplizierer

if (I <= (N/2)) then

PRODUCTS(I) := STAGE(I) * COEFF(I);

else

PRODUCTS(I) := STAGE(I) * COEFF(N-I);

end if;

end loop;

ADD := PRODUCTS(0)(23 downto 0); -- Variableninitialisierung

AKKU: for I in 1 to N loop -- N stufige Addiererkette ab P(1)

ADD := ADD + PRODUCTS(I);

end loop;

ADDA <= ADD after 3 ns; -- Übergabe der letzten Addiererstufe

end process MUL_ADD;

A_REG: process(CLK, RESET_N) -- Übergaberegister

begin

if RESET_N ='0' then

YN <= (others => '0') after 3 ns;

elsif CLK='1' and CLK'event then

if FIR_EN = '1' then -- Ausgangsfreigabe

YN <= to_bitvector(std_logic_vector(ADDA(22 downto 3))) after 3 ns;

end if; -- Inneres Type Casting mit IEEE.numeric_std.all;

end if; -- Äussere Typkonvertierung mit IEEE.std_logic_1164.all;

end process A_REG;

end PARALLEL;

Code 9-2: FIR-Direktform mit Addiererkette realisiert durch eine Akkumulatorvariable. Synchroni-

sation und Pulsverkürzung CLK(fCLK ). N=22, Tiefpass mit fc=10 kHz, fa=48 kHz

Bei der Wahl der Addiererbreite mit Q22 ist zu beachten, dass die Weiterverarbeitung der

kompletten Produktbreite in der Addiererkette eine hohe Präzision liefert, jedoch den Be-

darf an FPGA-Ressourcen (LUTs) erheblich anwachsen lässt. Eine Verkürzung des Pro-

duktvektors durch Abschneiden oder Rundung der niederwertigen Bits auf eine Wortlänge

von 13 Bit im Q11-Format:

PRODUCTS(I)[sign,sign. 21:11)]

führt dazu, dass ein Quantisierungsrauschen eingeprägt wird, das bei geringer Filteraus-

steuerung als messbarer Störpegel ins Gewicht fallen kann [70], [75]. Je nach Anwendung

sind also vorweg MATLAB-Simulationen durchzuführen, die den Einfluss der jeweiligen

Produkt-Wortlängenverkürzung auf den Signal-Rauschabstand analysieren [70].

Die als Signale deklarierten Filterkoeffizienten COEFF sind durch Rundung auf 12 Bit aus

16-Bit Werten hervorgegangen. Da hier feste Werte zugewiesen werden, ergeben sich keine

anderen Syntheseergebnisse als im Fall einer Konstanteninitialisierung im Deklarationsteil

der Architektur mit z.B.:

constant COEFF(1): COEFF_TYPE := x"002"; -- 0.00104312227618

Aufgrund der Koeffizientensymmetrie sind nur N/2+1=12 Arrayelemente und Wertzuwei-

sungen erforderlich, die auch mit hexadezimalen Werten erfolgen können.

Aus den drei Signalzuweisungen im getakteten Prozess PULSE_SHORTER entstehen die

drei D-FFs der Pulsverkürzerschaltung und der Pulsverzögerung nach Bild 9-8. Die Ver-

wendung des Signals TEMP_1 auf der linken und rechten Seite von Zuweisungen in einem

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 23: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

261 9.1 FIR-Filter

getakteten Prozess ist hier korrekt und erzeugt so die Verkettung zweier D-FFs (vgl. Kap.

3.3.3 und Kap. 5.3).

Im getakteten Rahmen des Prozesses STAGES basiert die Schieberegisterfunktion wieder

auf Leseoperationen von Prozessausgangssignalen, die in einer for loop angeordnet

sind. Deren implizit deklarierter Schleifenzählindex I übernimmt die Indizierung von Ar-

ray-Elementen. Der Synthesecompiler löst die Schleifendurchläufe in parallele Zuweisun-

gen auf und setzt so sukzessive die N Stufen der Registerkette des FIR-Filters zusammen.

Mit der ersten Registerstufe STAGE(0) wird das Übernahme- bzw. Entkopplungsregister

nach Bild 9-8 generiert, das nur mit den oberen 12 Bit des im Typ konvertierten Eingangs-

vektors X geladen wird. Aufgrund der hier als Beispiel gewählten Codec-Schnittstelle

werden die unteren, niederwertigen 8 Bit des X-Vektors abgeschnitten, sodass an der posi-

tiven Sprunganregung ein Beitrag in Höhe von lediglich (28-1)2-19=0.00049 fehlt. Eine

aufsteigende Indexzählrichtung liefert für die Verkettung der Register äquivalente Ergeb-

nisse, da in beiden Fällen alle Zuweisungen getriggert durch die positive Taktflanke parallel

erfolgen.

Der Rechts-Schiebevorgang in der Registerkette kann auch mit einer direkten Verkettung

der Array-Elemente durch eine einzige parallele Zuweisung auf alle Elemente formuliert

werden (vgl. Abschnitt 3.3.3). Die Initialisierung im synchronen Reset enthält ein Aggregat

für den 12-Bit-Vektor und ein übergeordnetes Aggregat für alle N+1 Array-Elemente [37]:

STAGES: process(CLK) -- Registerkette, Array-Element-Verkettung

begin

if CLK='1' and CLK'event then

if RESET_N ='0' then

STAGE <= (others => (others =>'0')) after 3 ns; -- Aggregate

elsif RD_S = '1' then -- enable right shift

STAGE <= signed(to_stdlogicvector(XN(19 downto 8))) &

STAGE(0 to N-1) after 3 ns;

end if;

end if;

end process STAGES;

Der Prozess STAGES zeigt zusätzlich ein Entwurfsmuster für die bedingte Abfrage eines

synchronen Resets und einer Freigabe durch das synchronisierte Signal RD_S. Bisher war

aus Sicht der Xilinx FPGA-Ressourcen ein asynchroner einem synchronem Reset vorzuzie-

hen, da nur für den asynchronen Reset ein separater Eingang der Daten-Flipflops zur Ver-

fügung stand. Ein synchroner Reset konnte nur durch Erweiterung des Übergangsschaltnet-

zes an den Dateneingängen der Flipflops wirksam werden, was zu einem Mehrbedarf an

Look-Up-Tabellen geführt hat. Mit Einführung der Spartan-3-FPGAs und seit der Version

ISE 7.1i des Implementierungswerkzeuges werden nun beide Reset-Arten an einen gemein-

samen separaten D-FF-Eingang geführt [48], [81].

Der kombinatorische Prozess MULL_ADD modelliert die Filterarithmetik im Stil einer

Verhaltensbeschreibung, wie es auch in sequentiellen Programmiersprachen üblich ist. Der

Einsatz von Variablen zusammen mit den Array-Typen ist gerade für diese verdichtete

Codierung in einem einzigen kombinatorischen Prozess vorgesehen. Um näher an der

Struktur in Bild 9-1 zu bleiben, sind im Code 9-2 zwei sequentielle Schritte dargestellt. Die

erste for loop mit dem Label MUL erzeugt die N+1 parallellen Produkte, wobei N/2

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 24: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

262 9 Modellierung digitaler Filter

Koeffizienten aufgrund der Symmetrie für die PRODUCTS(I) mit I>N/2 wiederholt genutzt

werden.

Für die Addiererkette in der for loop mit dem Label AKKU ist ein kompakter Akkumu-

lator gewählt worden, da nur der letzte Ergebniswert der Variable ADD für die Speicherung

im Übergaberegister relevant ist und alle Zwischenwerte der Kette nicht an anderer Stelle

im Prozess verarbeitet werden müssen. Auf diese Art wird für die Kette auch ein Array von

Addierervariablen eingespart. Nicht übersehen werden darf die erforderliche Variableniniti-

alisierung zu Beginn der Bearbeitungsschleife. Variablen ist ein Wert zuzuweisen, bevor

ein erster Lesevorgang stattfindet, da ansonsten ein nicht angestrebtes Gedächtnis in Form

eines Latches inferiert wird, das aus den D-FF-Ressourcen mit kombinatorischer Beschal-

tung des Takteingangs entsteht (vgl. Kap. 3.4). Diese Fehler könnten bei der VHDL-

Simulation unerkannt bleiben, bei sorgfältiger Beachtung der Details in den Synthesere-

ports fallen jedoch spätestens die deutlichen Latch-Warnhinweise auf.

Eine vereinfachte Variante des Prozesses MULL_ADD zur Zusammenführung der beiden

for loop-Konstrukte ohne separates Array für die Produkte zeigt der folgende Codeab-

schnitt:

ADD := STAGE(0) * COEFF(0); -- Variableninitialisierung

MUL_AKKU: for I in 1 to N loop -- Addiererkette ab I = 1

if (I <= (N/2)) then

ADD := ADD + STAGE(I) * COEFF(I);

else

ADD := ADD + STAGE(I) * COEFF(N-I);

end if;

end loop;

Das Übergaberegister A_REG, das im Szenario nach Abschnitt 9.1.4.1 mit dem Codec-

Interface gekoppelt ist, speichert den auf 20 Bit verkürzten Ergebniswert ADDA (m=24),

kurz bevor der verzögerte Freigabepuls FIR_EN wieder auf '0' wechselt (vgl. Bild 9-8). Das

zweite Vorzeichen ADDA(23) kann wegfallen, da die konservative Filterskalierung nach

Gl. 9-11 mit L1=1.5009 die Überlauffreiheit des letzten Addierers in der Kette garantiert. Es

muss sogar entfernt werden, da ansonsten ein halbierter Wert an das Codec-Interface über-

geben würde. Die unteren, abgeschnittenen drei Bit ADDA(2 downto 0)repräsentieren

einen relativen Anteil von maximal (vgl. Tabelle 9-2):

Gl. 9-13 Δ = ((1 - 2-22) – (1 - 2-19))/( 1 - 2-22) ≈ 2-19

Zur Typkonvertierung von der Arithmetikebene zurück auf die bit_vector-Schnittstelle

sind zwei Schritte erforderlich, die durch die eingebundenen Bibliotheken unterstützt wer-

den (vgl. Kap. 0, 5.4 u. 12). Der erfahrene Entwickler wird eine Stufe umgehen, indem er

alle Schnittstellen der Entwurfskomponenten und der Testbenches direkt mit dem mehrwer-

tigen Typ std_logic_vector codiert. Damit ergibt sich eine bessere Kompatibilität

der VHDL-Module, da die Post-Layout-Simulationsmodelle durchgängig Schnittstellen mit

dem Typ std_logic_vector bzw. std_logic anbieten und alle IP-Cores aus dem

Xilinx Core Generator (vgl. Abschnitt 7.4.2) [87] oder kommerziell erworbene Module

ebensolche Schnittstellen enthalten.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 25: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

263 9.1 FIR-Filter

Die VHDL-Simulation der Sprungantwort Y des FIR-Filtermodells nach Code 9-2 mit der

Anregung X=7FFFFHex=(219 -1) (oder 1-2-19 im Q19-Format) zeigt Bild 9-9. Mit dem For-

mat der Analogdarstellung bietet der Simulator ModelSim [59] eine Visualisierung von

Signalzeitverläufen, die einen qualitativen Vergleich mit den MATLAB-Ergebnissen er-

leichtert (vgl. Bild 9-7). Der Simulator stellt vorzeichenbehaftete Integer-werte oder Hex-

Werte dar, da die Strategie des Q-Formates nur der Entwurfssichtweise des Entwicklers

entspricht. Ein Vergleich des Filterausgangsignals Y mit der Sprungantwort nach Bild 9-7

zeigt, dass Abweichungen der Maximal- und Endwerte lediglich auf der 4. Nachkommast-

elle vorliegen (vgl. Tabelle 9-3), die sich mit den auf Q11 reduzierten Koeffizienten erklä-

ren lassen.

Bild 9-9: Sprungantwort Y des FIR-Filtermodells mit Addiererkette nach Code 9-2. Differenz DIFF

zweier Modelle mit unterschiedlichen Vektorbreiten der Addiererstufen. N+1 Freigabepulse READY

Zur quantitativen Bewertung der Auswirkungen einer reduzierten Addiererbreite mit 13

statt mit 24 Bit sind in Bild 9-9 zusätzlich die Simulationsergebnisse einer erweiterten

Testbench FIR_TB_COMP dargestellt, die zwei FIR-Modelle instanziiert und deren Diffe-

renz DIFF=Y-Y_S berechnet. Im Prozess MUL_ADD (vgl. Code 9-2) des zweiten FIR-

Modells (Y_S) wurde dazu eine modifizierte AKKU for loop realisiert, die schmalere

Addierer instanziiert, um den FPGA-Ressourcenbedarf zu reduzieren:

ADD := PRODUCTS(0)(23 downto 11); -- Verkürzung der Produkte auf Q11

for I in 1 to N loop -- Addiererkette mit weniger FPGA-Ressourcen

ADD := ADD + PRODUCTS(I)(23 downto 11); -- Verkürzung auf 13 Bit inkl. 2sign

end loop;

Die Abweichung DIFF in Bild 9-9 wächst an, da das FIR-Modell mit dem Ausgang Y_S

aufgrund der reduzierten Addiererbreite mit Q11 kleinere Beiträge akkumuliert. Die maxi-

male relative Abweichung für dieses Beispielfilter beträgt nach Tabelle 9-3 etwa 1%. Im

Gegenzug dazu werden für das FIR-Filter nach Code 9-2 mit reduzierter Addiererbreite nur

1222 statt 1548 Look-Up-Tabellen (LUT) eingesetzt.

DIFF

Y

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 26: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

264 9 Modellierung digitaler Filter

Tabelle 9-3: Quantitativer Vergleich zweier FIR-Modelle nach Code 9-2 mit unterschiedlichen

Addiererbreiten; Referenz |Ymax|=219-1=524287Dez , vgl.Bild 9-9

Zur Überprüfung des Codierstils im FIR-Filtermodell nach Code 9-2 ist in Bild 9-10 das

Syntheseergebnis für ein Spartan-3-FPGA als komprimiertes Abbild des RTL-Schaltplans

dargestellt, der vom XST-Compiler des Werkzeugs ISE 13.4 erzeugt wurde [81]. Aller-

dings muss zu Identifizierung der FIR-Strukturen zusätzlich der ISE-FPGA-Editor genutzt

werden, da im RTL-Schematic ab der Version ISE 12.4 keine vollständige Verdrahtung der

Arithmetikoperatoren mehr offengelegt wird.

Bild 9-10: Syntheseergebnis der Addiererkette für die Produkte PRODUCTS(I) (Pi) nach Code 9-2.

XC3S400-5PQ208 FPGA; ISE 13.4, Signallaufzeit 41.81 ns (23.9 MHz) im Pfad mit dem Produkt

PRODUCTS(0) und N=22 Addiererstufen

Die Struktur des Syntheseergebnisses, das dem Bild 9-10 zugrunde liegt, zeigt:

Aus der for loop der Akkumulatorvariablen ADD (Label AKKU im Code 9-2)

ergibt sich eine N stufige Addiererkette, da die Schleifenbearbeitung für den Synthese-

compiler eine Anweisung zur parallelen Inferenz von Einzelelementen darstellt, die zur

Übersetzungszeit ausgewertet wird.

Für das hier analysierte Beispielfilter sind statt der N+1=23 Multiplizierer nur 21 expli-

zite Produkte (Pi) gebildet worden, da die Koeffizienten c1=c21=002Hex nur an einer Bit-

Stelle eine ’1’ enthalten (vgl. Code 9-2). Die folgende Codezeile wurde für I=1

PRODUCTS(I) := STAGE(I) * COEFF(I);

+

++

+

+

P22

ADDA

P0 P2 P4 P5P3 P6

+

P20P19 P21

+

P1

+ + +

Ausgangssignal Y Y_S DIFF = Y – Y_S

Produkt- u. Addiererbreite Q22 Q11 -

Stationärer Endwert 55455Hex

349269Dez

54600Hex

345600Dez

E55Hex

3669Dez

Endwert/Referenz 0.66618 0.65918 0.006998

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 27: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

265 9.1 FIR-Filter

durch den Synthesecompiler in eine Verkettung mit 12 Sign-Bits und 12 Fractional-Bits

umgewandelt

PRODUCTS(1) := STAGE(1)(11) & ... STAGE(1)(11)&

STAGE(1)(10) & ...STAGE(1)(0) & ’0’;

Diese Zeile repräsentiert eine 1-Bit-Linksschiebeoperation der Registerstufe STAGE(1)

und eine vorzeichenrichtige Erweiterung mit dem MSB STAGE(1)(11) auf 24 Bit.

Die von der Post-Place & Route-Timinganalyse des ISE 13.4 Werkzeugs angezeigte,

maximal zulässige Taktfrequenz von 23.9 MHz liegt weit unter dem Wert von fCLK=48

MHz, der für das Codec-Filter-Szenario nach Abschnitt 9.1.4.1 vorgegeben war. Es sind

also VHDL-Modelle zu entwickeln, die zu Addiererstrukturen mit einer minimalen An-

zahl von Addiererstufen führen.

Das FIR-Filtermodell nach Code 9-2 stellt die Grundlage für weitere Entwurfsschritte dar,

die auf einen balancierten Addiererbaum mit exakt 3.32log(N+1) Addiererstufen abzielen.

9.1.4.3 Direktform mit symmetrisch balanciertem Addiererbaum

Für die Direktform des FIR-Filters ist ein balancierter Addiererbaum anzustreben, da nur

mit diesem Addiereraufbau die kürzesten Signallaufzeiten und der geringste Registerauf-

wand für den Fall mit Pipeliningstufen zu erreichen sind (vgl. Abschnitt 9.1.1). Ziel ist eine

Filter-Modellierung für den Typ 1 nach Gl. 9-5 mit gerader Filterordnung N.

Als Grundlage für die weiteren Schritte wird in diesem Abschnitt ein VHDL-Modell erläu-

tert, das zu den Spezialfällen N+1=L=2p (N ungerade; L Filterlänge) einen vollständig

symmetrischen, balancierten Addiererbaum liefert, dessen p=ld(L) Addiererstufen jeweils

2p-1

,…, 8, 4, 2, 1 Addierer enthalten. Der Prozess MUL_ADD in Code 9-3 passt direkt

zum Code 9-2, der lediglich durch ein Array für die Addierer-Variablen ADD(I) und ein

generic AAST=p zu ergänzen ist, das die Anzahl der Addiererstufen angibt:

type ADD_TYPE is array(0 to N-1) of signed(23 downto 0);-- 2sign, Q22

Die erste Addiererstufe mit L/2 Addierern verknüpft paarweise die gewichteten Ausgänge

der Registerkette (for loop ADD_ST1). Die weiteren Stufen entstehen aus der iterati-

ven Kopplung von Ausgängen der vorgelagerten Addiererstufen (for loop BAB).

MUL_ADD: process(COEFF,STAGE)

variable PRODUCTS: PRODUCTS_TYPE; -- N+1=L Multiplizierer-Array, m Bits

variable ADD: ADD_TYPE; -- N Addierer-Array , m Bits

variable INDEX: integer range 0 to (N+1)/2; -- reduziert Baumbreite

variable K: integer range 0 to N; -- Offset Addierer-Index

variable P: integer range 0 to N; -- Offset Summanden-Index

begin

MUL: for I in 0 to N loop -- N ungerade

if (I <= (N -1)/2) then

PRODUCTS(I) := STAGE(I) * COEFF(I);-- L Multiplizierer

else

PRODUCTS(I) := STAGE(I) * COEFF(N-I);

end if;

end loop;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 28: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

266 9 Modellierung digitaler Filter

ADD_ST1: for I in 0 to (N-1)/2 loop -- 1. Addiererstufe: L/2 Addierer

ADD(I) := PRODUCTS(I*2) + PRODUCTS(I*2 + 1);

end loop;

INDEX := 1;

K := (N +1)/2;

P := 0;

BAB: for J in 0 to (AAST - 1) - 1 loop -- 2. bis Stufe ld(L)

INDEX := INDEX * 2;

for I in 0 to ((N+1)/2)/INDEX -1 loop

ADD(I + K) := ADD(I*2 + P) + ADD(I*2 + P +1);

end loop;

P := K;

K := K + ((N+1)/2) / INDEX;

end loop;

ADDA <= ADD(N-1) after 6 ns;-- Ergebnis an Übergaberegister

end process MUL_ADD;

Code 9-3: Prozess zur iterativen, gepaarten Addierer-Kopplung für L=2 p, N ungerade

Für die Variablen zur Schleifensteuerung (BAB) in Code 9-3 gilt:

Der Schleifenindex J zählt die Addiererstufen von der 2. bis zur letzten p=ld(L).

Der Index I der inneren Schleife zählt die Addierer in einer Stufe.

Die Anzahl der Addierer in einer Stufe ist durch 2er-Potenzen gegeben und wird durch

den Wert INDEX=2, 4,…, L/2 von Stufe zu Stufe reduziert.

Mit dem Index P wird der erste Addiererausgang aus der vorausgehenden Stufe indi-

ziert. Zusammen mit I werden so die Arrayelemente angesprochen, die die Summanden

bilden.

Der Index K benennt das erste Addiererergebnis aus der aktuellen Addiererstufe. Für

die nächste Stufe wird K mit der Anzahl der Addierer in der bearbeiteten Stufe aktuali-

siert.

Die Wirkung dieser Indizes, die den Aufbau eines balancierten Addiererbaums steuern,

verdeutlicht das Syntheseergebnis in Bild 9-11. Die Laufzeitpfade in dieser Filterrealisie-

rung sind durch symmetrische Schaltnetze bestimmt, die jeweils aus einem Block-

Multiplizierer und p=ld(L) Addieren bestehen.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 29: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

267 9.1 FIR-Filter

Bild 9-11: Balancierter Addiererbaum als Syntheseergebnis des Prozesses nach Code 9-3 mit ISE

11.1; L=16, p=4. Indizes der iterativen Addierer-Kombination.; Signallaufzeit 18.1 ns mit ISE 13.4

Die beispielhaft vorgegebene Taktfrequenz fCLK=48 MHz (vgl. Abschnitt 9.1.4.1, Bild 9-8)

wird mit dem Ergebnis 55.2 MHz der Implementierung mit ISE 13.4 erreicht. Zur weiteren

Verkürzung der Signallaufzeit kann eine Pipeliningstufe z.B. hinter der ersten Addierer-

stufe (ADD(0) - ADD(L/2 -1)) eingeführt werden, sodass zwei Schaltnetzbereiche entste-

hen:

– L Multiplizierer gekoppelt mit der ersten Addiererstufe, bestehend aus L/2 Addierern.

– p-1=3 Addiererstufen mit L/2-1=7 Addierern.

Der Prozess MUL_ADD aus Code 9-3 wird dazu in einen getakteten Prozess

MUL_ADD_REG und einen kombinatorischen Prozess BAB aufgeteilt (vgl. Code 9-4). Da

die Variablen PRODUCTS(I) im getakteten Rahmen zuerst eine Zuweisung erhalten, bevor

P14

P15

P0

P1

P2

P3

P4

P5

P6

P7

P8

P9

P10

P11

P12

P13

ADD0

ADD1

ADD2

ADD3

ADD4

ADD5

ADD6

ADD7

1. Addiererstufe

2. Addiererstufe

ADD8

3. AddiererstufeADD9

ADD10

ADD11

ADD12

ADD13 ADD14

4. Addiererstufe

J = 0, K = 8, P = 0

Index = 2

I = 0

I = 0

J = 1, K = 12, P = 8

Index = 4

J = 2, K = 14, P = 12

Index = 8

I = 1

I = 0

I = 1

I = 2

I = 3

YN

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 30: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

268 9 Modellierung digitaler Filter

sie gelesen werden, bilden sie die erste Ebene des Übergangsschaltnetzes für die Pipeline-

register ADDS(I), ohne dass sie zu Flipflops synthetisiert werden (vgl. Kapitel 3.6.1). Die

Pipelineregister übernehmen als interne Koppelsignale im kombinatorischen Prozess BAB

die Initialisierung der ersten L/2 Variablen ADD(I). Zur Freigabe der Pipelinestufe dient

der Puls FIR_EN aus der Freigabekette nach Bild 9-8, die um ein D-Flipflop zu verlängern

ist, damit der so um 1/fCLK verzögerte Puls FIR_EN das Übergaberegister im Prozess

A_REG freigeben kann. Mit jeder Pipelinestufe ist also auch die zugehörige Freigabekette

zum Laufzeitausgleich durch ein Flipflop zu ergänzen.

MUL_ADD_REG: process(CLK, RESET_N)

variable PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

begin

if RESET_N = '0' then

for I in 0 to (N-1)/2 loop

ADDS(I) <= (others => '0') after 3 ns;

end loop;

elsif (CLK'event and CLK = '1') then

if (FIR_EN = '1') then

for I in 0 to N loop -- N = 15

if (I <= (N -1)/2) then

PRODUCTS(I) := STAGE(I) * COEFF(I);-- N+1 Multiplizierer

else

PRODUCTS(I) := STAGE(I) * COEFF(N-I);

end if;

end loop;

for I in 0 to (N-1)/2 loop -- 1. Stufe (N+1)/2 Register

ADDS(I) <= PRODUCTS(I*2) + PRODUCTS(I*2 + 1) after 3 ns;

end loop;

end if;

end if;

end process MUL_ADD_REG;

BAB: process(ADDS)

variable ADD: ADD_TYPE; -- Addierer Register, m Bits

variable INDEX: integer range 0 to (N+1)/2; -- reduziert Baumbreite

variable K: integer range 0 to N; -- Offset Addierer-Index

variable P: integer range 0 to N; -- Offset Summanden-Index

begin

for I in 0 to (N-1)/2 loop

ADD(I) := ADDS(I); -- Register-Übergabe an Summanden der 2. Stufe

end loop;

...

end process BAB;

Code 9-4: Synthese eines balancierten Addierbaums mit Pipelinestufe ADDS(I); L=16, p=4

Die Timinganalyse liefert für eine Implementierung mit 16 Block-Multiplizierern eine

maximale Signallaufzeit von 10.46 ns (95.6 MHz) im zweiten Schaltnetzbereich zwischen

ADDS(0) – YN. Bei der Implementierung mit LUT-basierten Multiplizierern entsteht der

längste Signallaufzeitpfad mit 11.14 ns im ersten Schaltnetzbereich zwischen den Registern

STAGE(10) − ADDS(5). Dieser Halbierung der Signallaufzeit steht ein Mehraufwand von

maximal 8*24=192 Daten-Flipflops (2.4% des Xilinx Spartan-3-FPGAs XC3S400) gegen-

über.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 31: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

269 9.1 FIR-Filter

9.1.4.4 Direktform mit unsymmetrisch balanciertem Addiererbaum

Im allgemeinen Fall L≠2p (p in |N) treten in den 3.32log(L) Addiererstufen unsymmetri-

sche Addierergruppierungen auf. Diese werden im Folgenden analysiert, um für die auto-

matische Generierung der Addiererstufen mit for loop-Konstrukten geeignete Steuerbe-

dingungen zu entwickeln. Die Entwicklungsschritte der VHDL-Modelle werden sukzessive

mit Überprüfung der jeweiligen Syntheseergebnisse vorgestellt.

In FIR-Filtern mit gerader Ordnung N (vgl. Gl. 9-5) bleibt bei der Summanden-Paarbildung

der ersten Addiererstufe (AST) immer eins der L Produkte übrig, sodass dieses Produkt in

einer der nächsten Stufen als Summand aufgenommen werden muss. Hinzu kommt, dass

die Addiererstufen nicht mehr eine gerade Anzahl von Addierern enthalten, die einer 2er-

Potenz entspricht. Demnach treten Addiererfolgestufen auf, denen eine ungerade Anzahl

von Summanden angeboten wird. Der für eine Summanden-Paarbildung nicht nutzbare

Addiererausgang muss also in einer der nächsten Addiererstufen ein Summandenpaar un-

terstützen. Beispiele für diese Unsymmetrien und deren Handhabung verdeutlichen Bild

9-12 und Bild 9-13.

Bild 9-12: Addiererbaum für ein FIR-Filter mit der Ordnung N=10, N/2 ungerade. Stufe 2 nimmt

Produkt P10 auf. Ausgang Ai+2 kann erst in Stufe 4 als Ai+4 verarbeitet werden

Mit einer ungeraden Anzahl N/2 von Addierern in der ersten Stufe ergibt sich die Konfigu-

ration, dass das Produkt PN schon in der 2. Stufe ein Summandenpaar mit einem

Addiererausgang aus der 1. Stufe bilden kann (vgl. P10 in Bild 9-12). Eine zweite Struktur-

eigenschaft ist festzustellen, sofern eine tiefer gelegene Addiererstufe eine ungerade Anzahl

von Addieren aufweist und das Produkt PN schon verarbeitet worden ist. Dann ist nämlich

ein Addiererausgang über die folgende Stufe hinaus als Summand zu übergeben. In Bild

9-12 gilt dies für den Addiererausgang Ai+2 aus der 2. Stufe, der in der 4. Stufe zur Weiter-

verarbeitung als Ai+4 mit Ai+3 verknüpft wird. Die Aufnahme eines weitergereichten

Addiererausgangs erfolgt also immer in einer Stufe, der eine Stufe mit ungerader Anzahl

von Addierern vorausgeht, um die Ergänzung eines Summandenpaars zu erreichen.

Damit jede Stufenauswertung mit einer leicht berechenbaren Indizierung der Summanden

arbeiten kann, findet dieses Weiterreichen von Addiererergebnissen durch Variablenzuwei-

++ + + +

Ai+5

P0 P2 P4 P6 P8 P10

+

+

+ +

+

P1 P3 P5 P7 P9

Ai

Ai+1 A

i+2

Ai+3 A

i+4

AST

1.

2.

3.

4.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 32: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

270 9 Modellierung digitaler Filter

sungen statt, die einen Positionstausch im Variablen-Array bedeuten (vgl. Ai+4=Ai+2 in Bild

9-12). Das Addierer-Array ist deshalb größer auszulegen (vgl. Code 9-5).

Eine weitere Struktureigenschaft der Addiererbäume für gerade N ist im Fall N/2 gerade

festzuhalten. In Bild 9-13 ist dies exemplarisch mit einem Produkt PN=P12 dargestellt, das

nicht in der 2. Stufe sondern in der folgenden 3. Stufe von einem Addierer Ai+4 erfasst wird.

Die Aufnahme des Produktes führt also jeweils die Stufe durch, die wie auch in Bild 9-12

eine ungerade Anzahl von Addiererausgängen als Eingänge erhält. Je nach Filterordnung N

und resultierender Struktur kann die Verarbeitung des Produktes PN bis zum letzten

Addierer verschoben werden.

Bild 9-13: Addiererbaum für ein FIR-Filter mit der Ordnung N=12, N/2 gerade. Produkt P12 kann

erst in Stufe 3 als Summand aufgenommen werden

Zusammenfassend lassen sich drei Strukturmerkmale beim Aufbau eines unsymmetrisch

balancierten Addiererbaumes für gerade Filterordnungen N hervorheben:

Das separate Produkt PN wird für N/2 ungerade in der 2. Addiererstufe verarbeitet, die

nur eine ungerade Anzahl N/2 von Addiererausgängen angeboten bekommt.

Für N/2 gerade kann das separate Produkt PN in der Stufe aufgenommen werden, die

als erste eine ungerade Anzahl von Addiererausgängen angeboten bekommt.

Nach Aufnahme des separaten Produktes PN können weitere Stufen mit ungerader

Anzahl von Addiererausgängen auftreten. Der nicht für eine Paarbildung nutzbare

Summand wird an die folgende Stufe weitergereicht und dazu auf einen Pseudo-

Addiererausgang umbenannt. Dieser Vorgang der Umbenennung kann über mehrere

Stufen erfolgen, sodass eine größere Anzahl (>N) der Addierer-Arrayelemente zu dekla-

rieren ist.

Der VHDL-Code der entity FIR_DIRECT_BAB mit Modellierung des balancierten

Addiererbaumes in einem einzigen Prozess für N=22 und N/2 ungerade ist als Code 9-5

auf den folgenden Seiten komplett dargestellt, um die Lesbarkeit der Zusammenhänge zu

unterstützen.

++ + + +

Ai+5

P0 P2 P4 P6 P8 P10

+

+

+ +

+

P1 P3 P5 P7 P9

Ai Ai+1 Ai+2

Ai+3 Ai+4

+

P11 P12

+

AST

1.

2.

3.

4.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 33: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

271 9.1 FIR-Filter

-- FIR Filter in Direktform, fc = 10 kHz , Abtastfrequenz 48 kHz -- Allgemeine Lösung für unsymmetrisch balanciert. Addiererbaum, N=22 gerade

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all; -- liefert signed u. unsigned typen

entity FIR_DIRECT_BAB is

generic

( DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20;

N: positive := 22 ; -- Filterordnung N gerade

AAST: positive := 5); -- Anzahl Addiererstufen Γld(N+1) port

(CLK: in bit; -- Taktsignal, fCLK = 48 MHz

RESET_N: in bit; -- asynchron, active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0)); -- Signal zum DAC

end FIR_DIRECT_BAB;

architecture PARALLEL of FIR_DIRECT_BAB is

type STAGE_TYPE is array(0 to N) of signed(11 downto 0); -- Registerkette

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0);--Koeffizienten

type PRODUCTS_TYPE is array(0 to N) of signed(23 downto 0); -- Produkte

type ADD_TYPE is array(0 to N -1 + AAST -3) of signed(23 downto 0);

--

signal STAGE: STAGE_TYPE; -- Registerstufen mit Übernahmereg. j Bits

signal COEFF: COEFF_TYPE; -- Positive Symmetrie; l Bits

signal ADDA: signed(23 downto 0); -- letzte Addiererstufe, Q 22, 2sign Bits

signal TEMP_1, TEMP_2,RD_S, FIR_EN: bit ; -- Freigabepulse

begin -- Koeffizienten-Array Q11-Elemente

COEFF(0) <= "000000000011"; -- 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618 nur shift u. sign-ext.

COEFF(2) <= "111111111011"; -- -0.00254297568453

COEFF(3) <= "111111110101"; -- -0.00546703115960

COEFF(4) <= "000000000110"; -- 0.00272867876211

COEFF(5) <= "000000100010"; -- 0.01672858094360

COEFF(6) <= "000000001110"; -- 0.00662913854437

COEFF(7) <= "111110111011"; -- -0.03347988549507

COEFF(8) <= "111110101010"; -- -0.04193952517288

COEFF(9) <= "000001100100"; -- 0.04901745208684

COEFF(10) <= "000110011011"; -- 0.20050124258743

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N)

begin

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns; TEMP_2 <= '0'after 3 ns;

FIR_EN <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

FIR_EN <= RD_S after 3 ns; -- Freigabe des Übergabereg.

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Puls STAGES: process(CLK) -- Register mit Array-Element-Verkettung

begin

if CLK='1' and CLK'event then

if RESET_N ='0' then

STAGE <= (others => (others =>'0')) after 3 ns; -- Array-Aggregat

elsif RD_S = '1' then -- enable right shift

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 34: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

272 9 Modellierung digitaler Filter

STAGE <= signed(to_stdlogicvector(XN(19 downto 8))) &

STAGE(0 to N-1) after 3 ns;

end if;

end if;

end process STAGES;

MUL_ADD: process(COEFF,STAGE) -- Komplette Filterarithmetik

variable PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, Q22, 2 sign Bits

variable ADD: ADD_TYPE; -- Addierer, m Bits: Q22, 2 sign Bits

variable AANZ: integer range 0 to N/2; -- Anzahl Addierer pro Stufe

variable K: integer range 0 to N -1 + AAST -3; -- Offset Addierer-Index

variable P: integer range 0 to N; -- Offset Summanden-Index

variable REST, PRODN: integer range 0 to 1; -- zusätzliche Strukturmerkmale

begin

MUL: for I in 0 to N loop -- N+1 Multiplizierer

if (I <= N/2) then

PRODUCTS(I) := STAGE(I) * COEFF(I);

else

PRODUCTS(I) := STAGE(I) * COEFF(N-I);

end if;

end loop;

ADD_ST1: for I in 0 to N/2 -1 loop -- 1. Addiererstufe N/2 Addierer

ADD(I) := PRODUCTS(I*2) + PRODUCTS(I*2 + 1);

-- PRODUCTS(N) separates Produkt fehlt hier für N gerade

end loop;

K := N/2;-- Offset nach 1. Addiererstufe mit N/2 Addierern

P := 0;

AANZ := N/2;

PRODN := 0; -- separates Produkt nicht erfasst

BAB: for J in 0 to (AAST - 1) - 1 loop -- 2. bis Stufe Γld(N+1) REST := AANZ rem 2; -- ungerade Anzahl von Summanden?

AANZ := AANZ/2 + REST; -- ggf. Addierer f. separates Produkt

for I in 0 to AANZ - 1 loop

if ((REST > 0) and (PRODN = 0) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P) + PRODUCTS(N);

PRODN := 1; -- separates Produkt erfasst

elsif ((REST > 0) and (PRODN = 1) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P); -- Ausgang weiterreichen

else

ADD(I + K) := ADD(I*2 + P) + ADD(I*2 + P +1); -- Addierer

end if;

end loop;

P := K;

K := K + AANZ;

end loop;

ADDA <= ADD(P) after 6 ns; -- Ergebnis des BAB

end process MUL_ADD;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 35: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

273 9.1 FIR-Filter

A_REG: process(CLK, RESET_N)

begin

if RESET_N ='0' then

YN <= (others => '0') after 3 ns;

elsif CLK='1' and CLK'event then

if FIR_EN = '1' then -- Ergebnis in Übergaberegister

YN <= to_bitvector(std_logic_vector(ADDA(22 downto 3))) after 3 ns;

end if; -- Inneres Type Casting mit IEEE.numeric_std.all;

end if; -- Äussere Typkonvertierung mit IEEE.std_logic_1164.all;

end process A_REG;

end PARALLEL;

Code 9-5: FIR-Direktform mit balanciertem Addiererbaum N=22, N/2 ungerade. Synchronisation

und Pulsverkürzung CLK(fCLK). Tiefpass mit fc=10 kHz, fa=48 kHz

Ein zusätzliches Generic AAST ist im Code 9-5 enthalten, das die Anzahl ld(L) der

Addiererstufen kennzeichnet. Die Addierervariable ADD ist ein Array vom Typ

ADD_TYPE, dessen Länge zur Handhabung der Addierer-Umbenennungen um den Wert

AAST-3 vergrößert ist:

type ADD_TYPE is array(0 to N -1 + AAST -3) of signed(23 downto 0);

Der Worst-Case-Wert AAST ist um 3 zu reduzieren, da

– die erste Stufe die Produktpaare addiert,

– die letzte Stufe nur einen Addierer enthält und

– eine Stufe das separate Produkt PRODUCTS(N) aufnimmt.

Der Prozess MUL_ADD, der den balancierten Addiererbaum modelliert, ist in drei for

loops gegliedert, die die Produkte (MUL), die 1. Addiererstufe (ADD_ST1) und den

balancierten Addiererbaum (BAB) iterativ aufbauen. Diese separate Codierung erleichtert

die spätere Integration einer Pipelinestufe hinter der 1. Addiererstufe.

Für die Variablen zur Schleifensteuerung gilt hier im Abschnitt mit dem Label BAB wie im

Code 9-3 zum Idealfall mit L=2p (vgl. Bild 9-11):

Der Schleifenindex J zählt die Addiererstufen von der 2. bis zur letzten ld(N+1).

Der Index I der inneren Schleife zählt die Addierer in einer Stufe.

Die Anzahl AANZ der Addierer in einer Stufe wird von Stufe zu Stufe reduziert.

AANZ := AANZ/2 + AANZ rem 2

Die Rechnung mit dem Operator rem (vgl. Tabelle 5-2) zum Integerdivisionsrest liefert

die nun geraden bzw. ungeraden Werte.

Mit dem Index P wird der erste Addiererausgang aus der vorausgehenden Stufe indi-

ziert. Zusammen mit I werden so die Arrayelemente angesprochen, die die Summanden

bilden.

Der Index K benennt das erste Addiererergebnis aus der aktuellen Addiererstufe. Für

die nächste Stufe wird K mit der Anzahl der Addierer AANZ der bearbeiteten Stufe ak-

tualisiert.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 36: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

274 9 Modellierung digitaler Filter

Entsprechend zu den identifizierten Strukturmerkmalen wird die Bearbeitung des unsym-

metrisch balancierten Addiererbaums zusätzlich durch die Variablen REST und PRODN

gesteuert (vgl. Label BAB im Code 9-5):

Der rem Remainder-Operator liefert den Rest der Integerdivision AANZ/2. Mit

REST=1 ist also angezeigt, dass eine ungerade Anzahl AANZ von Addiererausgängen

für die Additionen in einer Stufe zur Verfügung stehen. Demnach ist unter dieser Be-

dingung das separate Produkt zu addieren oder eine Addierer-Umbenennung durchzu-

führen.

Zu Beginn des Abschnittes BAB ist das separate Produkt PRODUCTS(N) noch nicht

aufgenommen, sodass gilt PRODN=0. Sofern dann die Bedingung REST=1 erfüllt wird,

kann das separate Produkt in einem Addierer mit einem Ausgang einer vorgelagerten

Stufe summiert werden (vgl. Bild 9-13). Diesen Status zeigt die Variable PRODN=1 an,

sodass in den weiteren Stufen unter der Bedingung REST=1 eine Addierer-

Umbenennung stattfinden kann.

Als weitere Bedingung für die oben beschriebene Reaktion auf die Strukturmerkmale ist

der jeweils höchste Indexwert AANZ-1 in der inneren for loop aufgeführt. Durch

die Abweichung vom Idealfall mit L=2p treten nämlich die Symmetriestörungen am

rechten Rand des balancierten Addiererbaumes auf, dort wo die unvollständigen Ver-

zweigungsbereiche mit den Produkten P4, P8, P16, … liegen. Aufgrund der gewählten

Addierer-Indizierung, die die Addierer einer Stufe von links nach rechts mit inkremen-

tierten Indizes versieht (vgl. Bild 9-11), ist so eine einfache Identifikation der Addierer

mit den Unsymmetriemerkmalen gegeben.

Zur Kontrolle der Indexrechnungen kann aus einer VHDL-Simulation (ModelSim [59]) nur

der Vergleich eines korrekten Ausgangssignalverlaufes mit der MATLAB-Referenz und die

Prüfung selektierter interner Signale herangezogen werden. Die Auswertung der Indizes

erfolgt nämlich zur Übersetzungszeit, da die for loops quasi die Instanziierung und

Kopplung von Logik-, Arithmetikelementen und Registern steuern. Über das Wave-

Simulationsfenster lassen sich deshalb auch nur die Endwerte der Größen AANZ, K, P,

REST und PRODN prüfen, die mit der Menue-Kette View → Locals zur Anzeige kommen,

wenn der jeweilige Prozess selektiert wird.

Zur Verdeutlichung des Timings der Freigabeimpulsverkürzung (vgl. Bild 9-8) zeigt Bild

9-14 ein Intervall aus der VHDL-Simulation der Sprungantwort Y, die mit dem 23sten

READY-Puls in den stationären Zustand Y=55455Hex übergeht (vgl. Tabelle 9-3). Zum

Zeitpunkt t1 erreicht die Sprunganregung X die Registerstufe STAGE(22) mit der symboli-

schen Laufzeitverzögerung von 3 ns. Diesen Schiebevorgang von STAGE(21) nach STA-

GE(22) gibt der verkürzte und synchronisierte Puls RD_S frei. Zum Zeitpunkt t2 wird die

Filterarithmetik durch die nun vollständig gefüllte Registerkette angesteuert und reagiert

mit dem aktualisierten Ausgang ADDA=0x2AA2AB nach einer Verzögerung von 6 ns.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 37: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

275 9.1 FIR-Filter

Der gegenüber RD_S um einen Takt verzögerte Puls FIR_EN gibt im Zeitpunkt t3 das

Übergaberegister frei, sodass der 24-Bit-Vektor ADDA an den 20-Bit-Vektor Y übergeben

wird. Diese Vektorverkürzung, bei der ein Sign-Bit und drei niederwertige Bits abgeschnit-

ten werden, ist im Folgenden dargestellt:

ADDA = 2AA2ABHex = 0 010 1010 1010 0010 1010 1 011Bin

Y = 55455Hex = 0101 010 1 0100 010 1 010 1Bin

Bild 9-14: Sprungantwort Y und Freigabepulse des FIR-Filtermodells nach Code 9-5, N=22

Das Syntheseergebnis zum Filtermodell nach Code 9-5 entspricht vollständig der symmet-

rischen Zielstruktur mit ld(22+1)=5 Addiererstufen (vgl. Bild 9-15). Zur Verdeutlichung

der Schleifenindexrechnung des Addiererbaums sind zusätzlich einige Addierervariablen

eingetragen, deren Indizes in dieser Form jedoch nicht mehr im Syntheseergebnis erkenn-

bar sind. Aufgrund von N=22 und N/2 ungerade wird das separate Produkt P22 in der 2.

Stufe aufgenommen. Da die 3. Stufe eine ungerade Anzahl von Ausgängen aufweist, erfolgt

eine Zuweisung des Ausgangs ADD(19) in der 4. Stufe auf den Pseudo-Addierer ADD(21)

(Symbolpunkt), der in der 5. Stufe mit ADD(20) zum Ergebnis ADDA kombiniert wird.

Bild 9-15: Syntheseergebnis für den im Code 9-5 modellierten Addiererbaum mit symmetrischen

Teilbereichen. N=22, max. 5 Addiererstufen; ISE 13.4, maximale Signallaufzeit 20.83 ns (48 MHz)

im Pfad mit einem Multiplizierer und 5 Addiererstufen; STAGE(15)(6) – YN(19)

t1

t2

t3

++ + + + + + + + + +

+

P22

ADDA

P0 P2 P4 P6 P8 P10 P12 P14 P16 P18 P20

+ + + +

+

+ ++ + +

ADD(19)

ADD(0)

ADD(21)ADD(22)

ADD(20)

ADD(11)

ADD(17)

ADD(10)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 38: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

276 9 Modellierung digitaler Filter

Wenn jedoch die Syntheseergebnissse zu einer kompakten RTL-Modellierung von umfang-

reichen Funktionen innerhalb eines einzigen Prozesses die Symmetrieforderungen nicht

erfüllen sollten, dann kann eine Separierung in mehrere Prozesse die symmetrische Struktu-

rierung unterstützen. Mit der Vorläuferversion des Synthesecompilers XST ISE 8.2i ist in

[67] mit Beispielen für gekoppelte getaktete und kombinatorische Prozesse gezeigt worden,

dass so die Syntheseziele erreicht werden.

Zur Demonstration einer solchen Prozesskopplung wird nachfolgend der kombinatorische

Prozess MUL_ADD in Code 9-5 aufgespalten, sodass Variablen durch interne Signale zu

ersetzen sind. Die entity FIR_DIRECT_BAB_P im Code 9-6 enthält nun einen getak-

teten Prozess MUL_ADD, der die Multiplizierer-Addiererstufe mit Pipelineregistern ab-

schließt, sowie den kombinatorischen Prozess BAB, der die übrigen Addierstufen be-

schreibt. Die Kopplung der Prozesse MUL_ADD und BAB erfolgt über das Signal-Array

ADDS und über das separate Produkt PROD (N gerade). Eine Variableninitialisierung

erzeugt im Prozess BAB die Aufnahme der Registerausgänge durch den Addiererbaum.

-- FIR Filter in Direktform, fc = 10 kHz , Abtastfrequenz 48 kHz

-- Balancierter Addiererbaum für N gerade; eine Pipelinestufe

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity FIR_DIRECT_BAB_P is

generic

(DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20;

N: positive := 22 ; -- Filterordnung N; N/2 ungerade

AAST: positive := 5); -- Anzahl Addiererstufen = Γld(N+1) port

(CLK: in bit; -- Taktsignal fclk = 48 MHz

RESET_N: in bit; -- active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0) -- Signal zum DAC

);

end FIR_DIRECT_BAB_P;

architecture PARALLEL of FIR_DIRECT_BAB_P is

type STAGE_TYPE is array(0 to N) of signed(11 downto 0); -- Registerkette

type COEFF_TYPE is array(0 to N) of signed(11 downto 0); -- Koeffizienten

type PRODUCTS_TYPE is array(0 to N) of signed(23 downto 0); -- Produkte

type ADD_TYPE is array(0 to N -1 + AAST -3) of signed(23 downto 0);

type ADDS_TYPE is array(0 to N/2 -1) of signed(23 downto 0);-- 2sign.Q22

--

signal ADDS: ADDS_TYPE; -- Pipelinestufe

signal STAGE: STAGE_TYPE; -- Registerkette mit Übernahmestufe j Bits

signal COEFF: COEFF_TYPE; -- Positive Symmetrie; l Bits

signal ADDA, PROD : signed(23 downto 0); -- separates Produkt, m Bits

signal TEMP_1, TEMP_2,RD_S, FIR_EN, A_REG_EN: bit ;-- zusätzlicher Puls

--

begin

COEFF(0) <= "000000000011"; -- 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618 kein Multiplizierer

COEFF(2) <= "111111111011"; -- -0.00254297568453

COEFF(3) <= "111111110101"; -- -0.00546703115960

COEFF(4) <= "000000000110"; -- 0.00272867876211

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 39: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

277 9.1 FIR-Filter

COEFF(5) <= "000000100010"; -- 0.01672858094360

COEFF(6) <= "000000001110"; -- 0.00662913854437

COEFF(7) <= "111110111011"; -- -0.03347988549507

COEFF(8) <= "111110101010"; -- -0.04193952517288

COEFF(9) <= "000001100100"; -- 0.04901745208684

COEFF(10) <= "000110011011"; -- 0.20050124258743

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N)

begin

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns;

TEMP_2 <= '0'after 3 ns;

FIR_EN <= '0'after 3 ns;

A_REG_EN <= '0' after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

FIR_EN <= RD_S after 3 ns;

A_REG_EN <= FIR_EN after 3 ns; -- zusätzlicher Puls

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Puls

STAGES: process(CLK)

begin

if CLK='1' and CLK'event then --

if RESET_N='0' then

STAGE <= (others => (others=>'0')) after 3 ns;

elsif RD_S = '1' then -- ADC aktualisiert

STAGE <= signed(to_stdlogicvector(XN(19 downto 8))) &

STAGE(0 to N -1) after 3 ns;

end if;

end if;

end process STAGES;

MUL_ADD: process(CLK, RESET_N) -- Pipelinestufe

variable PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

begin

if RESET_N = '0' then

ADDS <= (others => (others => '0')) after 3 ns;-- Array-Aggregat

PROD <= (others => '0') after 3 ns;

elsif (CLK'event and CLK = '1') then

if (FIR_EN = '1') then

for I in 0 to N loop

if (I <= N/2) then

PRODUCTS(I) := STAGE(I) * COEFF(I);-- N+1 Multiplizierer

else

PRODUCTS(I) := STAGE(I) * COEFF(N-I);

end if;

end loop;

for I in 0 to N/2 -1 loop -- 1. Addiererstufe (N+1)/2 Addierer

ADDS(I) <= PRODUCTS(I*2) + PRODUCTS(I*2 + 1) after 3 ns;

end loop;

PROD <= PRODUCTS(N) after 3 ns;-- separates Produktregister

end if;

end if;

end process MUL_ADD;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 40: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

278 9 Modellierung digitaler Filter

BAB: process(ADDS,PROD) -- kombinatorischer Prozess

variable PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

variable ADD: ADD_TYPE; -- Addierer Register, m Bits

variable AANZ: integer range 0 to (N)/2; -- Anzahl Addierer pro Stufe

variable K: integer range 0 to N + AAST - 3; -- Offset Addierer-Index

variable P: integer range 0 to N; -- Offset Summanden-Index

variable REST, PRODN: integer range 0 to 1; -- Zusätzliche Strukturmerkmale

begin

for I in 0 to N/2 - 1 loop

ADD(I) := ADDS(I); -- Initialisierung; Übergabe der 1. Addiererstufe

end loop;

K := N/2; AANZ := N/2;

P := 0; PRODN := 0;

for J in 0 to (AAST - 1) - 1 loop -- 2. bis ld(N+1)'te Stufe

REST := AANZ rem 2;

AANZ := AANZ/2 + REST;

for I in 0 to AANZ - 1 loop

if ((REST > 0) and (PRODN = 0) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P) + PROD;

PRODN := 1; -- separates Produkt erfasst

elsif ((REST > 0) and (PRODN = 1) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P); -- nur weiterreichen

else -- Addier

ADD(I + K) := ADD(I*2 + P) + ADD(I*2 + P +1);

end if;

end loop;

P := K;

K := K + AANZ;

end loop;

ADDA <= ADD(P) after 6 ns; -- Ergebnis in letzter Addiererstufe

end process BAB;

A_REG: process(CLK, RESET_N)

begin

if RESET_N ='0' then

YN <= (others => '0') after 3 ns;

elsif CLK='1' and CLK'event then

if A_REG_EN = '1' then -- Aufnahme in die Übergabestufe

YN <= to_bitvector(std_logic_vector(ADDA(22 downto 3))) after 3 ns;

end if; -- Inneres Type Casting mit IEEE.numeric_std.all;

end if; -- Äusseres Typkonvertierung mit IEEE.std_logic_1164.all;

end process A_REG;

end PARALLEL;

Code 9-6: FIR-Direktform mit balanciertem Addiererbaum N=22, N/2 ungerade und Pipelinestufe

ADDS; separates Produkt PROD. Tiefpass mit fc=10 kHz, fa=48 kHz

Zwei separate Addierer-Arraytypen sind deklariert worden, um die jeweils erforderliche

Elementanzahl sichtbar zu machen:

type ADD_TYPE is array(0 to N -1 + AAST -3) of signed(23 downto 0); --BAB

type ADDS_TYPE is array(0 to N/2 -1) of signed(23 downto 0); -- Register

Insgesamt sind mehr als N=22 Arrayelemente deklariert, die jedoch nicht alle eine Addie-

rer-Synthese implizieren, da die Variablen als Rechenzwischengrößen zur Übersetzungszeit

auf die tatsächlich erforderliche Anzahl von Arithmetikelementen reduziert werden.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 41: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

279 9.1 FIR-Filter

Das symmetrische Syntheseergebnis in Bild 9-16 bestätigt die Koppelwirkung von internen

Signalen, die an eine Variableninitialisierung weitergereicht werden. Der längste Signal-

laufzeitpfad liegt hinter der Pipelinestufe im Addiererbaum mit AAST-1=4 Stufen: 11.95

ns; ADDS(1)(0) – YN(19).

Bild 9-16: Syntheseergebnis des Addiererbaums mit Pipelinestufe nach Code 9-6. N=22 Addierer;

ISE 13.4, maximale Signallaufzeit 11.95 ns (83.6 MHz) im Pfad mit vier Addiererstufen

9.1.4.5 Linear-Phasen-Struktur

Für die meisten Anwendungen in denen die hohe Datenrate eine parallele Filterstruktur

erfordert, ist die Linear-Phasen-Struktur der Direktform vorzuziehen, da die gebräuchlichs-

ten Entwurfsverfahren (Fenster- und Optimalmethode) symmetrische Koeffizienten berech-

nen [74], [75]. Im Fall gerader Filterordnungen N verringert sich dadurch die Zahl der

Multiplizierer von N+1 auf nur noch N/2+1. Diese signifikante Einsparung an

Multiplizierern reduziert den Bedarf an Look-Up-Tabellen für ein Filter auf unter 70%.

Für die Linear-Phasen-Struktur nach Bild 9-2 sind im Fall gerader N folgende Strukturei-

genschaften zu nennen, die den Entwurf des VHDL-Modells in Code 9-7 bestimmen:

Von den N+1 Elementen der Registerkette werden in der ersten Addiererstufe N zu-

sammengefasst, sodass das mittlere Arrayelement STAGE(N/2) nicht verarbeitet wird.

Hinter der Multipliziererebene liegt also ein separates Produkt PRODUCTS(N/2) vor,

das direkt aus der Registerkette gespeist wird.

Liegt nun mit N/2+1 insgesamt eine gerade Anzahl von Produkten vor, so kann das

separate Produkt in der zweiten Addiererstufe aufgenommen werden. Ansonsten findet

für N/2 gerade die Verarbeitung des separaten Produktes in einer der nächsten Addierer-

stufen statt, die mit einer ungeraden Anzahl von Eingängen gespeist wird.

Ein wesentliches Merkmal des VHDL-Entwurfes nach Code 9-7 besteht darin, dass der

kombinatorische Prozess MUL_ADD im ersten sequentiellen Schritt (Label MUL) die

Arrayelemente der Registerkette mit einer vorzeichenrichtigen Erweiterung addiert (vgl.

Abschnitt 9.1.2.1). Da die Registerkette wie bei einer Sprungantwort komplett mit dem

Maximalwert |X|=7FFHex gefüllt sein kann, muss ein Guard-Bit den Übertrag aus der Addi-

tion aufnehmen. Daraus ergibt sich für die Produkte eine Deklaration als 25-Bit-Vektor im

Q22-Format mit 1 Sign-Bit und 2 Guard-Bits:

MUL[sign,guard,guard. 21:0] = STAGE_ADD[sign,guard. 10:0] * COEF[sign. 10:0]

P0 P2 P4 P6 P8 P10 P12 P14 P16 P18 P20

ADDS(0)

++ + + + + + + + + +

+

P22

ADDA

+ + + +

+

+ ++ + +

ADD(19)

ADDS(10)

ADD(21)ADD(22)

ADD(20)

ADD(11)

ADD(17)

PRODADDS(5)

Pipelining-register

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 42: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

280 9 Modellierung digitaler Filter

Die zweite Addiererstufe (Label ST2) fasst die in der Breite reduzierten Produkte mit der

Addierer-Arrayvariablen ADD zusammen. Ein Guard-Bit der Produkte reicht aus, da nur

der Koeffizient cN/2=2fcT ohne Skalierung maximal 1 werden kann (vgl. Gl. 9-12) und

dieser im separaten Produkt auch nur mit einem Register verknüpft ist. Für die Diskussion

zur Überlauffreiheit der internen Addierer sind lediglich die Addierer am rechten Rand der

Linear-Phasen-Struktur in Bild 9-17 relevant. Die fünf rechten Register bringen durch die

Summen einen Maximalwert von 5 ein und für die Koeffizienten gilt:

Hohe Eckfrequenz fc → 1/2T: cN/2 strebt gegen 1, die betragsmäßig relevanten Koeffi-

zienten cN/2-1 und cN/2-2 liegen im Bereich < 0.2.

Niedrige Eckfrequenz fc << 1/2T: Alle genannten Koeffizienten nehmen geringe und

vergleichbare Werte < 0.4 an.

Als Ergebnis dieser Abschätzung kann man also sicher sein, dass insbesondere für die

Additionen der 2. Stufe ein Guard-Bit ausreicht, da der Wertebereich -2 ≤ ADD < 2−1 LSB

auch ohne Skalierung nicht voll ausgeschöpft wird.

-- FIR Filter in Linear-Phasen-Struktur, fc = 10 kHz, Abtastfrequenz 48 kHz -- Ordnung N gerade; N/2 +1 Multiplizierer; balancierter Addiererbaum

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity FIR_RM_BAB is

generic

( DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20;

N: positive := 22 ; -- Filterordnung N gerade

AAST: positive := 5); -- Anzahl Addiererstufen = ld(N+1)

port

(CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- asynchron, active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0) -- Signal zum DAC

);

end FIR_RM_BAB;

architecture PARALLEL of FIR_RM_BAB is

type STAGE_TYPE is array(0 to N) of signed(11 downto 0); -- Registerkette

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0);--Koeffizienten

type PRODUCTS_TYPE is array(0 to N/2) of signed(24 downto 0);--Q22,3 sign

type ADD_TYPE is array(0 to N/2 + AAST - 3) of signed(23 downto 0);

signal STAGE: STAGE_TYPE; -- Register mit Aufnahmestufe j Bits

signal COEFF: COEFF_TYPE; -- Positive Symmetrie; l Bits

signal ADDA: signed(23 downto 0); -- letzte Addiererstufe, Q 22, 2sign Bits,

signal TEMP_1, TEMP_2,RD_S, FIR_EN: bit ; -- Freigabepulse

begin

COEFF(0) <= "000000000011"; -- 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618 kein Multiplizierer

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N)

begin

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 43: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

281 9.1 FIR-Filter

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns;

TEMP_2 <= '0'after 3 ns;

FIR_EN <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

FIR_EN <= RD_S after 3 ns; -- Freigabe des A_REG

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Puls

STAGES: process(CLK) -- Registerkette

begin

if CLK='1' and CLK'event then

if RESET_N='0' then

STAGE <= (others => (others=>'0')) after 3 ns; -- Array-Aggregat

elsif RD_S = '1' then -- ADC aktualisiert

STAGE <= signed(to_stdlogicvector(XN(19 downto 8))) &

STAGE(0 to N -1) after 3 ns;

end if;

end if;

end process STAGES;

-- Filterarithmetik in einem kombinatorischen Prozess

MUL_ADD: process(COEFF,STAGE)

variable PRODUCTS: PRODUCTS_TYPE; -- Q22, 3 sign Bits

variable ADD: ADD_TYPE; -- Q22, 2 sign Bits

variable AANZ: integer range 0 to N/2; -- Anzahl Addierer pro Stufe

variable K: integer range 0 to N; -- Offset Addierer-Index

variable P: integer range 0 to N; -- Offset Summanden-Index

variable REST, PRODN: integer range 0 to 1; -- zusätzliche Strukturmerkmale

begin

MUL:for I in 0 to N/2 -1 loop -- N/2 gerade oder ungerade

PRODUCTS(I) := ((STAGE(I)(STAGE(I)'left) & STAGE(I)) +

(STAGE(N-I)(STAGE(N-I)'left) & STAGE(N-I))) * COEFF(I);

end loop;

PRODUCTS(N/2) := (STAGE(N/2)(STAGE(N/2)'left) & STAGE(N/2))

* COEFF(N/2); -- immer separat für gerade N

PRODN := (N/2) rem 2; -- PRODN = 1 ergänzt AANZ auf gerade

AANZ := (N/2)/2 + PRODN; -- Produkt in 2.Stufe aufnehmen

ST2:for I in 0 to AANZ -1 loop -- Variable ADD ab 2. Addiererstufe

ADD(I) := PRODUCTS(I*2)(23 downto 0) + PRODUCTS(I*2 + 1)(23 downto 0);

end loop;

K := AANZ;

P := 0;

BAB:for J in 0 to (AAST - 1) - 2 loop -- 3. bis Γld(N+1)'te Stufe REST := AANZ rem 2;

AANZ := AANZ/2 + REST;

for I in 0 to AANZ - 1 loop

if ((REST > 0) and (PRODN = 0) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P) + PRODUCTS(N/2)(23 downto 0);

PRODN := 1; -- separates Produkt erfasst

elsif ((REST > 0) and (PRODN = 1) and (I = AANZ -1)) then

ADD(I + K) := ADD(I*2 + P); -- nur weiterreichen

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 44: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

282 9 Modellierung digitaler Filter

else

ADD(I + K) := ADD(I*2 + P) + ADD(I*2 + P +1); -- Addierer

end if;

end loop;

P := K;

K := K + AANZ;

end loop;

ADDA <= ADD(P) after 6 ns; -- Ergebnis der letzten Addiererstufe

end process MUL_ADD;

A_REG: process(CLK, RESET_N)

begin

end process A_REG;

end PARALLEL;

Code 9-7: Linear-Phasen-Struktur mit balanciertem Addiererbaum. N=22, N/2+1 Multiplikatio-

nen. Synchronisation und Pulsverkürzung. Tiefpass mit fc=10 kHz, fa=48 kHz

Der weitere Addiererbaum ist ab der 3. Stufe (Label BAB) so formuliert wie im Code 9-5.

Der Indexgrenzwert ist entsprechend auf AAST-2 verkleinert und der Index-Offset ist

durch den aktualisierten Wert AANZ ebenfalls angepasst.

Die Struktur der symmetrischen Paarbildungen in den Addiererstufen, die einen balancier-

ten Addierebaum ausmachen, zeigt auch das Syntheseergebnis nach Bild 9-17 (vgl. Bild

9-15). Der Synthesecompiler XST in der Version ISE 13.4 liefet dieses Ergebnis auch für

die Modellierung der kompletten Filterarithmetik in einem kombinatorischen Prozess

MUL_ADD, ohne dass eine Prozessaufspaltung erfolgen muss.

Bild 9-17: Syntheseergebnis der Linear-Phasen-Struktur nach Code 9-7. Der Koeffizient c1 enthält

nur ein Bit mit 1. N=22; ISE 13.4, maximale Signallaufzeit 20.22 ns (49.45 MHz), Stage(0)(2) -

YN(19)

Zur Verbesserung der erreichbaren Taktfrequenz wird im nächsten Schritt mit Code 9-8 ein

vollständiges Pipelining vorgestellt, dem hier eine Aufspaltung des Prozesses MUL_ADD

in drei getaktete Teilprozesse zu Grunde liegt. Variablen werden deshalb nur noch für die

Instanziierungsindizes der for loops genutzt.

PRODUCTS(0)

++ + + + + + + + + +

+

St0 St22

+ + + +

+

+ +

+ + +ADD(8)

ADD(0)

ADD(10)

ADDA

ADD(5)

ADD(6)

c2c0 c5c4c3 cN/2c10c9c6 c7 c8

St21 St2 St20 St19 St4 St18 St17 St6 St16 St15 St8 St14 St13 St10 St12 StN/2

ADD(9)

ADD(7)

ADD(3)

PRODUCTS(N/2)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 45: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

283 9.1 FIR-Filter

Die sukzessive Freigabe der insgesamt AAST+1=6 Pipelinestufen generiert ein Schie-

beregister mit der Impulskette EN, das durch den verkürzten Enable-Puls RD_S im

Prozess PULSE_SHORTER angesteuert wird.

Der Prozess ADD1 bildet die Summen SUM aus den Elementen der Registerkette

STAGE, wobei diese N/2 Addierer nur 13 Bit breit sind. Das separate Arrayelement

STAGE(N/2) ist hier integriert, damit die Struktur für ein komplettes Pipelining aufge-

baut wird. Das resultierende Register SUM(N/2) dient dann dem Laufzeitausgleich, da

kein Addierer von der Multiplikation mit cN/2 zu entkoppeln ist.

Die zweite Pipelinestufe inferiert der Prozess MUL mit N/2+1 Multiplikationen PRO-

DUCTS.

Der Prozess BAB fasst die Produkte in der zweiten Addiererstufe zusammen und reali-

siert die weiteren Stufen des balancierten Addiererbaumes. Je nach Filterordnung mit

N/2 gerade oder ungerade wird das separate Produkt PRODUCTS(N/2) in der zweiten

Addiererstufe oder in einer der folgenden Stufen des Addiererbaums verarbeitet (vgl.

Abschnitt 9.1.4.4). Die for loop mit dem Index J synthetisiert drei Pipeliningstufen,

die jeweils mit einem separaten Enable-Puls freigegeben werden. Aus der Anforderung

an die Synthesefähigkeit des Codes ergibt sich die in Code 9-8 realisierte Schachtelung:

­ Die Indexgrenzen müssen zur Übersetzungszeit Konstanten sein und dürfen daher

nicht in Abhängigkeit von Signalen stehen. Also wäre auch eine Enable-Bedingung

außerhalb der for loop mit dem Index I zulässig, da die Grenze AANZ für die

Anzahl der Addierer eine Stufe sequentiell vorab ausgewertet wird:

if EN(J+3) = '1' then

for I in 0 to AANZ - 1 loop

...

end loop;

end if;

­ Die VHDL-Simulation zeigt in den Fällen mit nicht korrekt geschachtelter Enable-

Bedingung lediglich für die letzten drei Addiererstufen „undefined“ Signalwerte.

-- FIR Filter in Linear-Phasen-Struktur, fc = 10 kHz, Abtastfrequenz 48 kHz -- Ordnung N gerade; N/2 +1 Multiplizierer; balancierter Addiererbaum

-- Pipelineregister für alle Addierer-Stufen und Multiplizierer

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity FIR_RM_BAB_VP is

generic

( DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20;

N: positive := 22 ; -- Filterordnung N ungerade

AAST: positive := 5); -- Anzahl Addiererstufen = Γld(N+1) port

( CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- asynchron, active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0) ); -- Signal zum DAC

end FIR_RM_BAB_VP;

architecture PARALLEL of FIR_RM_BAB_VP is

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 46: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

284 9 Modellierung digitaler Filter

type STAGE_TYPE is array(0 to N) of signed(11 downto 0); -- Register

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0);

type SUM_TYPE is array(0 to N/2) of signed(12 downto 0); -- 1. Stufe

type PRODUCTS_TYPE is array(0 to N/2) of signed(24 downto 0);--Q22,3 sign

type ADD_TYPE is array(0 to N/2 + AAST - 3 - 1) of signed(23 downto 0);

signal STAGE: STAGE_TYPE; -- Registerstufen mit Aufnahmestufe j Bits

signal COEFF: COEFF_TYPE; -- Positive Symmetrie; l Bits

signal SUM: SUM_TYPE; -- 1. Addiererstufe

signal PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

signal ADD: ADD_TYPE; -- Addierer Register; Stufe 2 bis 4

signal TEMP_1, TEMP_2,RD_S: bit ;

signal EN: bit_vector(AAST downto 0); -- Enable-Pulse für jede Stufe

begin

COEFF(0) <= "000000000011"; -- 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618 kein Multiplizierer

COEFF(2) <= "111111111011"; -- -0.00254297568453

...

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK)

begin

if CLK='1' and CLK'event then

if RESET_N = '0' then

TEMP_1 <= '0' after 3 ns;

TEMP_2 <= '0' after 3 ns;

EN <= (others => '0') after 3 ns;

else

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

EN <= EN(AAST-1 downto 0) & RD_S after 3 ns; -- Ready-Kette

end if;

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Eingangspuls

STAGES: process(CLK) -- Registerkette

begin

if CLK='1' and CLK'event then

if RESET_N='0' then

STAGE <= (others => (others => '0')) after 3 ns;

elsif RD_S = '1' then -- Aktualisierung

STAGE <= signed(to_stdlogicvector(XN(19 downto 8))) &

STAGE(0 to N -1) after 3 ns;

end if;

end if;

end process STAGES;

ADD1: process(CLK) -- 1. Addierer-Pipeline-Stufe

begin

if CLK'event and CLK = '1' then

if RESET_N = '0' then

SUM <= (others => (others =>'0')) after 3 ns;

elsif EN(0) = '1' then

for I in 0 to N/2 -1 loop -- N/2 gerade oder ungerade

SUM(I) <= ((STAGE(I)(STAGE(I)'left) & STAGE(I)) +

(STAGE(N-I)(STAGE(N-I)'left) & STAGE(N-I))) after 3 ns;

end loop; -- immer separat für gerade N

SUM(N/2) <= (STAGE(N/2)(STAGE(N/2)'left)) &

STAGE(N/2) after 3 ns;

end if;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 47: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

285 9.1 FIR-Filter

end if;

end process ADD1;

MUL: process(CLK) -- Produkt-Pipeline-Stufe

begin

if CLK'event and CLK = '1' then

if RESET_N = '0' then

PRODUCTS <= (others => (others =>'0')) after 3 ns;

elsif EN(1) = '1' then

for I in 0 to N/2 loop -- N/2 gerade o. ungera. Anzahl Mult.

PRODUCTS(I) <= SUM(I) * COEFF(I)after 3 ns;

end loop;

end if;

end if;

end process MUL;

BAB: process(CLK) -- Addierer-Pipeline-Stufen

variable AANZ: integer range 0 to N/2; -- Anzahl Addierer pro Stufe

variable K: integer range 0 to (N/2 + AAST -3); -- Offset Addierer-Index

variable P: integer range 0 to (N/2 + AAST -3); -- Offset Summanden-Index

variable REST, PRODN: integer range 0 to 1; -- zusätzliche Strukturmerkmale

begin

if CLK'event and CLK = '1' then

P := 0;

PRODN := (N/2) rem 2; -- PRODN = 1 ergänzt AANZ auf gerade

AANZ := (N/2)/2 + PRODN; -- Produkt in 2.Stufe aufnehmen

K := AANZ;

if EN(2) = '1' then

for I in 0 to AANZ -1 loop -- Variable ADD ab 2. Stufe

ADD(I) <= PRODUCTS(I*2)(23 downto 0) +

PRODUCTS(I*2 + 1)(23 downto 0) after 3 ns;

end loop;

end if;

for J in 0 to (AAST - 1) - 2 loop -- 3. bis Γld(N+1)'te Stufe REST := AANZ rem 2;

AANZ := AANZ/2 + REST;

for I in 0 to AANZ - 1 loop

-- Indexgrenzen nicht unter Einfluss von Signalen

if EN(J+3) = '1' then -- Enable innerhalb der loop

if ((REST > 0) and (PRODN = 0) and (I = AANZ -1)) then

ADD(I + K) <= ADD(I*2 + P) +

PRODUCTS(N/2)(23 downto 0) after 3 ns;

PRODN := 1; -- separates Produkt erfasst

elsif ((REST > 0) and (PRODN = 1) and (I = AANZ -1)) then

ADD(I + K) <= ADD(I*2 + P) after 3 ns; -- weiterreichen

else

ADD(I + K) <= ADD(I*2 +P) + ADD(I*2 + P + 1) after 3 ns;

end if;

end if;

end loop;

P := K; K := K + AANZ;

end loop;

--YN <= to_bitvector(std_logic_vector(ADD(P)(22 downto 3))) after 3 ns;

end if;

end process BAB;

YN <= to_bitvector(std_logic_vector(ADD(N/2)(22 downto 3))) after 3 ns;

end PARALLEL;

Code 9-8: Linear-Phasen-Struktur mit Pipelining aller Stufen. Tiefpass mit fc=10 kHz, fa=48 kHz,

N=22

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 48: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

286 9 Modellierung digitaler Filter

Für die Selektion der letzten Addiererstufe ADD(Kmax) und deren Übergabe an den Aus-

gang YN muss der Aufbau des unsymmetrisch balancierten Addiererbaums bekannt sein,

damit der zuletzt gültige Indexwert Kmax vorliegt, der den Ausgangsaddierer indiziert. Zwei

Varianten zur Signalkopplung sind im Code 9-8 vorgeschlagen:

Der letztgültige Index K kann durch manuelle Auswertung der Indexberechnungen oder

einen äquivalenten C-Code gewonnen werden. Dieser Wert wird in einer unbedingten

Signalzuweisung außerhalb des getakteten Prozesses BAB genutzt, sodass die letzte

Pipelinestufe den Ausgang YN treibt.

Innerhalb des Prozesses BAB ist der Indexwert Kmax als Variable verfügbar und kann

über die aktualisierte Variable P außerhalb der for loop gelesen werden. Mit der

Signalzuweisung an YN innerhalb des getakteten Rahmens entsteht jedoch ein weiteres

Register YN, das die Latenz des Pipelinesystems von 6 auf 7 Takte erhöht.

Grundsätzlich vermieden werden sollen jedoch Codierversuche, die die Instanziierungsva-

riablen P oder K an ein Signal übergeben, um dieses außerhalb des Prozesses BAB zu

lesen. Die beiden Beispiele im folgenden Code-Ausschnitt sind nach den Erklärungen in

den Abschnitten 3.3.1 und 3.6 nicht konform mit den Syntheserichtlinien für getaktete

Prozesse [20]. Mit der ersten Variante entsteht durch die Signalzuweisung innerhalb der

if-Anweisung ein Register LST, dessen Breite durch die vom Synthesecompiler durchge-

führte Bit-Codierung des Integersignals bestimmt ist. Zu der außerhalb der if-Anweisung

gelesenen Variable P in der zweiten Signalzuweisung inferiert der Compiler ebenso ein

Register, das mit dem Signalnamen P gekennzeichnet ist.

...

K := K + AANZ; end loop;

LST <= P; -- 1. Integer-Signal LST als Register

end if;

--LST <= P; -- 2. Integer-Variable P als Register

end process BAB;

YN <= to_bitvector(std_logic_vector(ADD(LST)(22 downto 3))) after 3 ns;

...

In beiden Fällen wird statt einer Auswertung von Signalverknüpfungen zur Übersetzungs-

zeit eine Schaltung erzeugt, die die Signalleitungen des Ausgangs YN über Multiplexer aus

den Addiererstufen ADD(11) und ADD(0) selektiert. Zwei D-FFs P(0) und P(1) steuern

diese Multiplexer. Eine weitere Untersuchung solcher ungeeigneter Syntheseergebnisse ist

nicht sinnvoll. Es wird hier wiederholt deutlich, dass ein synthesegerechter Codierstil die

Entwurfssicherheit erheblich unterstützt, zumal die VHDL-Simulation auch in den beiden

oben beschriebenen Fällen korrekte Signalverläufe liefert.

Zusätzlich zur Überprüfung der Syntheseergebnisse ist insbesondere bei großen Designs

eine Timingsimulation zum Nachweis der Entwurfsfunktionalität unerlässlich. Diese beruht

auf einem strukturellen VHDL-Modell, das die Entwurfswerkzeuge aus dem Place & Rou-

te-Ergebnis für die FPGA-Zieltechnologie ableitet. Nachbildungen der physikalischen

Signalverzögerungen von Logik- und Verdrahtungsressourcen gehen als Generics über ein

Standard-Delay-Format (SDF-Datei) [60] in die Simulation ein. Dieses Format ist im Vital-

Standard [61] fixiert, der eine Industrievereinbarung zur Timingsimulation von ASICs

repräsentiert. Neben den synthetisierten Funktionen und dem Timing des synchronen Ent-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 49: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

287 9.1 FIR-Filter

wurfs zeigt eine Timingsimulation damit tatsächliche Worst-Case-Signalverzögerungen der

Zieltechnologie auf.

Zur Sprungantwort der Linear-Phasen-Struktur demonstriert die Timingsimulation in Bild

9-18 den Übergang in den stationären Endwert Y=55455Hex (vgl. Tabelle 9-3). Jeweils zum

Ende der Freigabepulse RD_S und EN(5 downto 0) erfolgt die sukzessive Aktualisierung

der Pipelinestufen. Die funktionale Kette wird mit Blick auf das Syntheseergebnis Bild

9-19 nachvollziehbar. Sobald die letzte Registerstufe STAGE(22) mit dem Pegel 7FFHex der

Sprunganregung gefüllt ist, finden die letzten Pegeländerungen in den Registern statt, die

den linken Rand der Filterstruktur bilden. Gegenüber der positiven Signalflanke CLK sind

diese Transitionen der D-Flipflopausgänge um ca. TPD=3 ns verzögert (vgl. Abschnitt

6.4.2.2). Eine zusätzliche Verzögerung weist der Filterausgang Y auf, da hier eine Laufzeit

von den D-FFs des Registers ADD(11) bis zu den FPGA-Pins vorliegt.

Bild 9-18: Timingsimulation der Linear-Phasen-Struktur mit vollständigem Pipelining nach Code

9-8. Aktualisierung des Ausgangsignals Y mit dem stationären Endwert der Sprungantwort. CLK mit

fCLK=48 MHz, N=22

Die hier genutzte Impulskette EN für die Freigabeeingänge der Register (CE-Input) bietet

einen einfachen Steuerungsmechanismus für Datenpfade mit Pipeline-Struktur. Mit einem

einzigen Steuerbit, das die Impulskette anregt, kann die Pipeline zum Füllen eingeschaltet

werden und nach dem Abschalten des Steuerbits läuft die Pipeline leer. Dabei bleiben dann

alte Registerinhalte erhalten, die beim Neustart überschrieben werden. Zur parallelen An-

zeige der gültigen Pipelineausgangssignale ist die Impulskette dazu noch um ein D-FF zu

verlängern.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 50: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

288 9 Modellierung digitaler Filter

Bild 9-19: Syntheseergebnis der Linear-Phasen-Struktur mit vollständigem Pipelining nach Code

9-8. N=22; ISE 13.4, maximale Signallaufzeit 5.44 ns (183 MHz)

Der Addiererbaum im Syntheseergebnis nach Bild 9-19 entspricht wieder genau dem Auf-

bau der Zielstruktur in Bild 9-15. Zur Vereinfachung ist die Multiplikation mit dem in

diesem Beispiel speziellen Koeffizienten c1=c21=002Hex nicht dargestellt (vgl. S.264). Ein

Register zum Laufzeitausgleich (gepunktete Ovale) ist automatisch auch für das

Pseudoaddierersignal ADD(10) synthetisiert worden, das durch die Bedingung für einen

weiterzureichenden Addiererausgang erzeugt wurde. Eine Umstellung auf den synchronen

Reset der Pipelineregister hinter den Multiplizierern hat für die Signale PRODUCTS die

automatische Auswahl der „Registered-Multiplier“-Synthesemakros verusacht [81], in

denen 18×18 Multipliziererblöcke direkt mit einem Register gekoppelt sind, sodass dann

die maximale Laufzeit im Addiererpfad PRODUCTS(2)(5) – ADD(1)(18) auftritt.

Dem Leser sind mit diesen Abschnitten die Entwurfsmethoden erläutert worden, mit denen

er den Codierstil gezielt auf die Strukturierung der Syntheseergebnisse von parallelen

Arithmetikeinheiten ausrichten kann.

Für die Modellierung von kompakten kombinatorischen Prozessen und die Aufteilung

einer Entity in gekoppelte Prozesse liegen detaillierte Entwurfsmuster vor, die die syn-

thesegerechte Nutzung von Variablen als Rechengrößen sowie Instanziierungsindizes in

for loops aufzeigen.

Auf die Separation von Funktionselementen in gekoppelte Prozesse als Instrument zur

Steuerung der Syntheseergebnisse ist hingewiesen worden.

Die auf die Strukturierung der Syntheseergebnisse ausgerichtete Codierung lässt deren

Implikationen für die Signallaufzeitpfade klarer werden.

Die Bedeutung einer Timingsimulation im Rahmen des Entwurfsablaufs ist zu beachten,

da nur sie die für die FPGA-Implementierung relevanten Syntheseergebnisse präzise er-

fasst.

Eine Systematik zur Modellierung von balancierten Addiererbäumen ist vorgestellt

worden.

++ + + + + + + + + +

+

St0 St22

+ + + +

+

+ +

+ + +

ADD(8)

ADD(0)

ADD(10)

ADD(11)

ADD(5)

ADD(6)

c2c0 c5c4c3 cN/2c10c9c6 c7 c8

St21 St2 St20 St19 St4 St18 St17 St6 St16 St15 St8 St14 St13 St10 St12 StN/2

ADD(9)

ADD(7)

SUM(0) SUM(N/2)

Pipelining-

register

ADD(3)

PRODUCTS(0) PRODUCTS(N/2)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 51: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

289 9.1 FIR-Filter

9.1.4.6 Transponierte Form mit reduzierter Anzahl der Multiplizierer

Der wesentliche Vorteil einer transponierten Form des FIR-Filters nach Bild 9-3 gegenüber

den Varianten der Direktform resultiert aus der Kettenstruktur, die direkt ein Pipelining der

Addiererstufen liefert. Damit entfällt der Entwurfsaufwand für die spezielle Strukturierung

eines balancierten Addiererbaums. Geht man von einer Einbettung des Filters in eine Ein-

gangs- und Ausgangsynchronisation wie in Bild 9-20 aus, so ist der längste Laufzeitpfad

durch eine der Kopplungen aus einem Multiplizierer und einem Addierer bestimmt. Diese

Signalpfade sind im Gegensatz zu den aus der Direktform abgeleiteten Strukturen unabhän-

gig von der Filterordnung N.

Bild 9-20: Eingangssynchronisation zwischen den Taktbereichen fI=12 MHz und fCLK=48 MHz

(CLK), Freigabeimpulsverkürzung und Ausgangssynchronisation der letzten Addiererstufe einer

transponierten Form nach Bild 9-3; h=20, j=12, m=24

Die Steuerung des Filters mit der Struktur nach Bild 9-20 sorgt dafür, dass der Puls RD_S

den Filtereingang aktualisiert und mit dem verzögerten Puls FIR_EN die Berechnungser-

gebnisse in die Registerkette aufgenommen werden. Nur mit dieser Zweistufigkeit lässt

sich die sprungförmige Reaktion eines FIR-Filters nach Gl. 9-1 erreichen.

Das Filtermodell in Code 9-9 kommt mit drei Arrays für die Koeffizienten, die Produkte

und die Addiererregister aus. Drei einfache Prozesse bilden die komplette Funktionalität

der transponierten Form ab:

Das durch den Prozess TAKE_OVER generierte Übernahmeregister speichert den

aktuellen Abtastwert X mit der Freigabe durch RD_S.

Diese Variante einer Linear-Phasen-Struktur enthält nur N/2+1 Multiplikationen der

Koeffizienten mit dem Eingangswert XD, aus denen im separaten Prozess MULT L

Produkte gebildet werden. Zur Entkopplung der Multiplikationen von den Addierern

kann dieser Prozess auch durch einen getakteten Rahmen ergänzt werden, wobei die

Freigabekette um ein D-FF zu erweitern ist.

Der Prozess ADD_STAGES füllt die Pipelineregister ADD der Addiererstufen mit dem

höchsten Index beginnend von links und bildet das Übergaberegister mit der letzten Stu-

fe ADD(0). Da die for loop verkettete Funktionselemente instanziiert, findet der

Ladevorgang aller Register ADD mit der Freigabe durch FIR_EN parallel statt. Die

Q

QSET

CLR

D

Q

QSET

CLR

D

Q

QSET

CLR

D

&0

0

0

X

Digitales

FilterCEQ

QSET

CLR

D

CE Q

QSET

CLR

D

CE

Y

CLK

READY

TEMP_1

TEMP_2

RD_S

ADD(0)

FIR_EN

h m h

CLK

j

XD

Pulsverkürzung

Übernahmeregister Übergaberegister

ADD(0)+

X u. READY periodisch mit

fa = 48 kHz,

synchronisiert auf

fI = 12 MHz

fCLK = 48 MHz

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 52: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

290 9 Modellierung digitaler Filter

Addierer übernehmen das Guard-Bit der Multiplikationen, sodass zusätzlich zur Skalie-

rung mit der L1-Norm eine Betragsreserve zur Vermeidung von Überläufen vorliegt

(vgl. Abschnitt 9.1.4.5).

-- FIR Filter in transponierte Form, fc = 10 kHz , Abtastfrequenz 48 kHz -- N = 22 gerade, N/2 + 1 symmetrische Koeffizienten

-- Reduzierte Anzahl der Multiplizierer

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity FIR_TRANSPOSED is

generic

( DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20;

N: positive := 22 ); -- Filterordnung N = 22

port

(CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- ADC Signal

YN: out bit_vector(DAC_WIDTH-1 downto 0) -- Signal zum DAC

);

end FIR_TRANSPOSED;

architecture PARALLEL of FIR_TRANSPOSED is

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0); -- Q11

type PRODUCTS_TYPE is array(0 to N) of signed(23 downto 0); -- Q22,2 sign

type ADD_TYPE is array(0 to N) of signed(23 downto 0); -- Q22,2 sign

signal PRODUCTS: PRODUCTS_TYPE; -- Multiplizierer, m Bits

signal COEFF: COEFF_TYPE; -- Positive Symmetrie; l Bits

signal ADD: ADD_TYPE; -- Addierer Register, m Bits

signal XD: signed(11 downto 0); -- Übernahmeregister, Q 11, j Bits

signal TEMP_1, TEMP_2,RD_S, FIR_EN: bit ; -- Freigabepulse

begin

COEFF(0) <= "000000000011"; -- 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618 kein Multiplizierer

COEFF(2) <= "111111111011"; -- -0.00254297568453

COEFF(3) <= "111111110101"; -- -0.00546703115960

COEFF(4) <= "000000000110"; -- 0.00272867876211

COEFF(5) <= "000000100010"; -- 0.01672858094360

COEFF(6) <= "000000001110"; -- 0.00662913854437

COEFF(7) <= "111110111011"; -- -0.03347988549507

COEFF(8) <= "111110101010"; -- -0.04193952517288

COEFF(9) <= "000001100100"; -- 0.04901745208684

COEFF(10) <= "000110011011"; -- 0.20050124258743

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N)

begin

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns;

TEMP_2 <= '0'after 3 ns;

FIR_EN <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 53: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

291 9.1 FIR-Filter

FIR_EN <= RD_S after 3 ns; -- Freigabe der Addiererstufen

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Puls

TAKE_OVER: process(CLK) -- Übernahmeregister

begin

if CLK='1' and CLK'event then

if RESET_N = '0' then

XD <= (others=>'0') after 3 ns;

elsif RD_S = '1' then

XD <= signed(to_stdlogicvector(XN(19 downto 8))) after 3 ns;

end if;

end if;

end process TAKE_OVER;

MULT: process(COEFF,XD) -- Mit Ressourcen-Sharing

variable MUL: signed(23 downto 0);

begin

for I in 0 to N/2 loop

MUL := XD * COEFF(I); -- N/2 + 1 Multiplikationen

PRODUCTS(I) <= MUL after 6 ns; -- 0, 1,..., N/2

if I < N/2 then

PRODUCTS(N-I) <= MUL after 6 ns; -- N,...,N/2+1

end if;

end loop;

end process MULT;

ADD_STAGES: process(CLK) -- inkl. Übergaberegister

begin

if CLK='1' and CLK'event then

if RESET_N ='0' then

ADD <= (others => (others => '0')) after 3 ns;

elsif FIR_EN = '1' then -- parallele Aufnahme in Addiererstufen

ADD(N) <= PRODUCTS(N) after 3 ns;-- Produktaufnahme

for I in N-1 downto 0 loop

ADD(I) <= ADD(I+1) + PRODUCTS(I) after 3 ns;

end loop;

end if;

end if;

end process ADD_STAGES;

YN <= to_bitvector(std_logic_vector(ADD(0)(22 downto 3))) ;

end PARALLEL;

Code 9-9: FIR-Filter in transponierter Form mit reduzierter Anzahl der Multiplizierer. Tiefpass mit

fc=10 kHz, fa=48 kHz, N=22

Ein Detail zum Signallaufzeitverhalten demonstriert die Timingsimulation in Bild 9-21 mit

dem ersten Takt der Abtastwertaktualisierung einer Sprungantwort. Im Anschluss an die

positive Taktflanke zum Zeitpunkt t1 wird das Übergaberegister XD mit 7FFHex gefüllt. Die

Multiplikation mit c4 und die Addition der Registerstufe ADD(4) verursachen Verzögerun-

gen, sodass die Vorbereitungseingänge der Daten-Flipflops ADD_4_in über die kürzeren

Signalpfade zum Zeitpunkt t2 angesteuert werden. Bis zum Zeitpunkt t3 treten dynamische

Hazards [6] auf, die ihre Ursache in den Multipliziererlaufzeiten und den Ripple-Carry-

Effekten der Addition haben. Danach sind die D-FF-Eingänge lange vor dem Setup-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 54: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

292 9 Modellierung digitaler Filter

Zeitfenster (TS=0.46 ns für XC3S400-5) der nächsten positiven Taktflanke stationär. Der

Ausgang ADD_4_out der Registerstufe ADD(4) hat die Dateneingänge zum Zeitpunkt t4

übernommen. Die hier ablesbare D-FF Verzögerung von ca. TPD=3.1 ns ist wesentlich

größer als die Datenblattangabe TCKO=0.63 ns, da das dargestellte Taktsignal CLK vom

Eingangspuffer über das Takt-Verteilnetzwerk erst an die D-FFs der CLBs gelangen muss.

Da die Multiplizierer nach der ersten Anregung durch XD für alle weiteren Rechenschritte

der Sprungantwort stationäre Ausgänge aufweisen, treten Verzögerungen nur noch durch

die Ripple-Carry-Addierer auf. Die Vorbereitungseingänge ADD_4_in reagieren deshalb in

kürzerem Zeitabstand zur zweiten positiven Taktflanke (vgl. t5) auf den aktualisierten Aus-

gang der vorausgehenden Stufe ADD(5) (vgl. Bild 9-22).

Bild 9-21: Timingsimulation der Startphase einer Sprungantwort der transponierten Form nach

Code 9-9 dargestellt für die Addiererstufe ADD(4). Signal CLK mit fCLK=48 MHz (20.83 ns)

Einen Ausschnitt aus dem Syntheseergebnis der transponierten Form nach Code 9-9 zeigt

Bild 9-22 mit den ersten vier und den letzten sechs Stufen der Kettenstruktur. Das im Pro-

zess MULT vorgegebene Ressourcen-Sharing der Multiplikationsergebnisse für das sym-

metrische Filter ist in den ersten Stufen erkennbar:

– Das Produkt P_2 nutzen die Stufen ADD_2 und ADD_20

– Das Produkt P_3 nutzen die Stufen ADD_3 und ADD_19

Darüber hinaus geht das Produkt P_4 in die Stufen ADD_22 und ADD_0 ein, da in diesem

speziellen Filterbeispiel die Koeffizienten c0 und c4 ähnliche Bitmuster aufweisen, die sich

nur um den Faktor zwei unterscheiden. Eine jeweils geeignete Anzahl von Bits zur vorzei-

chenrichtigen Erweiterung erzeugt die erforderliche Stellenpositionierung. Die zweite Stufe

ADD_21 enthält aufgrund des Koeffizienten c1, mit nur einer besetzten Bitposition, keinen

Multiplizierer. Ein Summand wird deshalb direkt mit Vorzeichenerweiterung aus dem

Eingangswert XD abgeleitet.

t2t1 t3

t4

t5

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 55: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

293 9.1 FIR-Filter

Bild 9-22: Ausschnitt aus dem Syntheseergebnis der transponierten Form mit reduzierter Anzahl der

Multiplizierer nach Code 9-9. N=22, max. Signallaufzeit 12.29 ns (81.36 MHz). Werkzeug Synplify-

Pro 8.8 [86]; ISE 13.4, max. Signallaufzeit 11.3 ns (88.49 MHz) im Pfad XD(2) – ADD(4)(22)

un1_

XD[2

3:8]

* + -

un1_

XD_1

[23:

7]

* + -

un1_

XD_4

[23:

9]

* + -

ADD_

22_[

22:0

]

Run

27_a

dd[2

:23]

+

un87

_add

[2:2

3]

+

ADD_

1_[2

2:0]

R

ADD_

21_[

22:0

]

Run

30_a

dd[2

:24]

+

un33

_add

[2:2

4]

+

un45

_add

[2:2

4]

+

un78

_add

[2:2

3]

+

un81

_add

[2:2

4]

+

un84

_add

[2:2

4]

+

un90

_add

[2:2

4]

+AD

D_0_

[22:

3]

R

ADD_

2_[2

2:0]

R

ADD_

3_[2

2:0]

R

R R

ADD_

20_[

22:0

]

R

ADD_

4_[2

2:0]

R

ADD_

5_[2

2:0]

R

ADD_

19_[

22:0

]

[22:

0]

ADD_

16_[

22:0

][2

2:0]

[23:

9]XD[1

1:0]

[11:

0]

FIR_

EN

CLK

un1_

rese

t_nYN

[19:

0]

[22:

3]

[23]

[23]

[23]

[23]

[23]

[23]

[23]

[23]

[23:

9]

[11] [11

]

[11]

[11] [11

]

[11]

[11]

[11]

[11]

[11]

[11:

0]

[11]

[11]

[11]

[11]

[11]

[11]

[11]

[11]

[11]

[11]

[11:0

]

[2:2

3] [0]

[2:23

] [0]

[23]

[23]

[23]

[23]

[23]

[23]

[23]

[23:8

]

[23]

[23]

[23]

[23]

[23]

[23]

[23:

7]

[23]

[23]

[23]

[23:

4]

[23]

[23]

[23]

[23] [23]

[23] [23]

[23:

9]

[23]

[23]

[23]

[23]

[23]

[23]

[23:

7]

[23]

[23]

[23]

[23]

[23]

[23]

[23]

[23:

8]

[23]

[23] [23] [23

]

[23]

[23]

[23] [23]

[23:

9]

[2:2

3] [0]

[11:

0]

[23:

8]10

11

[11:0

]

[23:7

]10

101

[11:0

]

[23:

9]01

1

[22:

0]Q[

22:0

]

D[22

:0]

E

[22:

1]

[2:2

3]

[22:

1]

[2:2

3][2

2:0]

Q[22

:0]

D[22

:0]

E

[22:0

]Q[

22:0

]D[

22:0

]

E

[22:

0]

[2:2

4]

[22:

0]

[2:2

4]

[22:

0]

[2:2

4]

[22:

1]

[2:2

3]

[22:0

]

[2:2

4]

[22:

0]

[2:2

4][2

2:0]

[2:2

4][2

2:3]

Q[19

:0]

[2:2

1]D[

19:0

]

E

[22:0

]Q[

22:0

]

[2:24

]D[

22:0

]

E

[22:

0]Q[

22:0

]

[2:2

4]D[

22:0

]

E

[22:

0]Q[

22:0

]

[2:2

4]D[

22:0

]

E

[22:

0]Q[

22:0

][2

:24]

D[22

:0]

E

[22:0

]Q[

22:0

]

[2:2

4]D[

22:0

]

E

[22:

0]Q[

22:0

]D[

22:0

]

E

[22:

0]Q[

22:0

]D[

22:0

]

E

XD[1

1:0]

XD[1

1:0]

un1_

XD_4

[23:

9]

P_4

P_3

P_2

XD[1

1:0]

P_3

P_2

P_3

P_7

P_7

ADD_

16_[

22:0

]AD

D_15

_[22

:0]

P_4

P_4

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 56: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

294 9 Modellierung digitaler Filter

9.1.4.7 Systolische FIR Filter

Reglmäßige Hardwarestrukturen, so wie sie z.B. in FIR-Filtern verwendet werden, sind aus

der Technik paralleler Rechnerstrukturen unter der Bezeichnung "Systolisches Array" wohl

bekannt. Die in Bild 9-23 dargestellte Struktur einer systolischen FIR-Filterzelle für eine

Implementierung der FIR Direktform hat die folgende Eigenschaften:

Die durch das Freigabesignal EN gesteuerte Übernahme des Samples X_IN erfolgt

mit dem Abtasttakt nach jeweils M Systemtakten.

Der Addiererausgang SUM_OUT der Zelle besitzt ein Pipelineregister zur Ent-

kopplung langer Laufzeitpfade.

Ebenfalls zur Vermeidung langer Laufzeitpfade wird hinter dem Multiplizierer ei-

ne Pipelinestufe eingebaut.

Die VHDL Realisierung dieser Zelle zeigt Code 9-10.

+

Z-1

Z-1

COEFF

X_IN X_OUT

SUM_IN SUM_OUT

x

PROD

SAMPLE

Z-M

EN

Bild 9-23: Zellstruktur eines systolischen FIR-Filters

library IEEE;

use IEEE.std_logic_1164.all; -- unterstützt Type Casting

use IEEE.numeric_std.all; -- liefert Vektortyp signed

entity SYSTOLIC_CELL is

generic(X_WIDTH: positive :=12; -- Bitbreite des Eingangssignals

C_WIDTH: positive :=12); -- Bitbreite der Koeffizienten

port

(CLK: in bit; -- Taktsignal

RESET_N: in bit; -- synchron, active-low

EN: in bit; -- Enable

COEFF: in signed(C_WIDTH-1 downto 0); -- Koeffizient

X_IN: in signed(X_WIDTH-1 downto 0); -- Eingangssignal der Zelle

SUM_IN: in signed(X_WIDTH+C_WIDTH-1 downto 0); -- Summationseingang

X_OUT: out signed(X_WIDTH-1 downto 0); -- Ausgangssignal der Zelle

SUM_OUT: out signed(X_WIDTH+C_WIDTH-1 downto 0) -- Summationsausgang

);

end SYSTOLIC_CELL;

architecture PIPELINED of SYSTOLIC_CELL is

signal PROD: signed(X_WIDTH+C_WIDTH-1 downto 0);-- Pipelined Prod. mit 2 VZ

signal SAMPLE: signed(X_WIDTH-1 downto 0); -- Sample der Zelle

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 57: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

295 9.1 FIR-Filter

begin

P1: process(CLK)

begin

if CLK='1' and CLK'event then -- Registerkette mit synchronem Reset

if RESET_N='0' then

SAMPLE <= (others=>'0') after 3 ns;

PROD <= (others=>'0') after 3 ns;

SUM_OUT <= (others=>'0') after 3 ns;

elsif EN='1' then -- bedingte Uebernahme des Sample

SAMPLE <= X_IN after 3 ns;

else

PROD <= SAMPLE * COEFF after 3 ns;

SUM_OUT <= SUM_IN + PROD;

end if;

end if;

end process P1;

X_OUT <= SAMPLE;

end PIPELINED;

Code 9-10: FIR-Zelle eines systolischen Filters

Ein systolisches FIR-Filter N-ter Ordnung kann nun aus N+1 in Reihe geschalteter Zellen

aufgebaut werden (vgl. Code 9-11). Die Vorteile derartiger Filter lassen sich wie folgt

beschreiben:

Sehr hohe maximale Taktfrequenz erreichbar, da arithmetische Laufzeitpfade im-

mer nur durch einen einzelnen Addierer bzw. Multiplizierer gehen.

Die Struktur arbeitet sicher, solange das Verhältnis M des Systemtaktes zur Ab-

tastrate größer als N+2 ist. In diesem Fall vergeht vor dem Eintreffen eines neuen

Samples eine ausreichende Anzahl von Takten, um jeweils einen Multiplizierer

und die komplette Addiererkette durchlaufen zu können.

In modernen FPGAs, die sogenannte DSP-Slices besitzen, werden die Pipelinere-

gister automatisch in die Multiplizierer bzw. Addierer integriert (vgl. die gestri-

chelten Linien in Bild 9-23). Bei einigen FPGAs werden neben Addierer und

Multiplizierer auch die Eingangsregister in einem DSP48E- oder DSP48A1-Slice

zusammengefasst [91] [92]. Womit für das komplette FIR-Filter N+1 DSP-Slices

aber ausser der Freigabelogik des Prozesses PULSE_SHORTER keine weitere

Hardware erforderlich ist.

Das in Code 9-11 dargestellte FIR-Filter ist in Anlehnung an Code 9-5 aufgebaut. Im Un-

terschied dazu wird die FIR-Struktur hier jedoch aus N+1 Komponenteninstanziierungen

innerhalb einer for generate Schleife gebildet. Um für das hier vorliegende symmetri-

sche FIR-Filter das Koeffizientenarray klein zu halten, enthält die Instanziierungsschleife

des Labels GEN zwei bedingte Abfragen bei den Labels GEN1 und GEN2, die darüber

entscheiden ob der Laufindex I kleiner gleich bzw. grösser als N/2 ist. In letzterem Fall ist

für die I-te Zelle nicht der Koeffizient mit dem Index I sondern der mit dem Index N-I

auszuwählen.

-- Systolisches FIR Filter mit Pipelined Multiplizierern und Addierern,

-- fc = 10 kHz, Abtastfrequenz 48 kHz

-- Addiererkette für N = 22, skaliert mit L1 = 1.5009

library IEEE;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 58: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

296 9 Modellierung digitaler Filter

use IEEE.std_logic_1164.all; -- unterstützt Type Casting

use IEEE.numeric_std.all; -- liefert Vektortyp signed

entity FIR_SYSTOLIC is

generic(DAC_WIDTH: positive := 20; ADC_WIDTH: positive := 20; -- h

N: positive := 22); -- Filterordnung N gerade

port

(CLK: in bit; -- Taktsignal 48 MHz

RESET_N: in bit; -- asynchron, active-low

RD: in bit; -- Abtastwert aktualisiert

XN: in bit_vector(ADC_WIDTH-1 downto 0); -- Signal aus dem ADC

YN: out bit_vector(DAC_WIDTH-1 downto 0) -- Signal zum DAC

);

end FIR_SYSTOLIC;

architecture PARALLEL of FIR_SYSTOLIC is

component SYSTOLIC_CELL is

generic(X_WIDTH: positive :=12; -- Bitbreite des Eingangssignals

C_WIDTH: positive :=12); -- Bitbreite der Koeffizienten

port

(CLK: in bit; -- Taktsignal

RESET_N: in bit; -- synchron, active-low

EN: in bit; -- Enable

COEFF: in signed(C_WIDTH-1 downto 0); -- Koeffizient

X_IN: in signed(X_WIDTH-1 downto 0); -- Eingangssignal der Zelle

SUM_IN: in signed(X_WIDTH+C_WIDTH-1 downto 0); -- Summationseingang

X_OUT: out signed(X_WIDTH-1 downto 0); -- Ausgangssignal der Zelle

SUM_OUT: out signed(X_WIDTH+C_WIDTH-1 downto 0) -- Summationsausgang

);

end component;

type COEFF_TYPE is array(0 to N/2) of signed(11 downto 0); -- symm. Koeff.

type STAGE_TYPE is array(0 to N+1) of signed(11 downto 0); -- Registerkette

type ADD_TYPE is array(0 to N+1) of signed (23 downto 0); -- Addiererkette

signal COEFF: COEFF_TYPE;

signal STAGE: STAGE_TYPE;

signal ADDA: ADD_TYPE;

signal TEMP_1, TEMP_2,RD_S: bit; -- Freigabesignalkette

begin -- Koeffizienten alternativ auch als Hex-Werte

COEFF(0) <= "000000000011"; -- x"003"; 0.00148587755162

COEFF(1) <= "000000000010"; -- 0.00104312227618

COEFF(2) <= "111111111011"; -- -0.00254297568453

COEFF(3) <= "111111110101"; -- -0.00546703115960

COEFF(4) <= "000000000110"; -- 0.00272867876211

COEFF(5) <= "000000100010"; -- 0.01672858094360

COEFF(6) <= "000000001110"; -- 0.00662913854437

COEFF(7) <= "111110111011"; -- -0.03347988549507

COEFF(8) <= "111110101010"; -- -0.04193952517288

COEFF(9) <= "000001100100"; -- 0.04901745208684

COEFF(10) <= "000110011011"; -- 0.20050124258743

COEFF(11) <= "001000110111"; -- 0.27687297947153

PULSE_SHORTER: process(CLK,RESET_N) -- 3 D-FFs

begin

if RESET_N = '0' then

TEMP_1 <= '0'after 3 ns;

TEMP_2 <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interfaces

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 59: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

297 9.1 FIR-Filter

TEMP_2 <= TEMP_1 after 3 ns;

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter, synchroner Puls

STAGE(0) <= signed(to_stdlogicvector(XN(19 downto 8)));

ADDA(0) <= (others=>'0');

-- Instanziiere N+1 Systolische Zellen

GEN: for I in 0 to N generate

GEN1: if (I<=N/2) generate

CELL_A: SYSTOLIC_CELL

generic map(X_WIDTH=>12, C_WIDTH=>12)

port map(

CLK => CLK, RESET_N => RESET_N, EN => RD_S,

COEFF =>COEFF(I), X_IN => STAGE(I), SUM_IN => ADDA(I),

X_OUT => STAGE(I+1), SUM_OUT => ADDA(I+1)

);

end generate GEN1;

GEN2: if (I>N/2) generate

CELL_B: SYSTOLIC_CELL

generic map(X_WIDTH=>12, C_WIDTH=>12)

port map(

CLK => CLK, RESET_N => RESET_N, EN => RD_S,

COEFF =>COEFF(N-I), X_IN => STAGE(I), SUM_IN => ADDA(I),

X_OUT => STAGE(I+1), SUM_OUT => ADDA(I+1)

);

end generate GEN2;

end generate GEN;

-- Kopiere letzten Addiererausgang N nach YN

YN <= to_bitvector(std_logic_vector(ADDA(N+1)(22 downto 3))) after 3 ns;

end PARALLEL;

Code 9-11: Systolisches FIR-Filter mit symmetrischen Koeffizienten. Tiefpass mit fc=10 kHz, fa=48

kHz, N=22

Eine Halbierung des Aufwands an DSP-Slices ist für symmetrische Filter dadurch erreich-

bar, dass in jeder FIR-Zelle jeweils zwei Samples der Verzögerungskette vor der Multipli-

kation mit dem gemeinsamen Koeffizienten addiert werden. Diese zusätzliche Funktionali-

tät lässt sich durch Aktivierung eines sogenannten Pre-Adders z.B. innerhalb der

DSP48A1-Slices von Spartan 6 FPGAs realisieren [91].

Die Pipelinestruktur der systolischen Filter macht den Einsatz von FPGAs der Reihen

Spartan-6 und Virtex-6 erforderlich, die über geeignete DSP48-Slices verfügen, da nur

diese die zusätzlichen D-FF-Ressourcen bieten. Eine komplette Integration in DSP48-Slices

schont so die übrigen Slice-Ressourcen und Signallaufzeiten bis unter 5 ns sind realisierbar.

Allerdings ist zu beachten, dass die Aktualisierungsrate um den Faktor N+2 kleiner als die

Taktfrequenz sein muss, also kein reines Pipelinesystem vorliegt. Eine Implementierung

mit FPGAs der Spartan-3-Reihe erfordert zu umfangreiche D-FF-Ressourcen, sodass die

systolischen Filter nicht in der folgenden Übersichtstabelle Tabelle 9-4 enthalten sind.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 60: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

298 9 Modellierung digitaler Filter

9.1.4.8 Vergleich der Implementierungsergebnisse und Timinganalysen

Dieser Abschnitt stellt die charakteristischen Kennwerte der Implementierungsergebnisse

und der Timinganalysen zu den präsentierten FIR-Filtermodellen mit paralleler Struktur

vor. Eingesetzt wurde das Synthese- und Implementierungswerkzeug ISE 13.4 [48], das

den Synthesecompiler XST [81] nutzt.

Folgende Synthese- und Implementierungsoptionen sind eingestellt worden:

– Synthese: Optimization Goal: Speed; Optimization Effort: High; No Register Balancing

– Mapping: Map Effort High; Optimization Strategy Speed

– Place & Route: Effort Level High

Für das Spartan-3-XC3S400 FPGA fasst Tabelle 9-4 ausgewählte Implementierungskenn-

werte aus den Synthese- und Map-Reports sowie aus der Post-P&R-Timinganalyse zusam-

men:

– Synthese-Report: Anzahl und Breite der Addierer und Multiplizierer (Spalten 3 u. 4)

– Timinganalyse: Längste Signallaufzeit tDelay (Spalte 5)

– Map-Report: Anzahl der Look-Up-Tabellen und der Daten-Flipflops (Spalten 6 u. 7)

Tabelle 9-4: Implementierungskennwerte der parallelen FIR-Filterstrukturen für das Beispielfilter

mit N=22. Balancierter Addiererbaum BAB. Linear-Phasen-Struktur (_RM_) u. transponierte Form

mit Embedded- Multiplizierern; Mapping Strategy Speed

Für die Implementierung der Multiplikationen stehen in den Xilinx FPGAs zwei Ressour-

cen zur Wahl [84]:

Entity-Name Modellierung Add.-Stufen Multipliz. tDelay/ns LUT D-FF

FIR_DIREKT_AK

Code 9-2

Akku-Variable 22; Kette

19 24-Bit-Add.

3 23-Bit-Add

16 Block

5 12x12 Bit

LUT

41.81

786 299

FIR_DIREKT_BAB

Code 9-5

Balancierter

Addiererbaum

5; BAB

15 24-Bit-Add.

7 23-Bit-Add.

16 Block

5 12x12 Bit

LUT

20.83

739 299

…_BAB_P

Code 9-6

BAB

Register ∑P

5; BAB

15 24-Bit-Add.

7 23-Bit-Add.

16 Block

5 12x12 Bit

LUT

11.95

589 532

FIR_RM_BAB

Code 9-7

Red. Mult

BAB

5; BAB

11 13-Bit-Add.

7 23-Bit-Add.

4 24-Bit-Add.

11 Block

20.22

379 299

FIR_RM_BAB_P

Sync. Reset

Red. Mult.

Produktregister

BAB

5; s. o. 11 registered

Block

13.3

379

313

FIR_RM_BAB_VP

Code 9-8

Sync. Reset

Red. Mult.

Pipeline

BAB

5; BAB

11 13-Bit-Add.

11 24-Bit-Add.

11 registered

Block

5.44

383

711

FIR_TRANSPOSED

Code 9-9

Red. Mult.

Pipeline impliz.

22

22 24-Bit-Add.

11 Block 11.3

505

537

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 61: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

299 9.1 FIR-Filter

LUT-basierte Multiplizierer, die als Summe von Teilprodukten synthetisiert werden und

je nach codierter Vektorbreite den LUT-Bedarf erheblich beeinflussen.

Embedded-Multiplizierer mit 18-Bit-Operanden und einem 36-Bit-Ergebnis.

Die Auswahl dieser Multiplizierer wird über die Syntheseeinstellungen des ISE-Werkzeugs

im Abschnitt Synthesis-HDL-Options mit den Parametern LUT bzw. Block gesteuert. Mit

der Compiler-Version ISE 13.4 wurden für die Übersicht in Tabelle 9-4 die Block-

Multiplizierer gewählt. Nach Ausschöfpung der im FPGA XC3S400 verfügbaren 16 dedi-

zierten Embedded-Multiplizierer, werden deshalb weitere Multiplizierer in LUT-Technolo-

gie implementiert. Bei ausschließlicher Wahl der LUT-Implementierung ergibt sich für das

Filtermodell nach Code 9-2 eine ca. doppelte Anzahl des LUT-Bedarfs und eine um etwa

5% höhere Verzögerungszeit im längsten Signallaufzeitpfad.

Zur Reduzierung des Bedarfs an LUT-Ressourcen ist die Linear-Phasen-Struktur gegenüber

der Direktform klar vorzuziehen, da nur N/2+1 Multiplizierer zu implementieren sind. Bei

der Nutzung von Block-Multiplizierern müssen die LUT-Ressourcen im Wesentlichen nur

noch für die Addierer eingesetzt werden. Im Vergleich zur transponierten Struktur bietet die

Linear-Phasen-Struktur in diesen Implementierungen eine zusätzliche LUT-Einsparung, da

lediglich die Hälfte der 22 Addierer zur Addition von 24 Bit breiten Produkten benötigt

wird.

Das vollständige Pipelining der Linear-Phasen-Struktur FIR_RM_BAB_VP erfordert den

größten Einsatz an Daten-Flipflops. Die Anzahl der D-FFs lässt sich für die einzelnen Fil-

termodelle durch eine Codeanalyse grob abschätzen. Dazu werden die Vektorbreiten der

Signale auf den linken Seiten der Signalzuweisungen in getakteten Prozessen addiert. Be-

sonderheiten der jeweiligen Implementierung führen zu Abweichungen der tatsächlichen

Flipflopanzahl:

Die konstanten Filterkoeffizienten führen mit ihren spezifischen Bitkombinationen

dazu, dass nicht alle Produktbits variable Signalpegel darstellen. Die '0'-Bits am LSB-

bzw. MSB-Rand der Koeffizienten blenden Beiträge der zu bewertenden Signalpfade

aus‚ sodass für konstante '0'- Pegel keine Pipeline-D-FFs zu inferieren sind. Diese

Optimierung wird durch den Syntheseparameter „Equivalent Register Removal“ unter-

stützt. Falls einzelne Signalbits eine Wertzuweisung erfahren, jedoch durch Vektorab-

schnittselektion nicht weiterverwendet werden, können D-FFs ebenso eingespart wer-

den.

Andererseits werden D-FFs dupliziert, wenn der Fanout den vorgegebenen Grenzwert

von z.B. 500 überschreitet. Dies gilt beispielsweise im Filtermodell FIR_TRANS-

POSED für das Clockenable-Bit FIR_EN, das 23×24 D-FFs freigibt.

Die vorgestellte Systematik zur Modellierung des balancierten Addiererbaumes liefert

einen entscheidenden Beitrag zur Erhöhung der maximal nutzbaren Taktfrequenz. Pipeline-

stufen sind ein geeignetes Mittel, Logikabschnitte mit kürzeren Signallaufzeiten zu erzeu-

gen:

Die Ergebnisse für die Entities FIR_DIREKT_BAB und FIR_DIREKT_BAB_P zeigen

nahezu eine Halbierung der maximalen Signallaufzeit für die Pipeline-Struktur.

Durch ein Pipelining aller Stufen lässt sich die Signallaufzeit der Linear-Phasen-

Struktur bis auf die Addiererlaufzeit reduzieren (vgl. Entity FIR_RM_BAB_VP). Als

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 62: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

300 9 Modellierung digitaler Filter

Kompromiss zwischen Laufzeitvorteil und Bedarf an D-FF Ressourcen ist die Entity

FIR_RM_BAB_P zu erkennen, in der nur die Produkte als Pipelinestufe realisiert sind.

Im Fall eines synchronen Resets entsteht dafür kein Mehrbedarf an D-FFs aus den Sli-

ces/CLBs, da die Registered-Multipliers D-FF-Ressourcen zusätzlich zur Verfügung

stellen, die ansonsten ungenutzt bleiben. Der längste Laufzeitpfad wird in dieser Struk-

tur durch die 4 Stufen des restlichen Addiererbaumes gebildet.

Für dieses Filterbeispiel (N=22) konnten bei Verwendung des Synthesecompilers XST (ISE

13.4) keine signifikanten Einflüsse einer Variation der Mapping-Parameters Optimization

Strategy Speed/Area festgestellt werden.

Als Resümee ist die transponierte Form für Audio-Signalverarbeitungsanwendungen zu

empfehlen:

Die einfache VHDL-Modellierung einer Kettenstruktur kann ausgehend von Code 9-9

sogar auf einen einzigen Prozess verdichtet werden.

Durch die Implementierung der Speicherelemente zwischen den Arithmetikeinheiten

liefert dieses Pipelining direkt kurze Signallaufzeitpfade, wobei die Filterordnung kei-

nen Einfluss auf die Struktur des Pipelining hat.

Der LUT- und D-FF-Ressourcenbedarf ist jedoch gegnüber der Linear-Phasen-Struktur

mit einer Pipelinestufe erhöht.

Voraussetzung für die Realisierbarkeit der transponierten Form ist eine Direktform, deren

Speicherkette von einer Signalquelle gespeist wird. Deshalb sei hier auch auf einen An-

wendungsbereich hingewiesen in dem diese Voraussetzung nicht erfüllt ist. Im Fall von

Echtzeit-Bildverarbeitungsanwendungen liegen bei den linearen Filtern auf Basis von

Nachbarschaftsoperationen auch FIR-Strukturen vor [76], [77]. Allerdings findet die Mat-

rixbewertung von Bild-Pixeln eines Pixelstromes so statt, dass Pixel aus aufeinander fol-

genden Bildzeilen in die Summe der Produkte einfließen. Es sind also mehrere Schiebere-

gister als Signalquelle für die FIR-Arithmetik zu realisieren, die nicht von einem zusam-

menhängenden Abtastwertestrom gespeist werden. Zur Verarbeitung der unterschiedlichen

Signalquellen eignet sich dann die FIR-Direktform mit balanciertem Addiererbaum, für die

hier Codeentwürfe ausführlich hergeleitet worden sind.

9.1.5 Sequentielle FIR-Struktur mit MAC-Einheit

In Filteranwendungen mit geringer Datenrate, die der Filterauswertung innerhalb der Ab-

tastperiode eine ausreichend große Anzahl von Taktzyklen der Systemfrequenz zur Verfü-

gung stellen, kann eine sequentielle FIR-Struktur realisiert werden. Durch die sequentielle

Mehrfachnutzung einer einzigen Multiplizier-Akkumulatoreinheit (MAC-Einheit) lassen

sich bei erheblich reduziertem Bedarf an LUT-Ressourcen höhere Filterordnungen imple-

mentieren. Die sequentielle Arbeitsweise erlaubt es auch, anstelle der Registerkette ein

FPGA-internes RAM für die Abtastwerte zu nutzen, sodass D-FFs eingespart werden und

aufgrund der räumlich dichteren Speicheranordnung auch weniger Verdrahtungsressourcen

erforderlich sind [84].

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 63: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

301 9.1 FIR-Filter

Nachfolgend wird ein sequentielles FIR-Filter SEQ_FIR für die Filterordnung N=64 vorge-

stellt, das als Prozessorelement mit einem Datenpfad und einem Steuerpfad [41] strukturiert

ist (vgl. Bild 7-1 u. Bild 9-25). Die Schnittstellen sind kompatibel zum Audiocodec-

Szenario in Bild 9-8 gewählt, wobei das separate Übernahmeregister entfällt und das

Übergaberegister durch den Steuerpfad freigegeben wird.

Die entity MAC_FIR akkumuliert in jedem Abtastzyklus L=N+1 Produkte. Zusätz-

lich zur MAC-Einheit MAC ist ein getaktetes Sättigungsmodul SAT integriert, das die

Akku-Ergebnisse überlauffrei auf den Darstellungsbereich des 20 Bit breiten Interface-

vektors YN begrenzt.

Einen Ringpuffer zur Speicherung der Abtastwerte enthält die entity

RAM_S_65_16. Den Speicher RAM_SAMP mit der Tiefe L adressiert ein gesteuerter

Zähler ADR_CNT_SAMP, der im Anschluss an jeden RAM-Schreibvorgang für L Le-

sezyklen dekrementiert wird. Das instanziierte Block-RAM steht als Xilinx-

Bibliotheksmodul RAMB4_S16 mit 256×16 Bit zur Verfügung [64], sodass entschieden

wurde, die Abtastwerte in der MAC-Einheit mit einer Breite von j=16 zu verarbeiten.

In der entity ROM_C_65_16 sind die konstanten, 16 Bit breiten Filterkoeffizienten

im Speicher ROM_COEF abgelegt, der mit dem Core Generator für eine Größe von

65×16 Bit erzeugt wurde [84]. Der gesteuerte Adresszähler ADR_CNT_COEF selek-

tiert die Koeffizienten in L=65 Lesevorgängen. Die Festkomma-Koeffizienten sind mit

der MATLAB Filter Design Toolbox (FDATool [85]) für einen Tiefpass mit den Para-

metern N=64, fa=48 kHz und fc=10 kHz erzeugt worden und über die Initialisierungs-

datei (rom_coef.coe) in den Core Generator-Entwurfsablauf des ROMs eingeflossen

(vgl. Bild 9-24)

In diesem System bilden die getakteten Komponenten Adresszähler, ROM bzw. RAM

und das Akkumulatorregister eine dreistufige Pipeline, die der Mealy-Automat

FSM_FIR kontrolliert. Dazu steuert der Automat die Adresszähler so, dass die MAC-

Einheit die L Produkte x[n-k]*ck sukzessive akkumuliert, nachdem die Aktualisierung

des RAMs mit einem neuen Abtastwert x[n] erfolgt ist. Nach der Übernahme des Er-

gebnisses in das Register YN des Sättigungsmoduls löscht der Automat das Akkumula-

torregister und wartet auf den nächsten verkürzten Ready-Impuls ADC_FULL.

Bild 9-24: Mit ymax=1.1 skalier-

te Impuls- und Sprungantwort

des Tiefpassfilters. N=64, fc=10

kHz, fa=48 kHz; Gruppenlaufzeit

τg=N/(2 fa)=0.67ms

0 0.2 0.4 0.6 0.8 1.0 1.2-0.1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

t/ms

Am

pli

tud

e

Impulsantwort

Sprungantwort 1/1.1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 64: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

302 9 Modellierung digitaler Filter

Bild 9-25: Sequentielles FIR-Filter SEQ_FIR mit den Datenpfadkomponenten MAC-Einheit, Koeffi-

zienten-ROM und Abtastwerte-RAM sowie mit einem Steuerpfad. Taktsignal CLK mit fCLK=48 MHz;

N=64; vgl. Code 9-15

SA

T

FS

M_F

IR

AD

R_

CN

T_

SA

MP

RA

M_

SA

MP

AD

DR

EG

AD

R_

CN

T_C

OE

F

RO

M_C

OE

F

AD

C_F

ULL

WE

_R

_S

EN

_C

NT

_S

ST

AT

US

RD C

LK

RE

SE

T

EN

_C

NT

_C

CE

CN

T_

C_

MA

X

AD

RA

DR

_C

8D

O

16

CL

R_

RE

GE

N_

MA

C

CE

8

AD

R_S

AD

R

WE

RE

SE

T

DI

EN

DO

` 1´

XN

20

16

X(1

9:

4)

SA

MP

_I

16

CO

EF

_I

SA

MPC

OE

F

16

1R

CE

PR

OD

32

A B

38

38

AD

DY

MU

L

YN

CE

2

EN

_R

EG

EN

_S

AT

RO

M_

C_6

5_

16

MA

C_F

IR

RA

M_S

_65

_1

6

1R

1R

1R

20

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 65: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

303 9.1 FIR-Filter

9.1.5.1 Multiplizierer-Akkumulatoreinheit

Der Akkumulator Y im Prozess MAC der entity MAC_FIR (vgl. Code 9-12) enthält

Γld(L)=7 Guard-Bits, damit auch im Worst-Case von L=65 Produkten, die alle maximal

den Wert 1-1 LSB annehmen, kein Überlauf auftritt. Diese Maßnahme soll hier demonstrie-

ren, wie für einen Akkumulator z.B. in einem adaptiven Filter, dessen Koeffizienten durch

einen Optimierungsalgorithmus bestimmt werden, ein Überlauf sicher vermieden wird.

Y[37:0] = Y[sign,guard, …,guard. 29:0] = Y + COEF[sign. 14:0]*SAMP[sign. 14:0]

Auf der rechten Seite der Zuweisung an den Akkumulator Y ist für die Faktoren des Pro-

duktes keine Vorzeichenerweiterung realisiert, da in einer Addition nur einer der Summan-

den die zur linken Seite passende Vektorbreite aufweisen muss. Der Simulationscompiler

ModelSim und das Synthesewerkzeug ISE führen also eine Vorzeichenerweiterung des

zweiten Summanden implizit durch.

Als weitere Sicherungsmaßnahme ist die Reduzierung der Vektorbreite des Akkumulators

Y von 38 Bit auf 20 Bit des Codec-Interfaces mit einer Sättigungsfunktion SAT ergänzt.

Diese prüft zusätzlich die Übereinstimmung der Guard-Bits mit dem Vorzeichenbit. Ein

einfaches Abschneiden der Guard-Bits führt nämlich für den Fall, dass diese Integeranteile

transportieren, zur Signalverfälschung mit Polaritätswechsel. Um dies zu verhindern, wer-

den die Integeranteile identifiziert und nur der zulässige positive bzw. der negative Aus-

steuerungsgrenzwert wird an YN zugewiesen.

In der Timingsimulation des Filters SEQ_FIR nach Bild 9-26 findet der Pegelanstieg ge-

genüber dem in Bild 9-9 verzögert statt, da mit der Ordnung N die Gruppenlaufzeit

τg=NT/2 angestiegen ist. Erst nach 66 READY-Pulsen (statt L=65) wird die Sprungantwort

stationär, da die Timingsimulation ein Anlaufverhalten zeigt, bei dem der erste READY-

Puls und die ROM-Adressen nicht verarbeitet werden. Die Koeffizienten sind mit

1.1 < L1=1.937 so skaliert worden, dass der Maximalwert 1 erreicht wird.

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.numeric_std.all;

entity MAC_FIR is

generic(WIDTH : positive:= 8);

port

( CLK, CLR_REG, EN_REG, EN_SAT: in std_logic;

COEF : in std_logic_vector(2*WIDTH -1 downto 0); -- 16 Bit

SAMP : in std_logic_vector(2*WIDTH -1 downto 0); --

YN : out std_logic_vector(19 downto 0) -- Codec Interface

);

end entity MAC_FIR;

architecture MAC_SAT of MAC_FIR is

signal Y : signed(37 downto 0); -- 7 Guard-Bits & 31 Bit im Q30-Format

begin

MAC : process(CLK)

begin

if (CLK = '1' and CLK'event) then

if (CLR_REG = '1') then Y <= (others => '0') after 3 ns;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 66: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

304 9 Modellierung digitaler Filter

elsif (EN_REG = '1') then

Y <= Y + signed(COEF) * signed(SAMP) after 3 ns;-- 32 Bit Produkt

end if; -- 7 Guard-Bits nehmen N+1 max. Produkte auf

end if;

end process MAC;

SAT: process(CLK) -- Sättigung und Übergaberegister des Zyklusergebnisses

begin

if (CLK = '1' and CLK'event) then

if (EN_SAT = '1') then

if ((Y(37 downto 30) = 0) or (Y(37 downto 30) = -1)) then

YN <= std_logic_vector(Y(30 downto 11)) after 3 ns;

elsif ((Y(37) = '0' and Y(36 downto 30) /= "0000000")) then

YN <= x"7ffff" after 3 ns; -- positive Grenze

else --((Y(37) = '1') and (Y(36 downto 30) /= "1111111"))

YN <= x"80000" after 3 ns; -- negative Grenze

end if;

end if;

end if;

end process SAT;

end architecture MAC_SAT;

Code 9-12: Multiplizierer-Akkumulator entity MAC_FIR für N=64 und Sättigungsfunktion

Bild 9-26: Timingsimulation der skalierten Sprungantwort des sequentiellen Filters (vgl. Code 9-15

u. Code 9-1). N=64, fa=48 kHz, fc=10 kHz. Spitzenwert 7F470Hex (0.994Dez) bei t=743 µs , stationä-

rer Endwert 74551Hex (0.90885Dez) im Q19-Format (vgl.Bild 9-24)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 67: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

305 9.1 FIR-Filter

9.1.5.2 Ringpuffer für die Abtastwerte

Zur Speicherung der Abtastwerte wurde ein Adressierungsablauf gewählt, bei dem der

Ringpuffer (RAMB4_S16 im Code 9-13) nach einem System-Reset mit jedem READY-

Puls von der Adresse Null an mit Abtastwerten aufgefüllt wird. Eine Beispielsequenz in

Bild 9-27 verdeutlicht für N=3, dass der Ringpuffer nach L=N+1 Schreibvorgängen gefüllt

ist und alle folgenden Abtastwerte den jeweils ältesten Wert überschreiben. Durch diese

Speicherung wird das Übernahmeregister nach Bild 9-8 ersetzt. Zwischen den Schreibvor-

gängen sind die L Produkte x[n-k]*ck zu bilden, wobei c0 immer mit dem aktuellsten Ab-

tastwert x[n] und cN mit dem ältesten Abtastwert x[n-N] zu multiplizieren ist (vgl. Gl. 9-1).

Ausgehend von dieser Betrachtung hat sich folgende Adresszählerstrategie für die Schreib-

und Lesevorgänge als geeignet herausgestellt, da sie nur wenige Steuereingriffe eines Au-

tomaten erfordert:

Der Ringpuffer-Adresszähler (Prozess ADR_CNT_SAMP im Code 9-13) dekrementiert

beginnend mit der letzen Schreibposition, zu der auch der erste Lesezugriff gehört.

Nach N Dekrementen für die Lesevorgänge der Abtastwerte x[n-1] bis x[n-N] wird die

RAM-Adresse fixiert, da dies die Schreibposition des nächsten aktuellen Abtastwertes

ist. Im Laufe des Zyklus findet jeweils an der unteren Zählgrenze ein Überlauf auf den

Maximalwert N=64 statt.

Das Koeffizienten-ROM wird parallel dazu mit einem einfachen Inkrementer adressiert,

der für die Lesevorgänge der Koeffizienten ck von k=0 bis k=N=64 zählt. Direkt an-

schließend führt er einen Überlauf auf k=0 aus, sodass für den nächsten aktuellen Ab-

tastwert x[n] der Koeffizient c0 zur Verfügung steht (vgl. Prozess ADR_CNT_COEF im

Code 9-14).

Bild 9-27: Beispielsequenz für die Kombination der Koeffizienten mit den im Ringpuffer sukzessive

gespeicherten Abtastwerten; N=3

In dieser Implementierung nach Code 9-13 liefert die Instanziierung eines Xilinx Biblio-

theksmoduls den Ringpuffer (RAMB4_S16) mit 256×16 Bit [64]. Drei unterschiedliche

Methoden zur Instanziierung von FPGA-basiertem RAM bzw. ROM sind in [48] mit dem

jeweiligen Nutzen für die Code-Wiederverwendbarkeit auf den verschiedenen FPGA-

Architekturen und für die Simulationsgeschwindigkeit gegenübergestellt (vgl. Abschnitt

7.4.1). Hier sei daran erinnert, dass sich diese Block-RAM-Komponenten taktsynchron

verhalten. Die resultierende Latenz ist beim Entwurf des Steuerautomaten zu berücksichti-

gen:

Wird eine Leseadresse ADDR angelegt, so steht das Datum erst mit der nächsten Takt-

flanke am Ausgang DO zur Verfügung.

0

1

2

3

0

1

2

3

X[4]

X[1]

X[2] X[2]

X[3] X[3]

X[4]

X[5]

Samples Koeffiz.

c0

c1

c2

c30

1

2

3

X[0]

X[1]

X[2]

X[3]

N+1 N+2 N+3

c0

c1

c2

c3

c0

c1

c2

c3

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 68: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

306 9 Modellierung digitaler Filter

Bei einem Schreibvorgang sind parallel die Freigabe WE, die Adresse ADDR und das

Datum DI anzulegen, um das Datum DO mit der nächsten Taktflanke zu speichern und

am Ausgang lesen zu können.

Zur Instanz RAM_SAMP ist keine generic map erforderlich, da eine

Defaultinitialisierung des RAMs mit Null vorliegt. Während des Schreibzyklus der ersten L

Abtastwerte liefern deshalb nur diese einen Beitrag zur Summe der Produkte. Zusammen

mit dem 8-Bit-Adresszähler kann die Komponente RAM_S_65_16 genutzt werden, um

FIR-Filter bis zur Ordnung N=255 zu realisieren.

-- Sample RAM 65x16, 8 Bit Adresszähler

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

library UNISIM; -- Xilinx Bibliothek der Modul-Verhaltensmodelle

entity RAM_S_65_16 is

generic( WIDTH : positive := 8 ); -- Counter Width

port

(RESET, CLK, EN, WE : in std_logic ;

DIN : in std_logic_vector(2*WIDTH -1 downto 0);

SAMP : out std_logic_vector(2*WIDTH -1 downto 0) );

end entity RAM_S_65_16;

architecture ADR_RAM_S of RAM_S_65_16 is

component RAMB4_S16 -- Xilinx Block-RAM Bibliotheksm. 256x16 Bit=4096 Bit

generic -- Initialisierungsstrings

( INIT_00, INIT_01, INIT_02, INIT_03, INIT_04, INIT_05, INIT_06, INIT_07,

INIT_08, INIT_09, INIT_0a, INIT_0b, INIT_0c, INIT_0d, INIT_0e, INIT_0f

: bit_vector(255 downto 0) :=

X"0000000000000000000000000000000000000000000000000000000000000000" );

-- 64 Nibble x 16 = 4096 Bit

port

( WE, EN, RST, CLK : in std_logic;

ADDR : in std_logic_vector(WIDTH-1 downto 0); -- Adressierung

DI : in std_logic_vector(2*WIDTH -1 downto 0); -- Codec Interface

DO : out std_logic_vector(2*WIDTH - 1 downto 0)); -- MAC-Eingang

end component;

signal ADR_S : unsigned(WIDTH-1 downto 0); -- RAM-Adresse

constant MAX : unsigned(WIDTH -1 downto 0) := x"40"; -- N=64

begin

ADR_CNT_SAMP: process(CLK) -- RAM-Adresszähler: Dekrementer

begin

if (CLK'event and CLK = '1') then

if (RESET = '1') then -- System-Reset

ADR_S <= (others => '0')after 3 ns;

elsif (EN = '1') then -- Freigabge durch FSM

if (ADR_S = 0) then ADR_S <= MAX after 3 ns; -- Wrap-Around

else ADR_S <= ADR_S - 1 after 3 ns;

end if;

end if;

end if;

end process ADR_CNT_SAMP;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 69: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

307 9.1 FIR-Filter

RAM_SAMP : RAMB4_S16 -- kein Reset, getakteter Ausgang immer freigegeben

port map

( WE => WE, EN => '1', RST => '0', CLK => CLK, -- Schreibfreigabe durch FSM

ADDR => std_logic_vector(ADR_S), DI => DIN, DO => SAMP );

end architecture ADR_RAM_S;

Code 9-13: RAM-Ringpuffer RAM_S_65_16 für L=65 Abtastwerte; dekrementierender Adresszähler

9.1.5.3 Koeffizienten-ROM

Der Koeffizientenspeicher ROM_COEF ist mit dem Xilinx Core Generator (vgl. Abschnitt

7.4.2) auf minimale Interfacefunktionalität und Speichertiefe 65×16 Bit ausgelegt worden

(vgl. Code 9-14). Ein Komparator signalisiert mit dem Statusbit CNT_C_MAX den Maxi-

malwert N=64 des inkrementierenden Adresszählers ADR_CNT_COEF und zeigt dem

Steuerautomaten damit den Abschluss eines Berechnungszyklus’ der MAC-Einheit an. Hier

steht ein Konzept im Hintergrund, nach dem die Komparatoren für die Grenzwertanzeigen

in der Zähler-Entity und nicht in der FSM zu realisieren sind.

Dieses FSM/Timer-Konzept zur Kopplung eines Datenpfades mit dem Steuerpfad ist auf-

grund folgender Aspekte zu empfehlen:

Sofern in Anwendungen ein Timer-Grenzwert in mehreren Zuständen geprüft werden

muss, ist es sinnvoll, den Komparator nicht mehrfach in der FSM zu realisieren. Der in

der Timer-Entity platzierte Komparator spart damit Logik-Ressourcen ein.

Zähler, die große Speicherbereiche adressieren, wie z.B. Bildzwischenspeicher mit >1

MB in Farbbildverarbeitungsanwendungen, sind ggf. mehr als 20 Bit breit. Ein Aus-

tausch von einzelnen Statusleitungen mit der FSM anstelle der Einkopplung aller Zäh-

lerleitungen in das kombinierte Übergangs- und Ausgangsschaltnetz (vgl. Bild 6-10)

kann die erforderlichen Verdrahtungsressourcen reduzieren. Da das FPGA-Routing in

den Signallaufzeitpfaden je nach Anwendung bis zu 50 % ausmacht, kann diese vorge-

schlagene Funktionspartitionierung auch die Timingkennwerte verbessern.

-- Koeffizienten ROM 65x16 Bit, 8 Bit Adresszähler library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity ROM_C_65_16 is

generic( WIDTH : positive := 8 ); -- Counter Width

port

( RESET, CLK, EN: in std_logic ;

CNT_C_MAX : out std_logic;

COEF : out std_logic_vector(2*WIDTH -1 downto 0)

);

end entity ROM_C_65_16;

architecture ADR_ROM_C of ROM_C_65_16 is

component ROM_COEF -- Core Generator ROM-Modul 65x16 Bit

port ( addr: IN std_logic_VECTOR(6 downto 0);

clk: IN std_logic;

dout: OUT std_logic_VECTOR(15 downto 0));

end component;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 70: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

308 9 Modellierung digitaler Filter

signal ADR_C : unsigned(WIDTH-1 downto 0); -- ROM-Adresse

constant MAX : unsigned(WIDTH -1 downto 0) := x"40"; -- N=64

begin

ADR_CNT_COEF: process(CLK) -- ROM-Adresszähler: Inkrementer

begin

if (CLK'event and CLK = '1') then

if (RESET = '1') then -- System-Reset

ADR_C <= (others => '0')after 3 ns;

elsif (EN = '1') then -- Freigabe durch FSM

if (ADR_C = MAX) then ADR_C <= (others => '0') after 3 ns; -- w-a

else ADR_C <= ADR_C + 1 after 3 ns;

end if;

end if;

end if;

end process ADR_CNT_COEF;

CNT_C_MAX <= '1' after 3 ns when ADR_C = MAX else '0' after 3 ns; -- Status

ROM_C: ROM_COEF

port map (addr => std_logic_vector(ADR_C(6 downto 0)),

clk => CLK, dout => COEF);

end architecture ADR_ROM_C;

Code 9-14: ROM-entity ROM_C_65_16 für L=65 Koeffizienten; inkrementierender Adress-

zähler

9.1.5.4 Sequenzsteuerung mit einem Zustandsautomaten

Ein Steuerautomat koordiniert den Speichervorgang des aktuellen Abtastwertes, die an-

schließenden Lesevorgänge der Abtastwerte und der Koeffizienten, die Freigabe des

Akkumulatorregisters der MAC-Einheit und die Ergebnisübernahme in das

Übergaberegister des Sättigungsmoduls (vgl. Bild 9-25). Mit der Adresszählerstrategie nach

Abschnitt 9.1.5.2 vereinfachen sich die Steuerungseingriffe, da die Zähler mit den gewähl-

ten Zählrichtungen und Wrap-Arounds nur noch ein geeignetes Timing der Zählfreigabe

erfordern. In Abhängigkeit von den Statusbits ADC_FULL aus dem Pulsverkürzer und

CNT_C_MAX aus dem Adresszähler des Koeffizienten-ROMs wird die Zustandssequenz

kontrolliert (vgl. Bild 9-28).

Hier liegt ein Mealy-Automat vor, da die Auswertung der Statusbits unmittelbaren Einfluss

auf Freigabesignale hat. Damit werden zwei Zustände eingespart, was die Übersichtlichkeit

des Zustandsdiagramms erhöht. Nachteile gehen nicht damit einher, da die Statussignale

aus dem gleichen synchronen System stammen und die gekoppelten Schaltnetze nicht be-

stimmend für die Taktfrequenz sind (vgl. Kap. 6.3 u. 6.4).

Das Zustandsdiagramm in Bild 9-28 verdeutlicht einerseits die Mealy-Charakteristik und

hebt andererseits hervor, welche Steuerausgänge nur durch den jeweiligen Zustand be-

stimmt sind, also ein Moore-Verhalten aufweisen. Alle Steuerausgänge, die im jeweiligen

Zustand nicht dargestellt sind oder nicht in Abhängigkeit der Statussignale stehen, erhalten

die Defaultzuweisung '0'. Die Wirkung der Zustände auf die Berechnungssequenz ist im

Folgenden zusammengefasst (vgl. Code 9-15):

IDLE: Das Akkumulatorregister Y wird gelöscht (CLR_REG), damit der nächste Be-

rechnungszyklus keinen Summen-Offset aus dem vorherigen Zyklus erhält. Der Spei-

chervorgang (WE_R_S) des Abtastwertes SAMP zu Beginn der Sequenz und der Ad-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 71: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

309 9.1 FIR-Filter

resszählerstart (EN_CNT_S, EN_CNT_C) werden parallel vorbereitet, da die Latenz

der getakteten ROM- und RAM-Lesevorgänge einen zeitlichen Vorlauf der Adressenak-

tualisierung von einem Takt erfordert.

MULL_ACC: Drei getaktete Pipeline-Vorgänge laufen in diesem Zustand parallel ab,

wobei jeder Vorgang die Vorbereitung des nächsten in einem folgenden Takt darstellt:

­ Aktualisierung der Adressen: ADR_S(n-(k+1)), ADR_C(k+1).

­ Ein Wertepaar (SAMP(n-k), COEF(k)) erscheint an den Speicherausgängen.

­ Ein Produkt SAMP(n-(k-1))*COEF(k-1) wird akkumuliert (EN_REG).

Liegt die höchste Adresse k=N am Koeffizientenspeicher an (CNT_C_MAX), so wird

diese Pipeline mit den nächsten Zustandstransitionen schrittweise deaktiviert. Die

RAM-Adresse ADR_S bleibt für den nächsten Schreibvorgang unverändert

(EN_CNT_S=0) und die ROM-Adresse ADR_C führt nur noch den Wrap-Around auf

den Anfangswert aus (ENT_CNT_C).

STOP: Die letzte Multiplikation SAMP(n-N)*COEF(N) erfolgt und geht in die Summe

Y ein (EN_REG).

UPDATE: Das Akkumulationsendergebnis Y durchläuft die Sättigungsfunktion und

bleibt während des folgenden Zyklus im Übergaberegister YN gespeichert (EN_SAT).

Bild 9-28: Zustandsdiagramm der Sequenzsteuerung des FIR-Filters mit MAC-Einheit; Mealy-FSM

mit Moore-Ausgängen

Die Top-entity SEQ_FIR enthält die Pulssynchronisation und die FSM als Prozesse

parallel zu den Komponenten-Instanziierungen des Datenpfades (vgl. Code 9-15). Eine zu

kleinteilige Kapselung von Funktionen in Komponenten kann die Übersicht reduzieren,

ADC_FULL==1/EN_CNT_S, EN_CNT_C,

WE_R_S

CLR_REG

IDLE

STOPUPDATE

EN_REG

CNT_C_MAX==1/EN_CNT_S=0

EN_SAT

synch. RESET

EN_CNT_C, EN_REG

MULL_ACC

CNT_C_MAX==0/EN_CNT_S=1

ZUSTAND

ADC_FULL, CNT_C_MAX/EN_CNT_S, EN_CNT_C, WE_R_S,

CLR_REG, EN_REG, EN_SAT

ADC_FULL==0

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 72: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

310 9 Modellierung digitaler Filter

weil bezogen auf den Funktionsumfang zu viele port maps und interne Signale die

Inhalte verdecken.

Das im Prozess UE_AUS_SN enthaltene FSM-Ausgangsschaltnetz listet die Moore-

Ausgänge und die bedingten Mealy-Ausgänge sequentiell auf. Es sind keine else-Pfade

erforderlich, da die Default- und die Moore-Zuweisungen in allen Zuständen für eine voll-

ständige Ausgangsansteuerung sorgen (vgl. Kap. 3.6). Ungewollte Speichereffekte durch

Latches werden also sicher vermieden. Ein Aggregat dient hier auf der linken Seite der

Default-Zuweisungen zur Bündelung der Steuersignale, die alle den gleichen Typ aufwei-

sen. Auf der rechten Seite ist ein Type-Qualifier std_logic_vector' erforderlich, der

das Type-Casting des konstanten Vektors erzeugt, dessen Länge zur Anzahl der Aggregat-

elemente passen muss [37].

-- Top-Entity: Sequential FIR mit Puls-Shorter u. integrierter FSM

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity SEQ_FIR is

generic(WIDTH : positive := 8);

port

( CLK, RESET, RD : in STD_LOGIC; -- RD Ready Puls des Codec-Interf.

XN : in std_logic_vector(19 downto 0); -- 20 Bit Codec Interface

YN : out std_logic_vector(19 downto 0) );

end entity SEQ_FIR;

architecture HYBRID of SEQ_FIR is

component ROM_C_65_16 -- Koeffizienten ROM

generic( WIDTH : positive );

port

( RESET, CLK, EN: in std_logic ;

CNT_C_MAX : out std_logic; -- Status wrap around

COEF : out std_logic_vector(2*WIDTH -1 downto 0) );

end component;

component RAM_S_65_16 -- Ringpuffer RAM

generic( WIDTH : positive );

port

( RESET, CLK, EN, WE : in std_logic ;

DIN : in std_logic_vector(2*WIDTH -1 downto 0); -- Codec Ausgang

SAMP: out std_logic_vector(2*WIDTH -1 downto 0) );

end component;

component MAC_FIR -- MAC-Einheitt

generic( WIDTH : positive );

port

( CLK, CLR_REG, EN_REG, EN_SAT: in std_logic;

COEF, SAMP : in std_logic_vector(2*WIDTH -1 downto 0);

YN : out std_logic_vector(19 downto 0) ); -- Codec Eingang

end component;

signal TEMP_1, TEMP_2, ADC_FULL: std_logic; -- Ready

signal COEF_I, SAMP_I : std_logic_vector(2*WIDTH -1 downto 0);

type ZUSTAENDE is(IDLE, MUL_ACC, STOP, UPDATE); -- FSM-Zustände

signal ZUSTAND, Z_PLUS : ZUSTAENDE;

-- FSM Steuersignale und Statusrückmeldung aus Koeffizienten-Adresszähler

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 73: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

311 9.1 FIR-Filter

signal EN_CNT_S, EN_CNT_C, WE_R_S, CLR_REG: std_logic;

signal EN_REG, EN_SAT, CNT_C_MAX : std_logic;

begin

PULSE_SHORTER: process(CLK,RESET)

begin

if RESET = '1' then

TEMP_1 <= '0' after 3 ns; TEMP_2 <= '0'after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= RD after 3 ns; -- Ready des Codec-Interface

TEMP_2 <= TEMP_1 after 3 ns;

end if;

end process PULSE_SHORTER;

ADC_FULL <= TEMP_1 and (not TEMP_2) after 3 ns; -- synch. Ready-Puls

ROM: ROM_C_65_16

generic map( WIDTH => WIDTH )

port map

( RESET => RESET, CLK => CLK, EN => EN_CNT_C, CNT_C_MAX => CNT_C_MAX,

COEF => COEF_I);

RAM: RAM_S_65_16

generic map( WIDTH => WIDTH )

port map

( RESET => RESET, CLK => CLK, EN => EN_CNT_S, WE => WE_R_S,

DIN => XN(19 downto 4), SAMP => SAMP_I);

MAC: MAC_FIR

generic map( WIDTH => WIDTH )

port map

( CLK => CLK, CLR_REG => CLR_REG, EN_REG => EN_REG, EN_SAT => EN_SAT,

COEF => COEF_I, SAMP => SAMP_I, YN => YN );

Z_REG: process(CLK) -- Zustandsaktualisierung

begin

if (CLK = '1' and CLK'event) then

if (RESET = '1') then ZUSTAND <= IDLE after 3 ns;

else ZUSTAND <= Z_PLUS after 3 ns;

end if;

end if;

end process Z_REG;

UE_AUS_SN: process(ZUSTAND, ADC_FULL, CNT_C_MAX) -- Mealy-FSM

begin -- Default Zuweisungen mit Aggregat und Vektor passender Länge

(EN_CNT_S, EN_CNT_C, WE_R_S, CLR_REG, EN_REG, EN_SAT) <=

std_logic_vector'("000000") after 5 ns;

Z_PLUS <= IDLE after 5 ns;

case ZUSTAND is

when IDLE => CLR_REG <= '1' after 5 ns; -- Moore-Ausgang, Reset MAC

if (ADC_FULL = '1') then

EN_CNT_S <= '1' after 5 ns; -- S.-Adressz. freigeben

WE_R_S <= '1' after 5 ns; -- RAM Schreibfreigabe

EN_CNT_C <= '1' after 5 ns; -- Koeff.-Adressz. freig.

Z_PLUS <= MUL_ACC after 5 ns;

end if;

when MUL_ACC => EN_CNT_S <= '1' after 5 ns;

EN_CNT_C <= '1' after 5 ns;

EN_REG <= '1' after 5 ns;-- MAC-Register freigeben

Z_PLUS <= MUL_ACC after 5 ns;

if (CNT_C_MAX = '1') then

Z_PLUS <= STOP after 5 ns;

EN_CNT_S <= '0' after 5 ns;-- Schreibpos. fixieren

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 74: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

312 9 Modellierung digitaler Filter

end if;

when STOP => EN_REG <= '1' after 5 ns; -- letzte Multiplik. akkumu.

Z_PLUS <= UPDATE after 5 ns;

when UPDATE => EN_SAT <= '1' after 5 ns; -- Ergebnis übernehmen

Z_PLUS <= IDLE after 5 ns;

when others => null; -- Default Reaktion in Pseudozuständen

end case;

end process UE_AUS_SN;

end architecture HYBRID;

Code 9-15: Top-entity SEQ_FIR mit integrierter FSM zur Sequenzsteuerung und READY-

Pulsverkürzer

9.1.5.5 Simulations- und Syntheseergebnisse

Die VHDL-Simulation in Bild 9-29 zeigt das Anlaufverhalten der Filterberechnungsse-

quenz während des ersten READY-Pulses, wobei die Testbench nach Code 9-1 die Stimuli

erzeugt hat. Drei Zeitpunkte während des Zustandsübergangs von IDLE nach MUL_ACC

sind markiert:

t1: Der erste Lesevorgang des ROMs und des RAMs mit den Startadressen 00Hex liefert

den Koeffizienten c0=FFECHex und den Inhalt des noch leeren ersten RAM-

Speicherplatzes. Der synchronisierte Puls ADC_FULL bereitet den Folgezustand

MUL_ACC+ vor und generiert die Mealy-Ausgänge für die Zählfreigaben sowie für den

Schreibfreigabepuls WE_R_S.

t2: Die Adresszähler inkrementieren bzw. dekrementieren und das RAM nimmt den auf

16 Bit verkürzten Abtastwert x[0]=SAMP_I=7FFFHex auf. Parallel dazu ist der Über-

gang in den Zustand MUL_ACC erfolgt.

t3: Im Zustand MUL_ACC sind alle Pipeliningstufen, Adresszähler, ROM- und RAM-

Speicher sowie das Akku-Register Y aktiv. Das erste Produkt SAMP(0)*COEF(0)=

7FFFHex*FFECHex wird in Y gespeichert, ein neues Wertepaar und zwei aktualisierte

Adressen liegen vor.

Mit der Timingsimulation in Bild 9-30 wird der Übergang in den stationären Zustand einer

Sprungantwort nach N+1 READY-Pulsen dargestellt. Das Synthesewerkzeug ISE 13.4 hat

die Zustandssequenz mit einer Gray-Codierung für zwei Datenflipflops ZU-

STAND_FFD[1:2] realisiert, wobei für die Indizes gilt [LSB:MSB]. Da eine Zustandskette

ohne Verzweigungen vorliegt, ist diese einschrittige Codierung automatisch gewählt wor-

den (vgl. Kap. 6.5):

(IDLE, MUL_ACC, STOP, UPDATE) = (00, 01, 11, 10)

Die Signalkennzeichnung ZUSTAND_FFDi/I gibt die D-FF Vorbereitungseingänge an,

also den Folgezustand Z_PLUS, und mit ZUSTAND_FFDi/O sind die D-FF Ausgänge

gekennzeichnet, also der aktuelle Zustand.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 75: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

313 9.1 FIR-Filter

Bild 9-29: VHDL-Simulation der Sprungantwort des sequentiellen FIR-Filters. Sequenzanlauf mit

dem ersten READY-Puls. N=64, Taktsignal CLK mit fCLK=48 MHz (20.83 ns)

Der in Bild 9-30 abgebildete Zeitausschnitt mit den markierten Zeitpunkten t1, t2 und t3

verdeutlicht den Abschluss der Zustandssequenz:

t1: Der Adresszähler des Koeffizienten-ROMs erreicht die höchste Adresse

ROM_ADR_C=40Hex, sodass die Transitionen aus dem Zustand MUL_ACC in den

IDLE-Zustand angestoßen werden (vgl. Bild 9-28). Dieser Adresszähler führt mit dem

nächsten Takt nur noch den Wrap-Around aus, wohingegen der Adresszähler des RAMs

unverändert auf den zu überschreibenden Speicheranfang zeigt. Der RAM-Speicher ist

nach N+1 Zyklen vollständig mit Abtastwerten beschrieben, sodass für SAMP_I kon-

stant 7FFFHex angezeigt wird.

t2: Da symmetrische Koeffizienten vorliegen, sind der letzte und der erste Koeffizient

identisch COEF_I=FFECHex. Im Zustand STOP wird das letzte Produkt

SAMP(0)*COEF(N) der Sprungantwort akkumuliert.

t3: Als letzter Schritt findet durch den Zustand UPDATE die Übergabe des stationären

Endwertes MAC_YN=74551Hex an das Register der Sättigungsfunktion und die Transi-

tion in den IDLE-Zustand statt.

t1

t2

t3

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 76: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

314 9 Modellierung digitaler Filter

Bild 9-30: Timingsimulation des sequentiellen FIR-Filters. Abschluss des letzten Berechnungszyklus

nach N+1 READY-Pulsen. N=64, Taktsignal CLK mit fCLK=48 MHz (20.83 ns)

Die Verzögerungen TPD der Zähler und Zustandsflipflops gegenüber der Taktflanke sind

größer als die Datenblattangaben (< 0.68 ns), da das Clock-Signal CLK am Chip-Eingang

und nicht das an den jeweiligen D-FFs dargestellt ist [84]. Erkennbar ist der Unterschied

zur Reaktion des ROMs, das als Block-RAM eine größere Verzögerung von > 1.45 ns

aufweist.

Das Syntheseergebnis zur entity SEQ_FIR nach Code 9-15, das das Werkzeug ISE 13.4

mit dem RTL-Schematic für die Implementierung mit einem Spartan-3-FPGA [84] anzeigt,

entspricht der Struktur in Bild 9-25. Die exakte Verdrahtung des Akkumulators und des

Multiplizierers lässt sich jedoch nur mit dem FPGA-Editor überprüfen (vgl. Seite 264). Der

Synthesereport listet die in den Komponenten enthaltenen Funktionselemente und die FSM

in den Macro Statistics mit ihren Vektorbreiten explizit als inferierte Objekte auf [81]:

# FSMs : 1

# Multipliers : 1

16×16-bit multiplier : 1

# Counters : 2

8-bit down counter : 1

8-bit up counter : 1

# Accumulators : 1

38-bit up accumulator : 1

# Registers : 22

Flip-Flops : 22 (Sättigungsstufe, Pulsverkürzer)

yn

IDLESTOP

UPDATEMUL_ACC

t1

t2

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 77: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

315 9.1 FIR-Filter

Der synthesegerechte Codierstil kann also mit dieser Liste zusätzlich überprüft werden. Je

mehr Makros der Synthesecompiler identifiziert, desto besser wird die Logikoptimierung

unterstützt [81]. Die Sättigungsfunktion (vgl. Code 9-12) ist nicht als Makro erkannt wor-

den, da der Prozess SAT eine kombinierte Codierung eines 3 zu 1-Multiplexers mit drei

Komparatoren enthält, die die Selektionsbedingungen für die Eingangsvektoren erzeugen.

In der Liste Cell-Usage sind neben den anderen erforderlichen FPGA-Ressourcen (LUTs,

D-FFs) auch die instanziierten Speichermodule aufgeführt, die zwei der 16 Block-RAMs

beanspruchen:

ROM: RAMB16_S18; 1024×18 10-Bit-Adresse, 16 Bit Datenbreite

RAM: RAMB4_S16; 256×16 8-Bit-Adresse, 16 Bit Datenbreite

Abschließend zeigt Tabelle 9-5 den Ressourcenbedarf und die erreichbare Taktfrequenz

fmax des sequentiellen FIR-Filters. Die Auswahl eines der Block-Multiplizierer für die

MAC-Einheit liefert die erwartete Reduzierung der erforderlichen Look-Up-Tabellen

(LUTs) und verdoppelt nahezu die maximal anwendbare Taktfrequenz, da die eingesparten

LUTs die Anzahl der Levels of Logic von 17 auf 3 verringern. Die Block-Multiplizierer der

Spartan-3-FPGAs sind in direkt benachbarten Spalten zu den Block-RAMs lokalisiert [84],

so kann die MAC-Einheit in diesem Fall dichter an dem Koeffizienten- und dem Abtast-

wertespeicher implementiert werden, sodass zusätzlich die Verdrahtungslaufzeit reduziert

wird.

Es sei hier noch erwähnt, dass die Schaltnetze der FSM mit 6 LUTs in der Gesamtbilanz

enthalten sind und die Zustandsrückführung eine Signallaufzeit von ca. 1.7 ns aufweist. In

Anwendungen mit arithmetischen Datenpfaden haben demnach Techniken zur Automaten-

Optimierung, wie z.B. Zustandsminimierungen und Zustandscodierung, keinen entschei-

denden Einfluss auf die Implementierungskennwerte des Gesamtsystems.

Tabelle 9-5: Implementierungskennwerte des sequentiellen FIR-Filters. N=64, FSM mit Gray-Code,

Spartan-3-XC3S400-5 FPGA mit je 8064 LUTs und D-FFs; ISE 13.4

Mult.-Typ D-FFs Slices LUTs tDelay/ns (fmax/MHz) Delay-Pfad

Block

78 51 100 10.7 (93.4) 8.3 ns Logik, 2.4 ns Verdr.

RAM → Akku.-

Register Y

LUT

78 210 412 19.53 (51.2) 13 ns Logik, 6.53 ns Verdr.

RAM → Akku.-

Register Y

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 78: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

316 9 Modellierung digitaler Filter

9.1.6 Taktschemata der Filterdatenpfade

Zwei Datenpfadstrukturen sind in den vorangegangenen Abschnitten vorgestellt worden:

Parallele Realisierung der Filterarithmetik ohne bzw. mit Pipelining.

Sequentielle Struktur mit MAC-Einheit.

Zusätzlich hat die Einbettung der Filtermodelle in einen Synchronisationsrahmen ein prak-

tisches Beispiel für eine typische Kopplung mit einem Audiocodec-Interface aufgezeigt,

mit der der Übergang zwischen Taktbereichen geklärt wurde (vgl. Bild 9-8 u. Bild 9-20).

Hier sollen diese Filterstrukturen in die Datenpfadentwurfsmuster mit unterschiedlichen

Strukturen und Taktschemata eingeordnet werden, wie sie vom Prozessorbau für den

Entwurf digitaler Systeme übernommen worden sind [8], [35], [41], [63], (vgl. Kap. 7 u.

Kap. 8):

Einzyklus-Datenpfad

Mehrzyklus-Datenpfad

Datenpfad mit Pipelining

Die Klassifizierung der Filtermodelle liefert eine zusammenfassende Übersicht zu deren

jeweils geeigneten Einsatzbereichen und zu den Implikationen für den FPGA-

Ressourcenbedarf sowie für die anwendbare Taktfrequenz. Vorangestellt werden Erläute-

rungen zu den in [63] behandelten Datenpfadkategorien:

In einem Einzyklus-Datenpfad (EZD) sind alle für einen Eingangsdatensatz erforderli-

chen Berechnungsschritte mit direkt verketteten und parallelen Arithmetikelementen

modelliert. Die Synthese liefert dazu einen Block mit kombinatorischer Logik, in dem

die identifizierten Makros wie Addierer, Multiplizierer und Multiplexer mehrstufig in-

tegriert sind. Der längste Signallaufzeitpfad durch alle Arithmetikstufen dieses Daten-

pfades legt die minimale Taktperiode TEZD fest, mit der die Eingangsdaten zugeführt

werden können und die aktualisierten Ergebnisse bereitstehen. Der Datendurchsatz ist

mithin 1 Ergebnis/TEZD.

Der Entwurf eines Mehrzyklus-Datenpfades (MZD) ist auf Ressourcen-Einsparung

ausgerichtet. Diese Technik nutzt deshalb wiederholt in aufeinander folgenden Taktpe-

rioden einen reduzierten Satz von parallelen Arithmetikelementen, die je nach Erforder-

nis ggf. nur in einer Stufe ohne Verkettung angeordnet sind. Ein Registerblock nimmt

die jeweils pro Taktperiode anfallenden Zwischenergebnisse auf und bringt diese wieder

in den nächsten Berechnungsschritt ein, in dem sie über Multiplexer an die

Arithmetikeingänge geführt werden. Die erreichbare Taktfrequenz fCLK=1/TMZD ist um

ein Vielfaches höher als in einem Einzyklus-Datenpfad, da die im Grenzfall nur einstu-

fige Arithmetik kürzere Signallaufzeitpfade verursacht. Von der Anzahl n der erforder-

lichen Bearbeitungstakte für einen vollständigen Berechnungsablauf hängt dann die rea-

lisierbare Datenrate bzw. der Durchsatz 1 Ergebnis/nTMZD ab.

Der Datenpfad mit Pipelining (DP) bearbeitet alle Rechenschritte parallel in einer

Taktperiode, wobei die Zwischenergebnisse der einzelnen Arithmetikstufen in separaten

Pipeline-Registerstufen gespeichert werden (vgl. Kap. 8). Die so im RTL-Stil entkop-

pelten Arithmetikstufen erlauben wie der Mehrzyklus-Datenpfad erheblich höhere Takt-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 79: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

317 9.1 FIR-Filter

frequenzen fCLK=1/TDP als der Einzyklus-Datenpfad. Hinzu kommt, dass die Pipeline in

jeder Taktperiode einen Eingangsdatensatz aufnimmt und parallel ein neues Ergebnis zu

einem vorhergehenden Datensatz liefert, sodass der Durchsatz mit 1Ergebnis/TDP der

höchste der drei Datenpfadkategorien ist. Die Latenz, die die Anzahl der Takte angibt,

die zum Füllen der Pipeline benötigt werden, ist als Verzug in der gesamten Daten-

stromverarbeitung zu vernachlässigen.

Digitale Filter werden in Signalflussanwendungen eingesetzt, bei denen die zu verarbeiten-

de Datenrate die Anforderungen an den Entwurf des Datenpfades vorgibt [70], [77]. Des-

halb erfolgt hier eine Unterscheidung in zwei Bereiche:

Audiodatenrate mit fa=48 kHz << fCLK: Zwischen zwei Abtastwertaktualisierungen

stehen sehr viele Taktperioden zur Filterberechnung und für weitere Auswertestufen zur

Verfügung.

Datenrate fa ≤ fCLK: Der Eingangsdatenstrom muss im Grenzfall direkt mit der Taktfre-

quenz der FPGA-Plattform aufgenommen und verarbeitet werden. Hierzu gehören z.B.

Video-Sequenzen, die bei Bildraten mit mehr als 60 Bildern/s Taktfrequenzen von > 20

MHz erfordern, um den RGB-Pixelstrom kontinuierlich zu verarbeiten. In nachrichten-

technischen Anwendungen arbeiten die Modulatoren und Demodulatoren mit 200

MSamples/s, sodass nur noch Datenpfade mit Pipelining in Frage kommen.

9.1.6.1 Audiodatenrate

Die Verarbeitung von Audiosignalen ist ein Beispiel für den Fall, dass in einem Abtast-

intervall T=1/fa mit den Kennwerten nach Bild 9.8 und Bild 9-20 fast alle der fCLK/fa=

48 MHz/48 kHz=1000 Taktperioden zur Verarbeitung eines Eingangsdatensatzes eingesetzt

werden können. Da die bidirektionale serielle Datenübertragung zwischen Codec und

FPGA für zwei Stereokanäle und die Codec-Parametrisierung mit typisch fI=12 MHz er-

folgt, sind bei einem 20-Bit-Abtastwert nur 20fCLK/fI=80 der 1000 Takte nicht von der

Filterimplementierung nutzbar.

Anwendungen mit adaptiven FIR-Filtern z.B. zur Geräusch- oder Echokompensation [70],

[73], die zusätzlich zur Filterung noch eine Koeffizientenschätzung für die nachzubildenden

Übertragungsstrecken beinhalten, können also mit einem Mehrzyklus-Datenpfad aus-

kommen. Die sequentielle FIR-Struktur mit MAC-Einheit nach Kap. 9.1.5 erfüllt aus Sicht

der verfügbaren Berechnungstakte und des geringen FPGA-Ressourcenbedarfs das Anfor-

derungsprofil an einen Mehrzyklus-Datenpfad (vgl. Tabelle 9-4 u. Tabelle 9-5). Mit dem

Zustandsautomaten in Bild 9-28 sind nämlich nur N+4 Taktperioden für einen Berech-

nungsablauf erforderlich. Das sequentielle FIR-Filter ist ein spezieller Mehrzyklus-

Datenpfad, da der Aufbau mit Adresszählern, RAM bzw. ROM und MAC-Einheit eine

dreistufige Pipeline bildet und die MAC-Einheit eine zweistufige ALU wie in digitalen

Signalprozessoren darstellt [73].

Im Audio-Abtastzyklus lassen sich noch mehr Taktperioden für zusätzliche Funktionen

bereitstellen, indem die realisierbare Taktfrequenz der sequentiellen Filterimplementierung

durch ein zusätzliches Entkopplungsregister zwischen dem Multiplizierer und dem

Addierer weiter gesteigert wird (vgl. Bild 9-25). Die Pipeline erhält somit eine zusätzliche

Stufe, sodass die Latenz der Berechnung eines Akkumulationsergebnisses auf 4 Takte

ansteigt und der Zustandsautomat um einen Zustand zum Leerlaufen der Pipeline zu ergän-

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 80: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

318 9 Modellierung digitaler Filter

zen ist (vgl. Bild 9-28). Bei einer so erreichbaren Verdopplung der Taktfrequenz auf ca.

fCLK=170 MHz sind dann 3541-20fCLK/fI=3381 Taktperioden verfügbar und der Berech-

nungsablauf des FIR-Filters benötigt davon lediglich N+5 Taktperioden.

Falls für eine Anwendung die verfügbaren Takte zum Einsatz eines Mehrzyklus-

Datenpfades nicht ausreichen, müssen ggf. mehr parallele FPGA-Ressourcen für die Filter-

implementierung eingesetzt werden. Zur Realisierung eines Einzyklus-Datenpfades käme

dann die in Kap. 9.1.4.5 hergeleitete Linear-Phasen-Struktur mit balanciertem

Addiererbaum in Frage (vgl. Bild 9-17). Es ist auch hier jeweils zu prüfen, ob bei der reali-

sierbaren Taktfrequenz der parallelen Filterstruktur genügend Takte für die angeschlosse-

nen Funktionen der Audiosignalverarbeitung übrig bleiben. Eine Linear-Phasen-Struktur

mit einer Filterordnung N=64 besteht aus Γ3.32log(N+1)=7 Addiererstufen, sodass wie in

der Struktur nach Bild 9-17 eine Taktfrequenz von etwa fCLK=30 MHz zu erwarten ist (vgl.

Tabelle 9-4) und sich die verfügbaren Taktperioden so jedoch auf unter 600 reduzieren.

Parallele Strukturen ohne Pipelining können also nicht mit dem Mehrzyklus-Datenpfad

konkurrieren.

Erst bei massivem Ressourceneinsatz wie in Bild 9-19 für einen Datenpfad mit Pipelining

dargestellt, ergibt sich für ein vergleichbares Filter mit der Ordnung N=64 eine realisierbare

Taktfrequenz von fCLK=170 MHz und eine Latenz von nur (Γ3.32log(N+1)+2)=9, sodass

mehr Takte (ca. 3000) für andere Funktionen zur Verfügung stehen. Der Mehraufwand an

FPGA-Ressourcen (LUTs und D-FFs) ist auch bei der Wahl einer transponierten Form (vgl.

Kap. 9.1.4.6) noch so hoch, dass in den meisten Anwendungen nur ein Mehrzyklus-

Datenpfad zur Diskussion stehen wird.

9.1.6.2 Hohe Datenraten

Datenpfade mit Pipelining sind bei Datenraten im Bereich der Taktfrequenz fCLK zwin-

gend, da nur die direkte Verarbeitung eines kontinuierlichen Datenstroms, jedoch keine

Pufferung mehr möglich ist. Die transponierte Form mit reduzierter Anzahl an

Multiplizierern ist von den in Kapitel 9 vorgestellten Filterstrukturen der Favorit, da der

Ressourcenbedarf und die erreichbare Taktfrequenz für diese Variante sprechen (vgl. Ta-

belle 9-4). Vorteilhaft kommt hinzu, dass bei dieser Struktur (vgl. Bild 9-3 und Bild 9-20)

mit implizitem Pipelining eine von der Filterordnung unabhängige Latenz mit zwei Taktpe-

rioden vorliegt. Durch zusätzliches Pipelining der N/2+1 Produkte wird eine maximale

Taktfrequenz fCLK von bis zu 170 MHz realisierbar, wobei der Bedarf an D-FFs in dieser

Struktur mit reduzierter Anzahl der Multiplizierer um ca. 50% zunimmt und die Latenz auf

drei Takte ansteigt.

Hohe Datenraten bei geringem Ressourcenbedarf lassen sich mit dem im Kap. 7.4.2 vorge-

stellten SDA-FIR-Filter erreichen. Für das Beispielfilter mit der Ordnung N=22 werden bei

einer Implementierung mit einem Spartan-3 FPGA die erforderlichen Ressourcen mit 130

Slices, 220 D-FFs und 149 LUTs angegeben. Bei einer maximalen Taktfrequenz fCLK=

197.9 MHz ist eine Abtastrate bis zu 3.7 MHz realisierbar. Die relativ hohe Latenz (20

Takte) dieses Filterentwurfes lässt sich durch mehr Ressourcen-Parallelität mit den PDA-

Filtern bei allerdings zunehmendem Ressourcenbedarf reduzieren.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 81: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

319 9.2 IIR-Filter

9.2 IIR-Filter

Dieses Kapitel behandelt die Modellierung von ausgewählten parallelen IIR-

Filterstrukturen 2. Ordnung (Second Order Section, SOS), die Basismodule für die Reali-

sierung von Filtern höherer Ordnung bilden [70], [72], [74]. Ausgehend von den Koeffi-

zienten eines Analogfilters wird die bilineare z-Transformation (BZT) zur

Koeffizientenberechnung genutzt [70], [72], da diese eine Koeffizientensymmetrie erzeugt,

die zur Einsparung von FPGA-Ressourcen beiträgt. Eine Gegenüberstellung der typischen

Filterstrukturen zeigt die jeweils erforderlichen FPGA-Ressourcen und die zu erwartenden

längsten Signallaufzeitpfade auf. Zur Vermeidung von Überlaufeffekten in den Rückkopp-

lungsstrukturen der IIR-Filter wird eine Strategie angewandt, die zwei Dimensionierungs-

schritte kombiniert. Eine Skalierung der Filter erfolgt mit der L∞-Tschebyscheff-Norm [70],

die den SOS-Ausgang y auch bei monofrequenter Ansteuerung auf das Intervall -1 ≤ y < 1

begrenzt. Für die internen Signale werden die Vektorbreiten durch Ergänzung des Q-

Formates mit zusätzlichen Guard-Bits so ausgelegt, dass die auftretenden Schwingungs-

amplituden zur Vollaussteuerung führen. Die parametrisierbaren VHDL-Modelle verfügen

über synchronisierte Ausgänge, sodass sie als Module zum Aufbau von SOS-Kaskaden in

einer Pipelinestruktur geeignet sind. Als Spezialfall wird abschließend ein Sinusgenerator-

Modell mit einer reduzierten IIR-Filterstruktur vorgestellt, das zur monofrequenten Über-

prüfung von Filterfrequenzgängen dienen kann.

Dem Leser bietet dieses Kapitel einen Leitfaden zur Entwicklung von VHDL-Modellen für

rückgekoppelte Systeme, deren interne Signale je nach Koeffizientensatz und gewählter

Struktur trotz Skalierung erhebliche Überschwinger außerhalb des Q-Formatbereiches

aufweisen können. Zur Vorbereitung der letztlich einfachen VHDL-Modelle ist deshalb

eine Analyse des Filterübertragungsverhaltens mit z-Übertragungsfunktionen und Fre-

quenzgängen unerlässlich. Der folgende Abschnitt stellt einige Begriffe der Systemtheorie

zusammen, die auch zur Orientierung für die Vertiefung mit der angegebenen Literatur

dienen.

9.2.1 Koeffizientenberechnung und Beispielfilter

Ein Vorteil der IIR-Filter besteht darin, dass sie einen vorgegebenen Frequenzgang im

Vergleich zu FIR-Filtern mit weniger Multiplizieren, Addierern und Verzögerungselemen-

ten realisieren. Die Register in IIR-Filtern werden über eine Signalrückführung auch zur

Speicherung ehemaliger Ausgangswerte y[n-k] genutzt, sodass die Ausgangswerte immer

wieder die gleichen Register durchlaufen. Diese Ausgangssignalrückführung kommt in der

Differenzengleichung Gl. 9-14 durch den zweiten Summenterm zum Ausdruck, der das

rekursive Verhalten der IIR-Filter erzeugt. Demnach liegt bei IIR-Filtern aufgrund der

Rückkopplung des Signals y[n] eine effektivere Nutzung der Verzögerungselemente und

der beteiligten Signalpfade vor. Allerdings hat die daraus resultierende Impulsantwort

theoretisch eine unendliche Dauer, was in Gl. 9-14 der Summenterm auf der rechten Seite

symbolisiert (vgl. Gl. 9-1). Auf dieses Verhalten bezieht sich die Bezeichnung Infinite

Impulse Response (IIR).

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 82: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

320 9 Modellierung digitaler Filter

Gl. 9-14 ]kn[x]k[h]kn[ya]kn[xb]n[y0k

M

0k

N

1kkk

Der Signalflussgraph für ein Filter 2. Ordnung in Bild 9-31 zeigt, dass IIR-Filter aus der

Reihenschaltung eines FIR-Filters und einer zusätzlichen Rückkopplungsstruktur bestehen.

Aufgrund der kompakten Form wird diese Darstellung gern für Filterstrukturen und Algo-

rithmen verwendet, da sich insbesondere auch Rückkopplungsstrukturen übersichtlich ab-

bilden lassen. Die Bedeutung der Signalpfadkennzeichnung ist in Bild 9-31 mit angegeben.

Bild 9-31: Signalflussgraph eins IIR-Filters 2. Ordnung in Direktform I mit Kennzeichnung eines

der beiden längsten Signallaufzeitpfade. Bedeutung der Signalpfade

Mit Hilfe des Signalflussgraphen lässt sich die zur Gl. 9-14 korrespondierende z-Übertra-

gungsfunktion G(z) des digitalen Filters herleiten:

Gl. 9-15 )z(X

)z(Y

za1

zb

)z(GN

1k

kk

M

0k

kk

Die Filterimplementierung mit einem VHDL-Modell geht von der Zeitbereichsdarstellung

nach Gl. 9-14 mit Rückführungsterm bzw. von der Struktur nach Bild 9-31 aus. Zur Be-

stimmung der Koeffizienten ai und bi für eine vorgegebene Filterordnung N finden Verfah-

ren Anwendung, die analoge Filtercharakteristiken durch die z-Übertragungsfunktion G(z)

des digitalen Filters nach Gl. 9-15 approximieren. Damit stehen nämlich zahlreiche bewähr-

te Entwurfsmethoden für analoge Filter zur Verfügung, die je nach Anwendung auf die

erforderlichen Kennwerte für den Durchlass- und Sperrbereich des Frequenzganges ausge-

legt werden können [70], [75]. Ein Approximationsverfahren ist die bilineare z-Trans-

formation (BZT), bei der die Laplace-Variable s in der Laplace-Übertragungsfunktion eines

analogen Filters durch die Tustin-Formel angenähert wird (fa Abtastfrequenz):

Gl. 9-16 )z1()z1(f2zlnfs 11aa

+ +

+ +

x yw

z-1

z-1

z-1

z-1

b0

-a1b1

b2 -a2

y[n]

y[n]

a

z-1

Signalpfade

mit Multiplikation

y[n]=ax[n]

mit Verzögerung

y[n]=x[n-1]

x[n]

x[n]

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 83: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

321 9.2 IIR-Filter

Dieser Zusammenhang folgt aus einer Taylor-Reihenentwicklung der ln-Funktion, die nur

das 1. Glied berücksichtigt. Substituiert man in der allgemeinen Laplace-Übertragungs-

funktion eines analogen Tiefpassfilters 2. Ordnung (N=2) nach Gl. 9-17

Gl. 9-17 )sd2s()s(G 200

220

die Variable s mit Gl. 9-16, so ergibt sich die korrespondierende z-Übertragungsfunktion

für den zeitdiskreten Fall zu:

Gl. 9-18

2

200a

2a

200a

2a1

200a

2a

2a

20

200a

2a

2021

zdf4f4

df4f4z

df4f4

f421

df4f4zz21

)z(G

Für die Entwurfsparameter in Gl. 9-17 und Gl. 9-18 gilt [70]:

fa = 1/T Abtastfrequenz

d Dämpfung > 0

0 = 2f0 Kreisfrequenz, bei der am Ausgang 90° Phasendrehung auftritt

Ein Koeffizientenvergleich der Zählerpolynome in Gl. 9-15 und Gl. 9-18 zeigt für N=2,

dass eine Koeffizientensymmetrie vorliegt, die die BZT in ähnlicher Form auch für Hoch-

pass-, Bandpass- und Bandstoppfilter liefert (vgl. Gl. 9-19). Die s-Übertragungsfunktionen

der anderen Filtercharakteristiken lassen sich z.B. mit speziellen Frequenz-Transformatio-

nen der s-Variable vorab zur BZT aus der Darstellung des Tiefpasses herleiten [70].

Gl. 9-19

Neben dieser für die FPGA-Implementierung relevanten Koeffizientensymmetrie (vgl.

Abschnitt 9.1.4.5) besteht der wesentliche Vorteil der BZT mit Gl. 9-16 darin, dass der

gesamte Frequenzbereich eines analogen Referenzfilters auf den für das digitale Filter zu-

lässigen Frequenzbereich bis zur Nyquist-Frequenz fNy=fa/2 komprimiert wird. Damit treten

keine Aliasing-Effekte im Bereich der Nyquist-Frequenz auf, die z.B. die Filterapproxima-

tion mit dem Verfahren der Impulsinvarianz auf schmalbandige Filter beschränken [72].

Als Beispielfilter für die VHDL-Modellierung dient hier ein IIR-Tiefpass 2. Ordnung,

dessen Parameter in Tabelle 9-6 zusammengestellt sind. Die Dämpfung ist mit d=0.2 ge-

zielt gering gewählt, damit sich mit Gl. 9-18 ein typischer Koeffizientensatz ergibt, wie er

auch für die SOS-Module in stark selektiven Filtern höherer Ordnung entsteht.

b0 = b2 , b1 = 2b0 Tiefpass

b0 = b2 , b1 = -2b0 Hochpass

b0 = -b2 , b1 = 0 Bandpass

b0 = b2 , b1 b0 Bandstopp

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 84: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

322 9 Modellierung digitaler Filter

Tabelle 9-6: Parameter eines IIR-Tiefpassfilters; Koeffizientenberechnung mit der BZT. fa=48 kHz

Der Amplitudengang des Beispielfilters (vgl. Bild 9-32) zeigt im oberen Frequenzbereich

f>20 kHz einen stark abfallenden Verstärkungsverlauf. Dies ist die Auswirkung der nichtli-

nearen Frequenzkompression der BZT nach Gl. 9-16, die ab einem Verhältnis f/fNy > 0.4

deutlich wirksam wird. Die Verstärkungsüberhöhung mit VGmax=2.55 resultiert aus der

geringen Dämpfung d=0.2. Ein Nachteil der IIR-Filter gegenüber den nicht rekursiven FIR-

Filtern wird mit dem nichtlinearen Phasengang in Bild 9-32 erkennbar. Aufgrund der nicht

konstanten Gruppenlaufzeit τg=-d/d erfahren die Frequenzanteile der Filtereingangssig-

nale unterschiedliche zeitliche Verzögerungen, sodass z.B. Ausgangspulse unsymmetrische

Verzerrungen aufweisen.

Bild 9-32: Frequenzgang des digitalen IIR-Tiefpassfilters, berechnet mit der MATLAB-Funktion

freqz. Koeffizienten nach Tabelle 9-6, VGmax=8.135 dB, N=2, fa=48 kHz

Analoges Filter G(s) Digitales Filter

G(z)

Verstärkung

|G(f)|max= VGmax

Skalierte

Koeffizienten

d = 0.2

f0 = 4774.65 Hz

f0/fNy = 0.199

fd = f0(1-d2)1/2 = 1/Td

b0 = 0.079872

b1 = 0.159744

a1 = -1.476

a2 = 0.7955

VGmax = 8.135 dB

= 2.5511

bei fR = 4450 Hz

bi/VGmax

b0 = 0.03131

b1 = 0.06262

0 0.5 1 1.5 2

x 104

-180

-150

-120

-90

-60

-30

0

f/Hz

Ph

ase/

°

0 0.5 1 1.5 2

x 104

-80

-60

-40

-20

0

f/Hz

|G(f

)| /

dB

Phasengang

Amplitudengang

Frequenz-

kompression

8.135 dB

f0 = 4774.65 Hz

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 85: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

323 9.2 IIR-Filter

Als Grundlage für die Filterskalierung ist neben dem Frequenzgang auch die Sprungantwort

auf Überhöhungen ymax>1 zu überprüfen (vgl.Bild 9-33). In Anwendungen mit sprungför-

migen Anregungen reicht nämlich eine Skalierung der Filterverstärkung mit dem Maxi-

malwert der Amplitudenüberhöhung (ymax=1.519) aus. Treten jedoch schmalbandige Ein-

gangssignale im Bereich der Frequenz f0 auf, so würde mit dieser Skalierung aufgrund der

Verstärkungsüberhöhung VGmax>ymax dennoch ein 2er-Komplementüberlauf erfolgen. In

diesem Beispiel wird deshalb die Skalierung mit der Tschebyscheff-Norm L∞=VGmax zur

Begrenzung des Filterausgangs Y realisiert [70], [75]. Es empfiehlt sich dazu, die Zähler-

koeffizienten mit bi/VGmax zu reduzieren, um einen zusätzlichen Multiplizierer als Dämpfer

am Eingang oder Ausgang einzusparen.

Bild 9-33: Sprung- und Impulsantwort des digitalen Beispielfilters nach Tabelle 9-6, berechnet mit

den MATLAB-Funktionen stepz und impz. Schwingungsperiode Td des gedämpften Systems

Die Entwürfe digitaler Filter werden mit den MATLAB-Funktionen cheby1, cheby2,

ellip und butter unterstützt, die eine Kombination aus der Dimensionierung eines

analogen Filters und der Filterapproximation mit der BZT bereitstellen. Bei zunehmender

Filterordnung N>4 werden die Koeffizienten ai und bi mit hohen Indizes jedoch sehr klein,

sodass sie bei begrenzter Vektorbreite nur ungenau quantisiert werden können. Dies führt

zur Verschiebung der Pole und Nullstellen der Polynome in Gl. 9-15, woraus sogar ein

instabiles Verhalten resultieren kann [70], [74], [75]. Deshalb wird eine Übertragungsfunk-

tion G(z) hoher Ordnung gemäß Gl. 9-15 mit der MATLAB-Funktion tf2sos durch Pol-

/Nullstellenpaarung in verkettete SOS-Module separiert [70]. Solche SOS-Kaskaden erge-

ben dann bei gleicher Vektorbreite der Koeffizienten präzisere Frequenzgangapproximatio-

nen als eine Realisierung mit Zähler- und Nennerpolynomen höherer Ordnung.

ymax=1.519

0 1 2 3 4 5 6 7 8 9

x 10-4

-0.2

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

Am

pli

tud

e y

t/s

Sprungantwort

Impulsantwort

Td = 0.214ms

b0

ymax=1.519

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 86: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

324 9 Modellierung digitaler Filter

9.2.2 Parallele Strukturen für IIR-Filter 2. Ordnung

Ausgehend von der aufgezeigten Koeffizientensymmetrie werden im Folgenden die typi-

schen IIR-Filterstrukturen gegenübergestellt, um eine Übersicht zu den erforderlichen

FPGA-Ressourcen für die Implementierung eines SOS-Moduls zu erhalten. Die unter-

schiedliche Robustheit der Strukturen gegen interne Überlaufeffekte und die

Timingcharakteristika gehen ebenso in die Übersicht ein.

Die Direktform I in Bild 9-31 stellt die Reihenschaltung zweier linearer Übertragungsglie-

der dar, sodass diese in der Reihenfolge der Verkettung tauschbar sind. Das Koppelsignal w

durchläuft darin dann parallel zwei Registerketten, die die optimierte Direktform II zu einer

Registerkette zusammenfasst (vgl. Bild 9-34a). In beiden Strukturen lässt sich die

Koeffizientensymmetrie nach Gl. 9-19 leider nicht zur Einsparung von Multiplizierern

nutzen, da die Signalpfade der Koeffizienten bi mit unterschiedlich verzögerten Signalen

gespeist werden. Eine Variante zur Direktform II ergibt sich, wenn man die Registerzu-

sammenfassung rückgängig macht und die Verzögerungen hinter die Produkte verlagert

(vgl. Bild 9-35b). Diese modifizierte Direktform II bietet nun den Multiplizieren mit den

Koeffizienten bi ein gemeinsames Eingangssignal v an, sodass im Fall eines Tiefpasses das

einzig erforderliche Produkt vb0 dreifach genutzt werden kann, wobei die Multiplikation

b1=2b0 durch ein Linksschieben realisierbar ist (vgl. Gl. 9-19).

Bild 9-34: a) Direktform II und b) modifizierte Direktform II eines IIR-Filters 2. Ordnung. Kenn-

zeichnung ausgewählter längster Signallaufzeitpfade

Durch Transponierung der Direktform II (DF II) entsteht die Struktur in Bild 9-35, die eine

minimale Anzahl an Registern enthält und zusätzlich die Nutzung der Koeffizientensym-

metrie zur Reduzierung der erforderlichen Multipliziereranzahl erlaubt.

Die für eine FPGA-Implementierung relevanten Eigenschaften der aufgeführten Strukturen

sind in Tabelle 9-7 zusammengefasst. Der dort jeweils angegebene längste Signalpfad

beginnt bei den ersten beiden Strukturen (vgl. Bild 9-31 u. Bild 9-34a) an einem Verzöge-

rungselement und endet am Ausgang y, der mit einem Übergaberegister abgeschlossen

wird. In den beiden übrigen Strukturen (vgl. Bild 9-34b u. Bild 9-34) beginnt der längste

Signalpfad am synchronisierten Eingang x und endet an einem Verzögerungselement. In

der modifizierten Direktform II gibt es zusätzlich noch einen Signalpfad vom Eingang

direkt zum Übergaberegister. Das Übergaberegister dient zur Entkopplung der Module in

+

+

x y+

+

z-1

z-1

b0

b1

b2

-a1

-a2

x+

+

+

+

yv

z-1

z-1

z-1

-a1

-a2

b0

b1

b2z

-1

a) b)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 87: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

325 9.2 IIR-Filter

SOS-Kaskaden für Filter höherer Ordnung, wobei dessen Taktung so zu realisieren ist, dass

das sprungförmige Verhalten des einzelnen Filters und der gesamten Filterkette nach Gl.

9-14 gesichert wird (vgl. Bild 9-33b).

Bild 9-35: Transponierte Struktur der Direktform II für

N=2 mit Kennzeichnung eines der beiden längsten Signal-

laufzeitpfade

Beim Vergleich der Strukturen ist zu berücksichtigen, dass sie sich auch in der Robustheit

gegen Überlaufeffekte unterscheiden. Da die Filterskalierung durch modifizierte Zählerko-

effizienten bi nur für den Ausgang y eine Begrenzung auf das Intervall -1 < y < 1 garantiert,

sind die internen Summationspunkte gesondert zu prüfen. Dazu können die Frequenzgänge

und Sprungantworten für die internen Größen bestimmt und auf Amplitudenüberhöhungen

untersucht werden, aus denen eine ggf. erforderliche Vorverstärkung bzw. Dämpfung des

Eingangspfades x über einen Multiplizierer abzulesen ist, die am Ausgang dann wieder

kompensiert werden muss. Vorteilhafter ist es jedoch, gezielt das Q-Format der kritischen

Summationspunkte durch Guard-Bits zu erweitern, sodass dieser Integeranteil die Signal-

überhöhungen aufnimmt. Mit diesem Konzept zur angepassten Vektorbreitenauslegung

sind gegenüber vorgeschalteten Multiplizierern weniger zusätzliche Ressourcen und eine

geringere Zunahme des Signallaufzeitverhaltens zu erwarten.

Tabelle 9-7: Gegenüberstellung der IIR-Struktureigenschaften für den Spezialfall eines Tiefpasses

mit N=2 und Koeffizientensymmetrie nach Gl. 9-19

Struktureigen-

schaften

Direktform I

Bild 9-31

Direktform II

Bild 9-34a

Transponierte

Direktform II

Bild 9-35

Modifizierte

Direktform II

Bild 9-34b

Längster

Signalpfad

1 Multipliz. 2 Multipliz. 2 Multipliz. 1 Multipliz.

3 Addierer 3 Adddierer 2 Addierer 2 Addierer

Anzahl

Multiplizierer

5 5 3 3

Anzahl

Register

4 2 2 4

x y

z-1

z-1

b0

b1

b2

-a1

-a2

+

+

+

S1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 88: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

326 9 Modellierung digitaler Filter

Vergleichend lässt sich mit Tabelle 9-7 qualitativ feststellen:

Alle Strukturen benötigen vier Addierer, da auch der zentrale Addierer S1 der transpo-

nierten Direktform II mit drei Eingängen als Addiererkette realisiert wird.

Eine Einsparung von Multiplizierern ist nur mit der transponierten Struktur der Direkt-

form II und der modifizierten Direktform II erreichbar.

Aufgrund der kürzeren Signalpfade ist die modifizierte Direktform II (vgl. Bild 9-34b)

gegenüber der transponierten Direktform II für eine FPGA-Implementierung vorzuzie-

hen, um höhere Taktfrequenzen realisieren zu können. Allerdings weist das Koppelsig-

nal v der Teilsysteme in der Regel vielfach höhere Überschwinger auf als der skalierte

Ausgang y. Im Fall des Beispielfilters überlagert nämlich der Eingangsaddierer den voll

ausgesteuerten x-Pegel mit dem verstärkten v-Pegel, der bei einem a1<-1 als

Mitkopplung wirkt. Die Addierer im ersten Teilsystem müssen also mit der Anzahl Γ

ld(v-Übersteuerungsfaktor) an Guard-Bits ergänzt werden, wobei der Übersteuerungs-

faktor je nach Systemanregung dem Signalüberschwinger oder dem Frequenzgang ent-

nommen wird. Mit den so verbreiterten Operanden der Multiplizierer wächst auch deren

Breite. Das zweite Teilsystem mit den bi-Koeffizienten dämpft die v-Pegel, sodass der

Ausgangsaddierer y begrenzt ist.

In der transponierten Direktform II nach Bild 9-35 steuert das Eingangssignal x die

internen Summationspunkte über die dämpfenden bi-Koeffizienten an, sodass hier ge-

ringere Übersteuerungen auftreten. Die direkte Mischung der Signale aus dem Vor-

wärts- und dem Rückkopplungsteilsystem erzeugt tendenziell eine vorteilhafte Pegel-

kompensation. Als Folge sind die internen Addierer im Vergleich zur modifizierten

Direktform II mit weniger Guard-Bits und somit schmaler auszulegen.

Eine quantitative Analyse und Bewertung der hier erläuterten Struktureigenschaften erfolgt

im Rahmen der VHDL-Modellierung auf Basis der Syntheseergebnisse und der

Timinganalyse. Zur Dimensionierung des Q-Formats der Koeffizienten ist mit dem Stabili-

tätsdreieck in Bild 9-36 der Wertebereich der ai-Koeffizienten aufgezeigt. Die Grenzen des

dreieckförmigen Koeffizientengebietes für stabile IIR-Filter 2. Ordnung gehen aus der

Polstellenberechnung der z-Übertragungsfunktion nach Gl. 9-15 hervor. Im Stabilitätsdrei-

eck trennt die Parabel a2=a12/4 die schwingungsfähigen SOS-Module von denen mit aperio-

dischem Verhalten. Auf der oberen Begrenzungslinie liegen für a2=1 alle a1-Werte, die ein

grenzstabiles Verhalten erzeugen, das sinusförmige Dauerschwingungen liefert. Ein IIR-

Filter mit solchen Parametern kann also als Sinusgenerator zur monofrequenten Frequenz-

gangüberprüfung genutzt werden.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 89: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

327 9.2 IIR-Filter

Bild 9-36: Wertebereich der Nennerkoeffizienten a1 und a2 eines stabilen digitalen IIR-Filters 2.

Ordnung

9.2.3 VHDL-Modelle für Varianten der Direktform II

Dieser Abschnitt stellt die VHDL-Modelle der transponierten Direktform II und der modi-

fizierten Direktform II am Beispiel eines Moduls 2. Ordnung vor. Mit diesen Strukturen ist

die aus der bilinearen z-Transformation (BZT) resultierende Symmetrie der Zählerkoeffi-

zienten bi zur Einsparung von Multiplizierern nutzbar. Die Ausführungen zu diesen beiden

Modellen versetzen den Leser in die Lage, je nach Koeffizientensatz des Filters die geeig-

nete Filterstruktur zu realisieren, die die jeweiligen Anforderungen an die Taktfrequenz und

den zulässigen Ressourcenbedarf erfüllt. Die VHDL-Modelle können darüber hinaus auch

als Entwurfsmuster für rückgekoppelte Systeme dienen, wie z.B. digitale Regelungen.

Diese erfordern neben einer Skalierung zur linearen Ausgangsgrößenbegrenzung des Reg-

lers eine überlauffreie Integer-Arithmetik mit Guard-Bits für das Q-Format der internen

Berechnungsergebnisse. Rückkopplungspfade in komplexen Regleralgorithmen sind näm-

lich nicht allein durch modifizierte Koeffizienten skalierbar, da diese die Pollagen und

damit die Systemdynamik festlegen.

9.2.3.1 Transponierte Struktur der Direktform II

Das Simulink-Blockschaltbild [85] in Bild 9-37 gibt eine Übersicht zu den Vektorbreiten

und den Signalnamen im VHDL-Modell der transponierten Direktform II (vgl. Code 9-16).

Das Modul ist als Element einer SOS-Pipeline ausgelegt, wie sie zum Aufbau von Filtern

mit höherer Ordnung eingesetzt werden [70], [74], [75]:

Das Übergaberegister bildet die Ausgangsynchronisation und stellt damit dem folgen-

den Modul einen taktsynchronen Eingang zur Verfügung. Ein Übernahmeregister wie in

a1, a2 Gebiet der reellen Pole

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

a1

a2

instabiles System

a2 > a12/4

a2 > a1-1

a2 > -a1-1

Grenzzyklus

instabiles System

a1, a2 Gebiet der konjugiert komplexen Pole

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 90: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

328 9 Modellierung digitaler Filter

den Beispielen zum FIR-Filter ist deshalb nicht erforderlich (vgl. Bild 9-8). Die Ein-

gangssignalsynchronisation für die erste SOS-Stufe muss das Ausgangsregister des Co-

dec-Interfaces oder ein zusätzliches Eingangsregister im speziellen ersten IIR-Modul

übernehmen.

Ein Puls-Shorter für das READY-Bit der Eingangssignalaktualisierung ist nicht im

Modul enthalten, sondern wird dem Codec-Interface zugeordnet bzw. durch die

Testbench nachgebildet.

Zur Realisierung des zentralen Summationspunktes S1 im Signalflussgraphen nach Bild

9-35 ist die dargestellte Reihenfolge aus drei Möglichkeiten ausgewählt worden, da eine

Simulink-Simulation für diese Summationspunkte die geringsten Schwingungsamplitu-

den aufgezeigt hat. Außerdem würde der längste Signallaufzeitpfad ansonsten drei statt

der in Tabelle 9-7 angegebenen zwei Addierer enthalten.

Subtrahierer realisieren die korrekten Vorzeichen der Rückkopplungspfade, die die im

Vorzeichen unveränderten Koeffizienten ai enthalten.

Bild 9-37: Simulink-Blockschaltbild des skalierten IIR-Tiefpassfilters 2. Ordnung in transponierter

Direktform II nach Tabelle 9-6. Übersicht zum Q-Format und zu den Guard-Bits der Signalvektoren.

Der zentrale Summierer S1 ist durch ein Oval gekennzeichnet

Die Auslegung der internen Vektorbreiten orientiert sich am zentralen Summationspunkt

S1, da dieser über den Signalpfad mit |a1|>1 eine stark gewichtete Mitkopplung erfährt. Wie

bei der Skalierung richtet sich die Dimensionierung nach dem Verstärkungsverhalten (L∞-

Norm), sodass auch bei schmalbandiger Anregung keine Überläufe auftreten. Das dynami-

sche Verhalten dieses Summationspunktes S1(z) wird durch folgende z-Übertragungsfunk-

tion bestimmt (vgl. Bild 9-35):

Gl. 9-20

2

1k

kk

1202101

1S

za1

z)abb()abb(

)z(XN

)z(1S)z(G

YN

b20.06262

b10.03131

b0

0.7955a2 -1.476a1

z

1

SUM2z

1

SUM11

SUM10 SUM0

XN

0.03131

[s.10:0]

[s.10:0]

[s,g.10:0][s.10:0]

[s,g.21:0]

[s,g.14:0]

[s,g,g.21:0]Y_A1Y_A2

X_B0X_B0

[s,g.21:0]

X_B1

YFB

z

1

[s,g.14:0]

[s,g.14:0]S1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 91: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

329 9.2 IIR-Filter

Der mit der MATLAB-Funktion freqz berechnete Amplitudengang |GS1(f)| zeigt für die

mit VGmax skalierten bi-Koeffizienten (vgl. Tabelle 9-6) eine maximale Verstärkung von

VGS1max=0.99464, sodass kein Guard-Bit erforderlich wäre. Damit jedoch nicht unmittelbar

abschätzbare Auswirkungen der Koeffizientenquantisierung und der Verkürzung der Multi-

plikationsergebnisse zu Überläufen führen, wird für die Signale SUM2, SUM10 und

SUM11 ein Q-Format mit einem Guard-Bit als Sicherheitsreserve gewählt (vgl. Bild 9-37)

SUM11[sign,guard. 14:0].

Darin ist der Bruchanteil mit 15 Bit ein Kompromiss aus dem Q11-Format der Koeffizien-

tenbreite und dem Q22-Format der Multiplizierer.

Alle anderen Vektorbreiten ergeben sich nach dieser Vorgabe aus folgenden Zusammen-

hängen, die auf den Ausführungen des Abschnitts 9.1.2 beruhen:

Der skalierte Addiererausgang SUM0 muss das Format des Operanden SUM11 erhal-

ten. In diesem Operanden kann noch ein Integeranteil enthalten sein, der erst nach der

Mischung im Ausgang SUM0 aufgehoben ist.

Für das Rückkoppelsignal YFB wird die minimale Breite des skalierten Ausgangs YN

gewählt.

Die unterschiedliche Breite der Rückkopplungsprodukte Y_A1 und Y_A2 ergibt sich

aus der jeweiligen Koeffizientenbreite.

Die Integeranteile in Y_A1 und Y_A2 müssen so reduziert werden, dass die Produkte

als Operanden die Breite der Subtrahierer aufweisen. Das Produkt Y_A1 kann nämlich

aufgrund des Maximalwertes |YFB|≤1 auch auf ein Guard-Bit reduziert werden.

Die übrigen Produkte sind nur im Q-Format (Bruchanteil) auf die Breite der Addierer

und Subtrahierer zu verkürzen.

Das aus Bild 9-37 entwickelte VHDL-Modell ist in einen getakteten Prozess STAGES und

parallele Anweisungen gegliedert, die die Multiplikationen und die Summen SUM10 und

SUM0 erzeugen (vgl. Code 9-16). Die Einsparung der Multiplizierer der Vorwärtsprodukte

wird durch dreifache Verwendung des Produktes X_B0 erreicht, wobei die Multiplikation

b1=2b0 durch eine Indexanpassung erfolgt. Der getaktete Rahmen inferiert die Verzöge-

rungselemente SUM2 und SUM11 mit den vorgeschalteten Subtrahierern sowie das

Übergaberegister YN.

Dieses Übergaberegister YN erfüllt zwei zu beachtende Funktionen:

Ausgangssignalsynchronisation zur Entkopplung der SOS-Module.

Es liefert den direkten Durchgriff von b0*x[n] auf y[n] nach Gl. 9-14.

Da alle Register mit dem verkürzten Puls RD parallel freigegeben werden, setzt sich der

Ausgang YN aus dem vorherigen Wert von SUM11 und dem aktualisierten Wert X_B0

zusammen. Ohne Übergaberegister hingegen würde der Ausgang YN den neuen Wert

X_B0 direkt mit dem aktualisierten Registerinhalt SUM11 mischen, was nicht der Diffe-

renzengleichung Gl. 9-14 entspricht. Das Rückkopplungssignal Y_FB muss allerdings eine

direkte Rückführung des Ausgangsaddierers SUM0 sein, da das Register SUM11 parallel

mit zeitgleich berechneten Werten aus dem Vorwärtspfad X_B1 und dem Rückkopplungs-

pfad Y_A1 zu aktualisieren ist.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 92: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

330 9 Modellierung digitaler Filter

Die Parametrisierung der Filterkoeffizienten mit generics erfordert den synthesefähigen

Typ integer (vgl. Abschnitt 7.2.1.4), sodass zu deren Übergabe an die Konstanten vom

Typ signed eine Typ-Konvertierung mit der Funktion to_signed(Pi,B*) durchzu-

führen ist, die auch die Zielvektorbreite B* als Parameter beinhaltet (vgl. Anhang 12). Der

Vektortyp signed ist zwar gerade für die Integer-Arithmetik im 2er-Komplement vorge-

sehen, jedoch sind direkte Zuweisungen mit Integerwerten nicht erlaubt. Zur Initialisierung

der generics Pi sind nur Integerwerte zulässig; jede Art von hexadezimalen oder Bit-

Strings führt in der Simulation und Synthese zu Fehlermeldungen mit Hinweis auf eine

Typinkompatibilität. Mit dem QB-Format der Koeffizienten ergeben sich die Integerwerte

der Parameter Pi durch eine Gewichtung, die den positiven bzw. negativen Zahlendarstel-

lungsbereich berücksichtigt:

Pi = (2B-1)c für positive Koeffizienten c = bi, ai > 0

Pi = (2B)c für negative Koeffizienten c = bi, ai < 0

In der port-Liste der entity IIR_SOS sind auch die Steuerbits und das Taktsignal vom

Typ std_logic, da die Testbench für die Timingsimulation Stimuli mit diesem Typ

liefern muss und zusätzliche Code-Zeilen mit Typkonvertierungen eingespart werden soll-

ten.

-- IIR-Tiefpassfilter in transponierter Direktform II; d=0.2; f0=4774 Hz

-- symmetrische, mit VGmax=2.5511 skalierte Zählerkoeffizienten

-- b0=b2=0.079872/VGmax; b1=2*b0; a1=-1.47604; a2=0.79553

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity IIR_SOS is

generic

( P1: integer := 64; -- B0=B2=0,031309; s.Q11 x"040"; B1=2*B0

P2: integer := -3023;-- A1=-1.47607; sg.Q11 x"1431"

P3: integer := 1629);-- A2=0.79553; s.Q11 x"65D"

port

( CLK: in std_logic; -- 48 MHz Systemtakt

RESET: in std_logic; -- synchron

RD: in std_logic; -- Eingang aktualisiert mit 48 kHz

DONE: out std_logic; -- Ergebnis verfügbar

XN: in std_logic_vector(11 downto 0); -- Eingangssignal

YN: out std_logic_vector(11 downto 0)); -- Signal zum Codec

end IIR_SOS;

architecture IIR_ARCH of IIR_SOS is

constant B0: signed(11 downto 0):= to_signed(P1,12); -- s.Q11

constant A1: signed(12 downto 0):= to_signed(P2,13); -- sg.Q11

constant A2: signed(11 downto 0):= to_signed(P3,12); -- s.Q11

signal X_B0, X_B1: signed(23 downto 0);-- Vorwärtsprodukte sg.Q22

signal X, YFB: signed(11 downto 0); -- Eingang, Rückkopplung

signal Y_A1: signed(24 downto 0);-- Rückkopplungsprodukt sgg.Q22

signal Y_A2: signed(23 downto 0);-- Rückkopplungsprodukt sg.Q22

signal SUM2, SUM11: signed(16 downto 0);--Subtrahiererregister sg.Q15

signal SUM10, SUM0: signed(16 downto 0);-- Addierer sg.Q15

begin

X <= signed(XN);

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 93: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

331 9.2 IIR-Filter

SYNC_RD: process(CLK)

Begin -- Enable-Kette für Folgestufe

if CLK'event and CLK='1' then

if RESET='1' then DONE <= '0' after 3 ns;

else DONE <= RD after 3 ns;

end if;

end if;

end process SYNC_RD;

X_B0 <= B0 * X after 6 ns; -- 24 Bit < 0,5

X_B1 <= X_B0(22 downto 0) & '0'; -- 24 Bit 2b0 < 1, shift left

Y_A1 <= A1 * YFB after 6 ns; -- 25 Bit

Y_A2 <= A2 * YFB after 6 ns; -- 24 Bit

SUM10 <= X_B1(23 downto 7) + SUM2 after 6 ns; -- Zwischensumme 17 Bit

STAGES: process(CLK)

begin

if CLK'event and CLK = '1' then

if RESET = '1' then

SUM2 <= (others => '0') after 3 ns;

SUM11 <= (others => '0') after 3 ns;

YN <= (others => '0') after 3 ns; -- Übergaberegister

elsif RD = '1' then

SUM2 <= X_B0(23 downto 7) - Y_A2(23 downto 7) after 3 ns;

SUM11 <= SUM10 - Y_A1(23 downto 7) after 3 ns;

YN <= std_logic_vector(SUM0(15 downto 4)) after 3 ns;

end if;

end if;

end process STAGES;

SUM0 <= X_B0(23 downto 7) + SUM11 after 6 ns;-- skalierter Ausgangsaddierer

YFB <= SUM0(15 downto 4); -- 12 Bit Rückkopplung

end IIR_ARCH;

Code 9-16: IIR-Tiefpass in transponierter Direktform II mit dreifacher Verwendung des Produktes

X_B0. Ausgangssynchronisation mit Übergaberegister YN

Die Modelle der IIR-Filter werden an einem Tiefpassbeispiel vorgestellt, dies schränkt

deren Allgemeingültigkeit jedoch nicht ein, da der VHDL-Code mit jeweils einer modifi-

zierten Zeile ein Hochpass- oder Bandpass-Modell liefert (vgl. Gl. 9-19):

Hochpass:

X_B1 <= -(X_B0(22 downto 0) & '0') after 6 ns; -- B1=-2*B0

Bandpass:

X_B2 <= -X_B0 after 6 ns; X_B1 <= (others => '0'); -- B0=-B2

Lediglich der Ressourcenbedarf des Hochpass-Filters steigt in geringem Maße, da der

Signalkomplementer eine bitweise Invertierung und eine anschließende 1-Addition erfor-

dert. Dieser Mehraufwand wird beim Bandpass durch einen wegfallenden Addierer über-

kompensiert.

In der Timingsimulation der Sprungantwort (vgl. Bild 9-38) des skalierten Filters sind der

Maximalwert ynmax und der stationäre Endwert ynstat zum numerischen Vergleich mit der

MATLAB-Referenzkurve in Bild 9-33 gekennzeichnet. Einige quantitative Detailauswer-

tungen beleuchten im Folgenden die Ergebnisse der Filterskalierung, der Signalvektoraus-

legung und der Synthese.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 94: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

332 9 Modellierung digitaler Filter

Die relative Abweichung |Δmax| des Scheitelwertes ynmax liegt unter 0.4 %:

ynmaxsoll = ymax/VGmax = 1.519/2.5511 = 0.59543 aus Bild 9-33 und Tabelle 9-6

ynmax= 4bfHex = 0.10010111111Bin = 0.59326 aus Bild 9-38

Abweichung: Δmax = (ynmax - ynmaxsoll)/ ynmaxsoll = -0.00364

Da die Berechnungen der positiven Sprungantwort durch das Abschneiden der Multi-

plikationsergebnisse X_Bi und Y_A1 betragsmäßig reduziert werden, liegt der simulier-

te Filterausgang ynmax unter dem MATLAB-Referenzwert.

Bild 9-38: Timingsimulation der Sprungantwort YN des skalierten IIR-Filters in transponierter

Direktform II (vgl. Code 9-16 u. Tabelle 9-6)

Für den Endwert ynstat, der in Bild 9-38 bei 0.985 ms abgelesen werden kann, gilt:

ynstatsoll = ystat/VGmax = 1/2.5511 = 0.39199 aus Bild 9-33 und Tabelle 9-6

ynstat = 323Hex = 0.0110010011Bin = 0.39209 aus Bild 9-38

Δstat = (ynstat – ynstatsoll)/ ynstatsoll = 0.000255

Die sprungförmige Reaktion des Ausgangs yn auf den Eingangspegel xn=7ffHex ent-

spricht dem Wert des Koeffizienten b0.

Die ablesbare Schwingungsperiode Td des gedämpften Systems entspricht aufgrund der

Treppenfunktion yn grob dem theoretischen Wert Td=0.214 ms (vgl. Tabelle 9-6 u. Bild

9-33). Diese Schwingungen sind ab ca. 1.25 ms vollständig abgeklungen und der Aus-

gang yn wird konstant yn=320Hex. Es treten keine quasi stationären Grenzzyklen auf,

wie sie durch Produktrundung entstehen können [70], [75].

ynmax = 0,59326

Td

ynmax

ynstat = 0,39209

sum11max = 4245Hex

xn*b0=03fHex

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 95: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

333 9.2 IIR-Filter

Das Register SUM11 des zentralen Addierers S1 ist im Post-Place & Route-

Simulationsmodell nur mit einem 16-Bit-Vektor repräsentiert. Der Synthesereport listet

zwar noch 17-Bit-Subtrahierer auf, jedoch ist das MSB im Register SUM11 nicht mehr

weiterverbunden (vgl. Tabelle 9-8). Ursächlich dafür ist die fehlende Verwendung die-

ses Sicherheitsbits aus dem Addierer SUM0 im skalierten Ausgangsvektor YN und in

der Rückführung YFB, sodass die Logiksynthese dieses Bit des Addierers SUM0 und

des Registers SUM11 heraus optimiert hat. Das Guard-Bit für die internen Addierer

lässt sich z.B. realisieren, indem die Rückführung YFB auf einen 13-Bit-Vektor erwei-

tert wird und die Produkte Y_A1 und Y_A2 auch um ein Guard-Bit breiter gewählt

werden. Im Fall der Sprungantwort ist keine maximale Aussteuerung der internen Sig-

nale zu erwarten (sum11max=4245Hex=0.51773), sodass ein Worst-Case-Test mit einer

Sinusanregung erfolgen muss, um die tatsächliche Notwendigkeit des Guard-Bits über-

prüfen zu können.

Zur Vervollständigung ist in Code 9-17 die Testbench angegeben, die die Sprunganregung

erzeugt und den Puls-Shorter (vgl. Bild 9-8) enthält. Die generic-Deklaration der Kom-

ponente IIR_SOS und die generic map der Komponenteninstanziierung sind nur für die

VHDL-Simulation erforderlich, das Timingsimulationsmodell hingegen repräsentiert die

FPGA-Implementierung mit der durch die Koeffizienten fixierten Filterfunktion. Der pro-

cess AUDIO_PERIODE startet die Sequenz der READY-Pulse erst 4 Systemtakte im

Anschluss an den Reset-Puls, damit dieser Verzug die Simulation des FPGA-

Anlaufverhaltens überbrückt. Das Post-Place & Route-Strukturmodell würde ansonsten

nicht auf den ersten RD_S-Puls reagieren.

-- Testbench mit Sprunganregung des IIR-Filters library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity IIR_TB is

generic(PERIODE48MHZHALBE: time:= 10.41666667 ns;

SAMPLES: positive := 1000);

end entity IIR_TB;

architecture IIR_FILTER of IIR_TB is

component IIR_SOS is

port

( CLK: in std_logic; -- 48 MHz Systemtakt

RESET: in std_logic; -- synchron

RD: in std_logic; -- Eingang aktualisiert

DONE: out std_logic; -- Ergebnis verfügbar

XN: in std_logic_vector(11 downto 0); -- Eingangssignal

YN: out std_logic_vector(11 downto 0)); -- Signal zum Codec

end component;

signal CLK, CLR, RD_S: std_logic;

signal Y, X: std_logic_vector(11 downto 0);

signal TEMP_1, TEMP_2, READY: std_logic ;

begin

CLOCK: process -- 48 MHz Clock-Periode

begin

CLK <= '0'; wait for PERIODE48MHZHALBE;

CLK <= '1'; wait for PERIODE48MHZHALBE;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 96: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

334 9 Modellierung digitaler Filter

end process CLOCK;

RESET: process

begin

CLR <= '1';

wait for (PERIODE48MHZHALBE * 2); -- high active reset

CLR <= '0';

wait; -- no change any more because of unconditional wait

end process RESET;

AUDIO_PERIODE: process

variable NUM: integer range 0 to SAMPLES +2;

begin

READY <= '0'; X <= x"000"; -- Initialisierung

NUM := 0; -- Zählt die Abtasterte x

wait for (PERIODE48MHZHALBE *8); -- Startverzögerung 4 Takte

WHILE NUM <= SAMPLES +1 LOOP

READY <= '1';

X <= x"7ff";

wait for (PERIODE48MHZHALBE *2 *4); -- 12 MHz Ready-Puls

READY <= '0';

wait for ((PERIODE48MHZHALBE *2 * 1000) - (PERIODE48MHZHALBE * 2 * 4));

-- 48 kHz Abtastperiode

NUM := NUM + 1;

END LOOP;

wait; -- unbedingter Halt

end process AUDIO_PERIODE;

PULSE_SHORTER: process(CLK,CLR)

begin

if CLR = '1' then

(TEMP_1,TEMP_2) <= std_logic_vector'("00") after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= READY after 3 ns; -- Ready erzeugt Audio-Periode

TEMP_2 <= TEMP_1 after 3 ns;

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- verkürzter Puls

DUT1: IIR_SOS -- entity des Timingsimulationsmodells

port map(CLK => CLK, RESET => CLR, RD => RD_S, XN => X,

YN => Y, DONE => open);

end IIR_FILTER;

Code 9-17: Testbench der entity IIR_SOS (vgl. Code 9-16). Für die Timingsimulation sind die

zur Instanziierung gehörenden generics nicht erforderlich

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 97: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

335 9.2 IIR-Filter

9.2.3.2 Modifizierte Direktform II

Als zweites VHDL-Modell wird die Realisierung der modifizierten Direktform II nach Bild

9-39 erläutert (vgl. Code 9-18). Wie in Abschnitt 9.2.2 schon qualitativ beschrieben, enthält

das Rückkopplungsteilsystem kritische Addierer, deren Ausgänge V und SUM2 nicht ska-

lierbare Signalüberschwinger aufweisen. Die Auswertung des Amplitudengangs zur z-

Übertragungsfunktion GV(z) in Gl. 9-21 liefert für den Koppelpfad eine Verstärkungsüber-

höhung von VGVmax=8.71. Wenn dem System kein dämpfender Multiplizierer vorgeschaltet

werden soll, dann müssen also für das Koppelsignal V Γ ld(VGVmax)=4 Guard-Bits imple-

mentiert werden, damit auch im Worst-Case einer schmalbandigen Anregung keine Über-

laufeffekte auftreten.

Bild 9-39: Modifizierte Direktform II mit skaliertem Ausgangsaddierer YN+. Übersicht zum Q-

Format und zu den Guard-Bits der Signalvektoren (vgl. Code 9-18)

Gl. 9-21

2

1k

kk

V

za1

1

)z(XN

)z(V)z(G

Ausgehend von dieser Dimensionierung des Addierers V mit einer Breite von 16 Bit erge-

ben sich die Vektorbreiten der Signale in dieser modifizierten Direktform II nach den aus

Abschnitt 9.2.3.1 und 9.1.2 bekannten Schlussfolgerungen. Auch hier gilt der zuvor ge-

wählte Ansatz, Schnittstellensignale mit 12 Bit und Multiplizierereingänge mit Q11 zu

modellieren.

Die Breite der Rückkopplungsprodukte V_A1 und V_A2 resultiert aus der Breite von V

und aus der jeweiligen Koeffizientenbreite.

Zur Addition werden die Rückkopplungsprodukte auf die Breite des Addierers V redu-

ziert, indem von beiden Enden der Vektoren Bits abgeschnitten werden, sodass die Zu-

sammensetzung des Signals V aus Guard-Bits und Q11-Format erreicht wird. Eine vor-

zeichenrichtige Erweiterung passt den Eingangsvektor XN auf die Breite des Addierers

V an.

[s,g,g,g,g,g.21:0]

XN+

+

+

+

YNV

z-1

z-1

z-1

-a1

a2

b0

b1

b2z

-1

-V_A2 V_A1

SUM2

V_B2V_B1

SUM1V_B0

z-1

[s,g,g,g,g.10:0]

[s.10:0]

[s,g,g,g,g,g.21:0]

[s,g,g,g,g,g,g.21:0]

[s.10:0]

YN+

SUM1+SUM2+

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 98: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

336 9 Modellierung digitaler Filter

Für die Vorwärtsprodukte V_Bi gilt der gleiche Aufbau wie im Fall des Produktes

V_A2.

Der skalierte Ausgangsaddierer YN+ und der Addierer SUM1+ erhalten die minimale

Breite von 12 Bit ohne Sicherheitsbit, da dieses Bit ohne Verwendung an der Schnitt-

stelle YN ohnehin durch die Synthese entfernt würde. Eine Verkürzung der Produkte

auf das Q11-Format wird hier gewählt, da die Signalhübe nach Dämpfung durch die bi

auf den skalierten Bereich begrenzt sind.

Zur Einsparung von FPGA-Ressourcen ist die Addition der beiden Rückkopplungspfade

nach Bild 9-34b in einen Subtrahierer SUM2+ umgewandelt worden (vgl. Bild 9-39 und

Code 9-18). Die Synthese inferiert nämlich zur Addition von zwei negativ bewerteten

Summanden einen Subtrahierer und einen zusätzlichen 2er-Komplementer, der jeweils aus

einem bitweisen Inverter und einem 1-Addierer besteht. Damit das Produkt V_A1 als Mi-

nuend genutzt werden kann, geht der Koeffizient -a1 ins Produkt ein und das Produkt V_A2

bildet den Subtrahenden.

-- IIR-Tiefpassfilter in modifizierter Direktform II; d=0.2 ; f0=4774 Hz;

-- symmetrische, mit VGmax=2.5511 skalierte Zählerkoeffizienten bi

-- b0=b2=0.079872/VGmax ; b1=2*b0; a1=-1.47604; a2=0.79553

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity IIR_DFII is

generic

( P1: integer := 64; -- B0=B2=0.031309; Q11 B1 = 2*B0

P2: integer := 3022; -- -A1=1.47607; Q11

P3: integer := 1629 );-- A2= 0.79553; Q11

port

( CLK: in std_logic; -- 48 MHz Systemtakt

RESET: in std_logic; -- synchron

RD: in std_logic; -- Eingang aktualisiert

DONE: out std_logic; -- Ergebnis verfügbar

XN: in std_logic_vector(11 downto 0); -- Eingangssignal

YN: out std_logic_vector(11 downto 0)); -- Signal zum Codec

end IIR_DFII;

architecture IIR_ARCH of IIR_DFII is

constant B0: signed(11 downto 0):= to_signed(P1,12); -- s.Q11

constant A1: signed(12 downto 0):= to_signed(P2,13); -- sg.Q11

constant A2: signed(11 downto 0):= to_signed(P3,12); -- s.Q11

signal X: signed(11 downto 0); -- Eingang

signal V_A1: signed(28 downto 0); -- Rückkopplungsprodukt sgggggg.Q22

signal V_A2: signed(27 downto 0); -- sggggg.Q22

signal V,SUM2 : signed(15 downto 0);-- Rückkopplungssummen sgggg.Q11

signal V_B0, V_B1, V_B2: signed(27 downto 0);--Vorwärtsprodukte sggggg.Q22

signal SUM1 : signed(11 downto 0); -- Ausgangssumme s.Q11

begin

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 99: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

337 9.2 IIR-Filter

X <= signed(XN);

SYNC_RD: process(CLK)

begin

if CLK='1' and CLK'event then

if RESET='1' then DONE <= '0' after 3 ns;

else DONE <= RD after 3 ns; -- Enable Folge-SOS

end if;

end if;

end process SYNC_RD;

V_B0 <= B0 * V after 6 ns; -- B0=B2 Q11*Q11=Q22 < 0,5

V_B1 <= V_B0(26 downto 0) & '0'; -- B1=2*B2 < 1

V_A1 <= A1 * V after 6 ns;

V <=(X(11)& X(11)& X(11) & X(11)& X) + SUM2 after 6 ns; -- Koppelsignal

STAGES: process(CLK) -- 4 Verzögerungsglieder u. 1 Übergaberegister

begin

if CLK'event and CLK = '1' then

if RESET = '1' then

SUM2 <= (others => '0') after 3 ns;

SUM1 <= (others => '0') after 3 ns;

YN <= (others => '0') after 3 ns; -- Übergaberegister

V_A2 <= (others => '0') after 3 ns;

V_B2 <= (others => '0') after 3 ns;

elsif RD = '1' then

V_A2 <= A2 * V after 3 ns;

V_B2 <= V_B0 after 3 ns;

SUM2 <= V_A1(26 downto 11) - V_A2(26 downto 11) after 3 ns;

SUM1 <= V_B1(22 downto 11) + V_B2(22 downto 11) after 3 ns;

YN <= std_logic_vector(V_B0(22 downto 11) + SUM1) after 3 ns;

end if;

end if;

end process STAGES;

end IIR_ARCH;

Code 9-18: IIR-Tiefpass in modifizierter Direktform II mit dreifacher Verwendung des Produktes

X_B0; Übergaberegister YN zur Ausgangssynchronisation

In der Timingsimulation nach Bild 9-40 ist zum Nachweis der Vektorbreitenauslegung mit

Teilübertragungsfunktionen der Ausgang V des kritischen Addierers dargestellt, der den

verfügbaren Signalhub von 16-1 LSB bei einer Sprunganregung nur mit 4.9053 ausschöpft.

Es ist zu beachten, dass der Filterausgang YN den gleichen Scheitelwert ynmax aufweist,

wie die Sprungantwort der transponierten Direktform II in Bild 9-38, obwohl der Modell-

aufbau deutlich unterschiedlich strukturiert ist. Für den stationären Endwert ynstat, den die

Simulation ab 1.25 ms anzeigt, ergibt sich eine ebenfalls geringe Abweichung zur

MATLAB-Referenz in Bild 9-33:

ynstatsoll = ystat/VGmax = 1/2.5511 = 0.39199 aus Bild 9-33 und Tabelle 9-6

ynstat = 320Hex = 0.0110010000Bin = 0.39063 aus Bild 9-40

Δstat = (ynstat – ynstatsoll)/ ynstatsoll = -0.00348

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 100: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

338 9 Modellierung digitaler Filter

Bild 9-40: Timingsimulation der Sprungantwort des Koppelsignals V im skalierten IIR-Tiefpassfilter

in modifizierter Direktform II (vgl. Code 9-18 u. Tabelle 9-6)

9.2.3.3 Implementierungsergebnisse und Timinganalyse

Dieser Abschnitt stellt den FPGA-Ressourcenbedarf und die Timinganalysen zu den prä-

sentierten IIR-Filtermodellen mit paralleler Struktur vor. Eingesetzt wurde das Synthese-

und Implementierungswerkzeug ISE 13.4 [48], das den Synthesecompiler XST [81] nutzt.

Die Parameter für die Synthese, das Mapping sowie für das Place & Route sind wie in

Abschnitt 9.1.4.7 auf die Speed-Optimierung sowie die Effort-Option jeweils auf High

eingestellt worden. Damit die IIR-Filtermodelle mit den Parametern nach Tabelle 9-6 auch

tatsächlich drei Multiplizierer enthalten, erfolgte eine Skalierung des Koeffizienten b0 mit

ymax (vgl. Bild 9-33), sodass sich ein generic P1=108 ergibt.

Das Ergebnis der Timinganalyse in Tabelle 9-8 bestätigt die in Abschnitt 9.2.2 erläuterten

längsten Signalpfade der IIR-Strukturen: Die modifizerte Direktform II erlaubt die höchste

Taktfrequenz fmax. Die angegebenen längsten Signalpfade beginnen für beide Varianten der

Direktform II am Eingang XN, der mit einem Eingangsregister ergänzt wurde, damit der

Post-Place & Route-Timinganalysator alle Laufzeitpfade von Register zu Register untersu-

chen konnte. Durch die Auswahl von Block-Multiplizierern lässt sich der Bedarf an Look-

Up-Tabellen erheblich reduzieren und die Taktfrequenz nennenswert steigern, da der kom-

paktere Entwurf weniger Logik- und Verdrahtungsstufen erfordert.

Die im Synthesereport jeweils aufgeführten Addierer, Subtrahierer und Multiplizierer sind

hier mit angegeben, da deren Breite den LUT-Bedarf bestimmt. So sind auch die Auswir-

kungen der Vektorbreitendimensionierung für Signale in Rückkopplungspfaden, für die

Schnittstellen sowie die Vorwärtspfade ablesbar. Es zeigt sich hier deutlich, dass der Auf-

wand für Addierer im Vergleich zu Multiplizierern in LUT-Technik sehr gering ist. Quali-

tativ betrachtet sind breitere Addierer zur Steigerung der Signaldynamik (vgl. Tabelle 9-2)

weniger „kostspielig“ als breitere Multiplizierer in LUT-Realisierung.

ynmax = 0,59326

ynstat = 0,39063

bei t=1,25ms

.vmax = 4,9053

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 101: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

339 9.2 IIR-Filter

Transponierte DFII

Bild 9-37

Modifizierte DFII

Bild 9-39

D-FF LUT tDelay/ns

(fmax/MHz)

D-FF LUT tDelay/ns

(fmax/MHz)

Block

Multiplizierer

18×18 Bit

45 65 16.11

(62) XN-SUM2

53 57 13.44

(74) SUM2-YN

LUT

Multiplizierer

45 319 22.62

(44.2) XN-SUM2

69 440 16.77

(59) XN-SUM2

Addierer 1 × 16 Bit, 1 × 17 Bit 2 × 12 Bit, 1 × 16 Bit

Subtrahierer 2 × 17 Bit 1 × 16 Bit

Multiplizierer 2 × 12×12 Bit, 1 × 12×13 Bit 2 × 16×12 Bit, 1 × 16×13 Bit

Tabelle 9-8: Implementierungsergebnisse der IIR-Filtervarianten des Tiefpasses 2. Ordnung nach

Tabelle 9-6 für ein Spartan-3-XC3S400 FPGA. Skalierung mit ymax. Ressourcenbedarf und

Timinganalyse mit längstem Signalpfad bestimmt mit ISE 13.4

Die Anzahl der D-Flipflops in den beiden Implementierungen der IIR-Strukturen unter-

scheidet sich aufgrund folgender Eigenschaften:

Die modifizierte Direktform II enthält zwei Registerketten mit 97 D-FFs (vgl. Code

9-18). Diese Anzahl der D-FFs reduziert sich, da für abgeschnittene Vektoranteile der

gespeicherten Produkte V_A2 und V_B2 keine D-FFs inferiert werden. Im Fall der

Block-Multiplizierer kommt hinzu, dass ein Registered-Multiplier das gespeicherte Pro-

dukt V_A2 realisiert und deshalb dafür keine Slice-D-FFs erforderlich sind [84].

Für die transponierte Direktform II ergibt sich die D-FF-Anzahl der einen Registerkette

direkt aus dem VHDL-Code, wobei die MSBs der gespeicherten Subtrahiererausgänge

SUM2 und SUM11 in der Synthese heraus optimiert werden (vgl. Bild 9-38).

9.2.4 Sinusgenerator als synthesefähige Testbench

Die Skalierung der IIR-Filter ist mit der Tschebyscheff-Norm L∞=VGmax durchgeführt wor-

den, damit auch bei monofrequenter bzw. schmalbandiger Anregung im Bereich der Reso-

nanzfrequenz fR keine Überlaufeffekte am Ausgang auftreten (vgl. Tabelle 9-6). Mit den

vorgestellten Simulationsergebnissen zu den Sprungantworten konnte deshalb auch nur eine

Teilaussteuerung des Ausgangs und insbesondere der kritischen internen Addierer aufge-

zeigt werden. Eine korrekte Überprüfung der Skalierung und der Auslegung des Q-Formats

mit zusätzlichen Guard-Bits für die internen Addierer muss deshalb mit einem Sinusgenera-

tor erfolgen. Geeignet sind hierzu sind z.B. ROMs, die die diskreten Werte einer Sinus-

schwingung durch die Initialisierung mit einem COE-File erhalten (vgl. Kap. 7.4 u. Kap.

9.1.5.3) und in einer Testbench als Look-Up-Tabelle mit einem periodischen Zähler adres-

siert werden. Das TEXTIO-Package bietet darüber hinaus zahlreiche Funktionen für eine

Vielfalt von nicht synthesefähigen Testbench-Lösungen (vgl. Abschnitt 3.7) [37], [43].

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 102: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

340 9 Modellierung digitaler Filter

Im Folgenden wird ein sehr einfach realisierbarer Sinusgenerator vorgestellt, der das Über-

tragungsverhalten der IIR-Filter an der Stabilitätsgrenze nutzt, dass sich mit Nullstellen des

Nennerpolynoms in Gl. 9-15 auf dem Einheitskreis der z-Ebene ergibt [74], [75]. Die

Rückkopplungsstrukturen der Filter 2. Ordnung generieren nämlich bei einmaliger impuls-

förmiger Anregung für spezielle Koeffizienten (a1, a2) quasistationäre Dauerschwingungen,

deren Frequenz und Amplitude einstellbar sind. Diese Werte für a1 liegen mit a2=1 auf der

oberen Begrenzungsgerade des Stabilitätsdreiecks in Bild 9-36.

Eine erste Vereinfachung besteht darin, nur ein SOS-Modul z.B. nach Bild 9-31 oder Bild

9-34a) mit den Zählerparametern b0=1, b1=b2=0 zu untersuchen, da die übrigen Parameter

ausreichen, die Schwingungsfrequenz fS und die maximale Schwingungsamplitude uS fest-

zulegen. Über die Berechnung der Impulsantwort dieses SOS-Moduls wird eine Dimensio-

nierung des Koeffizienten a1 und der Amplitude y0 des Eingangsimpulses in Abhängigkeit

von den vorgegebenen Schwingungsparametern entwickelt:

Gl. 9-22 )f(Fa S11 ; )u,f(Fy SS20

Für das Nennerpolynom nach Gl. 9-15 gilt mit a2=1 und mit zwei komplexen Nullstellen z1

und z2:

Gl. 9-23 21212

2112 zz)zz(zz)zz)(zz(1zaz)z(N

Der Verschiebungsoperator ist definiert mit z = eTs=eT(σ+j), wobei für die Laplace-Variable

nur s=j gilt, da hier mit der Dämpfung σ=0 keine Transienten betrachtet werden, sondern

nur quasistationäre Dauerschwingungen interessieren. Die Eulersche Formel liefert für die

konjugiert komplexen Nullstellen z1 und z2:

Gl. 9-24 TsinjTcosz SS2,1 ; mit af1T und SS f2

Nach Einsetzen von Gl. 9-24 in die rechte Seite von Gl. 9-23 ergibt ein Koeffizientenver-

gleich mit dem Nennerpolynom den Koeffizienten a1, der die Schwingungsfrequenz fS fest-

legt:

Gl. 9-25

Die z-Transformierte Y(z) der Impulsantwort des vereinfachten SOS-Moduls lautet damit:

Gl. 9-26 2

S1

0

zTcosz21

y)z(Y

Aus Korrespondenztabellen kann man ein Transformationspaar entnehmen [70], [75]:

Gl. 9-27 Tsin]n[uzTcosz21

Tsinz)z(Y S2

S1

S1

*

a1 = –2 cos ST

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 103: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

341 9.2 IIR-Filter

Darin ist u[n] die Einheitssprungfunktion, die die Gültigkeit der Impulsantwort ab n=0 bis

n→∞ anzeigt. Durch Vergleich von Gl. 9-26 und Gl. 9-27 ergibt sich die Impulsantwort als

Sinusschwingung zu:

Gl. 9-28 Tsin

)T)1n(sin(y]n[u]n[y

Tsin

yz)z(Y)z(Y

S

S0

S

01*

Damit die Amplitude der Sinusschwingung y[n] auf | uS |≤1 begrenzt wird, muss für den

Eingangsimpuls des SOS-Moduls gelten:

Gl. 9-29 Tsiny S0

Die Implementierung des skalierten Sinusgenerators mit den Parametern nach Gl. 9-25 und

Gl. 9-29 lässt sich zusätzlich dadurch vereinfachen, dass die externe Impulsanregung mit y0

durch einen Initialisierungswert -y0 des Registers Y_2 ersetzt wird (vgl.Bild 9-41). Der

Ressourcenbedarf für die Arithmetikelemente reduziert sich so auf einen Addierer und

einen Multiplizierer. Dieser Generator erzeugt quasistationäre Dauerschwingungen, die mit

der Zeit weder aufklingen noch abklingen, da der Koeffizient a2=1 nicht durch eine

Quantisierung in der Genauigkeit eingeschränkt ist. Eine Sättigungsfunktion sorgt dafür,

dass auch bei Anregung mit y0=sin ST durch die begrenzten Vektorbreiten und die

Abschneideeffekte keine Übersteuerung der Testobjekteingänge erfolgt. Das Ausgangsre-

gister entkoppelt die Generatorarithmetik von den Arithmetikpfaden der zu testenden Fil-

terstufen.

Bild 9-41: Simulink-Blockschaltbild des skalierten Sinusgenerators. Anregung der Sinusschwingung

durch den Initialisierungswert –y0 des Registers Y_2. Schwingungsfrequenz fS=4480 Hz, Amplitude

uS=1, fa=48 kHz

Die Dimensionierung der Vektorbreiten ist mit dem Ausgang beginnend durchgeführt wor-

den (vgl. Code 9-19):

Der skalierte Stimulivektor YN passt zum Q11-Format der Filtereingänge (vgl. Code

9-17).

z

1

z

1

Y_1

a2=1

YFB

1.6658

-a1

Sättigung

YN

Y_2

Y_A1

[s,g.10:0]

[s,g.10:0]

[s.10:0]

[s,g,g,g.21:0]

+

z

1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 104: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

342 9 Modellierung digitaler Filter

Auch bei maximaler Anregung mit y0=sinST treten in den Registerstufen keine Über-

laufeffekte auf, da das Guard-Bit in YFB, Y_1 und Y_2 eine Reserve für Überträge bie-

tet, die ggf. durch die quantisierte Zahlendarstellung entstehen.

Das Q22-Format und die Guard-Bits des Produktes Y_A1 ergeben sich aus der Breite

der Faktoren.

Parametrisiert ist der Code 9-19 des Sinusgenerators speziell zum Test der Skalierung und

der Vektorbreitenauslegung des IIR-Filters in modifizierter Direktform II nach Bild 9-39.

Das Ziel der abschließenden Detailuntersuchung ist auch die Übertragungsstrecke zum

kritischen Addierer V, die im Bereich der Filterresonanzfrequenz fR bei fS=4480 Hz eine

Verstärkungsüberhöhung VGVmax=8.71 aufweist (vgl. Abschnitt 9.2.3.2 u. Gl. 9-21):

-a1=2cos(2fS/fa) =1.6658; 01.10101010011Bin=0D53Hex =1.6660Dez

-y0=-sin (S/fa)=-0.5534; 11.01110010011Bin=1B93Hex=-0.5532Dez

Die Initialisierung der Register in der Signaldeklaration erzeugt den Power-Up-Zustand der

D-FFs. In der Timingsimulation des FPGAs steht so ein spezifischer Startzustand des Sys-

tems zur Verfügung, der unabhängig von der Wirkung eines Resets und der Dauer des

Anlaufverhaltens der FPGA-Simulation ist. Die erforderliche Dauer des synchronen Resets

zu Beginn der Anlaufphase einer FPGA-Timingsimulation muss experimentell bestimmt

werden. Bleibt die Wirkung des Resets beim Sinusgenerator nämlich aus, so läuft dieser

ohne Anfangswert erst gar nicht an.

-- Sinusgenerator: reduzierte SOS-Struktur

-- a1 = -2cos(2*pi*fs*T); Schwingungsfrequenz fs ; T = 1/48 kHz; a2=1

-- Impulsanregung: y0 = -Y_2(0) < sin(2*pi*fS*T), skalierter Ausgang

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity SINE_GEN_DFII is

port(CLK, RESET, RD: in std_logic; -- Systemtakt 48 MHz

YN: out std_logic_vector(11 downto 0)); -- Ausgang mit Sättigung

end SINE_GEN_DFII;

architecture IIR_ARCH of SINE_GEN_DFII is

-- a1 = -1.6658425; fs = 4480 Hz

constant A1: signed(12 downto 0):= ('0' & x"D53"); -- -a1 sg.Q11

signal Y_1: signed(12 downto 0):= (others => '0'); -- Reg. sg.Q11

signal Y_2: signed(12 downto 0):= ('1' & x"B93"); -- Reg. sg.Q11

signal Y_A1: signed(25 downto 0); -- 26 Bit Produkt sggg.Q22

signal YFB: signed(12 downto 0); -- 13 Bit Summe sg.Q11

begin

Y_A1 <= A1 * Y_1 after 6 ns; -- Nur ein Multiplizierer

STAGES: process(CLK)

begin

if CLK'event and CLK = '1' then

if RESET = '1' then

Y_1 <= (others => '0') after 3 ns;

Y_2 <= ('1' & x"B93") after 3 ns; -- Anregung -sin(2*pi*fs*T)> -1

elsif RD = '1' then -- Freigabe mit Periode T=1/fa

Y_1 <= YFB after 3 ns;

Y_2 <= Y_1 after 3 ns;

end If;

end if;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 105: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

343 9.2 IIR-Filter

end process STAGES;

YFB <= -Y_2 + Y_A1(23 downto 11) after 6 ns; -- Skalierung mit |YFB| < 1

SATURATION: process(CLK)

begin

if CLK'event and CLK = '1' then

if RESET = '1' then YN <= (others => '0') after 3 ns;

elsif RD = '1' then

if YFB(12 downto 11) = -2 then YN <= x"800" after 3 ns;

elsif YFB(12 downto 11) = 1 then YN <= x"7FF" after 3 ns;

else YN <= std_logic_vector(YFB(11 downto 0)) after 3 ns;

end if;

end if;

end if;

end process SATURATION;

end IIR_ARCH;

Code 9-19: Sinusgenerator in vereinfachter SOS-Struktur ohne externe Anregung mit Ausgangs-

sättigung und -synchronisation.

Mit den ersten Perioden der Sinusanregung in Bild 9-42 werden folgende Zusammenhänge

verdeutlicht:

Da die Abtastfrequenz fa kein gerades Vielfaches der Testfrequenz fS ist, ergeben sich

von Periode zu Periode wechselnde Verläufe, die nicht regelmäßig die tatsächlichen

Maxima und Minima aufzeigen.

Die Startwerte der Sinusschwingung SINE_W und des Filterausgangs YN sind direkt

mit den Parametern y0 und b0 nachvollziehbar.

Bild 9-42: Timingsimulation der Kopplung des Sinusgenerators nach Code 9-19 mit dem IIR-Filter

nach Code 9-16. Anlaufverhalten nach dem Power-Up des Sinusgenerators (SINE_W). fS=4480 Hz,

fa=48 kHz

.

Y0 :

2047*0.5532=1133

Vmax = 8.9722

Vmax

2041

-2048 ; -1

Vmin = -8.7891

Y0 *b0 = 35

2032

-1987

-2047

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 106: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

344 9 Modellierung digitaler Filter

Der Filterausgang YN schwingt verzögert auf und bleibt in den maximalen Intervall-

grenzen [-2048, 2047].

Der kritische Addierer V nutzt die implementierten 4 Guard-Bits für den Signalhub

korrekt aus, jedoch gehen die Maximalwerte um mehr als 3% über VGVmax=8.71 hinaus.

Aus dem gesamten simulierten Zeitfenster von 1000/fa=20.8 ms ist in Bild 9-43 ein Aus-

schnitt bei t=11.4 ms mit Überlaufeffekten dargestellt, die bei 8 von ca. 90 Schwingungen

des Filterausgangs in nicht regelmäßigen Abständen aufgetreten sind. In diesen Fällen

liegen die Pegel des kritischen Addierers V um ca. 3.5% über dem MATLAB-Ergebnis

(vgl. Kap. 9.2.3.2), wobei die Überläufe nur wenige LSB-Positionen ausmachen. Ursäch-

lich wird vermutlich sein, dass die Abschneidevorgänge der Produkte V_A1 und V_A2 im

Rückkopplungspfad des Filters nach Bild 9-39 nichtlineare Störungen einprägen, die in

Zusammenwirkung mit der periodischen Anregung zu dieser sich sporadisch entwickelnden

Pegelerhöhung des Addierers V beitragen (vgl. Tabelle 9-2).

Falls in Anwendungen solche wie hier getestete schmalbandige Anregungen auftreten

können, bieten sich folgende Gegenmaßnahmen an:

Den Skalierungsfaktor L∞ weiter erhöhen, damit die Vorwärtspfade mit den Koeffizien-

ten bi stärker dämpfen.

Ggf. ist es vorteilhafter, den Filterausgang mit einem Guard-Bit zu erweitern und mit

einer Sättigungsstufe zu ergänzen, da so die Signalaussteuerung erhalten bleibt und bei

Bereichsüberschreitungen nur eine geringe Verzerrung der Signalform auftritt.

Bild 9-43: Ausschnitt aus der Timingsimulation der monofrequenten Filteranregung ( fS=4480 Hz)

mit maximaler Amplitude. Sporadische Überlaufeffekte am Filterausgang. fa=48 kHz

Vmax =9.0532

Vmax

.

-2045

Überlauf

-8.7571

-2023

-2048 ; -1

8.9546

20102041

Überlauf

-9.0356

2047 ; +1

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 107: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

345 9.2 IIR-Filter

Die für die Timingsimulation genutze Testbench ist in Code 9-20 dargestellt, darin ist der

Sinusgenerator als FPGA-Modul ein Teil der VHDL-basierten Stimulierzeugung. Hier sei

abschließend darauf hingewiesen, dass der Sinusgenerator auch direkt für Hardware-Tests

anwendbar ist, da er sich zusammen mit dem Testobjekt direkt ins FPGA integrieren lässt.

So werden ein externer Funktionsgenerator und AD- sowie DA-Umsetzer gespart, wenn

Echtzeittiminganalysen z.B. mit dem Xilinx ChipScope Debugger erfolgen.

-- Testbench zur Kopplung des Sinusgenerators mit einem IIR-Filter

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

entity IIR_SINE_TB is

generic(PERIODE48MHZHALBE: time:= 10.41666667 ns;

SAMPLES: positive := 1000);

end entity IIR_SINE_TB;

architecture IIR_FILTER of IIR_SINE_TB is

component SINE_GEN_DFII is

port( CLK, RESET, RD: in std_logic;

YN: out std_logic_vector(11 downto 0));-- Sinusfunktion

end component;

component IIR_DFII is -- Modifizierte Direktform II

--generic

-- (P1: integer ; -- B0=x"040"=0.031309 =B2 < 0.5; B1 = 2*B0 < 1

--P2: integer ; -- A1=x"1431"="1010000110001"=-1.47607

--P3: integer ); -- A2=x"65D"=0.79553

port

( CLK: in std_logic; -- 48 MHz Systemtakt

RESET: in std_logic; -- synchron

RD: in std_logic; -- Eingang aktualisiert

DONE: out std_logic; -- Ergebnis verfügbar

XN: in std_logic_vector(11 downto 0); -- Eingangssignal

YN: out std_logic_vector(11 downto 0)); -- Signal zum Codec

end component;

signal CLK, CLR, RD_S: std_logic;

signal Y, SINE_W: std_logic_vector(11 downto 0); -- Koppelsignale

signal TEMP_1, TEMP_2, READY, IIR_EN: std_logic ; -- Freigabesignale

begin

CLOCK: process -- 48 MHz Clock-Periode

begin

CLK <= '0'; wait for PERIODE48MHZHALBE;

CLK <= '1'; wait for PERIODE48MHZHALBE;

end process CLOCK;

RESET: process

begin

CLR <= '1';

wait for (PERIODE48MHZHALBE * 4); -- high active reset

CLR <= '0';

wait; -- no change any more because of unconditional wait

end process RESET;

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 108: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

346 9 Modellierung digitaler Filter

AUDIO_PERIODE: process

variable NUM: integer range 0 to SAMPLES +2;

begin

READY <= '0';

NUM := 0; -- Zählt die Abtastwerte

wait for (PERIODE48MHZHALBE *10); -- Startverzögerung

WHILE NUM <= SAMPLES +1 LOOP

READY <= '1';

wait for (PERIODE48MHZHALBE *2 *4); -- 12 MHz Puls

READY <= '0';

wait for ((PERIODE48MHZHALBE *2 * 1000) - (PERIODE48MHZHALBE * 2 * 4));

-- 48 kHz Abtastperiode

NUM := NUM + 1;

END LOOP;

wait; -- unbedingter Halt

end process AUDIO_PERIODE;

PULSE_SHORTER: process(CLK,CLR)

begin

if CLR = '1' then

(TEMP_1,TEMP_2, IIR_EN) <= std_logic_vector'("000") after 3 ns;

elsif CLK='1' and CLK'event then

TEMP_1 <= READY after 3 ns; -- Ready erzeugt Audio-Periode

TEMP_2 <= TEMP_1 after 3 ns;

IIR_EN <= RD_S after 3 ns; -- Puls für IIR-Filter

end if;

end process PULSE_SHORTER;

RD_S <= TEMP_1 and (not TEMP_2) after 3 ns; -- Puls für Sinusgenerator

DUT1: IIR_DFII

--generic map( P1 => 64, P2 => 3023, P3 => 1629 )

port map(CLK => CLK, RESET => CLR, RD => IIR_EN, XN => SINE_W, YN => Y,

DONE => open);

DUT2: SINE_GEN_DFII

port map(CLK => CLK, RESET => CLR, RD => RD_S, YN => SINE_W);

end IIR_FILTER;

Code 9-20: Testbench zur Kopplung des Sinusgenerators mit dem Filtermodell nach Code 9-16

9.2.5 Entwurfsschritte für IIR-Filter

Abschließend sind hier die einzelnen Schritte zur VHDL-Modellierung von IIR-Filtern

aufgelistet:

1. Analogfilterentwurf und Filterapproximation mit der bilinearen z-Transformation

nach den in [70], [72], [75] dargestellten Verfahrensschritten.

2. Verfahren zur Skalierung von SOS-Kaskaden auf Filter höherer Ordnung anwenden

[74]. Auswertung des Amplitudengangs und der Sprungantwort der einzelnen SOS,

die L∞-Norm mit |G(f)|max oder den Signalüberschwinger ymax zur Skalierung der Ko-

effizienten bi zu nutzen.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 109: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

347 9.3 FPGA-Entwurf mit Simulink

3. Entscheidung für eine der vorgestellten IIR-Strukturen (vgl. Tabelle 9-8). Auswahl

nach zu erwartendem Ressourcenbedarf oder erreichbarer maximaler Taktfrequenz.

4. Identifikation des kritischen Addierers, der in einem Rückkopplungspfad liegt und

ggf. sogar Produkte mit Koeffizienten |a1| >1 aufnimmt.

5. Berechnung der jeweiligen Teilübertragungsfunktion des kritischen Addierers, um

Verstärkungsüberhöhungen und Signalüberschwinger festzustellen. Festlegung der

Anzahl der Guard-Bits für diesen Addiererausgang je nach Skalierungsstrategie. Ziel

dabei ist es, dass der maximale Signalhub vollständig durch Integeranteile in den

Guards-Bits repräsentiert wird.

6. Schrittweise Dimensionierung der Vektorbreiten in den übrigen Signalpfaden und der

Reduzierung von Multipliziererausgängen.

7. Parametrisierung des ausgewählten VHDL-Templates.

8. Parameterstudien zum Einfluss der Addierer- und Multiplizierer-Vektorbreiten auf

Abweichungen der Timingsimulation von MATLAB-Referenzen. Mit zunehmender

Vektorbreite ist die sinkende maximale Taktfrequenz zu beachten, da die Ripple-

Carry-Laufzeiten in Addierern und LUT-basierten Multiplizierern ansteigen.

9. Prüfung der Auswirkungen von Abschneidetechniken und Rundungen auf das statio-

näre Signalverhalten und den Bedarf an FPGA-Ressourcen.

9.3 FPGA-Entwurf mit Simulink

Durch die Abschnitte 9.1 und 0 wurde verdeutlicht, dass sich viele der ursprünglich den

Digitalen Signalprozessoren zugeordnete Anwendungen der digitalen Signalverarbeitung

ebenso mit FPGAs realisieren lassen, sofern diese eine Festkommaarithmetik benötigen.

Dabei haben die FPGAs gegenüber Digitalen Signalprozessoren die folgenden Vorteile:

Beim FPGA werden nur die zur Lösung des Algorithmus erforderlichen Hardwarestruk-

turen instanziiert.

Bei Bedarf lassen sich die Hardwarestrukturen in FPGAs mehrfach parallelisieren.

Der größere Aufwand zum Entwurf des VHDL-Codes ist hingegen im Vergleich zur Pro-

grammentwicklung für einen Digitalen Signalprozessor als nachteilig zu bewerten.

Wegen des großen Marktpotenzials, welches die FPGA-Hersteller den Anwendungen der

digitalen Signalverarbeitung beimessen, stellen diese seit einiger Zeit in ihren Entwick-

lungswerkzeugen auch grafische Entwurfsoberflächen in Form von MATLAB-Toolboxen

zur Verfügung. Damit ist es nun möglich, einen Entwurf auf Simulink-Ebene grafisch

einzugeben und diesen entweder sehr schnell mit MATLAB oder aber deutlich langsamer

mit dem VHDL-Simulator ModelSim zu simulieren. Eine Ankopplung an das Synthese-

und Implementierungswerkzeug erlaubt nicht nur die direkte Generierung einer FPGA-

Konfigurationsdatei sondern unterstützt auch eine Hardware-Software-Cosimulation.

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 110: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

348 9 Modellierung digitaler Filter

Bild 9-44: Simulink-Modell des IIR-Filters aus Bild 9-37. Die Hardwareelemente wurden mit der

Xilinx System Generator Toolbox [83] modelliert. Deutlich erkennbar sind die Bitbreiten der Vor-

und Nachkommaanteile der jeweiligen Koppelsignale

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 111: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

349 9.3 FPGA-Entwurf mit Simulink

Dabei werden die Simulationsstimuli aus MATLAB direkt über ein Hardwareinterface an

ein im FPGA implementiertes Modell übertragen und außerdem die Systemreaktion des

Hardwaremodells an MATLAB zur weiteren Verarbeitung zurückgegeben.

Exemplarisch wurde das Simulink-Modell des in Kap. 0 vorgestellten IIR-Filters (vgl. Bild

9-37) modifiziert, wobei die Xilinx System Generator Toolbox [83] verwendet wurde. Bild

9-44 zeigt im oberen Teil das MATLAB-Referenzfilter und im unteren Teil die Blöcke des

System Generators einer Festkommaimplementierung des IIR-Filtes. Darin wurden die im

Bild dargestellten Bitbreiten der Vor- und Nachkommaanteile der Koppelsignale zwischen

den Arithmetikkomponenten genau so eingestellt wie in Bild 9-37.

Bild 9-45: Sprungantwort des IIR-Filters aus Bild 9-44 a) MATLAB-Simulation des Referenzfil-

ters, b) Simulation des FPGA-Filters, c) Differenz beider Simulationsmodelle

Das in Bild 9-45a und b dargestellte Ergebnis einer MATLAB-Simulation der Sprungant-

wort zeigt einen nahezu gleichen Verlauf beider Filtermodelle mit einem Maximum bei

0.593 (vgl. Bild 9-38). Die in Bild 9-45c gezeigte Differenz beider Modelle ist wegen des

Abschneideverhaltens im FPGA-Filtermodell negativ und beträgt maximal -310-3.

Der in Bild 9-44 dargestellte „Resource-Estimator“ Block erlaubt entweder eine grobe

Abschätzung des zu erwartenden Bedarfs an FPGA-Ressourcen oder eine genaue Analyse

nach Ausführung der Synthese- und Implementierungsschritte.

Eine Variation der Bitbreiten der Koppelsignale ist in diesem Modell sehr einfach möglich

und erlaubt nun eine schnelle Optimierung des Ressourcenaufwands unter Einhaltung einer

vorgegebenen Spezifikation für die Abweichung vom Verhalten des Referenzfilters.

a)

c)

b)

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM

Page 112: VHDL-Synthese (Entwurf digitaler Schaltungen und Systeme) || 9. Modellierung digitaler Filter

Brought to you by | Brown University Rockefeller LibraryAuthenticated | 128.148.252.35

Download Date | 6/11/14 8:46 PM


Recommended