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题目的一些笔记备忘