www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Kurzschreibweise if/else in VHDL


Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morgen!

In Verilog gibt es ja mit
 assign wire = 1 ? value : 0; 
 diese elegante Art in Abhängigkeit eines Signals einem Wire einen Wert 
zuzuweisen. Gibt es eine solche Möglichkeit auch in VHDL?

Vielen Dank schon Mal =)!

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry für Doppelpost, aber ich habs jetzt mal so gemacht:
MUXCY_L port map(LO => en_seed, CI => '1', DI => '0', S => reset);

Da schalte ich also in Abhängigkeit von reset en_seed zwischen 0 und 1.
Irgendwelche Einwände? =)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Irgendwelche Einwände? =)
Arg Plattformabhängig, das Ganze... :-/

Und wozu eigentlich ein Mux für diese Aufgabe:
> in Abhängigkeit von reset en_seed zwischen 0 und 1
Das ginge kürzer so:
  enseed <= not reset;
oder so:
  enseed <= reset;

Ich würde einen MUX als concurrent-Beschreibung schreiben:
   output <= valueA when reset ='0' else ValueB;
-- oder
   output <= value when reset ='0' else '0';

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Arg Plattformabhängig, das Ganze... :-/

Jepp... soll aber nur auf nem Virtex5 Board laufen. Also nicht weiter 
tragisch.

> Und wozu eigentlich ein Mux für diese Aufgabe:
>> in Abhängigkeit von reset en_seed zwischen 0 und 1
> Das ginge kürzer so:
>   enseed <= not reset;
> oder so:
>   enseed <= reset;

Jo... ist mir auch aufgefallen =) ! Habs auch schon geändert. Wozu den 
Mux? Ich wollte nen kleines LSFR basteln, bei dem bei reset als seed ne 
1 gegeben, sonst aber die Feedback Leitung anliegt.

Deswegen hab ich immer noch nen Mux am Eingang des ersten FFs:
seed_mux: MUXCY_L port map(LO => mux_out, CI => '1', DI => fb, S => reset);

Kann man das so machen? Oder läuft man da Gefahr wegen Glitches usw?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Oder läuft man da Gefahr wegen Glitches usw?
Klar gibt es bei Kombinatorik (und ein Mux ist das) immer die Gefahr von 
Glitches. Aber dafür ist bei synchronen Designs der Takt zuständig: 
rechtzeitig vor dem nächsten Taktimpuls muß das Ergebnis der 
Kombinatorik stabil sein.

> Kann man das so machen?
Kann man schon, ist aber sehr sehr unleserlich.
Ein paar leserliche LFSR findest du da:
http://www.lothar-miller.de/s9y/categories/38-LFSR

> Ich wollte nen kleines LSFR basteln, bei dem bei reset als
> seed ne 1 gegeben, sonst aber die Feedback Leitung anliegt.
Wozu ein Reset bei einem LFSR?

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Link =)!

Lothar Miller schrieb:
> Wozu ein Reset bei einem LFSR?

Mir ist spontan keine bessere Methode eingefallen, wie ich eine seed in 
den LSFR einpflanze als den globalen Reset dafür zu missbrauchen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ... den globalen Reset dafür zu missbrauchen.
Zum Thema Reset und Xilinx lies mal das Whitepaper WP272...
Oder/und auch den Beitrag "Xilinx und die Resets"

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Lesetipp =) !
Werde ich mir definitiv zu Gemüte führen!

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab gerade entweder ein Verständnisproblem, oder das gewählte 
Polynom ist einfach so (was ich aber nicht verstehe).
Ich wollte einen LFSR mit dem Polynom X³+X+1 generieren. Dabei 
wiederholt sich die Ausgabe immer nach Sieben Takten. Es kommt immer 
1101000. Dabei dachte ich, wechselt die Ausgabe zufällig bei diesem 
Polynom???
Weiß jemand ne Antwort?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also ich hab gerade entweder ein Verständnisproblem, oder das gewählte
> Polynom ist einfach so (was ich aber nicht verstehe).
Pauschal: Zeile 42 ist falsch.
Oder: wer soll dir ohne Code sagen, was du falsch gemacht hast?

> Ich wollte einen LFSR mit dem Polynom X³+X+1 generieren.
Also sowas, wie dort in der Mitte der Seite:
http://www.newwaveinstruments.com/resources/articl...
Ja, das passt doch: mit 3 FFs kannst du maximal 7 unterschiedliche 
Zustände kodieren (die 111 kann ja nicht vorkommen). Diese 7 Werte 
wiederholen sich dann dauernd. Und für mich sehen die Werte zufällig 
aus:
1101000 -->
110 = 6
101 = 5
010 = 2
100 = 4
000 = 0
001 = 1
011 = 3

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso...

Ich dachte es sind eben die sieben Zustände die zufällig enstehen... 
Aber anscheinend werden die Zustände einem nach dem anderen abgeklappert 
und wiederholt...

Trotzdem Danke =) !

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich dachte es sind eben die sieben Zustände die zufällig enstehen...
Die Reihenfolge der 7 Zustände ist zufällig.
Wenn du etwas erreichen willst, das über längere Zeit zufällig aussieht, 
brauchst du ein Polynom mit einem wesentlich längeren Schieberegister. 
Ein Schiebereigister mit 32 Bits wiederholt sich z.B. erst nach 
4294967295 Takten.

Der Trick der Polynome ist, dass mit einem geeigneten Polynom jeder der 
2^n-1 Zustände während einer Wiederholung genau 1 mal vorkommt. Ein 
ungeeignetes Polynom lässt Werte aus und/oder voerdoppelt einige...

> Aber anscheinend werden die Zustände einem nach dem anderen abgeklappert
> und wiederholt...
Logisch: an dem Aufbau ist doch überhaupt nichts zufälliges. Es ist ein 
Schieberegister mit 3 Flipflops. Und bei einem rückgekoppelten 
Schieberegister wiederholt sich (bestenfalls) irgendwann alles. 
Schlimmstenfalls erreicht das Ganze einfach einen stabilen Zustand...

Autor: berndl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht direkt zu LFSR sondern zu CRC:
http://www.ross.net/crc/download/crc_v3.txt

getreu dem Motto: It was hard to write, it should be hard to read :o)

Autor: Erdin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der CRC ist mir ja auch bekannt, bloß hab ich das in dem 
Zusammenhang mit LFSR noch nicht so gesehn. Danke =)! Jetzt hab ichs 
auch verstanden!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.