Hardware Reference
In-Depth Information
8
//FSM-related declarations:
9
typedef enum logic [1:0] {A, B, C, D} state;
10
state pr_state, nx_state;
11
logic y;
12
13
//Timer-related declarations:
14
const logic [1:0] delay = 3; //any value >1
15
logic [1:0] t; //tmax≥delay-1
16
17 //Statements:----------------------------------------
18
19
//Timer (strategy #1, adapted):
20
always_ff @(posedge clk, posedge rst)
21
if (rst) t <= 0;
22
else if (pr_state!=nx_state & nx_state!=D) t <= 0;
23
else if (pr_state==nx_state & t!=delay-1) t <= t + 1;
24
25
//FSM state register:
26
always_ff @(posedge clk, posedge rst)
27
if (rst) pr_state <= A;
28
else pr_state <= nx_state;
29
30
//FSM combinational logic:
31
always_comb
32
case (pr_state)
33
A: begin
34
y <= 1'b0;
35
if (~x) nx_state <= B;
36
else nx_state <= A;
37
end
38
B: begin
39
y <= 1'b0;
40
if (x) nx_state <= C;
41
else nx_state <= B;
42
end
43
C: begin
44
y <= 1'b1;
45
if (~x & t<delay-1) nx_state <= D;
46
else if (~x & t>=delay-1) nx_state <= B;
47
else if (x & t==delay-1) nx_state <= A;
48
else nx_state <= C;
49
end
50
D: begin
51
y <= 1'b1;
52
if (x) nx_state <= C;
53
else if (~x & t>=delay-2) nx_state <= B;
54
else nx_state <= D;
55
end
56
endcase
57
58
//Optional output register:-------
59
always_ff @(posedge clk)
60
y_reg <= y;
61
62 endmodule
63 //--------------------------------------------------
Search WWH ::




Custom Search