当前位置:文档之家› 序列信号检测器论文

序列信号检测器论文

always @(posedge clk)begin //进程 2 检测码流 11011010 if(!rst)begin //同步复位 Y_da<=1'b0; Err_da<=1'b0; Num_da<=8'd0; stage1<=ss0; //状态 0 end else begin case(stage1) ss0:if(Data_in==0)begin //0 stage1<=ss0; Y_da<=1'b0; end else begin //1 stage1<=ss1; //检测到 1 跳转到下一个状态 Y_da<=1'b0; end ss1:if(Data_in==0)begin //10 stage1<=ss0; //检测到 0 跳转到状态 0 Y_da<=1'b0; end else begin //11 stage1<=ss2; //检测到 1 跳转到下一状态 Y_da<=1'b0; end ss2:if(Data_in==0)begin //110 stage1<=ss3; //检测到 0 跳转到下一状态 Y_da<=1'b0; end else begin //111 stage1<=ss2; //检测到 1 等待检测下一个值 Y_da<=1'b0; end ss3:if(Data_in==0)begin //1100 stage1<=ss0; //检测到 0 跳转到状态 0 Y_da<=1'b0; end else begin //1101 stage1<=ss4; //检测到 1 跳转到下一状态
Num_9e<=8'd0;
stage0<=s0;
end
else begin
case(stage0)
//10011110
s0:if(Data_in==0)begin
stage0<=s0;
Y_9e<=1'b0;
end
else begin
stage0<=s1; //检测到 1 跳转到洗衣状态
Y_9e<=1'b0;
Y_9e<=1'b0;
end
s6:if(Data_in==0)begin //1001110
stage0<=s2;//检测到 0 跳转到状态 2
Y_9e<=1'b0;
end
else begin
//1001111
stage0<=s7;//检测到 1 跳转到下一状态
Y_9e<=1'b0;
end
s7:if(Data_in==0)begin //10011110
4.Testbench源代码
`timescale 10ns/1ns //时间单位
module seq_test;
//测试激励模块
reg
clk,rst,Data_in;
wire
Y_9e,Y_da,Err_9e,Err_da;
wire [7:0]Num_9e,Num_da;
parameter Num_serial1="10011110";
实验课程名称
序列信号检测器
姓名:殷富有 学号:GS12062448 院系:Computer school of NUDT 专业:微电子
一、 实验目的
1.熟悉使用 Verilog Hdl 语言; 2.熟悉使用 Modelsim、Design Compiler、Ise 等工具; 3.掌握用 Verilog Hdl 语言实现状态机的方法; 4.利用状态机设计一个序列检测器。
的设计步骤
首先,划分 8 个状态 ss0、ss1、ss2、ss3、ss4、ss5、ss6、ss7;
画出状态转换图如图 3.4 所示。
图 3.4 检测码流 11011010 的状态转换图
画出检测码流 11011010 的状态转换表如表 3.5 所示。
现态 Sn SS0
end
end
else begin //10011111
stage0<=s1;//检测到 1 跳转到状态 1
Y_9e<=1'b0;
end
default:begin
stage0<=s0;
Y_9e<=1'b0;
Err_9e<=1'b0;
Num_9e<=8'd0;
end
endcase end end
3.检测码流 11011010 的Verilog Hdl源代码
检测到码流 11011010 的次数超过 255 次, 高有效
2.检测码流 10011110 的Verilog Hdl源代码
always @(posedge clk)begin //进程 1 检测码流 10011110 if(!rst)begin //同步复位 Y_9e<=1'b0;
Err_9e<=1'b0;
Y_9e<=1'b0;
end
else begin //1001
stage0<=s4;//检测到 1 跳转到下一状态
Y_9e<=1'b0;
end
s4:if(Data_in==0)begin //10010
stage0<=s2;//检测到 0 跳转到状态 2
Y_9e<=1'b0;
end
else begin //10011
检测到的序列,并输出检测到的次数
$display("Num_serial1_time:time=%d ns.",10*cnt);// 显 示
检测到的时间
if(Num_9e>=255)begin
Num_9e<=8'd0;
Err_9e<=1'b1; //高有效 保持一个时钟
end
else begin
Err_9e<=1'b0; //没溢出 保持低电平
//元件例化
.Y_da(Y_da),.Err_9e(Err_9e),.Err_da(Err_da),.Num_9e(Num_9e),.Num_da(Num_da));
名称 clk rst
input output output output output output output
Data_in Y_9e Y_da Num_9e Num_da Err_9e Err_da
位宽 描述
备注
1
标准时钟信号,周期为 10ns
1
同步复位信号,低有效
维持有效至少两个 时钟周期
1
stage0<=s5;//检测到 1 跳转到下一状态
Y_9e<=1'b0;
end
s5:if(Data_in==0)begin //100110
stage0<=s2;//检测到 0 跳转到状态 2
Y_9e<=1'b0;
end
else begin
//100111
stage0<=s6;//检测到 1 跳转到下一状态
表 3.5 检测码流 11011010 的状态转换表
次态 Sn+1 A=0 A=1
现态 Sn
次态 Sn+1
A=0
A=1
SS0
SS1
SS1
SS2
SS0
SS2
SS3
SS2
SS4
SS0
SS5
SS6
SS0
SS7
SS3
SS0
SS4
SS5
SS6
SS2
SS7
SS0
SS2
四、程序设计
1.接口说明
类型 input input
end
s1:if(Data_in==0)begin //10
stage0<=s2;//检测到 0 跳转到下一状态
Y_9e<=1'b0;
end
else begin
//11
stage0<=s1;//检测到 1 等待下一个值
Y_9e<=1'b0;
end
s2:if(Data_in==0)begin //100
三、实验原理
图 3.1 序列检测器顶层原理图
序列检测器在数据通讯,雷达和遥测等领域中用与检测同步识别 标志。它是一种用来检测一组或多组序列信号的电路,一旦检测到所 需信号就输出高电平,这在数字通信领域有广泛的应运。
1. 检测码流 10011110 的设计步骤 首先,划分 8 个状态 s0、s1、s2、s3、s4、s5、s6、s7;画出状 态转换图如图 3.2 所示。
stage0<=s3;//检测到 0 跳转到下一状态
Y_9e<=1'b0;
end
else begin //101
stage0<=s1;//检测到 1 跳转到状态 1
Y_9e<=1'b0;
end
s3:if(Data_in==0)begin //1000
stage0<=s0;//检测到 0 跳转到状态 0
图 3.2 检测码流 10011110 的状态转换图
画出状态转换表如表 3.3 所示。
现态 Sn S0
表 3.3 检测码流 10011110 的状态转换表
次态 Sn+1
现态
次态 Sn+1
A=0 A=1
Sn
A=0
A=1
S0
S1
S1
S2
S1
S2
相关主题