Verilog写题笔记25--- #输入序列连续的序列检测#

输入序列连续的序列检测

https://www.nowcoder.com/practice/d65c2204fae944d2a6d9a3b32aa37b39

三个输入:
1、时钟信号clk
2、复位信号rst_n
3、串行信号a
一个输出:
标志信号match
序列检测也是一个经典的Verilog编程套路,它最主要的作用是用在串行信号的接收上。a在很多情况下是一个串行信号,然后检测输入的信号,如果输入信号是我们要的信号,就输出一个标志位。
序列检测最简单的,也是最常用的方法就是:移位检测。每当上升沿采集到a后,将数据放入一个8位存储变量的最高位,然后再将原本的变量进行移位,移位后再跟所需要的数据进行对比,如果比对成功,就输出标志信号match。
`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input a,
	output reg match
	);

parameter a_reg_true = 'b10001110;

reg [7:0] a_reg;

initial
	begin
		a_reg = 8'b00000000;
	end

always@(posedge clk or negedge rst_n)     //经典的右移操作,每个上升沿,将a的值放入8位变量a_reg的最高位
	if(rst_n == 1'b0)
		a_reg <= 8'd0;
	else
		a_reg <= {a,a_reg[7:1]};

always@(posedge clk or negedge rst_n)     //每个上升沿,a_reg与我们自己定义的常数变量进行对比,如果是我们要的数据,match输出1,否则为0
	if(rst_n == 1'b0)
		match <= 1'b0;
	else if(a_reg == a_reg_true)
		match <= 1'b1;
    else
        match <= 1'b0;

endmodule





verilog写题笔记 文章被收录于专栏

写Verilog题目的一些笔记备忘

全部评论

相关推荐

仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务