Forum: FPGA, VHDL & Co. Verilog Case: In jedem Block alle Signale zuweisen


von Matthias N. (nippey)


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?

von Vanilla (Gast)


Lesenswert?

Matthias N. schrieb:
> 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.

Gegenfrage: Wer hat dich hingewiesen?

Gruss Vanilla

von Matthias N. (nippey)


Lesenswert?

Mein Betreuer, der nach eigener Aussage seit Jahren keine tiefer 
gehenden Erfahrungen mit Verilog hat ;)

von Marcus H. (mharnisch) Benutzerseite


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

von Vanilla (Gast)


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

von Matthias N. (nippey)


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
    [...]

von Duke Scarring (Gast)


Lesenswert?

Genau so.
Wenn Dein Reset aus einer asynchronen Quelle (z.B. einem Taster) stammt. 
Solltest Du ihn vor der Verwendung richtig einsynchronisieren (über 2 
FFs).

Duke

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.