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;
|