15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)

news2024/10/2 1:33:45

使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)

  • 1,一个简单的状态机设计:可重复性序列检测器
  • 2,可重复性状态机序列检测实现
    • 2.1,RTL设计代码实现
    • 2.2,tb测试代码实现
    • 2.3,生成的原理图
    • 2.4,SIM输出波形实现

1,一个简单的状态机设计:可重复性序列检测器

序列检测器的逻辑功能:
序列检测是将一个指定的序列从数字码流中识别出来。本项目要检测的序列是:10010。
设X是“数字码流的输入”,Z是“检出标记输出”;高电平是“实现指定序列”;低电平是“没有发现指定序列”。码流如下表所示。

在这里插入图片描述

由上述码流可知:该序列检测器可实现重复性检测,由此可得如下状态转移图,如图1所示:

在这里插入图片描述

2,可重复性状态机序列检测实现

结合表1码流序列和图1状态转换,可编写如下RTL代码

2.1,RTL设计代码实现

//
//	可检测重复的序列
module	seqdet(
input				i_clk,
input				x,
input				i_rst,
output				z,
output	reg	[7:0]	state
);
//	独热码来做参数
parameter		IDLE = 8'b0000_0001;	//	1,	1
parameter		A	 = 8'b0000_0010;	//	2,	2
parameter		B	 = 8'b0000_0100;	//	3,	4
parameter		C	 = 8'b0000_1000;	//	4,	8

parameter		D	 = 8'b0001_0000;	//	5,	16
parameter		E	 = 8'b0010_0000;	//	6,	32
parameter		F	 = 8'b0100_0000;	//	7,	64
parameter		G	 = 8'b1000_0000;	//	8,	128

assign	z = (state==D && x==0) ? 1 : 0;
//	当x序列 10010 最后一个 0刚到时刻,时钟沿立刻将状态变为E,此时z应该变为高

//	assign	z = (state == E) ? 1 : 0;
//	当完成 "10010" 状态的检测,即输出1.
always@(posedge i_clk or negedge i_rst)	begin
	if(!i_rst)	
		state	<= IDLE;
	else 
		case(state)
			IDLE: if(x == 1)		//	下
					state	<= A;
				  else
					state	<= IDLE;
					
			A:	if(x == 0)			//	下
					state	<= B;
				else
					state	<= A;
					
			B:	if(x == 0)			//	下
					state	<= C;
				else
					state	<= F;
					
			C:	if(x == 1)			//	下
					state	<= D;
				else
					state	<= G;
					
			D:	if(x == 0)			//	输出
					state	<= E;
				else
					state	<= A;

			E:	if(x == 0)
					state	<= C;
				else
					state	<= A;
					
			F:	if(x == 1)
					state	<= A;
				else	
					state	<= B;
					
			G:	if(x == 1)
					state	<= F;
				else
					state	<= G;
					
			default:
					state	<= IDLE;
		endcase
end

endmodule

2.2,tb测试代码实现

//	测试模块
module	tb_seqdet;
//	`define	halfperiod	20	宏定义
//	注意",宏定义的位置放哪都行。

reg		i_clk,	i_rst;
reg		[23:0]	data;

wire	[7:0]	state;
wire	z, x;

assign	x = data[23];

always 	#10		i_clk = ~i_clk;

always@(posedge i_clk)
		data <= {data[22:0], data[23]};	
		// 形成数据向左移环形流,最高位与x连接

initial	begin
		i_clk = 1;	i_rst = 1;
		
#2;		i_rst = 0;	
#30;	i_rst = 1;

data	= 24'b0000_1100_1001_0000_1001_0100;
#480;	$stop;
end

seqdet	u1_seqdet(
.i_clk		(i_clk	),
.i_rst		(i_rst	),
.x			(x		),
.z			(z		),
.state		(state	)
);

endmodule

2.3,生成的原理图

在这里插入图片描述

2.4,SIM输出波形实现

在这里插入图片描述

从波形中可看出,程序代码正确地完成了所要设计的逻辑功能。另外,seqdet.v的编写采用了可综合的Verilog HDL风格,它可以把通过综合器的综合转换为FPGA或ASIC网表,再通过布局布线工具在FPGA或ASIC上实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1402433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加码OT安全丨Fortinet与施耐德电气携手共创工业零信任安全创新方案

近日&#xff0c;专注于推动网络与安全融合的全球网络安全领导者 Fortinet在施耐德电气举办的第四季“绿色智能制造创赢计划”结营仪式上&#xff0c;正式与其签署联创方案合作协议&#xff0c;成为施耐德电气“生态合作伙伴”。双方将依托“基于关键装置/设备的微隔离防护”这…

【RT-DETR有效改进】Google | EfficientNetV2一种超轻量又高效的网络 (轻量化网络)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。 本文包括了对英文白皮书的翻译&#xff0c;和我觉得较重要的要点总结。 执行概述 Oracle Database 12 引入了一项新功能&#xff1a;高级网络压缩&#xff0c;作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析…

基于SpringBoot的儿童疫苗预约系统的设计与实现-计算机毕业设计源码12222

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 儿童疫苗预约管理&#xff0c;主要的模块包括查看首页、站点管理&#xff08;轮播图、公告栏&#xff09;用户管理&#xff08;管理员、系统用…

【开源】基于JAVA语言的课程案例资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员需求分析2.2 用户需求分析 三、系统设计3.1 业务流程设计3.1.1 管理员业务流程设计3.1.2 用户业务流程设计3.1.3 首页功能模块及业务流程分析3.1.4 案例资源中心功能模块及业务流程分析3.1.5 用户信息中心功能模块…

seaborn可视化示例详解

目录 1、散点图 2、散点图回归线 3、折线图 4、频数柱状图 5、分组散点图 6、箱型图 7、数值分布柱状图 8、频数分布图 9、联合分布图 10、数值分布柱状图 11、相关系数热力图 划重点 少走10年弯路 Seaborn是一个基于Python的数据可视化库&#xff0c;Seaborn提供了许多用…

Keepalived + Nginx双主架构

Keepalived Nginx双主架构 环境准备&#xff1a; keepalived_master1服务器nginx&#xff1a;172.20.26.167 keepalived_master2服务器nginx&#xff1a;172.20.26.198 各服务器关闭selinux、防火墙等服务。 开机安装部署nginx 在172.20.26.167服务器上 yum install ngi…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (15) | 变分自编码器和扩散模型

前言 &#x1f4da; 笔记专栏&#xff1a;斯坦福CS231N&#xff1a;面向视觉识别的卷积神经网络&#xff08;23&#xff09;&#x1f517; 课程链接&#xff1a;https://www.bilibili.com/video/BV1xV411R7i5&#x1f4bb; CS231n: 深度学习计算机视觉&#xff08;2017&#xf…

冒泡排序-BubbleSort

1、基本思路 从数组的左边开始&#xff0c;比较两个元素的大小&#xff0c;当左边大于右边时&#xff0c;更换左右元素位置&#xff0c;否则不改变&#xff1b;接着向右移动一步&#xff0c;比较第二个元素和第三个元素的大小&#xff0c;重复上述操作&#xff0c;直到最后一个…

chapter12-实战成绩通知短信系统(下)

注意&#xff01;成绩短息通知服务的源码共分为两种&#xff1a;第一种为线性的程序&#xff0c;逻辑简单&#xff0c;但是格式杂乱&#xff1b;第二种为以类作为基础&#xff0c;封装了各种函数&#xff0c;逻辑较为复杂&#xff0c;但是格式清晰。建议新手先学习第一种代码风…

2. SpringBoot3 实战之用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

优化算法--李沐

目录 1.1梯度下降 1.2随机梯度下降 1.3小批量随机梯度下降 1.4冲量法 1.5 Adam 损失值也就是预测值与真实值之间的差值是f(x)&#xff0c;x是所有超参数组成的一条向量&#xff0c;c是可以限制的&#xff0c;比如说权重大于等于0。 使用迭代优化算法求解一般只能保证找到局…

web开发学习笔记(12.mysql数据库进阶)

1.多表查询 2.内连接 3.外连接&#xff0c;分为左外连接和右外连接 左外连接完全包含左表的数据和两个表的交集 右外连接完全包含右表的数据和两个表的交集 4.子查询&#xff0c;又成为嵌套查询 分为标量子查询和列子查询和行子查询 首先是标量子查询 列子查询 in, not in…

sqlilabs第六十一六十二关

Less-61(GET - challenge - Double Query- 5 queries allowed -Variation 4) 手工注入 报错注入 Less-62(GET - challenge - Bilnd- 130 queries allowed -Variation 1) 手工注入 过于复杂简单写写 这个应该是用不了只能用延时 自动注入 写个脚本就可以

Mysql-全局锁、表锁、行锁

本文已收录于专栏 《数据库》 目录 全局锁概述说明开启方式应用场景 表锁概念说明实现方式意向锁 开启方式 行锁概念说明实现方式记录锁&#xff1a;间隙锁临键锁 总结提升 全局锁 概述说明 全局锁是是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff…

bat批处理基础教学

bat批处理基础教学 titleset命令模式-算数运算重定向运算多命令运算| 管道符--左边的结果作为右边的输入接受外部参数 -%1注释 rem命令公共介绍- /?时间命令 date time启动 start调用其他bat文件 call计划任务查看环境变量 settelnet是远程端口命令,不加密判断ifpause>null…

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的&#xff0c;是同一个作用&#xff0c;但是有两个不同写法。 用法一&#xff1a; //注意&#xff1a;这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二&#xff1a; watch:{xxx:(newVal,oldVal)>…

66 C++对象模型探索。C++编译器在什么时候给我们创建默认的构造函数?

一 前提&#xff0c;关于C编译器给我们生成 默认构造函数 的错误认知 传统知识认为&#xff1a;如果在一个类中&#xff0c;我们没有定义任何的构造函数&#xff0c;那么编译器会为我们隐式自动定义一个默认的构造函数&#xff0c;我们称这种构造函数为 "合成的默认构造函…

ElasticSearch 7.x现网运行问题汇集3

问题描述 某现网ElasticSearch 故障&#xff0c;很长时间unassgined_shards的数量都不减少。 原因分析与解决方案&#xff1a; 先了解整体状态&#xff0c;使用Postman请求&#xff0c;如下几个请求命令&#xff1a; GET /_cat/indicesGET /_cat/shardsGET /_cluster/health…

Minio搭建和使用

目前可用于文件存储的网络服务选择也有不少&#xff0c;比如阿里云OSS、七牛云、腾讯云等等&#xff0c;可是收费都有点小贵。为了节约成本&#xff0c;很多公司使用MinIO做为文件服务器。 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现…