序列检测器的verilog实现

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

一、要求

设计一个序列检测同步时序逻辑电路,要实现的功能如下:

当已有输入码流出现序列111000或101110时输出检测信号为1,否则输出为0。在时序上检测到完整序列的下一个时钟周期输出检测结果。输入信号有效为1时表示当前输入有效,否则表示无效。之前输入依旧计入序列中并不清零,即允许序列重叠检测。例如:

输入码流(设输入数据均有效)和输出检测为

[I] 0 0 1 1 1 0 0 0 1 1 0 1 1 1 0 0 0 0

[O] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1

模块输入输出功能定义:

名称

方向

位宽

描述

clk

I

1

系统时钟

rst_n

I

1

异步复位,低电平有效

din_vld

I

1

输入数据有效指示

din

I

1

输入数据

result

O

1

输出检测结果

二、实现

 1.移位寄存器比较法

/*模块端口定义*/
module seq_detect(

	input 				clk,
	input				rst_n,
	input 				din_vld,
	input		 		din,
	output	reg 		result
    );

reg [5:0] tmp = 6'd0; 

/*移位寄存器*/
always @(posedge clk or negedge rst_n) begin

	if(!rst_n)	tmp <= 6'd0;
	else if(din_vld)	tmp[5:0] <= {tmp[4:0],din};
	
end

/*条件判断产生输出*/
always @(posedge clk or negedge rst_n) begin
	if(!rst_n) result <= 1'b0;
	else if(tmp == 6'b111000 || tmp == 6'b101110)	result <= 1'b1;
	else result <= 1'b0;
end


endmodule

 testbench:

`timescale 1ns / 1ps

module tb_seq_detect();
reg			clk;
reg			rst_n;
reg			din_vld;
reg 		din;
wire		result;

initial begin
	clk		 = 1'b0;
	rst_n 	 = 1'b0;
	din_vld	 = 1'b0;
	#10
	din 	 = 1'd0;
	#100
	rst_n 	 = 1'b1;
	din_vld  = 1'b1;	
end

always #50 clk = ~clk; //10MHz
always #2000 din_vld = ~din_vld;

/*产生随机输入*/
always @(posedge clk) begin
	 din <= {$random}%2;	
end

/*实例化测试模块*/
seq_detect u_seq_detect(
	.clk(clk),
	.rst_n(rst_n),
	.din(din),
	.din_vld(din_vld),
	.result(result)
);

endmodule

仿真结果:

序列检测器的verilog实现

可见对于输入的随机序列,在rst_n = 1且din_vld = 1的条件下,满足连续输入的6bit为111000和101110时,输出result = 1。din_vld = 0时输入无效,tmp保持原状态。

2、有限状态机FSM

/*
三段式状态机:三个always模块
1.同步时序描述状态转移;
2.组合逻辑判断状态转移条件;
3.描述状态输出
*/

/*模块端口定义*/
module seq_detect(

	input 				clk,
	input				rst_n,
	input 				din_vld,
	input		 		din,
	output	reg 		result
    );
	
reg [3:0] state, next_state;

/*
	分析: 共有12个状态,对应输入如下:
	idle:0	s1:1	s2:11	s3:111	 s4 :1110	s5 :11100	s6:111000
			s7:10	s8:101	s9:1011	 s10:10111	s11:101110

*/

/*状态编码*/
parameter idle = 4'd0, s1 = 4'd1, s2 = 4'd2, s3 = 4'd3, s4  = 4'd4,  s5  = 4'd5,
			s6 = 4'd6, s7 = 4'd7, s8 = 4'd8, s9 = 4'd9, s10 = 4'd10, s11 = 4'd11;

/*状态转移*/
always @(posedge clk or negedge rst_n) begin

	if(!rst_n) state <= idle;
	else if (din_vld) state <= next_state;
	else			  state <= state;
end

/*转移条件判断*/
always @(*) begin
	case(state)
		idle:	 next_state = din ? s1  : idle;
		s1:		 next_state = din ? s2  : s7;
		s2:		 next_state = din ? s3  : s7;
		s3:		 next_state = din ? s3  : s4;
		s4:		 next_state = din ? s8  : s5;
		s5:		 next_state = din ? s1  : s6;
		s6:		 next_state = din ? s1  : idle;
		s7:		 next_state = din ? s8  : idle;
		s8:		 next_state = din ? s9  : s7;
		s9:		 next_state = din ? s10 : s7;
		s10:	 next_state = din ? s3  : s11;
		s11:	 next_state = din ? s8  : s5;
		default: next_state = idle;
	endcase
end

/*输出描述*/
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	result <= 1'b0;
	else if(state == s6 || state == s11) result <= 1'b1;
	else	result <= 1'b0;
end

endmodule

testbench同上。

仿真结果:

序列检测器的verilog实现

 可见输入为连续的101110和111000时,在下一个时钟周期有result = 1。

综合结果:

序列检测器的verilog实现

 2022/1/17 1:32 文章来源地址https://www.toymoban.com/news/detail-457211.html

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

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

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

相关文章

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

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

    2024年02月16日
    浏览(38)
  • 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)
  • 简单的状态机设计——序列检测器

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

    2024年02月11日
    浏览(41)
  • 用jk触发器设计一个011序列检测器的设计分析过程

       心得体会:经过此次设计,加深了对时序逻辑电路的理解,当要求对一个连续的一串信号进行输入输出处理时可以用到有记忆存储、反馈功能的jk触发器或者d触发器。

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

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

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

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

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

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

    2024年02月07日
    浏览(42)
  • 【 FPGA 】序列检测器 11010 (mealy状态机,moore状态机)

            状态机是硬件电路设计的常用的描述工具,也是电路设计的重要思想。很早之前我就知道mealy状态机和moore状态机,但是对两者的差别不是非常的清楚,最近在学习系列检测器的设计时对这两种状态机和一段式、三段式状态机有了更深刻的了解,在这里分享自己的见解

    2024年02月05日
    浏览(39)
  • 【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

领红包