秋招手撕代码:用移位寄存器实现的序列检测器(verilog)「建议收藏」

秋招手撕代码:用移位寄存器实现的序列检测器(verilog)「建议收藏」之前一直想当然的认为序列检测器就应该用状态机来实现,后面在qq群里看到有人面试的时候被问,除了用状态机实现序列检测外,还能使用什么方法实现序列检测?后面查找了资料,发现可以使用序列检测器,自己就动手写了一个。1、代码思路:将输入的数据存储在移位寄存器中,如果寄存器中的序列是我们要检测的序列就输出1.2、代码`timescale1ns/1ps/////////////////////////////////////////////////////////////////////////////

大家好,又见面了,我是你们的朋友全栈君。

之前一直想当然的认为序列检测器就应该用状态机来实现,后面在qq群里看到有人面试的时候被问,除了用状态机实现序列检测外,还能使用什么方法实现序列检测?后面查找了资料,发现可以使用序列检测器,自己就动手写了一个。
1、代码思路:
将输入的数据存储在移位寄存器中,如果寄存器中的序列是我们要检测的序列就输出1.
2、代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/08/03 00:11:26
// Design Name: 
// Module Name: sequence_move
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 假设是检查11001
//

module sequence_move(
input clk,
input rst_n,
input data_in,
output data_out
    );
reg [4:0]d_r;
assign data_out=(d_r==5'b11001)?1:0;

always@(posedge clk)
if(!rst_n)
	d_r<=5'd0;
else d_r<={d_r[3:0],data_in};	
endmodule

3、仿真文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2021/08/03 00:19:41
// Design Name: 
// Module Name: sequence_move_tst
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
module sequence_move_tst();
reg clk      ;
reg rst_n    ;
reg data_in  ;
wire data_out;
sequence_move U_sequence_move(
.clk      (clk     ),
.rst_n    (rst_n   ),
.data_in  (data_in ),
.data_out (data_out)
);
initial
begin
clk=1;
rst_n=0;
data_in=0;
#20 rst_n=1;
#20 data_in=1;
#20 data_in=0;
#20 data_in=0;
#20 data_in=1;
#20 data_in=1;
#20 data_in=0;
#20 data_in=0;
#20 data_in=1;
#20 data_in=1;
#20 data_in=0;
#20 data_in=0;
#20 data_in=1;
#20 rst_n=0;

end
always #10 clk=~clk;
endmodule

4、波形
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160392.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx代理tcp协议_tcp怎么加密传输

    nginx代理tcp协议_tcp怎么加密传输NGINX实现TCP加密代理

    2025年10月15日
    1
  • executorservice和executor_source counter

    executorservice和executor_source counter1、创建一个WorkerThread类,表示执行任务publicclassWorkerThreadimplementsRunnable{ @Override publicvoidrun(){ System.out.println("当前时间:"+System.currentTimeMillis()+"线程名称:" +Thread.currentT…

    2025年10月21日
    3
  • django formview_DWG TrueView

    django formview_DWG TrueViewAPIView视图类在DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。当然如果你不想使用类视图,那么就用@api_view装饰器包裹一下就可以。

    2022年7月31日
    4
  • potplayer加快播放速度热键

    potplayer加快播放速度热键z恢复x减慢播放速度c加快播放速度

    2022年5月21日
    29
  • log4j pattern详解_log4j不同的类输出到不同文件中

    log4j pattern详解_log4j不同的类输出到不同文件中spring使用log4j,可以有2种方法。1、在web.xml里不做任何配置。log4j.properties放在classpath根目录下,这时候生成的日志文件就没有相对路径,如果写相对路径,则会生成在安装tomcat的根路径下。2、在web.xml设置。          log4jConfigLocation          WEB-INF/classes/log4j.propert

    2022年8月22日
    4
  • VC编程常见问题解答收集贴

    VC编程常见问题解答收集贴1.使用ModifyStyleEx改变了控件风格无效答:修改之后,重绘一次,如果还不行的话,再试试看调用SetWindowPos(0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_DRAWFRAME);2.动态设置编辑框的ES_PASSWORD无效答:修改之后,需要调用一次SetPasswordChar(*);3.如何获取任务栏小图标?答:有网友提出,能

    2022年7月19日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号