简单的状态机设计——序列检测器

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

1.序列检测器
序列检测器是时序数字电路中非常常见的设计之一。它的逻辑功能是将一个指定的序列从数字码流中识别出来。
2.例1:"10010"序列检测器
对串行输入的数据进行检测,检测“10010”。设X为数字码流输入,Z为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定序列”。考虑码流为“1100100100001001001…"则如下表所列

时钟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
X 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1
Z 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0

状态转移图如下:
简单的状态机设计——序列检测器
设计代码:

module seqdet(
	clk,
	rst,
	x,
	z
	);
	
	input clk;
	input rst;
	input x;
	output z;
	
	reg [2:0] state,next;
	
	parameter IDLE=1'b0,s0=1, s1=2,s2=3,s3=4,s4=5;
	
	always@(posedge clk) begin
	if(!rst)
	state<=IDLE;
	else 
	state<=next;
	end
	
	always @(*) begin
		case(state)
			IDLE:next=x?s0:IDLE;
			s0:next=x?s0:s1;
			s1:next=x?s0:s2;
			s2:next=x?s3:IDLE;
			s3:next=x?s0:s4;
			s4:next=x?s0:s2;
			endcase
	end
	
	assign z=(next==s4);
	
endmodule 

testbench:

`timescale 1ns/1ns

module seqbet_tb;
	reg clk,rst;
	reg [23:0]data;
	
	wire z,x;
	
	assign x=data[23];
	
	initial begin
	clk=0;
	rst=1;
	#2 rst=0;
	#30 rst=1;
	data=24'b1100_1001_0000_1001_0100;
	#500 $stop;
	end
	
	always #10 clk=~clk;
	
	always@(posedge clk) begin
		data={data[22:0],data[23]};
	end
	
	seqdet m1(
	clk,
	rst,
	x,
	z
	);

endmodule 

仿真波形:
简单的状态机设计——序列检测器3.例2:“1111”序列检测器
对串行数据进行检测,检测到连续4个1 、5个1、6个1Z输出为高电平,连续7个或者7个以以上报错,即ERRO输出高电平。
状态转移图:
简单的状态机设计——序列检测器
设计代码:

module seqbet_1(
	clk,
	rst_n,
	x,
	z,
	ERRO
	);
	input clk;
	input rst_n;
	input x;
	output z;
	output ERRO;
	
	reg[7:0] state,next;
	parameter IDLE=8'b00000001, s0=8'b00000010,s1=8'b00000100,
				 s2=8'b00001000,s3=8'b00010000,s4=8'b00100000,
				 s5=8'b01000000,err=8'b10000000;
	
	always@(posedge clk) begin
		if(!rst_n)
			state<=IDLE;
		else
			state<=next;
	end
	
	always@(*) begin
		case(state)
			IDLE:next=x?s0:IDLE;
			s0:next=x?s1:IDLE;
			s1:next=x?s2:IDLE;
			s2:next=x?s3:IDLE;
			s3:next=x?s4:IDLE;
			s4:next=x?s5:IDLE;
			s5:next=x?err:IDLE;
			err:next=x?err:IDLE;
		endcase
	end
	
	
	assign z=(state==s3|state==s4|state==s5);
	assign ERRO=(state==err);

endmodule 

testbench:

`timescale 1ns/1ns

module seqbet_1_tb;

	reg clk,rst_n;
	reg [24:0]data;
	
	wire z,x,ERRO;
	
	assign x=data[24];
	
	initial begin
	clk=0;
	rst_n=1;
	#2 rst_n=0;
	#30 rst_n=1;
	data=25'b1100_1111_0011_1111_11111;
	#1000 $stop;
	end
	
	always #10 clk=~clk;
	
	always@(posedge clk) begin
		data={data[23:0],data[24]};
	end
	
	seqbet_1 m1(
	.clk(clk),
	.rst_n(rst_n),
	.x(x),
	.z(z),
	.ERRO(ERRO)
	);


endmodule 

仿真波形:
简单的状态机设计——序列检测器文章来源地址https://www.toymoban.com/news/detail-507703.html

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

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

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

相关文章

  • 序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)

    目录 一、前言 二、状态机法和寄存器法 2.1状态机法 2.11 使用状态机检测“1001” 2.12 verilog代码 2.13 testbench 2.14仿真结果 2.2移位寄存器法 2.21 使用移位寄存器法检测1001 2.22 verilog代码 2.23 testbench 2.24仿真结果 三、重叠检测与非重叠检测(检测序列1001) 3.1重叠检测 3.11 重叠检测

    2024年02月04日
    浏览(44)
  • 【数字IC手撕代码】Verilog模三检测器(判断输入序列能否被三整除)|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区 联合力荐 !近500篇 数字IC精品文章收录 ! 【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍 本系列旨在提

    2024年02月16日
    浏览(38)
  • 1001序列检测器

    multisim仿真文件:1001序列检测器(mealy机)-单片机文档类资源-CSDN下载 modelsim仿真文件:1001序列检测器modelsim仿真和测试文件-单片机文档类资源-CSDN下载 实验报告:1001序列检测器实验报告-单片机文档类资源-CSDN下载 电 子 科 技 大 学 课程设计名称:           1001 序列检

    2024年02月06日
    浏览(45)
  • 序列检测器的verilog实现

    设计一个序列检测同步时序逻辑电路,要实现的功能如下: 当已有输入码流出现序列 111000或101110时输出检测信号为1 ,否则输出为0。在时序上检测到完整序列的 下一个时钟周期 输出检测结果。输入信号有效为1时表示当前输入有效,否则表示无效。之前输入依旧计入序列中

    2024年02月06日
    浏览(53)
  • 利用Verilog HDL实现序列检测器,附上仿真程序。

    序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如:针对一个较长的比特流010010010011110101010…,我们希望能将比特序列为“10010”的序列检测出来,并且每次检测到10010就将输出置“1”. 注意:如序列”100100100…\\\",根据以上的介绍,会在

    2024年02月06日
    浏览(62)
  • 实验四 用集成移位寄存器实现序列检测器

    一、实验要求 用移位寄存器和与非门设计一个 1101 序列检测器。电路连续不停地工作,对 串行输入的序列进行检测,当连续检测 4 个码元符合检测码 1101 时,检测器输出 为 1 ,指示灯亮,其他情况下输出为 0 ,指示灯灭。 二、实验设备 1 . Mini-FPGA 开发板( Cyclone IV 系列

    2024年02月03日
    浏览(43)
  • vivado序列检测器verilog代码ego1开发板验证

    名称:vivado序列检测器verilog代码ego1开发板验证 软件:VIVADO 语言:Verilog 代码功能: 设计一个111序列检测器。 要求:当检测到3个或3个以上的1时,输出为1,其他输入情况输出为0. 画出状态转移图,完成 Verilog描述。 本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管

    2024年02月03日
    浏览(55)
  • Verilog设计“111”检测器与“01110”检测器并测试所有情况

    使用Quartus+modelsim完成本次设计 分析 分析题目,得到其有限状态机为下图: 代码实现 Testbench 结果 Modelsim结果如下图所示,分析可知实现了题目要求。 逻辑综合出来的电路如下图所示:即只有S3状态才会输出OUT=1。 其中的state的状态机如下图所示(RLT viewer中所示),可见其与

    2024年02月08日
    浏览(56)
  • 毕业设计 单片机心率检测器设计与实现 - stm32

    Hi,大家好,今天向大家介绍一个学长做的单片机项目 基于STM32的心率检测器的设计与实现 大家可用于 课程设计 或 毕业设计 主控:STM32F103C8T6 MAX30102传感器 OLED屏幕:用于显示实时心率波形 未测试时的状态:心率波形显为平稳直线,即0 将手指放上进行心率测试: 还可以把

    2024年02月07日
    浏览(42)
  • 【opencv】传统目标检测:Haar检测器实现人脸检测

    传统目标分类器主要包括Viola Jones Detector、HOG Detector、DPM Detector,本文主要介绍VJ检测器,在VJ检测器基础上发展出了Haar检测器,Haar检测器也是更为全面、使用更为广泛的检测器。 Viola Jones Detector是作为人脸检测器被Viola和Jones提出来的,后来Rainer Lienhart和Jochen Maydt将这个检测

    2024年02月12日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包