「Verilog学习笔记」根据状态转移写状态机-三段式

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

状态机可以分为Moore状态机和Mealy状态机。

  • Moore状态机:输出只由当前状态决定
  • Mealy状态机:输出由当前状态和当前的输入共同决定。

三段式状态机是指当前状态切换、次态切换和输出更新 分别由不同的块控制。

本题是一个Mealy状态机。在所有状态下,

当输入data==0时,次态不变;

当输入data==1时,次态顺序切换。

复制代码
`timescale 1ns/1ns

module fsm1(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
//*************code***********//
	parameter S0 = 0, S1 = 1, S2 = 2, S3 = 3 ; 
	reg [1:0] state, nstate ; 

	// 当前状态切换
	always @ (posedge clk or negedge rst) begin 
		if (~rst) state <= S0 ; 
		else state <= nstate ; 
	end

	// 次态切换
	always @ (*) begin 
		if (~rst) nstate <= S0 ; 
		else
			case (state) 
				S0 : nstate = data ? S1 : S0 ; 
				S1 : nstate = data ? S2 : S1 ;
				S2 : nstate = data ? S3 : S2 ; 
				S3 : nstate = data ? S0 : S3 ; 
				default : nstate = S0 ; 
			endcase
	end

	// 输出更新
	always @ (posedge clk or negedge rst) begin 
		if (~rst) flag <= 0 ; 
		else 
			case (state) 
				S0 : flag <= 0 ; 
				S1 : flag <= 0 ; 
				S2 : flag <= 0 ; 
				S3 : flag <= data ; 
				default : flag <= 0 ; 
			endcase
	end

//*************code***********//
endmodule
相关推荐
华清远见成都中心16 分钟前
分享一个驱动开发工程师学习路线图
驱动开发·学习
im_AMBER33 分钟前
React 18
前端·javascript·笔记·学习·react.js·前端框架
yun68539921 小时前
读书之反思系统架构设计原则_个人笔记
笔记
d111111111d3 小时前
STM32中为什么会有APB1和APB2两个外设有什么区别
笔记·stm32·单片机·嵌入式硬件·学习
ThreeYear_s3 小时前
【FPGA+DSP系列】——CCS联合proteus仿真DSP工程,以TMS320f28027芯片为例,LED闪烁仿真。
单片机·fpga开发·proteus
化作星辰3 小时前
深度学习_神经网络中最常用的学习率优化算法
深度学习·神经网络·学习
71-34 小时前
C语言练习题——判断水仙花数(0-100000)
c语言·笔记·学习
FAREWELL000754 小时前
Lua学习记录(3) --- Lua中的复杂数据类型_table
开发语言·学习·lua
Broken Arrows4 小时前
排查网络问题的一些工具的作用和常用使用方法
linux·网络·学习
摇滚侠4 小时前
GIT版本管理工具轻松入门 | TortoiseGit,Git 介绍软件安装配置,笔记01
笔记·git