diff options
author | Miodrag Milanović <mmicko@gmail.com> | 2019-10-18 10:54:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-18 10:54:28 +0200 |
commit | b4d765054897f7ee388b54d907fd8ce607db2d58 (patch) | |
tree | a625838a0efbfb0176a57887c208467a7addd0a6 /tests/ecp5/fsm.v | |
parent | b659082e4a72209af62a19668800bb6334a437d7 (diff) | |
parent | ab4899a2d02b994d79e4aa223eb743793b9a60b3 (diff) | |
download | yosys-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.v | 55 |
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
|