Forum: FPGA, VHDL & Co. FIR Filter auf FPGA implementieren


von Jochen (Gast)


Lesenswert?

Hallo zusammen,

ich (Student) habe von meinem Arbeitgeber einen neuen Auftrag aus einem 
Gebiet bekommen, in dem ich mich noch nicht so ganz zurecht finde (er 
auch nicht). Kurz gesagt, soll ich ein FIR Filter auf einem FPGA oder 
DSP implementieren. Ich habe mich zwar tagelang im WWW eingelesen, 
jedoch konnte ich noch kein "Kochrezept" aufstellen.

Zu meinem aktuellen Wissensstand:

Ich habe mich für einen FPGA entschieden, da ich dort einfach mehr 
Informationen im Zusammenhang mit FIR gefunden habe als bei DSP.

Den Filter selbst oder zumindest die Koeffizienten kann man über Matlab 
Tools generieren lassen.

Das zu verarbeitende Signal ist analog, d.h. ich brauche auch noch einen 
entsprechenden Wandler.

Wie gehe ich nun weiter vor? Wo fange ich an? Ich habe gerade noch keine 
Hardware um herumzuprobieren. Zuerst soll ich das besagte "Kochrezept" 
erstellen und danach entsprechend umsetzen.

Für Tipps, Hilfe, Ratschläge wäre ich sehr dankbar.


Viele Grüße
Jochen

von Clemens N. (cleemens)


Lesenswert?

Also FIR auf einem FPGA ist ja eigentlich nicht so kompliziert, kommt 
natuerlich im Detail auf die Area/Speed Requirements an.

Sonst beachte mal die FixedKomma Genauigkeit in deiner Simulation mit 
der die du auf dem FPGA hast. Die DSP Elemente sind z.B. auf den Xilinx 
Devices auch schon gut fuer FIR vorbereitet, es gibt interne Accus und 
man kann die Koeffizieten vorladen (wenn du eh nur ein festes Set hast 
ist das auch einfach).
Also DSP User Guides lesen und dort Beispiele fuer FIR helfen schonmal.

Oder was suchst du an Kochrezept? Filtersynthese in Matlab gibt es ja 
genug Literatur. Implementierung in Hardware ist auch relativ direkt. 
Die Wandlung richtig auszulegen ist wahrscheinlich die groesste 
Herausforderung, aber da ist Kochrezept eher schwer.

Hast du den ueberhaupt FPGA Erfahrung? Wenn das ein ganz neues 
Themengebiet ist wird das wahrscheinlich dein groesstes Problem.
Da wuerde ich dir eher zu einer Prozessorloesung raten, FIR laesst sich 
ja auch da sehr gut implementieren, man hat Floating Point und wenn die 
Latenzanforderung nicht gerade arg schlimm und das Filter einer sehr 
hohe Ordnung hat geht das auch gut.

von Duke Scarring (Gast)


Lesenswert?

Jo, FIR und FPGA passen in's Buzzword-Bingo :-)

Wo kommt denn das Signal her (Temperatur?, Drehzahl?, Audio?, Video?, 
HF?)?
Welche Bandbreite wird benötigt?
Wo geht das gefilterte Signal hin?
In welcher Form wird es anschließend benötigt, analog oder digital?

Duke

von --- (Gast)


Lesenswert?

Einen FIR mit instanziiertem RAM kann man in VHDL doch einfach
ganz artig runterschreiben.
Die Multiplizierer findet das Synthesetool ja gluecklicherweise
von allein.

Wo ist denn da das Problem?

von Michael W. (Gast)


Lesenswert?

Jochen schrieb:
> Ich habe mich für einen FPGA entschieden, da ich dort einfach mehr
> Informationen im Zusammenhang mit FIR gefunden habe als bei DSP.

Oha! Das finde Ich eine überraschende Tatsache.

Prozessoren gibt es mehr und länger, als FPGAs und bei letzteren muss 
man auch das timing einhalten, während das bei C automatisch gelöst ist. 
FPGAs sind also komplizierter.

Und: Die Mathematik dahinter unabhängig von der Hardware. Die scheint 
Dein Problem. Du musst anhand der Aufgabe erkennen, was der Filter tun 
soll und dann die Koeffizienten bestimmen. Da hilft Dir kein tool

von Burkhard K. (buks)


Lesenswert?

Jochen schrieb:
> Zuerst soll ich das besagte "Kochrezept"
> erstellen und danach entsprechend umsetzen.
Was soll denn auf den Tisch kommen?

Nach dem Signal wurde bereits gefragt. Benötigte Bandbreite, SNR, was 
soll rausgefiltert werden (und warum) - Filterordnung/Anzahl 
Koeffizienten?  ADC bereits ausgewählt, wenn ja - was für ein Typ, 
Samplingrate und Wortbreite?

Für FPGAs gibt es auch fertige IP (z.B.: Xilinx FIR-Compiler), die bei 
bekannten Anforderungen relativ schnell konfiguriert ist. Warum 
beschreibst Du die Anforderungen nicht erstmal?

--- schrieb:
> Einen FIR mit instanziiertem RAM kann man in VHDL doch einfach
> ganz artig runterschreiben.

Je nach Anforderung - für 200 Taps in 25 Takten bräuchte es schon 
Distributed Arithmetik, da müsste ich mich erstmal reinfieseln.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jochen schrieb:
> Ich habe mich für einen FPGA entschieden, da ich dort einfach mehr
> Informationen im Zusammenhang mit FIR gefunden habe als bei DSP.
Das ist die denkbar schlechteste Auswahlstrategie. Wenn du bisher noch 
nichts mit FPGAs gemacht hast, dann wirst du aber sicher einiges lernen, 
bis das dann störungsfrei läuft.

> Kurz gesagt, soll ich ein FIR Filter auf einem FPGA oder DSP
> implementieren.
Für welches Signal mit welcher Auflösung und welcher Datenrate? Und was 
soll mit wlecher Funktion herausgefiltert werden?

Jochen schrieb:
> Wo fange ich an?
Du schreibst dir mal die Eckdaten deines Projektes richtig auf. Und dann 
suchst du dafür eine Lösung. Und du scherst dich erst mal nicht um das 
"FIR-Bullshit-Bingo". Denn viele zigtausend Musikinstrumente und Handys 
und sonstige Anwendungen beweisen, dass Filter ganz problemlos in DSPs 
gepackt werden können.

--- schrieb:
> Einen FIR mit instanziiertem RAM kann man in VHDL doch einfach
> ganz artig runterschreiben.
In einem Prozessor geht das nicht arg viel schwieriger. Und auch dafür 
gibt es Beispiele wie Sand am Meer. Man muss nur am richtigen Meer 
suchen, wenn man den richtigen Sand finden will. Sonst findet man nur 
Schlamm oder Kiesel und denkt sich, dass alle Strände so aussehen...

: Bearbeitet durch Moderator
von Jochen (Gast)


Lesenswert?

Vielen Dank erstmal für die vielen Antworten!

Clemens N. schrieb:
> Hast du den ueberhaupt FPGA Erfahrung?

Bisher habe ich nur in einem Seminar nachmittags LEDs zum blinken 
gebracht, also eher nichts nennenswertes.

Duke Scarring schrieb:
> Wo kommt denn das Signal her (Temperatur?, Drehzahl?, Audio?, Video?,
> HF?)?
> Welche Bandbreite wird benötigt?
> Wo geht das gefilterte Signal hin?
> In welcher Form wird es anschließend benötigt, analog oder digital?

Das Signal kommt von einem Messsystem und wird über einen Verstärker mit 
einem Shaker verbunden. Also sind Ein- und Ausgangssignal des Filters 
analog. Genaue Werte habe ich noch nicht zugeschickt bekommen, aber der 
Shaker wird bis ca 2 kHz betrieben. Ich vermute mal, dass es ein 
einfacher Hoch-/Tiefpass werden soll. Die benötigte Filterordung ist 
leider auch noch nicht bekannt.
Ich soll im Prinzip - entschuldigt die erneute Verwendung - ein 
"Kochrezept" aufstellen, ohne dass alle Kennwerte bekannt sind. Diese 
werden sich erst im Laufe des Versuches ergeben.
Also z.B.

1. Filter in Matlab auslegen
2. HDL code generieren
3. Entsprechend den Anforderungen ein Board auswählen
4. Magic
5. Magic
6. Magic
7. Board mit Filter

Ich glaube den Filter zu erstellen ist nicht mein Problem, eher 
herauszufinden wie ich das Signal digitalisiere und den Filter allgemein 
implementiere ohne bereits einen FPGA zu besitzen und herumzuprobieren.


Burkhard K. schrieb:
> Für FPGAs gibt es auch fertige IP (z.B.: Xilinx FIR-Compiler), die bei
> bekannten Anforderungen relativ schnell konfiguriert ist.

Vielleicht wäre wirklich das sinnvollste einen FPGA aufzutreiben und 
einfach loszulegen.

Lothar M. schrieb:
> Man muss nur am richtigen Meer
> suchen, wenn man den richtigen Sand finden will. Sonst findet man nur
> Schlamm oder Kiesel und denkt sich, dass alle Strände so aussehen...

Amen

von --- (Gast)


Lesenswert?

Bei 2 kHz kann das schon ein ARM M0+.

Testweise hatte ich schonmal ein 50 pol FIR fuer ein EKG
auf einem STM32L053 laufen lassen unter Verwendung des
ADCs und des DACs. Vom Filterdesign mit Matlab bis zum
fertigen Filter hat das etwa eine Stunde gebraucht.

von --- (Gast)


Lesenswert?

P.S. Matlab hat nur die Koeffizienten ausgerechnet.

Codiert ist das ganze in C.

Interrupts brauchte es nicht. Aber natuerlich einen Timer.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jochen schrieb:
> Vielleicht wäre wirklich das sinnvollste einen FPGA aufzutreiben und
> einfach loszulegen.
Nein, das wäre es für diese Aufgabe mit einem 2kHz Signal mit 
erklärter Sicherheit nicht. Nicht einmal ich würde dafür ein FPGA 
nehmen (und ich nehme FPGAs gerne). Aber wenn du für diese Aufgabe 
unbedingt ein FPGA verwenden WILLST (denn wie gesagt: BRAUCHEN tust du 
es nicht), dann solltest du tatsächlich ein Evalboard kaufen und 
loslegen. Und dir noch Gedanken machen, wie denn das Interface dieses 
Systems aussieht. Kommen da Analogwerte rein und müssen wieder 
gefilterte Analogwerte wieder raus?

Jochen schrieb:
> ich (Student) habe von meinem Arbeitgeber einen neuen Auftrag aus einem
> Gebiet bekommen, in dem ich mich noch nicht so ganz zurecht finde (er
> auch nicht).
Wenn sich nichtmal dein Betreuer mit FPGAs auskennt, dann kommt da (aus 
meiner Erfahrung) nichts Gescheites dabei raus. Such dir auf jeden Fall 
jemanden, der dir aktiv bei dieser Aufgabe helfen kann...

: Bearbeitet durch Moderator
von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Hallo Jochen,
wenn ich diese Aufgabe bekäme, würde ich einen PSoC5LP nehmen, der hat 
bereits digitale Filterblöcke (24 Bit) sowie A/D- und D/A- Wandler 
eingebaut.
Und für ca. 10 € gibt es bereits ein brauchbares Kit.

http://www.cypress.com/products/32-bit-arm-cortex-m3-psoc-5lp

Einarbeitung in die Philosophie und in die IDE ist sicher notwendig, 
aber wenn man den PSoC Creator verstanden hat, ist er ein sehr 
hilfreiches Werkzeug.

von --- (Gast)


Lesenswert?

> einen PSoC5LP nehmen, der hat bereits
> digitale Filterblöcke (24 Bit) sowie
> A/D- und D/A- Wandler

Das haben billige ARM M0/M0+ auch schon.
Und den/die FIRs kann man bei den geringen Anforderungen
an die Geschwindigkeit ganz generisch in C programmieren.

Wirst du fuer die PSOC-Werbung bezahlt?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

--- schrieb:
> Wirst du fuer die PSOC-Werbung bezahlt?
Welche Werbung denn?
Das mit den AD - DA ist zumindest mal neckisch und praxisnah...

von --- (Gast)


Lesenswert?

Lothar M. schrieb:

> Das mit den AD - DA ist zumindest mal neckisch und praxisnah...

Das haben die kleinen ARMe teilweise in 12 Bit auch schon.
Z.B. STM32L053 oder STM32L152 wobei letzterer schon ein M3 ist.
Die passenden Befehle fuer eine FIR bringt ein M3 auch mit.

Also kein besonderer Grund um in PSOC-Esotherik zu verfallen.

Und ja, einigermassen aufloesende ADs und DAs gleich im
Controller zu haben ist neckisch und praxisnah.

Wenn einem ST nicht gefaellt, wird man bei anderen Herstellern
sicher auch fuendig.

Die AD von einem MAX10 finde ich z.B. da eher ein wenig
duerftig was Aufloesung und Geschwindigkeit angeht.
Das erinnert mich eher eher an die (Hilfs-)ADs bei den
TMS320C5000 mit ihren 10 Bit. Gerade mal tauglich um die
Batteriespannung und Temperatur zu ueberwachen.


Um zum Problem des TO zurueck zu kommen: Eigentlich jeder
moderne (32 bit-)Controller mit einem Hardwaremultiplizierer
kann das. FPGAs, vorzugsweise mit DSP-Slices, natuerlich auch.

von ztr (Gast)


Lesenswert?

dann tuts auch ein Discovery/Nucleo board fürn 10er  und da ist der 
debugger schon drauf.

Wenn man nicht weiß ob 2Khz reichen kann man ein M4/M7 Board nehmen.
Das ist sehr fix und kostet echt nicht die welt.

In den Beispielen zur DSP LIB sind FIR filter dabei.

von J. S. (engineer) Benutzerseite


Lesenswert?

Jochen schrieb:
> Shaker wird bis ca 2 kHz betrieben.
> einfacher Hoch-/Tiefpass werden soll.
Ein Filter mit 2 ganzen Kilohertz?

Du weißt ja sicher, das aktuelle Audio-DSPs gleich mal Surround-Signal 
dekodieren, mehrkanalig filtern und das mit 192kHz?

> 1. Filter in Matlab auslegen
> 2. HDL code generieren
> 3. Entsprechend den Anforderungen ein Board auswählen

Wenn Du weißt, was Du bauen möchtest (Ich rechne mal einen Stereo-FIR 
für 4kHz Samplefrequenz mit 256 TAPs, dann kannst Du die Anzahl der 
Rechenschritte voraus berechnen und musst nicht auf eine MATLAB-Ergebnis 
warten. Für einen FPGA gibt es da auch kaum was auszulegen, weil der das 
voll sequenziell mit einem Multiplizierer schaffen wird, den man noch 
ein fabric logic bauen könnte. Das packt ein alter Spartan 3 mit 10 MHz. 
Mit entsprechenden Taktresourcen würde man einen 16 Bit-Mul für 2 kHz 
sogar vollsequenziell allein mit einem Akkumulator hinbekommen.

Wenn Du das MATLAB allerdings nicht mit den richtigen Infos fütterst, 
bekommst Du gfs ein Monsterfilter und der HDL-Coder liefert Dir was, wo 
Du einen Kintex einsetzen musst :-)

: Bearbeitet durch User
Beitrag #5379149 wurde von einem Moderator gelöscht.
von Michael W. (Gast)


Lesenswert?

Clemens N. schrieb:
> Oder was suchst du an Kochrezept? Filtersynthese in Matlab gibt es ja
> genug Literatur. Implementierung in Hardware ist auch relativ direkt.
> Die Wandlung richtig auszulegen ist wahrscheinlich die groesste
> Herausforderung, aber da ist Kochrezept eher schwer.

... vor allem deshalb, weil sich der TO nach wie vor um die Beantwortung 
der Fragen, nach den benötigten Filtercharakteristika herumdrückt.

von Azz-edine E. (azzedine_e)


Lesenswert?

Hallo,

ich habe ein Aufgabe zur Verbesserung eines FIFO Filter
im Testbench steht immer noch ein UUUU wie kann man den Fehler beheben?

Vielen Dank im Voraus

von Gustl B. (gustl_b)


Lesenswert?

Hier in diesem Thread geht es um FIR Filter. Mach bitte einen eigenen 
Thread auf.

UUUU bedeutet Unbekannt. Zeig doch in deinem Thread dann auch mal den 
Code, sonst kann man nicht helfen sondern nur raten.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> UUUU bedeutet Unbekannt. Zeig doch in deinem Thread dann auch mal den
> Code, sonst kann man nicht helfen sondern nur raten.

Nope, es bedeutet Uninitialized, das ist ein wichtiger Unterschied:
1
    'U': uninitialized. This signal hasn't been set yet.
2
    'X': unknown. Impossible to determine this value/result.
3
    '0': logic 0
4
    '1': logic 1
5
    'Z': High Impedance
6
    'W': Weak signal, can't tell if it should be 0 or 1.
7
    'L': Weak signal that should probably go to 0
8
    'H': Weak signal that should probably go to 1
9
    '-': Don't care.

Warum das wichtig ist, siehst hier:

https://www.csee.umbc.edu/portal/help/VHDL/misc.html

von Gustl B. (-gb-)


Lesenswert?

Tobias B. schrieb:
> Nope, es bedeutet Uninitialized

Das ist mir schon bekannt, macht aber keinen Sinn.

Ich kann einem Signal auch 'U' zuweisen. Dann ist es initialisiert, eben 
mit 'U'.

Ich würde eher sagen 'X' ist ein Konflikt der zu keinem eindeutigen 
Ergebnis aufgelöst werden kann.
'U' bedeutet, dass dem Signal (noch) kein eindeutiger Wert (außer 'U') 
zugewiesen wurde. Aber es kann einem Signal schon ein eindeutiger Wert 
zugewiesen worden sein und danach dann wurde das 'U' zugewiesen. Es ist 
also initialisiert und hat jetzt den Wert 'U'. Das ist eben ein 
Platzhalter für "keiner der anderen Zustände".

Initialisiert finde ich daher falsch, weil das von lateinisch initialis 
„anfänglich, beginnend“ kommt, hier das 'U' aber auch nicht am Anfang 
zugewiesen werden kann.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Das ist mir schon bekannt, macht aber keinen Sinn.

Das macht sehr wohl Sinn und ist auch zwingend notwendig. Schau dir mal 
den std_logic Typ an. Der besteht erstmal aus irgendeinem Satz von 
Symbolen. Erst die Resolution Function gibt den Symbolen eine Bedeutung, 
weswegen auch die Interpretation entscheidend ist.

Das "Uninitialised" bezieht sich daher nicht auf die Variable per se, 
sondern auf den Anfangswert der, wie du richtig erkannt hast, ein 'U' 
ist. Soetwas wie NULL gibt es nicht!

Wie du auch erkannt hast, treten bei std_logic die 'X'e z.B. Konflikten 
auf, z.B. wenn ein Signal von 2 Quellen getrieben wird. Hier 
signalisiert dir die Resolution Funktion, dass das Zielobjekt von 2 
Quellen gleichzeitig geschrieben werden soll, aber nicht weiss welchen 
Wert es dem Ziel entgueltig zugeben hat.

Der Unterschied sollte wohl klar sein oder? Und wahrscheinlich sollte es 
auch Klick machen warum das so wichtig ist. Man denke z.B. an eine 
umfangreiche Verifikation fuer einen FPGA (oder noch wichtiger ASIC) der 
keine Initialwerte fuer Register kennt. Damit kannst du zum einen 
pruefen ob deine Resets die Signale richtig initialisiert haben (alle 
Signale getroffen wurden), zum anderen kannst du waehrend ein und der 
selben Simulation die Signale wieder auf den Initialen Zustand bringen 
durch Zuweisung der 'U's.

Daher ist es ein wichtiger Unterschied die 'U's nicht als unbekannt 
sondern als uninitialisiert zu betrachten. Im Falle des FIFOs bedeutet 
dies, dass die RAM Zellen die gelesen werden zuvor nicht beschrieben 
wurden (entweder durch befuellen des FIFOs oder durch ein RAM Init).

Vielleicht noch ein Beispiel um sich den Unterschied zu verdeutlichen: 
Man stelle sich vor der RAM im FIFO wurde nicht aus std_logic Vektoren 
sondern einfach nur aus Integer Vektoren aufgebaut. Dann gaebe es weder 
U's noch X'e, sondern die Daten waeren einfach nur 0. Woher die 0 kommt, 
ob ins RAM geschrieben oder durch fehlende Initialisierung ist nicht zu 
bestimmen.

von Gustl B. (-gb-)


Lesenswert?

Ich habe nie behauptet, dass 'U' und 'X' nicht wichtig wären. Die 
braucht es Beide und zwar für unterschiedliche Dinge.

Den Namen "Unbekannt" für 'X' finde ich noch so OK wobei ich Konflikt 
besser fände.
Aber den Namen "Uninitialisiert" für 'U' finde ich falsch. 'U' ist nur 
ein Platzhalter eben weil es wie du sagst kein NULL gibt. Aber das hat 
nix mit Initialisieren zu tun. Initialisiert wird etwas - wie der Name 
sagt - zu Beginn und sonst nie. Daher würde ich 'U' also NULL, NONE oder 
Unbekannt bezeichnen und 'X' als Konflikt.
Dass man den Wert bei 'X' nicht kennt, dieser also unbekannt ist, ist 
nämlich nur eine Folge eines Konfliktes. Die Ursache ist der Konflikt 
und daher würde ich 'X' auch so nennen.

von Gerd (Gast)


Lesenswert?

>ich (Student) habe von meinem Arbeitgeber einen neuen Auftrag aus einem
>Gebiet bekommen, in dem ich mich noch nicht so ganz zurecht finde (er
>auch nicht). Kurz gesagt, soll ich ein FIR Filter auf einem FPGA oder
>DSP implementieren. Ich habe mich zwar tagelang im WWW eingelesen,
>jedoch konnte ich noch kein "Kochrezept" aufstellen.

Das Kochrezept ist ganz einfach:

1. Filterkoeffizienten in Matlab entwerfen
2. Einen Arduino passender Leistungsfähigkeit kaufen ( z.B. Teensy 4.2 )
3. FIR-Filter Library runterladen:
https://github.com/LeemanGeophysicalLLC/FIR_Filter_Arduino_Library
4. Irgend eines der Beispiele ausprobieren
5. Eigene Koeffizienten eintragen und fertig.

Aufwand für einen Anfänger: 2 Tage
Aufwand für Fortgeschrittene: 2 Stunden

von oerks (Gast)


Lesenswert?

> 2. Einen Arduino passender Leistungsfähigkeit kaufen ( z.B. Teensy 4.2 )
> 3. FIR-Filter Library runterladen:

Kannst du dir in deinem Bastlerhirn vorstellen, dass es Kunden
und Umgebungen gibt, wo man diesen "Bastelkram" nicht haben will?

> Fortgeschrittene: 2 Stunden

Wenn du dich als Fortgeschritten ansiehst und 2 Stunden dafuer
brauchst, um ein paar (N) Multiplikationen mit Koeffizienten
aufzuaddieren, bist du doch noch ein Anfaenger.
Und wenn dir jemand dann noch Matlabspielzeug wegnimmt,
sieht wohl ganz dunkel aus.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Aber den Namen "Uninitialisiert" für 'U' finde ich falsch. 'U' ist nur
> ein Platzhalter eben weil es wie du sagst kein NULL gibt. Aber das hat
> nix mit Initialisieren zu tun. Initialisiert wird etwas - wie der Name
> sagt - zu Beginn und sonst nie. Daher würde ich 'U' also NULL, NONE oder
> Unbekannt bezeichnen und 'X' als Konflikt.

Nein, der ist genau richtig. Das ist der Wert den ein std_logic Signal 
nunmal hat, bevor es das erste mal eine Zuweisung bekommt. Die 
Bezeichnung passt uebrigens auch in der realen Welt, ueberall dort wo 
Signale keine wohldefinierten Startzustaende haben, z.B. in ASICs.

Das Konzept von Initialisierung wie du es z.B. aus der C Welt kennst, 
gibt es nicht. In VHDL werden Signale immer mit dem ersten Wert aus der 
Wertemenge des Typs initialisiert. Wenn du in C eine neue Variable 
deklarierst, zeigt die auf irgendeinen Speicherbereich, von dem du den 
Wert nicht kennst. Daher ist deine Variable hier auch ganz klar 
unbekannt. Das merkst du spaeter auch bein der weiteren Verwendung, du 
kannst nicht mehr Unterscheiden ob z.B. dein Integer wirklich den 
gelesenen Wert hat oder ob es nicht initialisiert wurde.

Das haben sich die Leute die das std_logic Package (eigentlich 
std_ulogic) entworfen haben schon richtig so ausgedacht.

Und das Beispiel mit dem FIFO ist dafuer genau das richtige. Die Werte 
sind nicht unbekannt weil irgendein Konflikt vorlag, sondern 
uninitialisert, weil eben der Startzustand noch nicht ueberschrieben 
wurde. Das ist genau die Absicht von std_logic und dafuer ist es 
gedacht. Wenn dir die Bezeichnungen nicht gefallen, kannst du jederzeit 
dein eigenes std_gustl_logic Package definieren, wird halt alle Tools 
brechen.

Unbekannt ist hier uebrigens eine ziemlich schlechte Uebersetzung, 
korrekter waere unbestimmt, weil die Resolution Funktion nicht aufloesen 
konnte. Sie haette es ja gerne gemacht, ging aber nicht und deshalb ist 
der Wert unbestimmt (kennen die Leute die noch mit FF Gattern hantiert 
haben vom Fall wenn man R und S gleichzeitig angesteuert hat und das FF 
keine R/S Priorisierung vorgenommen hat). Dann hat man einfach 2 
gegengeschaltete Transitoren bei denen man vorher nicht weiss welcher 
"gewinnt", bzw. einen instabilen Zustand. Daher ist der Ausgang nicht 
nur unbekannt, sondern sogar unbestimmt.

von Gerd (Gast)


Lesenswert?

von oerks (Gast)
19.01.2021 21:53

>> 2. Einen Arduino passender Leistungsfähigkeit kaufen ( z.B. Teensy 4.2 )
>> 3. FIR-Filter Library runterladen:

>Kannst du dir in deinem Bastlerhirn vorstellen, dass es Kunden
>und Umgebungen gibt, wo man diesen "Bastelkram" nicht haben will?

Kannst du dir in deiner Verbortheit vorstellen, dass es sich hier um ein 
Studenprojekt mit möglicherweise nur einer Hardwarerealisierung ist, die 
in der gesamten Firma nur einmal benötigt wird. Wo hast Du in dem Thread 
gelesen, dass es einen Kunden gibt, der etwas anderes haben will?
Bei der fehlenden Erfahrung des TO ist die Arduino-Rapid-Prototyping 
Lösung der schnellste und sinnvollste Weg.

>>> Fortgeschrittene: 2 Stunden
>>Wenn du dich als Fortgeschritten ansiehst und 2 Stunden dafuer
>>brauchst, um ein paar (N) Multiplikationen mit Koeffizienten
>>aufzuaddieren, bist du doch noch ein Anfaenger.
>>Und wenn dir jemand dann noch Matlabspielzeug wegnimmt,
>>sieht wohl ganz dunkel aus.

Auch hier wird deine mangelnde Erfahrung und Selbsüberschätzung wieder 
klar ersichtlich: Der Code des FIR-Filters besteht schon aus deutlich 
mehr als 3 Zeilen.
Rechne mal 5 Minuten für eine Codezeile. Dann bist du bei 2 Stunden bei 
48 Codezeilen und die wirst du inclusive statischer und dynamischer 
Codetests nicht schaffen.

von oerks (Gast)


Lesenswert?

> Verbortheit

Das kommt uebrigens von bohren. Und nicht von Bort Simpson.

Ein Kochrezept das auf
> Arduino-Rapid-Prototyping
beruht, ist fuer eine Firma die Produkte entwickelt, nichts wert.
Schon lizenzrechtliche Gruende waeren da ausreichend.
Wenn du selber nur damit ein FIR zustandebringst, bist du
fuer das Thema schlicht unqualifiziert.

> inclusive statischer und dynamischer Codetests
Wohl ein Informatiker.
Ich teste Filter mit Generator und Oszi oder einem Specki mit TG.
Ein Gruppenlaufzeitmessgeraet ist fuer die Messung des
Phasenverhaltens auch zu empfehlen.

von Gustl B. (-gb-)


Lesenswert?

Tobias B. schrieb:
> Das ist der Wert den ein std_logic Signal
> nunmal hat, bevor es das erste mal eine Zuweisung bekommt.

Leider eben nicht, denn man kann einem Signal auch später mal ein 'U' 
zuweisen.
Ja, richtig, Uninitialisierte Signale haben zu Beginn ein 'U', aber 
nicht nur, auch initialisierte Signale können später wieder zu 'U' 
werden. Und daher finde ich den Namen Uninitialisiert für 'U' falsch.

Tobias B. schrieb:
> Die
> Bezeichnung passt uebrigens auch in der realen Welt, ueberall dort wo
> Signale keine wohldefinierten Startzustaende haben, z.B. in ASICs

Genau. Aber wenn man ihnen einma einen Wert zuweist, eine '1' als 
Beispiel, dann werden die nicht mehr zu 'U'. In der realen Welt kannst 
du kein 'U' zuweisen.

Tobias B. schrieb:
> Das Konzept von Initialisierung wie du es z.B. aus der C Welt kennst,
> gibt es nicht. In VHDL werden Signale immer mit dem ersten Wert aus der
> Wertemenge des Typs initialisiert. Wenn du in C eine neue Variable
> deklarierst, zeigt die auf irgendeinen Speicherbereich, von dem du den
> Wert nicht kennst. Daher ist deine Variable hier auch ganz klar
> unbekannt. Das merkst du spaeter auch bein der weiteren Verwendung, du
> kannst nicht mehr Unterscheiden ob z.B. dein Integer wirklich den
> gelesenen Wert hat oder ob es nicht initialisiert wurde.

Genau. Aber wenn ich den Speicherbereich einmal mit Werten beschrieben, 
also initialisiert habe, dann kann ich ihn nicht mehr zurück 
deinitialisieren. Das geht aber wenn ich einem Signal später ein 'U' 
zuweise.

Tobias B. schrieb:
> Die Werte
> sind nicht unbekannt weil irgendein Konflikt vorlag, sondern
> uninitialisert, weil eben der Startzustand noch nicht ueberschrieben
> wurde.

Auch hier: Wenn man sie einmal in initialisiert, dann bleiben sie für 
immer initialisiert. In VHDL kann ich denen aber später wieder ein 'U' 
geben. Obwohl sie schon initialisiert sind.
Ich kritisiere ja nicht das 'U' oder den Sinn davon, der ist wichtig, 
das ist eben das NULL/NONE/... aber es ist eben nicht uninitialisiert.

Tobias B. schrieb:
> Unbekannt ist hier uebrigens eine ziemlich schlechte Uebersetzung,
> korrekter waere unbestimmt

Bei 'X' meinst du. Ja, exakt! Mit unbestimmt fände ich da sehr viel 
besser weil das eben den Konflikt ausdrückt.

oerks schrieb:
> Ich teste Filter mit Generator und Oszi oder einem Specki mit TG.

Wir sind hier im FPGA Forum. Hier simuliert man Filter. Aus einem 
digitalen Signal ein analoges Signal zu machen, ganz ohne Not, finde ich 
sinnfrei.

von oerks (Gast)


Lesenswert?

> Hier simuliert man Filter

Zeig mir doch mal einen Bodeplot (Amplitude/Phase) im Modelsim.
Am besten natuerlich mir dem A/D-Wandler in der Testbench.

von Gustl B. (-gb-)


Lesenswert?

Edit, sorry, Bode Plots sind was Anderes. Ne, hab ich noch nicht gemacht 
aber ich sehe nicht wieso das nicht funktionieren sollte.

: Bearbeitet durch User
von Gerd (Gast)


Lesenswert?

>von oerks (Gast)
>20.01.2021 06:50
>Ein Kochrezept das auf
>> Arduino-Rapid-Prototyping
>beruht, ist fuer eine Firma die Produkte entwickelt, nichts wert.
>Schon lizenzrechtliche Gruende waeren da ausreichend.
>Wenn du selber nur damit ein FIR zustandebringst, bist du
>fuer das Thema schlicht unqualifiziert.

1. Es steht nirgends im Thread, dass ein Produkt entwickelt werden soll.
2. Du scheinst etwas eingeschränkt in der Wahl der passenden Tools
3. Arduinos und deren Libraries für's Rapid Prototyping zu nutzen, kann 
extrem hilfreich sein, schließt aber nicht aus, dass der, der es tut 
nicht auch beliebig andere Formen realisieren könnte.
Logisches schließen scheint keine deiner Stärken zu sein.

>> inclusive statischer und dynamischer Codetests
>Wohl ein Informatiker.
>Ich teste Filter mit Generator und Oszi oder einem Specki mit TG.
>Ein Gruppenlaufzeitmessgeraet ist fuer die Messung des
>Phasenverhaltens auch zu empfehlen.

Das klingt für mich nach Bastelbude und nicht nach seriöser Firma.

von Gustl B. (-gb-)


Lesenswert?

Gerd schrieb:
> Das klingt für mich nach Bastelbude und nicht nach seriöser Firma.

Man sollte vor allem trennen zwischen Filterdesign oder Filterentwurf 
und der Implementierung.

Für das Design gibt es Software wie pyfda, Matlab, ... da fallen dann 
Koeffizienten raus und für die Implementierung (und nur um die geht es 
in dem Thread) gibt es ebenfalls Werkzeuge wie pyfda, Matlab, ... die 
HDL ausgeben können oder sowas wie den FIR Compiler von Xilinx dem man 
nur die Koeffizienten füttern muss.
Das kann man dann simulieren, aber das dient eher dazu zu überprüfen ob 
das Filter tatsächlich funktioniert.

oerks schrieb:
> Bodeplot (Amplitude/Phase)

Da geht es dann nicht mehr um die Implementierung im FPGA, sondern eben 
auch um die Analogschaltung drum rum. Das sollte man dann natürlich mit 
dem Oszi/Spekki machen, das stimmt.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Tobias B. schrieb:
>> Das ist der Wert den ein std_logic Signal
>> nunmal hat, bevor es das erste mal eine Zuweisung bekommt.
>
> Leider eben nicht, denn man kann einem Signal auch später mal ein 'U'
> zuweisen.
> Ja, richtig, Uninitialisierte Signale haben zu Beginn ein 'U', aber
> nicht nur, auch initialisierte Signale können später wieder zu 'U'
> werden. Und daher finde ich den Namen Uninitialisiert für 'U' falsch.

Genau, das ist aber kein Widerspruch.

Du hast ein Verstaendnisproblem mit dem std_logic Package. Du beziehst 
das Package auf die Sprache VHDL per se, das Package soll aber ein 
Modell der realen Welt sein, wie sich Signale elektrisch verknuepfen 
lassen. Deshalb beziehst du das uninitialisiert auch auf eine Welt wie 
du sie z.B. in C kennst.

Wie gesagt, das Beispiel mit dem FIFO ist ideal.

Gustl B. schrieb:
> UUUU bedeutet Unbekannt. Zeig doch in deinem Thread dann auch mal den
> Code, sonst kann man nicht helfen sondern nur raten.

Die richtige Antwort lautet hier: UUUU ist uninitialisiert. Die Aussage 
ein Signal ist uninitialisiert ist soviel staerker als einfach nur 
unbekannt. Denk nurmal daran wo du anfanegst ein uninitialisiertes 
Signal zu debuggen und wo ein unbekanntes/unbestimmtes.

Daher empfehle ich dir: Verinnerliche nochmal die Vorstellung das 
std_logic kein Sprachbestandteil von VHDL ist, sondern ein reale Welt 
Modell zur Generierung elektrischer Signalen (welches mittels VHDL 
erstellt wurde) und les dir unter dem Kontext den Link oben nochmal 
durch oder z.B. in dem Buch von Ashenden das Kapitel2 durch. Dann sollte 
das Konzept eigentlich klar werden und auch der Sinn des 'U's.

Ich wuerde mich auch mal aus der Diskussion ausklinken. Es ist einfach 
zu anstrengend Meinungen gegen Fakten zu diskutieren. Ausserdem sprengt 
es den Thread. Wichtig war mir nur, dass Anfaenger die den Thread hier 
verfolgen mit den gegebenen Infos differenzieren koennen und 
idealerweise dabei noch was lernen.

von Gustl B. (gustl_b)


Lesenswert?

Tobias B. schrieb:
> Verinnerliche nochmal die Vorstellung das std_logic kein
> Sprachbestandteil von VHDL ist, sondern ein reale Welt Modell zur
> Generierung elektrischer Signalen

Genau umgekehrt. In der realen Welt gibt es kein Uninitialisiert. Jedes 
Bit im RAM hat immer einen Zustand. In einer Schaltung liegt jeder Punkt 
immer auf einem Potential. Da gibt es auch zeitlich keinen Start oder 
so. In der Hardware gibt es kein NULL, aber das 'U' ist genau das. Und 
zwar in dieser Sprache.
Das ist meine Sicht der Dinge.

Aber egal, einigen wir uns drauf, dass wir uns nicht einig sind.

Tobias B. schrieb:
> Wichtig war mir nur, dass Anfaenger die den Thread hier verfolgen mit
> den gegebenen Infos differenzieren koennen und idealerweise dabei noch
> was lernen.

Ja richtig, da hätte ich die offizielle Bezeichnung nennen müssen.

: Bearbeitet durch User
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Genau umgekehrt. In der realen Welt gibt es kein Uninitialisiert. Jedes
> Bit im RAM hat immer einen Zustand. In einer Schaltung liegt jeder Punkt
> immer auf einem Potential. Da gibt es auch zeitlich keinen Start oder
> so. In der Hardware gibt es kein NULL, aber das 'U' ist genau das. Und
> zwar in dieser Sprache.
> Das ist meine Sicht der Dinge.

Ok, jetzt ist es auch fachlich noch voelliger Bullshit und absolut 
unqualifiziert. Zum einen ist "irgendein" Potential noch lange kein 
definierter Zustand, zum anderen sind metastabile Zustaende die in 
realer Hardware auftreten alles andere als konstant und damit in 
keinstem Fall wohldefiniert. Schaust dir mal an wie SDRAM funktioneirt, 
dann verwirfst den Quatsch aber wieder ganz schnell.

Jetzt macht es aber auch Sinn warum du an dem urspruenglichen 
Schwachsinn festhaeltst, dir ist einfach die Elektronik dahinter nicht 
verstaendlich. Daher kannst du auch nicht erkennen warum das std_logic 
Package so aufgebaut ist, wofuer es Modell steht.

Vielleicht kann jemand aus dem ASICs Lager hier ein bisschen was dazu 
sagen mit einem richtigen Alltagsbeispiel.

: Bearbeitet durch User
von Gustl B. (gustl_b)


Lesenswert?

Tobias B. schrieb:
> keinstem Fall wohldefiniert.

Das habe ich auch nicht behauptet. Ich wollte sagen dass es in Hardware 
kein Uninitialisiert gibt. In der RAM Zelle liegt irgendwas. Wenn man da 
ran käme könnte man etwas messen. Da ist eben nicht nichts. Und wenn man 
an verschiedenen Punkten einer Schaltung die Spannung misst, dann misst 
man da auch etwas und eben nicht nichts. Nichts gibt es da nicht, man 
bekommt immer etwas. Nicht was man will, man weiß auch vorher nicht was 
man messen wird, aber da ist etwas.
Das U in VHDL gibt es in Hardware nicht. Da hätte die Leitung 
irgendeinen Zustand/Pegel. Und Metastabilitäten gibt es, klar, aber 
Metastabil ist nur bei Digitalschaltungen ein Thema. Da ist eben eine 
Spannung. Und es kann sein, dass die sich eben gerade keinem Logikpegel 
zuordnen lässt.
Trotzdem hat der Ausgang vom FF aber ein Potenzial und man könnte eine 
Spannung messen.
Uninitialisiert ist in Hardware wenn dann nur ein gedankliches Konstrukt 
bei Digitalschaltungen. In der Physik hat das alles immer einen Zustand 
aber eben gerade keinen der sich auf Logikpegel abbilden lässt.
Das sieht man sogar am FPGA, wenn man ein Signal das U sein müsste in 
Hardware verwendet. Dann hat es plötzlich einen Zustand ungleich U.

Tobias B. schrieb:
> Vielleicht kann jemand aus dem ASICs Lager hier ein bisschen was dazu
> sagen mit einem richtigen Alltagsbeispiel.

Das fände ich auch sinnvoll, denn ob ich Recht habe weiß ich natürlich 
nicht.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Sorry, dem ist nichts mehr hinzuzufuegen. Das ist einfach nur grobster 
Unfug. Macht auch kein Sinn auszudiskutieren, kein Mensch ist so taub 
wie der der nicht hoeren will. Ich hoffe nur das keiner (vor allem 
Neulinge) diesen Quatsch ernst nimmt.

Von daher: Ich bin dann mal raus hier. :-)

Kleiner Edit: Ich glaube es liegt auch noch ein Verstaendnisproblem fuer 
das Wort "Initialisierung" vor. Vielleicht da auch nochmal ein 
Woerterbuch oder aehnliches aufschlagen.

: Bearbeitet durch User
von Bernhard K. (bkom)


Lesenswert?

Tobias B. schrieb:
> Gustl B. schrieb:
>> UUUU bedeutet Unbekannt. Zeig doch in deinem Thread dann auch mal den
>> Code, sonst kann man nicht helfen sondern nur raten.
>
> Nope, es bedeutet Uninitialized, das ist ein wichtiger Unterschied:
>     'U': uninitialized. This signal hasn't been set yet.
>     'X': unknown. Impossible to determine this value/result.
>     '0': logic 0
>     '1': logic 1
>     'Z': High Impedance
>     'W': Weak signal, can't tell if it should be 0 or 1.
>     'L': Weak signal that should probably go to 0
>     'H': Weak signal that should probably go to 1
>     '-': Don't care.

Also ich mache auch Chipdesign, habe mir aber schon lange keinen Kopf 
mehr
darüber gemacht was die VHDL(verilog ist da wieder anders) U und Xsen
so ganz Genau bedeuten ... die sind für mich nur Hilfsmittel des sowieso 
unvollkommenen Logiksimulators (Analogsimulatoren kennen sowas eh 
nicht).
Wenn ich meiner RTL Simulation ein U (schön in Rot) sehe, dann suche ich 
in der Waveform einfach die Quelle des U oder Xses und reparier die - 
meist
ists meist ein vergessener Reset oder fehlende Inputs oder falsche 
Verdrahtung oder ...

: Bearbeitet durch User
von oerks (Gast)


Lesenswert?

> 2. Du scheinst etwas eingeschränkt in der Wahl der passenden Tools
> 3. Arduinos und deren Libraries für's Rapid Prototyping zu nutzen, kann
> extrem hilfreich sein

Ich bin durchaus nicht eingeschraenkt. Mir stehen sowohl Matlab 2020b
als auch Quartus Pro zur Verfuegung.
Wenn ich rapides Prototyping machen muss, nehme ich einen FPGA.
Weil:
Ich kann die Peripherie schnell und umfassend an die Umgebung
anpassen. LVDS kein Problem. Schraege SPI-Interface, kein Problem.
Anzahl der Guardbits fuer den Algorithmus, auch kein Problem.
Der FIR als solcher in VHDL, erst recht kein Problem.
Und unter dem Strich spare ich Zeit.
Und wenn die Ansprueche geringer sind, das ganze dann halt
mit einem ARM oder einem anderen Controller der die noetige
Leistung hat. Aber auch da lohnen Umwege nicht.

> Das klingt für mich nach Bastelbude und nicht nach seriöser Firma.

Ich bin mein eigener Chef. Und scheinbar bin ich schneller und
liefere besseres als andere.

von Christoph Z. (christophz)


Lesenswert?

Gustl B. schrieb:
> Tobias B. schrieb:
>> Die Werte
>> sind nicht unbekannt weil irgendein Konflikt vorlag, sondern
>> uninitialisert, weil eben der Startzustand noch nicht ueberschrieben
>> wurde.
>
> Auch hier: Wenn man sie einmal in initialisiert, dann bleiben sie für
> immer initialisiert. In VHDL kann ich denen aber später wieder ein 'U'
> geben. Obwohl sie schon initialisiert sind.

Das 'U' uninitialisiert heisst, ist eine Konvention und so sollen wir 
diesen Zustand benutzen. (Ich habe hier gerade ein RAM Model in der 
Post-Layout Simulation, das X nutzt als ersten Wert ab Zeit 0, das macht 
uns gerade Probleme zu späterer Simulationszeit).

Ja, in VHDL steht es mir frei, den Wert 'U' zu beliebigem Zeitpunkt zu 
zu weisen. Es macht einfach in den meisten Fällen keinen Sinn. Beim 
Entwickeln eines Models einer externen Komponente für eine Testbench 
kann das aber genau das sein, was ich machen muss, weil diese externe 
Komponente z. B. vom FPGA ein- und ausgeschaltet werden kann.

von Fitzebutze (Gast)


Lesenswert?

Tobias B. schrieb:
> Vielleicht kann jemand aus dem ASICs Lager hier ein bisschen was dazu
> sagen mit einem richtigen Alltagsbeispiel.

Gerade da ist es absolut essentiell, dass ein SoC (in diesem Falle) 
korrekt initialisiert und nicht irgend ein undefinierter Zustand nach 
dem Reset in gewissen Registern eines System-Interrupt-Controllers 
hängenbleibt. Ich kriege immer mal wieder IP-Cores in die Finger, die 
keinen sauberen Reset implementiert haben, auf FPGA 'fehlerfrei' laufen, 
und auf einem ASIC das System in spontane Interrupt-Lockups schicken 
würden, je nachdem wann ein Reboot erfolgt. Solch Random-Behaviour ist 
no go, aber leider bei z.B. Espressif-Chips recht alltagsverbreitet. 
Genau dann, wenn in der Sim ein 'U' oder 'X' bei einem Testpattern an 
den virtuellen Pins auftaucht, sagt der Regresstest: FAIL.

Das geht so weit, dass auch für Safety-relevante Umgebungen das ganze 
Programm mitsimuliert wird um zu verifizieren, dass der Programmablauf 
nicht auf einem Vergleich mit einem uninitialisierten Wert basiert (was 
schnell mal passieren kann, wenn in der Peripherie ein "Don't Care"-Bit 
(undefiniert) in einem Register sitzt. Der effektive Wert eines solchen 
Don't Care ist nämlich derjenige aus dem letzten Bus-Zugriff..

Weiteren Nonsense aus Feder 'Gustl' will ich hier eigentlich nicht lesen 
müssen. Unterschreibe somit Tobias' Rat, sich die std_logic deutlich zur 
Gemüte zu führen.

An den TO: Lass' erst mal die Finger vom FPGA. Das wird so nix in 6 
Monaten. Die grösste Schwierigkeit ist typischerweise nicht die 
Filterumsetzung, sondern den Datenfluss aufrechtzuerhalten. Da du dich 
über die Anwendung nicht äusserst, kann man dir da aber auch keine 
weitere Hilfestellung bieten.
Erst wenn du Power in Dimensionen TigerSHARC DSP brauchst, kommen FPGA 
als Alternative zum Zug, ansonsten müsste sich die Nischenanwendung 
schon sehr 'lohnen'.

von Gustl B. (-gb-)


Lesenswert?

Fitzebutze schrieb:
> Weiteren Nonsense aus Feder 'Gustl' will ich hier eigentlich nicht lesen
> müssen.

Auf meine Kritik am Wort "Uninitialisiert" für 'U' bist du nicht 
eingegangen. Und nur das, also die Bezeichnung von 'U' mit 
"Uninitialisiert" kritisiere ich, sonst nichts.

von Gustl B. (-gb-)


Lesenswert?

Christoph Z. schrieb:
> FPGA ein- und ausgeschaltet werden kann.

Vielen Dank, das war mir entgangen. Das ist tatsächlich eine gute 
Begründung für Uninitialisiert, weil eben durch das Aus- und Einschalten 
quasi ein neuer Start durchgeführt wird, zu dem - passend zur 
Wortherkunft „anfänglich, beginnend“ - dann der Anfangswert, eben das 
'U', gesetzt wird.
Das Ausschalten ist dann ein Deinitialisieren.

Für mich ergab keinen Sinn, dass 'U' ein Anfangswert ist, der aber auch 
nicht am Anfang gesetzt werden kann. Jetzt verstehe ich die 
Notwendigkeit einen Anfangswert auch nicht am Anfang setzen zu können.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Vielen Dank, das war mir entgangen. Das ist tatsächlich eine gute
> Begründung für Uninitialisiert, weil eben durch das Aus- und Einschalten
> quasi ein neuer Start durchgeführt wird, zu dem - passend zur
> Wortherkunft „anfänglich, beginnend“ - dann der Anfangswert, eben das
> 'U', gesetzt wird.
> Das Ausschalten ist dann ein Deinitialisieren.

Ist ja nicht so, dass das schon im Eroeffnungspost der Diskussion 
angemerkt wurde. ;-)

Beitrag "Re: FIR Filter auf FPGA implementieren"

Tobias B. schrieb:
> Der Unterschied sollte wohl klar sein oder? Und wahrscheinlich sollte es
> auch Klick machen warum das so wichtig ist. Man denke z.B. an eine
> umfangreiche Verifikation fuer einen FPGA (oder noch wichtiger ASIC) der
> keine Initialwerte fuer Register kennt. Damit kannst du zum einen
> pruefen ob deine Resets die Signale richtig initialisiert haben (alle
> Signale getroffen wurden), zum anderen kannst du waehrend ein und der
> selben Simulation die Signale wieder auf den Initialen Zustand bringen
> durch Zuweisung der 'U's.

von Patrick C. (pcrom)


Lesenswert?

Wie schon angegeben, guck sowieso mal die moeglichkeiten mit PSOC5LP 
prozessor an. Im IDE ist da ein filter-configuration helper eingebaut. 
Hier einige screenshots :

https://www.cypress.com/applications/digital-filter

Nein, ich werde nicht bezahlt fuer PSOC werbung.
Ja, ich arbeite gerne mit PSOC5LP.

von Gustl B. (gustl_b)


Lesenswert?

Tobias B. schrieb:
> zum anderen kannst du waehrend ein und der
> selben Simulation die Signale wieder auf den Initialen Zustand bringen
> durch Zuweisung der 'U's.

Das hatte ich dann falsch verstanden, sorry. Ich sah eben gerade da 
keinen Grund wieso man das machen können sollte und fand dass der Name 
daher auch falsch ist weil das dann ein Anfangszustand ist, der aber 
nicht  Anfang zugewiesen wird oder nur ab Anfang bis zu einer anderen 
Zuweisung besteht.

Ich bin jetzt mit dem Namen einverstanden, aber sehe keinen Grund wieso 
das was mit Anfang/Initial zu tun haben sollte. Man hätte U auch 
undefiniert nennen können und es wäre kein Problem. Oder U unbekannt und 
X unbestimmt oder Konflikt.
Aber ja, ich habe verstanden, das ist eben ein Anfangszustand und auch 
wenn man den später zuweist stellt man quasi einen neuen Anfang her. 
Zwar nicht zeitlich, die lief ja schon vorher, aber eben für das 
betreffende Signal. Finde ich OK.

von Michael W. (Gast)


Lesenswert?

Tobias B. schrieb:
> Hier
> signalisiert dir die Resolution Funktion, dass das Zielobjekt von 2
> Quellen gleichzeitig geschrieben werden soll, aber nicht weiss welchen
> Wert es dem Ziel entgueltig zugeben hat.

Das passiert regelmäßig auch, wenn ein mit U belegtes Signal hochgezählt 
wird.

von J. S. (engineer) Benutzerseite


Lesenswert?

Tobias B. schrieb:
> Man stelle sich vor der RAM im FIFO wurde nicht aus std_logic Vektoren
> sondern einfach nur aus Integer Vektoren aufgebaut. Dann gaebe es weder
> U's noch X'e, sondern die Daten waeren einfach nur 0. Woher die 0 kommt,
> ob ins RAM geschrieben oder durch fehlende Initialisierung ist nicht zu
> bestimmen.

Deshalb arbeite ich auch vorwiegend mit Vektoren.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Jürgen S. schrieb:
> Deshalb arbeite ich auch vorwiegend mit Vektoren.

So wie jeder andere hier wohl auch. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.