Forum: FPGA, VHDL & Co. Warum läuft die Simulation nicht?


von Student (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Von vornherein es ist ist mein zweiter VHDL Versuch. Wenn ich die 
Schaltung in ISIM simulieren will kommt gar nicht raus. Was mache ich 
falsch?

Danke im Voraus

von P. K. (pek)


Lesenswert?

Weiss nicht, ob das mit dem concurrent statement für den Clock im 
Testbench geht. Ich generier sie jeweils so:
1
  clk_osc : process
2
3
    procedure clk is
4
    begin
5
      SysxC <= '0' after (0.25*clk_cycle);
6
      wait for 0.5 * clk_cycle;
7
      SysxC <= '1' after (0.25*clk_cycle);
8
      wait for 0.5 * clk_cycle;
9
    end clk;
10
11
  begin
12
    while true loop
13
      clk;
14
    end loop;
15
  end process clk_osc;

Auf jeden fall sollten mal mindestenst die Inputs sinnvolle Werte haben.

von Student (Gast)


Lesenswert?

1
-- Clock period definitions
2
   constant clk_period : time := 10 ns;
3
 
4
BEGIN
5
 
6
  -- Instantiate the Unit Under Test (UUT)
7
   uut: FULL_PWM PORT MAP (
8
          clk => clk,
9
          pwmvalue_up => pwmvalue_up,
10
          pwmvalue_down => pwmvalue_down,
11
          pwmout => pwmout
12
        );
13
14
   -- Clock process definitions
15
   clk_process :process
16
   begin
17
    clk <= '0';
18
    wait for clk_period/2;
19
    clk <= '1';
20
    wait for clk_period/2;
21
   end process; 
22
  
23
  
24
 
25
26
   -- Stimulus process
27
   stim_proc: process
28
   begin    
29
      -- hold reset state for 100 ns.
30
      wait for 100 ns;  
31
32
      wait for clk_period*10;
33
34
      -- insert stimulus here 
35
36
      wait;
37
   end process;

Habe auch Standardroutine die vom Xilinx selbst generiert wurde 
probiert, hat es aber nicht gebracht.
HILFE

von Tschaebe (Gast)


Angehängte Dateien:

Lesenswert?

Hm, kann es sein, dass du nur deinen FULL_PWM.vhd simulierst und nicht 
die Testbench?

Bei mir sieht die Simulation wie erwartet aus (siehe Anhang).

Die PWM-Register sind übrigens undefiniert, bis der Counter zum ersten 
Mal auf 254 läuft (wird auch als Warnung in Isim ausgegeben).

Gruss,
Tschaebe

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


Lesenswert?

Ich tippe auch auf einen falsch gesetzten Toplevel-Eintrag: du 
simulierst das PWM-Modul, nicht die Testbench....  :-o

von Student (Gast)


Lesenswert?

Danke ich probiere ma donnerstag

von Student (Gast)


Lesenswert?

>>Lothar Miller

Es war wirklich so. Danke.

Eine Frage hätte ich trotzdem: mach es Sinn in dem Fall Signal zu 
benützen? Wäre Variable nicht bessere Alternative?

von Georg A. (georga)


Lesenswert?

> mach es Sinn in dem Fall Signal zu benützen?

Bei was?

> Wäre Variable nicht bessere Alternative?

Grundregel für Anfänger: Finger weg von Variablen. So ziemlich jede 
Nutzung von Variablen von Anfängern beruht auf falschen Annahmen bis zu 
totalem Unverständnis des Unterschieds Signal/Variable.

von Student (Gast)


Lesenswert?

>>Georg
1
signal pwm_reg_up : STD_LOGIC_VECTOR (7 downto 0);  --Temporärer Wert für den 1 Zahler
2
signal pwm_reg_down : STD_LOGIC_VECTOR (7 downto 0); --Temporärer Wert für den 2 Zahler
3
signal cnt : integer range 0 to 254 := 0; --Counter


ich meine es macht keinen Unterschied ob ich Signale oder Variable 
verwende. Oder liege da falsch?

von Georg A. (georga)


Lesenswert?

So im schnellen Codeüberflug würde es vermutlich einen 
(Timing-)Unterschied machen. Also Finger weg.

von berndl (Gast)


Lesenswert?

Student schrieb:
1
signal pwm_reg_up : STD_LOGIC_VECTOR (7 downto 0);  --Temporärer Wert für den 1 Zahler
2
signal pwm_reg_down : STD_LOGIC_VECTOR (7 downto 0); --Temporärer Wert für den 2 Zahler
3
signal cnt : integer range 0 to 254 := 0; --Counter
> ich meine es macht keinen Unterschied ob ich Signale oder Variable
> verwende. Oder liege da falsch?

frage an Radio Eriwan...

Wenn du ein als 'signal' deklariertes Signal mit einem 'concurrent' 
statement beschreibst, dann hast du halt ein Stueck Draht, das aus einem 
fliegenden Logikteil rauskommt. Wenn du es in einem getakteten Prozess 
verwendest,dann ist es der Ausgang eines FlipFlops. Bei concurrent 
also der D-Eingang eines FFs, bei process also der Q-Ausgang eines FFs. 
Und ein process ohne Takt, also nur mit Input-Parametern, ist nix 
anderes als ein concurrent statement, macht genau das gleiche...

Eine Variable kannst du nur im 'process' definieren (von dem Unsinn mit 
shared variables mal abgesehen). Sie beschreibt einen Eingang eines 
FFs. Das kann auch in ein FF muenden, aber Vorsicht, die Reihenfolge der 
Zuweisungen spielt hier eine Rolle. Die Zuweisung an eine variable wird 
sofort wirksam, nicht erst wenn du das naechste Mal den process 
durchlauefst. Variablen sind, wenn sie nicht nur ausschliesslich als 
Zwischenwert an genau einer Stelle verwendet werden, ziemlich tueckisch. 
Und genau deshalb braucht man sie in >90% aller Faelle nicht!

Lothar hat auf seiner Seite ein paar Beispiele die sehr lehrreich sind. 
Und da kann man sich noch weitere Gemeinheiten basteln...

Also mein Rat: Vergiss 'variable'! Ich verwende die nur, wenn ich damit 
einen Ausdruck zusammen fassen kann und mir dafuer Tipparbeit spare. Und 
ich verwende sie nie als Speicherelement (aka FF). Und sogar in diesen 
paar Faellen koennte ich sie mit einem 'signal' sowie einer 'concurrent' 
Zuweisung ersetzen...

von berndl (Gast)


Lesenswert?

PS: Variablen verwende ich exzessiv in Testbenches. Aber das ist etwas 
ganz anderes...

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


Lesenswert?

Ich verweise gern auf den Beitrag "Variable vs Signal"

Fazit: wenn schon Variablen, dann nur für temporäre Ergebnisse, 
niemals speichernd!

von berndl (Gast)


Lesenswert?

Lothar Miller schrieb:
> wenn schon Variablen, dann nur für temporäre Ergebnisse

ich gehe da noch weiter: Wenn schon, dann fuer genau ein temporaeres 
Ergebniss!

von Student (Gast)


Lesenswert?

>>berndl, Lothar Miller
Leute, danke für so eine ausführliche Erklährung.

von Hans (Gast)


Lesenswert?

berndl schrieb:
> PS: Variablen verwende ich exzessiv in Testbenches. Aber das ist etwas
>
> ganz anderes...

Variablen verwende ich nur zum zwischenzeitlichen Zusammenfassen von 
Signalen, wenn die Formulierung mit einer Zeile nicht funktioniert.

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.