Ich will in einer Testbench mit einem Zufallsgenerator die Resetlänge
variieren.
Eine Funktion random habe ich nicht gefunden. Dafür die Funktion
uniform(..,..,..). Diese nicht so toll, weil sie drei Übergabeparameter
hat. Zwei davon haben sich mir noch nicht erschlossen. Der dritte ist
der Zufallswert. Um nicht so viele Variablen in der Testbench zu
deklarieren, habe ich mir die Funktion Random geschrieben.
1 |
|
2 | function random return real;
|
3 |
|
4 | end; -- package mlite_pack
|
5 |
|
6 |
|
7 | package body mlite_pack is
|
8 |
|
9 | function random return real is
|
10 | variable seed1,seed2 :positive;
|
11 | variable rand:real;
|
12 | begin
|
13 | -- uniform(seed1,seed2,rand);
|
14 | -- return rand;
|
15 | return 10.0;
|
16 | end;
|
Die Einbindung in die Testbench erfolgt in dem process
1 | reset_p :process
|
2 | variable seed1,seed2: positive;
|
3 | variable rand: real;
|
4 | begin
|
5 | wait for 20 ns;
|
6 | reset<='1';
|
7 |
|
8 | wait for rand * 0.5 us;
|
9 | reset<='0';
|
10 |
|
11 | wait;
|
12 | end process;
|
Jetzt bekomme ich in GHDL folgende Fehlermeldung:
work.mlite_pack [package]
./tb_inst_fetch:error: negative timeout clause
./tb_inst_fetch:error: simulation failed
ghdl: compilation error
make: *** [inst_fetch] Error 1
Die Fehlermeldung bekomme ich auch, wenn ich einen statischen Wert, wie
oben festgelegt mit 10.0 habe. Der ist positiv. real hat zwar einen
Wertebereich der negativ sein kann.
Ich habe zwei Fragen,
1. Was ist falsch?
2. Wer kennt einen Code für die Generierung Signalen, der auch
Variationen/Strörungen beinhalt?