flexibler Pseudozufallszahlengenerator! was mache ich falsch?

OP #2174095
Lesenswert?

Hallo,
Ich bin gerad dabei einen flexiblen Pseudozufallszahlengenerator zu 
entwickeln.
Ich wollte dabei flexibel die Anzahl der Schieberegister in den Stufen 
2,3,4,5,8 und 16 umschalten (mit externen Schaltern) können.

Außerdem sollte jedes XOR-Glied mittels Schalter aktiviert bzw. 
deaktiviert werden können?
Die angefügte png-Grafik gibt einen Überblick!

Ich habe dazu auch schon meinen vhdl-code + vorläufiger testbench 
geschrieben und angefügt!
Angehängte Dateien:
OP #2174104
Lesenswert?

Floh schrieb:
> Und was ist jetzt dein Problem?

Ich bekomme mit Modelsim die Simulation gar nicht zum laufen
Starte es über folgende Kommandos:

vcom pseuzufgen3.vhd
vcom pseuzufgen_tb.vhd
vsim work.rand_lfsr
add wave sim:/rand_lfsr/CLK
add wave sim:/rand_lfsr/RESET
add wave sim:/rand_lfsr/XOR_EN
add wave sim:/rand_lfsr/REG_LENGTH
add wave sim:/rand_lfsr/Q
add wave sim:/rand_lfsr/B_COUNT_OUT
run 500000 ms

es wird nicht einmal der CLK angezeigt... alle Signale bleiben bei 0
und B_COUNT_OUT hat immer den Wert "U"


Dann habe es mal mit isim, das beim ISE mit dabei ist, probiert

und dort ähnliche Problem gehabt --> B_COUNT_OUT hat zumindest zu Anfang 
immer den Wer "U" etc. siehe angefügtes Bild
Angehängte Dateien:
OP #2174384
Lesenswert?

So ich habe jetzt mal einen etwas anderen Ansatz verfolgt:
siehe Anhang

leider gibt er bei der Synthese noch zwei Fehlermeldungen aus, die ich 
hier schon gepostet habe!


ERROR:HDLParsers:3236 - "F:/VHDL/VHDL_Codes/neues/pseuzufgen.vhd" Line 
114. Can not determine the "others" values in aggregate. (LRM 7.3.2.2)
ERROR:HDLParsers:3236 - "F:/VHDL/VHDL_Codes/neues/pseuzufgen.vhd" Line 
58. Can not determine the "others" values in aggregate. (LRM 7.3.2.2)

zu

if QINT(NUMBER_OF_REGS downto 0) = (others => '0') then

und

if QINT(NUMBER_OF_REGS downto 0) = (others => '1') then


ich wollte dort eigentlich nur fragen, ob denn alle Elemente der 
aktuellen
Länge 0 bzw. 1 sind?
wie würde das denn gehen?
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #2175067
Lesenswert?

LongClock schrieb:
>>  CLK <= not CLK after 500000 ns;
> ein bischen sehr lang?
Passt schon zusammen mit diesen Zeiten:
1
       RESET <= '0', '1' after 500 ms, '1' after 440000 ms, '0' after 450000 ms; -- Der Reset basiert auf "negativer Logik"
Nur hätte ich da nicht in ms gerechnet, sondern in s oder min...

>>  CLK <= not CLK after 500000 ns;
> ein bischen sehr lang?
Ich hätte das dann wenigstens mit 500us geschrieben...
Moderator (Firma: Titel) Persönliche Seite #2175387
Lesenswert?

> use IEEE.NUMERIC_STD.ALL;
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
Warum denn immer?  :-/
Seis drum...

Warum machst du so einen unnötigen Aufwand?
Ich würde da einfach ein 64-Bit LFSR machen, dann hätte ich immmer 
brauchbare Zufallszahlen, die sich nicht andauernd wiederholen.
Denn genau das macht z.B. ein 8 Bit LFSR: die Zahlen 1..255 (weil ja 0 
nicht auftreten kann) wiederholen sich laufend. Das ist also nur ein 
etwas wirrer 8 Bit (minus 1) Zähler... :-o

Sieh dir das an:
http://www.lothar-miller.de/s9y/categories/38-LFSR
Das 8-Bit-SR wiederholt sich zweieinhalb mal... :-(
Und noch weniger Bits dürften schlicht sinnlos sein...
Gast #2175622
Lesenswert?

Eigentlich ist die Idee mit den flexiblen LFSRs nicht schlecht
(und alt).

Bei LFSRs nimmt man aber als Zufallswert nicht den inneren
Zustand (d.h. die einzelnen Bits als Vektor), sondern die
ausgeworfenen Bits. Die haben ja nach Länge des LFSR und des
char. Polynoms eine Länge nahe bei 2^n. Mehrere Bits als
Vektor hintereinandergefasst bilden also fur n>>8 eine
Gleichverteilung 0..255 (bei 8-Bit Zufallszahlen). Für n>=24
hab ich's selber mal für 8Bit-Zufallswerte ausprobiert, ein
Histogramm nähert sich über die Zeit einer Gleichverteilung.

Die ausgeworfenen Bits mehrerer verschiedener LFSRs kann man
auch zu Zufallszahlen zusammenfassen (dann sind die einzelnen
Bits nicht "so" korreliert.
Moderator (Firma: Titel) Persönliche Seite #2175676
Lesenswert?

Es geht nicht darum, dass das Ergebnis nicht gleichverteilt wäre. Es 
wiederholt sich bei kurzen Wortlängen nur wesentlich zu früh, als dass 
es sinnvoll einsetzbar wäre...

> Die ausgeworfenen Bits mehrerer verschiedener LFSRs kann man
> auch zu Zufallszahlen zusammenfassen (dann sind die einzelnen
> Bits nicht "so" korreliert.
Das ist doch nichts anderes, als wenn du die Wortlänge vergrößerst...
Moderator (Firma: Titel) Persönliche Seite #2175826
Lesenswert?

Hex Oschi schrieb:
> Die Gezeigte ist nicht aequivalent zu dieser hier
Allerdings ist eine Aussage auf dieser Seite auch falsch:
1
Noteworthy properties of the LFSR with the length N bits are
2
 :
3
   - the maximum number of identical subsequent bits (0 or 1) is N 
4
 :
Diese Aussage stimmt nur für die 1-en.
Von den 0-en können maximal N-1 hintereinander auftauchen,
weil niemals alle Bits im Schieberegister 0 sein können.
Gast #2175894
Lesenswert?

Hex Oschi schrieb:
>Mir scheint die Struktur falsch zu sein. Die Gezeigte ist nicht
>aequivalent zu dieser hier :
>..
wie mittels LFSRs Zufallszahlen generiert werden, ist ja niergends
einheitlich definiert. Auf Wikipedia z.B. sind verschiedene
Rückkopplungen aufgezeigt.

Lothar Miller schrieb:
>Es geht nicht darum, dass das Ergebnis nicht gleichverteilt wäre. Es
>wiederholt sich bei kurzen Wortlängen nur wesentlich zu früh, als dass
>es sinnvoll einsetzbar wäre...
wenn die Zufallszahl ein Teil der Bitsequenz des LFSRs ist, dann ist
iA die Folge nicht gleichverteilt: Es fehlt immer die 0 und je nach
char. Polynom fehlen noch andere Werte (z.B. wenn das Polynom Grad
< n hat oder reduzible ist oder...). Ausserdem werden so Bits in
die Zufallszahl übernommen, die per LFSR nochmal in den inneren
Zustand einfliessen (d.h. evtl. die Korrelation zwischen Bits
vergrössern). Auf Uralt-Computer wurde so aus einem nochbrauchbaren
ein schlechter Zufallsalgorithmus erzeugt. Kombiniert man aber die
Bits mehrerer LFSRs mit unterschiedlichen char. Polynomen, dann
erhält man idR wesentlich unkorreliertere Bitfolgen.

Und bei n>=24 erhält man z.B. für 8Bit-Zufallswerte => VGA ein
"optisch gutes" Rauschen (bei 800x600 erkenne ich kein Muster mehr).
Richtig guten Zufall kann ein LFSR-Zufallgenerator aber nicht erzeugen.
Da ist mein Favorit MersennePrimer.
Gast #2176416
Lesenswert?

>Fuer kleine N durchlaufen lassen. Es fehlt nur die Null, sonst nichts.

Ja klar, ab wie stellst du bei größeren Schieberegister-Varianten fest, 
ob die Rückkopplungen so gewählt wurden, dass der ganze Adressbereich 
genutzt wird?

Gruß, John

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren