aboutsummaryrefslogtreecommitdiffstats
path: root/tests/ecp5/fsm.v
diff options
context:
space:
mode:
authorMiodrag Milanović <mmicko@gmail.com>2019-10-18 10:54:28 +0200
committerGitHub <noreply@github.com>2019-10-18 10:54:28 +0200
commitb4d765054897f7ee388b54d907fd8ce607db2d58 (patch)
treea625838a0efbfb0176a57887c208467a7addd0a6 /tests/ecp5/fsm.v
parentb659082e4a72209af62a19668800bb6334a437d7 (diff)
parentab4899a2d02b994d79e4aa223eb743793b9a60b3 (diff)
downloadyosys-b4d765054897f7ee388b54d907fd8ce607db2d58.tar.gz
yosys-b4d765054897f7ee388b54d907fd8ce607db2d58.tar.bz2
yosys-b4d765054897f7ee388b54d907fd8ce607db2d58.zip
Merge branch 'master' into mmicko/efinix
Diffstat (limited to 'tests/ecp5/fsm.v')
-rw-r--r--tests/ecp5/fsm.v55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/ecp5/fsm.v b/tests/ecp5/fsm.v
new file mode 100644
index 000000000..368fbaace
--- /dev/null
+++ b/tests/ecp5/fsm.v
@@ -0,0 +1,55 @@
+ module fsm (
+ clock,
+ reset,
+ req_0,
+ req_1,
+ gnt_0,
+ gnt_1
+ );
+ input clock,reset,req_0,req_1;
+ output gnt_0,gnt_1;
+ wire clock,reset,req_0,req_1;
+ reg gnt_0,gnt_1;
+
+ parameter SIZE = 3 ;
+ parameter IDLE = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;
+
+ reg [SIZE-1:0] state;
+ reg [SIZE-1:0] next_state;
+
+ always @ (posedge clock)
+ begin : FSM
+ if (reset == 1'b1) begin
+ state <= #1 IDLE;
+ gnt_0 <= 0;
+ gnt_1 <= 0;
+ end else
+ case(state)
+ IDLE : if (req_0 == 1'b1) begin
+ state <= #1 GNT0;
+ gnt_0 <= 1;
+ end else if (req_1 == 1'b1) begin
+ gnt_1 <= 1;
+ state <= #1 GNT0;
+ end else begin
+ state <= #1 IDLE;
+ end
+ GNT0 : if (req_0 == 1'b1) begin
+ state <= #1 GNT0;
+ end else begin
+ gnt_0 <= 0;
+ state <= #1 IDLE;
+ end
+ GNT1 : if (req_1 == 1'b1) begin
+ state <= #1 GNT2;
+ gnt_1 <= req_0;
+ end
+ GNT2 : if (req_0 == 1'b1) begin
+ state <= #1 GNT1;
+ gnt_1 <= req_1;
+ end
+ default : state <= #1 IDLE;
+ endcase
+ end
+
+endmodule