「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
相关推荐
AomanHao4 小时前
【阅读笔记】沙尘图像线性颜色校正A fusion-based enhancing approach for single sandstorm image
图像处理·笔记·isp·图像增强·沙尘图像·色偏·颜色校正
宇木灵6 小时前
C语言基础-十、文件操作
c语言·开发语言·学习
枷锁—sha6 小时前
【pwn系列】Pwndbg 汇编调试实操教程
网络·汇编·笔记·安全·网络安全
山岚的运维笔记7 小时前
SQL Server笔记 -- 第73章:排序/对行进行排序
数据库·笔记·后端·sql·microsoft·sqlserver
QQ24391979 小时前
语言在线考试与学习交流网页平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·spring boot·sql·学习·java-ee
眼镜哥(with glasses)10 小时前
0215笔记-语言模型,提问范式与 Token
人工智能·笔记·语言模型
FakeOccupational10 小时前
【电路笔记 通信】香农公式(Shannon-Hartley Theorem/香农-哈特利定理)证明(暂记)
笔记
The_Uniform_C@t211 小时前
论文浅读(第三期)|摘自《UAV Resilience Against Stealthy Attacks》(第一节)
网络·物联网·学习·网络安全
青衫码上行11 小时前
高频 SQL 50题(基础版)| 查询 + 连接
数据库·sql·学习·mysql
宇木灵11 小时前
C语言基础学习-X0前置
c语言·开发语言·学习