描述
题目描述:
如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。
要求:
1、 必须使用对应类型的状态机
2、 使用二段式描述方法
注意rst为低电平复位
信号示意图:
波形示意图:
激励描述如下:
输入描述:
输入信号 clk rst data
类型 wire
输出描述:
输出信号 flag
类型 reg
代码段
`timescale 1ns/1ns
//题目类型为两段式状态机,Moore类型
module fsm2(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
//独热码定义5种不同的状态
localparam S0 = 5'b00001,
S1 = 5'b00010,
S2 = 5'b00100,
S3 = 5'b01000,
S4 = 5'b10000;
//reg define 定义初始状态和次态
reg [4:0] cur_state ;
reg [4:0] next_state ;
//*************code***********//
//***************************根据同步时序描述状态转移
always @(posedge clk or negedge rst) begin
if (!rst) begin
cur_state <= S0 ; //初始化状态是S0
end
else begin
cur_state <= next_state ; //然后描述状态转移
end
end
//****************************组合逻辑判断状态转移条件,并且描述状态转移结果并且进行输出
always @ (*) begin
case (cur_state )
S0 : begin
flag <= 1'b0 ;
if (data) begin
next_state <= S1;
end
else begin
next_state <= S0 ;
end
end
S1 : begin
flag <= 1'b0 ;
if (data) begin
next_state <= S2;
end
else begin
next_state <= S1 ;
end
end
S2 : begin
flag <= 1'b0 ;
if (data) begin
next_state <= S3;
end
else begin
next_state <= S2 ;
end
end
S3 : begin
flag <= 1'b0 ;
if (data) begin
next_state <= S4;
end
else begin
next_state <= S3 ;
end
end
S4 : begin
flag <= 1'b1 ;
if (data) begin
next_state <= S1;
end
else begin
next_state <= S0 ;
end
end
default : begin
flag <= 1'b0 ;
if (data) begin
next_state <= S1;
end
else begin
next_state <= S0 ;
end
end
endcase
end
endmodule
3解题心得
解题思路: 我先观察s4的状态转换,首先我们可以看出s4的状态转换对应两个状态,当输入1或者输入0的时候对应这不同的结果输出,所以看出输出与输入信号并没有直接的关系,只和当前的状态有关,所以应该设计一个Moore类型的状态机来进行状态转换。题目要求我们用两段式状态机来描述逻辑,第一段应该用时序逻辑电路用来描述状态转移,第二段用组合逻辑电路设计用于判断逻辑转移条件,并且描述状态转移的结果,并且进行结果输出;同时采用独热码设计让设计层次更加简单明了;