数字电路设计:两种序列检测方法详解
创作时间:
作者:
@小白创作中心
数字电路设计:两种序列检测方法详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_45771963/article/details/139423484
在数字电路设计中,序列检测是一个常见的应用场景。本文将介绍两种实现方法:状态机法和序列缓存对比法。通过详细的Verilog代码实现、测试代码以及仿真波形图,帮助读者更好地理解这两种方法的原理和实现过程。
状态机法
状态机法是一种常用的序列检测方法,可以通过Moore型或Mealy型状态机实现。本文采用Moore型状态机实现非重叠检测。
代码实现
`timescale 1ns/1ns
module xulie(
input clk,
input rst_n,
input a,
output reg match
);
//Moore型状态机检测01110001序列
reg [3:0] state_c;
reg [3:0] state_n;
parameter IDLE=4'b0000;
parameter S1=4'b0001;
parameter S2=4'b0011;
parameter S3=4'b0010;
parameter S4=4'b0110;
parameter S5=4'b0111;
parameter S6=4'b0101;
parameter S7=4'b0100;
parameter S8=4'b1100;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
state_c<=IDLE;
end else begin
state_c<=state_n;
end
end
always @(*) begin
case(state_c)
IDLE:state_n=a?IDLE:S1;
S1:state_n=a?S2:S1;
S2:state_n=a?S3:S1;
S3:state_n=a?S4:S1;
S4:state_n=a?IDLE:S5;
S5:state_n=a?IDLE:S6;
S6:state_n=a?S2:S7;
S7:state_n=a?S8:S1;
S8:state_n=a?IDLE:S1;
default:state_n=IDLE;
endcase
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
match<=1'b0;
end else if(state_n==S8) begin
match<=1'b1;
end else begin
match<=1'b0;
end
end
endmodule
测试代码
`timescale 1ns/1ns
module xulie_tb();
reg clk,rst_n;
reg a;
wire match;
initial begin
clk = 0;
rst_n = 0;
#10;
rst_n=1;
forever #20 a=({$random}%2);
#1000;
$stop;
end
always #10 clk=~clk;
xulie dut(
.clk(clk),
.rst_n(rst_n),
.a(a),
.match(match)
);
endmodule
序列缓存对比法
序列缓存对比法通过将输入信号缓存到一个数组中,然后与目标序列进行对比,实现序列检测。
实现步骤
- 声明一个8位的寄存器数组,用于缓存输入信号。
- 通过位截取和位拼接操作实现数据的移位。
- 将缓存数组与目标序列进行对比。
代码实现
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input a,
output reg match
);
reg [7:0] rem_a;
parameter S=8'b01110001;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
rem_a<=8'b0;
end else begin
rem_a<={rem_a[6:0],a};
end
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
match<=1'b0;
end else if(rem_a==S) begin
match<=1'b1;
end else begin
match<=1'b0;
end
end
endmodule
测试代码
`timescale 1ns/1ns
module sequence_detect_tb();
reg clk,rst_n;
reg a;
wire match;
initial begin
$dumpfile("out.vcd");
$dumpvars(0,sequence_detect_tb);
clk = 0;
rst_n = 0;
#30;
rst_n=1;
forever #20 a=({$random}%2);
#1000;
$stop;
end
always #10 clk=~clk;
sequence_detect dut(
.clk(clk),
.rst_n(rst_n),
.a(a),
.match(match)
);
endmodule
仿真波形
遗留问题
在牛客网的在线编译环境中,可能会出现显示异常的问题,建议使用其他仿真工具进行验证。
热门推荐
大年初一团圆饭:一顿饭里的心理学密码
2025春节新趋势:视频拜年成主流
三岁宝宝正确洗脸全攻略:从步骤到注意事项
《中国皮肤清洁指南》推荐:不同洗面奶对脸部肌肤的影响
吃阿卡波糖的糖友,切记“3要3不要”!如果不注意,后果很严重!
拯救人口红利:出生率、结婚率齐跌,经济发达地区加速老龄化
数说江苏75年|解放路上,“沧桑巨变”阅不尽
温州春节习俗:开门炮与拜六神
春节打卡杭州西湖&南浔古镇,感受江南水乡魅力
春节打卡浙江三大古镇:安昌、衢州、宋城
杭州桐庐春节旅游大放送!200万消费券等你抢!
同样演黄蓉,把包上恩、李一桐、翁美玲、周迅等7人对比,差别出来了
家家都有的布洛芬,这5类人群要慎用
vivo Y300评测:入门≠平庸
肖战饰演的郭靖为什么不受广大群众欢迎?
大年初三:睡到自然醒,你做到了吗?
大年初三:烧门神纸和老鼠娶亲的神秘仪式
大年初三家庭聚会新玩法:农家乐、短途游、租别墅
冬日自驾游:千岛湖的诗画与年味
18K金保养秘籍:拒绝发黑变色!
用可乐轻松搞定18K金项链氧化问题!
18K金变黑了?这些小妙招让你轻松应对!
秋冬养发秘籍:樱桃黑芝麻帮你告别鬼剃头
如何防止邻居蹭我家的WiFi
认识网络安全的重要性
双十一熬夜党必看:如何预防“鬼剃头”
GIA认证下的顶级收藏:如何挑选一颗完美的钻石?
中国引领全球钻石市场新潮流
8K金饰品变色竟影响皮肤健康?
心理学上有一个词:应激反应