Woher kommt X / wie vermeiden in dieser Verilog Counter TB ?

OP (Firma: na) #6383228
Lesenswert?
• ▲
▼
Hi,

ich verstehe nicht genau woher das X in dieser einfacher Counter TB 
kommt?
Welche Optionen zum Debuggen gibt es?

Vielen Dank

TB
1
`timescale 1 ns / 1 ps
2
module top_counter;
3

4
  reg clk;
5

6
  parameter N_cycles = 20;
7
  parameter pulse_width = 5;
8
  integer j;
9

10
  initial begin
11
    $dumpfile("waves.vcd");
12
    $dumpvars();
13

14
  end
15

16
  initial begin
17
   clk <= 0;
18
   for (j=0; j<N_cycles; j = j + 1)
19
      #pulse_width clk <= ~clk;
20
  end
21

22
  reg counter_rstn_tb;
23
  reg counter_en_tb;
24
  wire [1:0] counter_n_tb;
25

26
  counter #( .N(2)) u0(
27
     .clk(clk),
28
     .rstn(counter_rstn_tb),
29
     .en(counter_en_tb),
30
     .out(counter_n_tb)
31
  );
32

33
 initial begin
34
     counter_en_tb <= 0;
35
     counter_rstn_tb <= 0;
36
     #4 counter_rstn_tb <= 1;
37
     #8 counter_en_tb <= 0;
38
     #10 counter_en_tb <= 1;
39
     #20 counter_en_tb <= 1;
40
  end 
41

42
endmodule



Counter
1
// https://www.chipverify.com/verilog/verilog-parameters
2
module counter
3

4
  #(    parameter N = 2,
5
                parameter DOWN = 0)
6

7
  ( input     clk,
8
    input     rstn,
9
    input     en,
10
    output  reg [N-1:0] out);
11

12
  always @ (posedge clk) begin
13
    if (!rstn) begin
14
      out <= 0;
15
    end else begin
16
      if (en)
17
        if (DOWN)
18
          out <= out - 1;
19
        else
20
          out <= out + 1;
21
      else
22
         out <= out;
23
    end
24
  end
25
endmodule
Angehängte Dateien:
Gast #6383265
Lesenswert?
• ▲
▼
Hallo,
kenn kein verilog. Deswegen nur eine Vermutung:

Dein Reset ist low aktiv und wird synchron zur steigenden Flanke von clk 
gesampled. Im Timingdiagramm sieht es so aus, als würde der Counter nie 
einen reset Puls bekommen, da der Reset auf high geht, bevor die erste 
Flanke kommt. Spricht dein Counter bleibt uninitialisiert und es 
passiert Mist.
Moderator (Firma: Titel) Persönliche Seite #6383607
Lesenswert?
• ▲
▼
DDR3 schrieb:
> VHDL-Wissen
Hilft bei Verilog nur begrenzt (siehe dort Seite 4: 
https://cseweb.ucsd.edu/classes/sp11/cse141L/pdf/01/SV_Part_1.pdf)

> Von meinem VHDL-Wissen her würde ich ein "U" erwarten in diesem Fall.
> Ein X entsteht doch wenn von verschiedenen Quellen getrieben wird, oder?
Und 'U' gibts bei VHDL auch nur beim Datentyp std_logic und abgeleiteten 
Versionen (oder Datentypen, wo eben ein 'U' definiert wird.. ;-).
Was bei einem Konflikt aus einem Signal wird, das steht in der passenden 
"Resolution Table". Wenn bei VHDL z.B. zwei Quellen eine '1' treiben, 
dann kommt trotzdem eine '1' heraus.
Moderator (Firma: Titel) Persönliche Seite #6384095
Lesenswert?
• ▲
▼
Patrick M. schrieb:
> D.h. fuer synchrone Designs addieren wir ein #pulse_width delay
Das ist jetzt in erster Linie nur für den Simulator. Dort muss für 
synchrone Designs natürlich während der aktiven (steigenden) Taktflanke 
der Reset ebenfalls aktiv (low) sein, damit er sich auswirkt.
Kurz gesagt: der synchrone Reset muss einfach mindestens 1 Taktzyklus 
lang aktiv sein. Er kann aber auch 5 oder 10 oder 100 oder 1000 Takte 
aktiv sein. So lange läuft dann das Design halt nicht los.

Für den Synthesizer bzw. die Umsetzung in Hardware ist allerdings allein 
das Hinzufügen oder Weglassen des "negedge reset" in der Sensitivliste 
zuständig dafür, ob das Design auf dem FPGA mit einem asynchronen oder 
synchronen Reset umgesetzt wird.
Was NÖTIG oder BESSER ist, das findest du im Datenblatt zu den 
Logikblöcken deines speziellen FPGAs.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.