根据状态转移写状态机-三段式
题目描述
如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。
要求:
1、 必须使用对应类型的状态机
2、 使用三段式描述方法,输出判断要求要用到对现态的判断
注意rst为低电平复位
信号示意图
`timescale 1ns/1nsmodule fsm1(input wire clk ,input wire rst ,input wire data ,output reg flag
);
//*************code***********//parameter s0 = 4'b0001;parameter s1 = 4'b0010;parameter s2 = 4'b0100;parameter s3 = 4'b1000;reg[3:0] c_state,n_state;always@(posedge clk or negedge rst)beginif(!rst)c_state <= s0;elsec_state <= n_state;endalways@(*)begincase(c_state)s0:beginif(data == 1'b1)n_state = s1;elsen_state = s0;ends1:beginif(data == 1'b1)n_state = s2;elsen_state = s1;ends2:beginif(data == 1'b1)n_state = s3;elsen_state = s2;ends3:beginif(data == 1'b1)n_state = s0;elsen_state = s3;enddefault:n_state = s0;endcaseendalways@(posedge clk or negedge rst)beginif(!rst)flag <= 1'b0;else if(c_state == s3 && data == 1'b1)flag <= 1'b1;elseflag <= 1'b0;end
//*************code***********//
endmodule