Forum: FPGA, VHDL & Co. verolog: vergleich auf alle 1


von Daniel (root) (Gast)


Lesenswert?

Hallo,

Wenn die Bitbreite variirt dann macht man es in VHDL zb
1
if sig = (sig'range => '1') then
2
    --
3
end if;

Wie kann ich es in Verilog machen?
1
    parameter WIDTH = 8;
2
    reg [WIDTH-1:0] sig;
3
4
    // in sequentual block
5
    if(sig == ~0) begin
6
        //
7
    end

~ ist Bitweise Negation.
! ist logische Negation.

Also dachte ich ~0 wird soviele 1 erzeugen wieviel der andere
Operand benötigt .. scheint aber nicht so zu sein, denn
in der Simulation mit Modelsim wird der in if-statement
anvisierte Zustandsübergang nicht gemacht.

Vollständigkeithalber folgt der Testcode
1
  localparam idle = 3'b000;
2
  localparam start = 3'b001;
3
  localparam work1 = 3'b010;
4
  localparam work2 = 3'b011;
5
  localparam stop = 3'b100;
6
  reg [2:0] state = idle;
7
  
8
  reg [2:0] cnt = 0;
9
  
10
  always @(posedge clk) begin
11
    case(state)
12
      idle : begin
13
        if(x)
14
          state <= start;
15
      end
16
      start : begin
17
        if(y)
18
          state <= work1;
19
      end
20
      work1 : begin
21
        if(z)
22
          cnt <= cnt + 1;
23
        if(cnt == 7) begin
24
          cnt <= 0;
25
          state <= work2;
26
        end
27
      end
28
      work2: begin
29
        if(z)
30
          cnt <= cnt + 1;
31
        if(cnt == ~0) begin
32
          cnt <= 0;
33
          state <= stop;
34
        end
35
      end
36
      stop : begin
37
        state <= idle;
38
      end
39
    endcase
40
  end
41
  
42
  assign a = (state == start) ? 1'b1 : 1'b0;
43
  assign b = (state == work1 || state == work2) ? 1'b1 : 1'b0;
44
  assign c = (state == stop) ? 1 : 0;

von bko (Gast)


Lesenswert?

z.B. so:

[verilog]
if(sig == {8{1'b1}} ) begin
[/verilog]

irgendwie werden meine geschweiften Klammern in der Vorschau
eckig, also nochmal so dargestellt:

von Uwe Bonnes (Gast)


Lesenswert?

Z.b. mit bitweisen UND
[verilog]
if (&sig)
[/verilog]

von Daniel (root) (Gast)


Lesenswert?

Danke, werde direkt ausprobieren ;-)

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.