我是靠谱客的博主 无私老师,最近开发中收集的这篇文章主要介绍“10010”序列检测器的Verilog实现与Modelsim仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      序列检测器是时序数字电路中非常常见的设计之一。它的主要功能是将一个指定的序列从数字码流中识别出来。例如检测器收到一组串行码(10010)后,输出标志1,否则,输出0。

      本文引用自https://blog.csdn.net/llxxyy507/article/details/81019999

       在“10010”序列检测器中,有6个状态,加上一个Idle状态,共7个状态。但可以首先通过状态化简,简少Verilog代码量。最初的状态分析如下表。

 

      可以看到状态“Idle”和状态“0”,“10010”在相同的输入下,下一状态与输出完全一样,故可以化简为一个状态,所有状态化简后的对状态进行命名,编码。

                  

      对“Idle”,“1”,“10”,“100”,“1001”分别状态命名为“Idle”,“S1”,“S10”,“S100”,“S1001”。Verilog程序如下:

module seq_detector(seq,clk,rst,b);
// detector "10010"
input seq,clk,rst;
output b;
reg b;
reg [4:0]state;
parameter Idle
= 5'b1_0000,
S1
= 5'b0_1000,
S10
= 5'b0_0100,
S100
= 5'b0_0010,
S1001 = 5'b0_0001;
always @(posedge clk or negedge rst)
//low active
if (!rst) begin
state <= Idle;
b <= 0;
end
else
case(state)
Idle: if( seq == 0)
begin
state <= Idle;
b <= 0;
end
else
begin
state <= S1;
b <= 0;
end
S1: if( seq == 0)
begin
state <= S10;
b <= 0;
end
else
begin
state <= S1;
b <= 0;
end
S10: if( seq == 0)
begin
state <= S100;
b <= 0;
end
else
begin
state <= S1;
b <= 0;
end
S100: if( seq == 0)
begin
state <= Idle;
b <= 0;
end
else
begin
state <= S1001;
b <= 0;
end
S1001: if( seq == 0)
begin
state <= Idle;
b <= 1;
end
else
begin
state <= S1;
b <= 0;
end
default state <= 5'bx;
endcase
endmodule

      testbench文件如下:

`timescale 1ns/1ns
`define halfperiod 20
module t;
reg clk,rst;
reg [23:0]data;
wire seq,b;
assign seq = data[23];
initial
begin
clk = 0;
rst = 1;
#2 rst = 0;
#30 rst = 1;
data = 20'b1100_1001_0000_1001_0100;
//data为24位,但只给了20位,前面的会自动补零。
#(`halfperiod * 1000)$stop;
end
always #(`halfperiod) clk = ~clk;
always @(posedge clk)
#2 data = {data[22:0],data[23]};
seq_detector m(.seq(seq), .clk(clk), .rst(rst), .b(b) );
endmodule

      通过Modelsim仿真得到的结果如下:

      可以看到seq在“10010”序列发生后,b能检测到序列的输入并输出高电平。

最后

以上就是无私老师为你收集整理的“10010”序列检测器的Verilog实现与Modelsim仿真的全部内容,希望文章能够帮你解决“10010”序列检测器的Verilog实现与Modelsim仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部