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


von Erdin (Gast)


Lesenswert?

Morgen!

In Verilog gibt es ja mit
1
 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 =)!

von Erdin (Gast)


Lesenswert?

Sorry für Doppelpost, aber ich habs jetzt mal so gemacht:
1
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? =)

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


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:
1
   output <= valueA when reset ='0' else ValueB;
2
-- oder
3
   output <= value when reset ='0' else '0';

von Erdin (Gast)


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:
1
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?

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


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?

von Erdin (Gast)


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.

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


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"

von Erdin (Gast)


Lesenswert?

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

von Erdin (Gast)


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?

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


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/articles/m_sequence_linear_feedback_shift_register_lfsr.htm
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

von Erdin (Gast)


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 =) !

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


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...

von berndl (Gast)


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)

von Erdin (Gast)


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!

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.