EDA设计实验_序列检测器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中农业大学理学院计算机系
实验题目:
设计串行数据检测器
实验说明:
设计一个“1001”串行数据检测器。使得但输出序列中出现“1001”时,结果中就输出1。输入/输出如下所示:
输入x:000 101 010 010 011 101 001 110 101
输出z:000 000 000 010 010 000 001 000 000
实验分析:
初始状态设为s0,此时检测数据序列为“0000”,当再检测到一个0时,仍为s0,当检测到1时,进入下一个状态s1,此时序列为“0001”;当在状态s1检测到0时,进入到状态s2,此时序列为“0010”,当检测到1时,仍为s1;当在状态s2检测到0时,进入到状态s3,此时序列为“0100”,当检测到1时,进入s1;当在状态s3检测到0时,进入s0,当检测到1时,进入状态s4,此时序列为“1001”,结果输出为1;当在s4检测到0时,进入状态s2,当检测到1时,进入状态s1。状态图如下:
实验代码:
module sjjcq10_3(x,z,clk,reset,state);
input x,clk,reset;
output z;
output[2:0]state;
reg[2:0]state;
reg z;
parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;
always@(posedge clk)
begin
if(reset)begin state<=s0;z<=0;end
else
casex(state)
s0: begin
if(x==0) begin state<=s0;z<=0;end
else begin state<=s1;z<=0;end
end
s1: begin
if(x==0) begin state<=s2;z<=0;end
else begin state<=s1;z<=0;end
end
s2:begin
if(x==0) begin state<=s3;z<=0;end
else begin state<=s1;z<=0;end
end
s3:begin
if(x==0) begin state<=s0;z<=0;end
else begin state<=s4;z<=1;end
end
s4:begin
if(x==0) begin state<=s2;z<=0;end
else begin state<=s1;z<=0;end
end
default: state<=s0;
endcase
end
endmodule
实验仿真波形:
分析:每当到达状态四即s4,此时检测序列为“1001”,输出即为1.