基于移位寄存器的序列检测器实现
2023-09-14 09:10:02 时间
在基于System verilog的序列检测器一文中,我们通过状态机进行了实现,今天,博主介绍另外一种序列检测的实现方式:移位寄存器。
我们仍然以10010这个序列为例,主要的设计思想如下:
1.设置一个5位的移位寄存器,以及一个计数器;
2.每个时钟周期,该移位寄存器进行一次左移,并将最新的bit输入最低位,计数器自增1;
3.每个周期,都将移位寄存器的值和10010进行比较,若相同,且计数器的值大于等于4(这么做主要为了避免10010010被检测出两次),则说明检测到该序列,此时计数器的值归零。
RTL实现
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/02/23 19:53:01
// Design Name:
// Module Name: top
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module top(
input logic clk,
input logic rst,
input logic bit_in,
input logic valid, //标志当前bit有效
output logic detected
);
logic [4:0] shift_reg;
logic [31:0] count;
//shift_reg
always_ff@(posedge clk,posedge rst)
if(rst)
shift_reg[4:0]<=0;
else if(valid)
shift_reg[4:0]<={shift_reg[3:0],bit_in};
//count
always_ff@(posedge clk,posedge rst)
if(rst)
count<=0;
else if(valid)
begin
if(detected)
count<=0;
else
count<=count+1;
end
//
assign detected=(5'b10010==shift_reg&&count>=4)?1'b1:1'b0;
endmodule
测试平台
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/02/23 14:00:13
// Design Name:
// Module Name: test_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module test_tb;
logic clk;
logic rst;
logic bit_in;
logic valid;
logic detected;
logic [31:0] cnt;
initial begin
clk=0;
forever begin
#5 clk=~clk;
end
end
initial
begin
rst=1;
#20
rst=0;
end
//cnt
always_ff@(posedge clk,posedge rst)
if(rst)
cnt<=0;
else if(cnt==2)
cnt<=0;
else
cnt<=cnt+1;
//
always_ff@(posedge clk,posedge rst)
if(rst)
bit_in<=0;
else if(cnt==2)
bit_in<=1; //检测10010
else
bit_in<=0;
//valid
always_ff@(posedge clk,posedge rst)
if(rst)
valid<=0;
else
valid<=1;
//inst
top U(.*);
// input logic clk,
// input logic rst,
// input logic bit_in,
// input logic valid, //标志当前bit有效
// output logic detected
endmodule
仿真波形,可以看到,10010010只会被检测出一次:
相关文章
- 秋招手撕代码:用移位寄存器实现的序列检测器(verilog)「建议收藏」
- 长读长序列比对
- 基于ARIMA、SVM、随机森林销售的时间序列预测|附代码数据
- R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
- 用检索的思路做时间序列预测是一种怎样的体验
- AAAI 2023 Oral | 对自然条件下的点云序列中手物交互的位姿追踪与重建
- R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列|附代码数据
- 集成时间序列模型提高预测精度
- 完整的8号染色体序列揭示了新的基因及与其关联的疾病风险
- 掌握Oracle序列的正确使用方式(oracle使用序列)
- SQL Server中自增序列的概念及应用(sqlserver的序列)
- Oracle序列权限管理方法研究(oracle 序列 权限)
- 每日序列的自动生成:MSSQL实现(mssql 生成每日序列)
- 化Redis队列反序列化改变的一切(redis队列反序列)
- AI营销的下一战场:利用时间序列和空间轨迹探索用户未知需求