状态机模型是FPGA设计三大支柱之一,明德扬把计数器设计,状态机设计和FIFO设计并称FPGA设计三大支柱。采用三段式设计的状态机具有结构清晰,逻辑清楚易于实现等特点,这也是明德扬推荐的设计方法。在照例抄写了一段状态机代码后,自己写了仿真的代码,国际惯例上代码:
//自动转换量程频率控制器
/*信号定义:
clk: 输入时钟
clr: 为整个频率计的异步复位信号
rst: 用来在量程转换开始时复位计数器
std_f_sel: 用来选择标准时基
cntover: 代表超量程
cntlow: 代表欠量程
状态A,B,C,D,E,F,采用一位热码编码
*/
module control(std_f_sel, rst, clk, clr, cntover, cntlow);
input clk, clr, cntover, cntlow;
output[1:0] std_f_sel;
output rst;
reg[1:0] std_f_sel;
reg rst;
reg[5:0] present, next; //用于保存当前状态和次态的中间变量
parameter start_f100k = 6'b000001, //状态A编码,采用1位热码
f100k_cnt = 6'b000010, //状态B
start_f10k = 6'b000100, //状态C
f10k_cnt = 6'b001000, //状态D
start_f1k = 6'b010000, //状态E
f1k_cnt = 6'b100000; //状态F
always @(posedge clk or posedge clr)
begin
if(clr)
present = start_f10k; //start_f10k