Forum: FPGA, VHDL & Co. frage : testbench


von cony (Gast)


Lesenswert?

Guten Tag,

ich möchte gerne mein Testbench optimieren bzw. verständlicher machen. 
Und daher möchte ich meine eingegebene Daten(data) nicht direkt mit Hand 
eingeben (so wie ich es tue). Wie kann ich so was realisieren?

process
begin
   data <= (others => '0');
   wait for 500 ns;
   data <= (others => '1');
   wait for 20 ns;
   data <= "10101000";
   wait for 20 ns;
   data <= "01010110";
     .
     .
     .
     .
    usw
end process;

Schönen Dank im Voraus.

Viele Grüße,
cony

von SimpleSIM (Gast)


Lesenswert?

Indem du z.B. aus einer Textdatei den Stimulus einliest
(siehe TEXTIO.VHDL). Der Vorteil dabei ist auch, dass zur
Änderung der Stimulusdatei der Simulator idR nicht neu
gestartet werden muss.

von cony (Gast)


Lesenswert?

SimpleSIM schrieb:
> Indem du z.B. aus einer Textdatei den Stimulus einliest
> (siehe TEXTIO.VHDL). Der Vorteil dabei ist auch, dass zur
> Änderung der Stimulusdatei der Simulator idR nicht neu
> gestartet werden muss.

danke fürs antworten..

kannst Du mir bitte ein Beispiel zeigen?

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


Angehängte Dateien:

Lesenswert?

Eat this... ;-)

von cony (Gast)


Lesenswert?

Lothar Miller schrieb:
> Eat this... ;-)

ich wollte ganz einfach paar verschieden 8 bit daten eingeben. einfacher 
sollte es doch gehen??? ich bin neue in VHDL, daher weisse ich nicht 
alles was man bei vhdl machen kann...
ich habe eigntlich in Richtung for-loop und eine Variable oder so was 
gedacht..

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


Lesenswert?

cony schrieb:
> ich wollte ganz einfach paar verschieden 8 bit daten eingeben. einfacher
> sollte es doch gehen???
Dann lass von meinem Beispiel alles weg, was du nicht brauchst.

> ich bin neue in VHDL, daher weisse ich nicht
> alles was man bei vhdl machen kann...
Dann probiers aus, was du davonbrauchst. Ein wenig darfst du schon auch 
selber denken...

> ich habe eigntlich in Richtung for-loop und eine Variable oder so was
> gedacht..
Aber bitte nur zur Simulation.

von berndl (Gast)


Lesenswert?

Wenn du es so einfach haben willst:

Einfach ein array mit 8-bit Werten (constant) definieren und die dann in 
einer loop auf deinen Design loslassen.

Beispiel:
1
  constant size_test_type : integer := 19;
2
  type test_type is array(0 to size_test_type-1) of std_logic_vector(31 downto 0);
3
  signal test_data: test_type := (
4
      x"F_EFF_FFE_F",
5
      x"F_FFE_FFF_E",
6
.....
7
      x"0_78F_78F_5",
8
      x"0_91D_91D_6",
9
      x"C_FFF_EFF_D"
10
  );
Jetzt kannst du mit test_data(i) in einer loop einfach drauf 
zugreifen...

von berndl (Gast)


Lesenswert?

PS: Der Vektor ist bei mir als 'signal' definiert, weil ich in der 
Testbench spaeter noch mit pseudo-random Daten arbeite und den Vektor 
damit ueberschreibe...

von berndl (Gast)


Lesenswert?

cony schrieb:
> data <= "10101000";
>    wait for 20 ns;
>    data <= "01010110";
>      .

PPS: Du kannst uebrigens auch anstatt "10101000" sowas schreiben:
* b"1010_1000"
* x"A8"   -- allerdings nur bei vielfachen von 4-bit
Macht die Sache deutlich uebersichtlicher und leichter verstaendlich 
finde ich...

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.