赞
踩
(1)状态机简写为FSM(Finite State Machine),也称为同步有限状态机。同步是指状态的变化都是在时钟的边沿发送变化,有限值得是状态的个数是可数的。
(2)分类:Moore型状态机(摩尔型)、Mealy型状态机(米利型)
(3)在FPGA低速系统中,如果状态机的状态个数小于四个,可以用二进制码;如果个数大于4个小于24个,推荐使用独热码,如果个数大于24个,推荐使用格雷码。在FPGA高速系统中,一律推荐独热码。
(4)
(1)Visio视图:
(2)Verilog代码:
- module fsm_cola(clk,reset_n,pi_money,po_cola);
-
- input clk;
- input reset_n;
- input pi_money;
-
- output reg po_cola;
-
- reg[2:0] state;
-
- parameter IDLE = 3'b001;
- parameter ONE = 3'b010;
- parameter TWO = 3'b100;
-
- //状态跳转设计:
- always@(posedge clk or negedge reset_n)
- if(!reset_n)
- state <= IDLE;
- else begin
- case(state)
- IDLE: begin
- if(pi_money)
- state <= ONE;
- else
- state <= state;
- end
-
- ONE: begin
- if(pi_money)
- state <= TWO;
- else
- state <= state;
- end
- TWO: begin
- if(pi_money)
- state <= IDLE;
- else
- state <= state;
- end
-
- default:begin
- state <= IDLE;
- end
- endcase
- end
- //输出信号设计
- always@(posedge clk or negedge reset_n)
- if(!reset_n)
- po_cola <= 1'd0;
- else if((state == TWO) && (pi_money))
- po_cola <= 1'd1;
- else
- po_cola <= 1'd0;
-
- endmodule
(3)仿真文件代码:
- `timescale 1ns / 1ps
-
- module fsm_cola_tb;
-
- reg clk;
- reg reset_n;
- reg pi_money;
-
- wire po_cola;
-
- fsm_cola fsm_cola_inst(
- .clk(clk),
- .reset_n(reset_n),
- .pi_money(pi_money),
- .po_cola(po_cola)
- );
-
- initial clk = 1'd1;
- always #10 clk = ~clk;
-
- initial begin
- reset_n <= 1'd0;
- pi_money <= 1'd0;
- #15;
- reset_n <= 1'd1;
- #1500;
- $stop;
- end
-
- always #200 pi_money <= ~ pi_money;
-
- endmodule
(4)仿真波形:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。