Verilog Case: In jedem Block alle Signale zuweisen

OP #2433479
Lesenswert?
• ▲
▼
Hi,

ich benutze Verilog 2001 und wurde gerade darauf hingewiesen, dass ich 
bei einem sequentiellen Statement doch bitte in jedem case-Block alle 
Signale zuweise, auch die, die ich nicht benutze.

(Einfaches/Blödes) Beispiel:
1
reg a,b,c;
2
always @(posedge clk or negedge reset_n) begin
3
  if (!reset_n) begin
4
    a <= 0;
5
    b <= 0;
6
    c <= 0;
7
  end else begin
8
    case(bla)
9
      2'b00: a <= b;
10
      2'b01: b <= c;
11
      2'b10: c <= a;
12
      default:;
13
    endcase
14
  end
15
end

Hier soll ich jetzt jedes Mal schreiben (Beispiel anhand des ersten 
Blocks)
1
a <= b;
2
b <= b;
3
c <= c;

Wozu soll das gut sein, außer dass es den Code aufbläht?
Persönliche Seite #2433650
Lesenswert?
• ▲
▼
Matthias N. schrieb:
> ich benutze Verilog 2001 und wurde gerade darauf hingewiesen, dass ich
> bei einem sequentiellen Statement doch bitte in jedem case-Block alle
> Signale zuweise, auch die, die ich nicht benutze.

Dein Betreuer hat das vielleicht mit einem kombinatorischen block 
verwechselt. Dort dient es der Vermeidung ungewollter Latches.

--
Marcus
Gast #2433664
Lesenswert?
• ▲
▼
Marcus Harnisch schrieb:

> Dein Betreuer hat das vielleicht mit einem kombinatorischen block
> verwechselt. Dort dient es der Vermeidung ungewollter Latches.

Jepp, das ist auch meine Vermutung.
Latches in "kombinatorischen" Blocks sind gern gemachte Anfaengerfehler 
(und nicht nur von dehnen...).
Defaultzuweisungen getakteten dagegen eher im Bereich "paranoia mode on" 
zusammenzufassen... (von wenigen Ausnahmen in denen es durchaus Sinn 
macht mal ausgenommen)

Noch ein Hinweis, wenn Du keinen asynchronen Reset(s) brauchst, dann 
beschreibe auch keine.
Heutige FPGAs, Designtools sind nicht darauf getrimmt und der arglose 
Benutzer (FPGA Einsteiger) von den moeglichen Problemen schon gleich gar 
nicht...

Gruss

Vanilla
OP #2433682
Lesenswert?
• ▲
▼
Schon einmal vielen Dank!

Mit asynchronem Reset ist vermutlich folgende Zeile gemeint?
1
always @(posedge clk or negedge reset_n) begin

Also kann ich bei der heutigen Technik einfach so arbeiten
1
always @(posedge clk) begin
2
  if (!reset_n) begin
3
    a <= 0;
4
    b <= 0;
5
    c <= 0;
6
  end else begin
7
    [...]

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