当前位置: 首页 > news >正文

练习八-利用有限状态机进行时序逻辑的设计

利用有限状态机进行时序逻辑的设计

      • 1,任务目的:
      • 2,RTL代码,及原理框图
      • 3,测试代码,输出波形

1,任务目的:

(1)掌握利用有限状态机实现一般时序逻辑分析的方法;
(2)掌握用Verilog编写可综合的有限状态机的模板;
(3)掌握用Verilog编写状态机模板的测试文件的一般方法。

案例:重复检测序列,实现检测功能是:5进制“10010。考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。”

2,RTL代码,及原理框图

module	seqdet(
input				clk,
input				x,
input				rst,
output				z,
output	reg	[2:0]	state
);
//	独热码来做参数
parameter		IDLE = 3'd0;
parameter		A	 = 3'd1;
parameter		B	 = 3'd2;
parameter		C	 = 3'd3;parameter		D	 = 3'd4;
parameter		E	 = 3'd5;
parameter		F	 = 3'd6;
parameter		G	 = 3'd7;//  `define			IDLE	0
//  `define			A		1
//  `define			B		2
//  `define			C		3
//  `define			D		4
//  `define			E		5
//  `define			F		6
//  `define			G		7assign	z = ((state == E) && (x==0)) ? 1 : 0;
//	当x序列 10010 最后一个 0刚到时刻,时钟沿立刻将状态变为E,此时z应该变为高always@(posedge clk)	if(!rst)	state	<= IDLE;else casex(state)IDLE: if(x == 1)	// 第一个码位对,记状态Astate	<= A;A:	if(x == 0)		// 记状态Bstate	<= B;B:	if(x == 0)		//	Cstate	<= C;elsestate	<= F;	// 前功尽弃,到 FC:	if(x == 1)state	<= D;elsestate	<= G;	// 前功尽弃,到 GD:	if(x == 0)state	<= E;	// 全对,此时有输出elsestate	<= A;
// 第五个码位不对时,前功尽弃,只有刚进入的1位有用,回到第一个码位对状态,记状态AE:	if(x == 0)state	<= C;elsestate	<= A;	// 前功尽弃,只有刚输入的1码位对,记状态AF:	if(x == 1)state	<= A;else	state	<= B;	//	又有一个码对,记状态BG:	if(x == 1)state	<= F;	// 只有刚输入的1码位对,记状态Adefault:state	<= IDLE;	// 默认初始状态endcase//  `undef			IDLE
//  `undef			A
//  `undef			B
//  `undef			C
//  `undef			D
//  `undef			E
//  `undef			F
//  `undef			Gendmodule

在这里插入图片描述

3,测试代码,输出波形

//	测试模块
module	seqdet_top;
reg		clk,	rst;
reg		[23:0]	data;wire	[2:0]	state;wire	z, x;
assign	x = data[23];
always 	#10		clk = ~clk;always@(posedge clk)data = {data[22:0], data[23]};	// 形成数据向左移环形流,最高位与x连接initial	beginclk = 0;	rst = 1;
#2;		rst	= 0;	
#30;	rst = 1;data	= 24'b0000_1100_1001_0000_1001_0100;
#500;	$stop;
endseqdet	u_seqdet(
.clk		(clk	),
.rst		(rst	),
.x			(x		),
.z			(z		),
.state		(state	)
);endmodule

在这里插入图片描述

http://www.lryc.cn/news/238941.html

相关文章:

  • WebAssembly照亮了 Web端软件的未来
  • PDF文件无密码,如何解密?
  • 搜维尔科技:Movella Xsens MVN LINK 实际应用,一镜到底!
  • wsl安装ubuntu的问题点、处理及连接
  • Flutter在web项目中使用iframe
  • 阿里云高校计划学生和教师完成认证领取优惠权益
  • 劲松HPV防治诊疗中心提醒:做完HPV检查后,需留意这些事项!
  • InfoNCE Loss公式及源码理解
  • 经典双指针算法试题(二)
  • MySQL -- DQL
  • 高防CDN:保障网络安全的未来之路
  • 使用wxPython和PyMuPDF合并PDF文档并自动复制到剪贴板
  • Redis篇---第十四篇
  • python之文件操作
  • android实时投屏软件QtScrcpy
  • LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)
  • 在 Qt 框架中,有许多内置的信号可用于不同的类和对象\triggered
  • springBoot中starter
  • Linux学习笔记-Ubuntu下使用Crontab设置定时任务
  • 动态规划求数组中相邻两数的最小差值( 即相差的绝对值 ) java 实现
  • webGL开发微信小游戏
  • leetcode面试经典150题——29 三数之和
  • 数据分析基础之《jupyter notebook工具》
  • Android Studio Error “Unsupported class file major version 61“---异常信息记录
  • javaScript 内存管理
  • Idea2023 Springboot web项目正常启动,页面展示404解决办法
  • Android手机如何用Charles抓包HTTPS接口
  • Oracle for Windows安装和配置——Oracle for Windows net配置
  • C#中.NET 7.0 Windows窗体应用通过EF访问已有数据库并实现追加、删除、修改、插入记录
  • 【文末送书】计算机网络 | IO多路转接技术 | poll/epoll详解