-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathp150.sv
33 lines (30 loc) · 825 Bytes
/
p150.sv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
module top_module (
input clk,
input resetn, // active-low synchronous reset
input [3:1] r, // request
output [3:1] g // grant
);
enum {A, B, C, D} state;
always @(posedge clk) begin
if (!resetn)
state <= A;
else begin
case (state)
A : begin
if (r[1])
state <= B;
else if (r[2])
state <= C;
else if (r[3])
state <= D;
end
B : state <= r[1] ? B : A;
C : state <= r[2]? C : A;
D : state <= r[3] ? D : A;
endcase
end
end
assign g[1] = state == B;
assign g[2] = state == C;
assign g[3] = state == D;
endmodule