本文主要是介绍根据状态转移写状态机-二段式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
描述
输入描述:
输出描述:
描述
题目描述:
如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。
要求:
1、 必须使用对应类型的状态机
2、 使用二段式描述方法
注意rst为低电平复位
信号示意图:
波形示意图:
激励描述如下:
输入描述:
输入信号 clk rst data
类型 wire
输出描述:
输出信号 flag
类型 reg
参考代码
`timescale 1ns/1nsmodule fsm2(input wire clk ,input wire rst ,input wire data ,output reg flag
);parameter S0 = 'd0, S1 = 'd1, S2 = 'd2, S3 = 'd3 ,S4 = 'd4 ;reg [2:0] current_state;reg [2:0] next_state;always@(posedge clk or negedge rst)beginif(rst == 1'b0)begincurrent_state <= S0;endelse begincurrent_state <= next_state;endend always@(*)begincase(current_state)S0:beginnext_state = data ? S1 : S0;flag = 1'b0; endS1:beginnext_state = data ? S2 : S1;flag = 1'b0;endS2:beginnext_state = data ? S3 : S2;flag = 1'b0;endS3:beginnext_state = data ? S4 : S3;flag = 1'b0;endS4:beginnext_state = data ? S1 : S0;flag = 1'b1;enddefault:begin next_state = S0;flag = 1'b0; endendcaseendendmodule
这篇关于根据状态转移写状态机-二段式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!