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

这篇具有很好参考价值的文章主要介绍了15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测),Verilog数字系统设计教程,fpga开发,Verilog前端设计

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

15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测),Verilog数字系统设计教程,fpga开发,Verilog前端设计

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,生成的原理图

15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测),Verilog数字系统设计教程,fpga开发,Verilog前端设计

2.4,SIM输出波形实现

15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测),Verilog数字系统设计教程,fpga开发,Verilog前端设计

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

到了这里,关于15.1_使用Verilog设计:一个简单的状态机设计——序列检测器(可实现重复性检测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 金蝶K3WISE15.1开启WEBAPI

    提示:如果没有安装IIS,则需要到管理器中安装IIS 如果列表中没有IIS,可以选择WinRM,会提示需要安装IIS。下一步后,把IIS全部选中。 默认安装即可。 打开EBDI,双击API说明,会自动打开浏览器 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。 打开CMD,重新

    2024年02月04日
    浏览(25)
  • 15.1 BP神经网络实现图像压缩——了解神经网络在图像处理方面的应用(matlab程序)

    1. 简述        BP神经网络现在来说是一种比较成熟的网络模型了,因为神经网络对于数字图像处理的先天优势,特别是在图像压缩方面更具有先天的优势,因此,我这一段时间在研究神经网络的时候同时研究了一下关于BP网络实现图像压缩的原理和过程,并且是在MATLAB上进行了仿真

    2024年02月12日
    浏览(30)
  • Verilog设计_序列发生器

    一种序列信号发生器设计,周期性进行输出。 目录 一、序列发生器 二、代码实现 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号,能产生这种信号的逻辑器件则称为序列发生器。在设计中有些时候会需用使用某些非常特殊的数字信号,一般情况下就将这

    2024年02月09日
    浏览(29)
  • 实验七 有限状态机设计【Verilog】

    2023年04月23日
    浏览(26)
  • 有限状态机设计(Verilog HDL)

    一、有限状态机 - 基本概念 有限状态机(Finite State Machine, FSM)是电路设计的经典方法,通常可以认为是组合逻辑和寄存器逻辑的组合,其中组合逻辑用于状态译码和产生输出信号,寄存器用于存储状态。 - Moore和Mealy型状态机 摩尔型(Moore)状态机: 输出只是当前状态的函数

    2024年02月16日
    浏览(29)
  • “01110”双输入口序列检测器的Verilog设计

    设计一个序列检测功能的时序电路,如图所示。其输入信号有clr、clk、A、 B,输出信号Z。其中clk为时钟信号, clr是低电平有效的异步复位信号,A、B是输入数据信号。有一个二进制串行数据D0D1D2D3……Dx,以两位为一组顺序送入电路,D0送入A,D1送到B,以此类推。电路检测此

    2024年02月12日
    浏览(31)
  • 【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程)

    声明:案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。 Verilog线性序列机点灯案例(一) Verilog线性序列机点灯案例(二) Verilog线性序列机点灯案例(三) Verilog线性序列机点灯案例(四) 使用8个拨码开关控制一个LED灯,每个拨码开关

    2024年04月14日
    浏览(19)
  • Open3D 15.1 报错 module ‘open3d‘ has no attribute ‘registration‘(跑LCD代码时报错)

    最近研究LCD源码,跑例程align_point_cloud.py 因为源码用老版本Open3D库报了错 我的Open3D用着一直没毛病,所以大概率是版本变动了库文件路径 在Github上也有人出现了类似情况 这老哥一语中的 在较新版本的Open3D中registration被放在了pipelines下面,所以调用时要把原来的 改成 还有在

    2024年02月10日
    浏览(38)
  • 如何使用 Java 设计一个简单的成绩计算程序

    本文将介绍如何使用 Java 设计一个简单的成绩计算程序。该程序可以读取学生的成绩并计算出平均分、最高分和最低分等。通过这个例子,我们将展示如何使用面向对象的思想和一些常用的 Java 功能来解决实际问题。 在开始编写程序之前,我们需要先分析问题。我们的目标是

    2024年02月04日
    浏览(40)
  • (数字逻辑笔记)用Verilog实现一个简单ALU(组合逻辑)

    实验描述: 输入 :两个4位二进制数,代表两个操作数A,B;一个3位控制信号operation,代表ALU要进行的运算。本实验中,ALU可以实现8种运算: 输出 :4位结果,1位进位 operation | F 000 | A + B 001 | A - B 010 | B + 1 011 | B - 1 100 | NOT A 101 | A XOR B 110 | A AND B 111 | A OR B 实现代码: TestBen

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包