EDA序列检测器状态机.doc
文本预览下载声明
电子信息学院
实验报告书
课程名:《电子综合设计EDA》
题 目: 实验4 状态机控制电路设计1
实验类别 【设计】
班 级:
学 号:
姓 名:
实验目的
通过实验掌握状态机设计技术
掌握利用状态机设计序列检测器的方法
实验内容、要求
序列检测器也称为串行数据检测器,是一种能够检测输入的一串二进制编码,当该二进制码与事先设定的码一致时,检测电路输出高电平,否则输出低电平。它在数据通讯,雷达和遥测等领域中用于检测同步识别标志,是一种用来检测一组或多组序列信号的电路。
以设计“01101”这个序列的检测器为例:设X为数字码流输入,Z为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。设输入的码流为“001101101111011111...”,在时钟2~6中,码流X里出现指定序列“01101”,对应输出Z在第6个时钟变为高电平“1”,表示发现指定01101”,Z输出“1”。同理在第9个时钟对应输出Z也为“1”。根据这个逻辑功能描述,可以分析得出状态转换图。
要求:
完成一个序列检测器,用状态机设计,能从输入的码流中对特定数行检测的电路设计(要求画出状态转换图),并且设计一个仿真测试用的Verilog程序(输入的码流要包括至少两个特定数据,如...1011001011001010110110010...),从时序上验证检测电路模块的正确性。
课后讨论如果不用状态机而用其他方法(如移位寄存器)应该怎样设计序列检测器。
实验步骤和程序
`timescale 1ns / 1ps
module seqdet
(
input wire x,
input wire clk,
input wire rst,
output wire z
);
reg[3:0] state;
localparam IDLE = 4d0,
A = 4d1,
B = 4d2,
C = 4d3,
D = 4d4,
E = 4d5,
F = 4d6,
G = 4d7,
H = 4d8,
I = 4d9;
assign z = (state == G x==0)?1b1:1b0;//状态为G时又收到输入0,表明10010已经收到,输出为1
always@ (posedge clk,negedge rst)
if(!rst)
begin
state = IDLE;
end
else
casex(state)
IDLE:
if(x==1)
state = A; //状态A记住第一位正确高电平1来过
else
state = IDLE;
A:
if(x==0)
state = B; //状态B记住第二位正确低电平0来过
else
state = A;
B:
if(x==1)
state = C; //状态C记住第三位正确低电平1来过
else
state = I;//输入高电平,不符合要求,I记?∶挥?位曾经?怨? C:
if(x==1)
state = D; //状态D记住第四位正确高电?来过
else
state = B;
D:
if(x==0)
state = E; //状态E记住第五位正确低电平0来过
else
state = A;
显示全部