实验三用状态机实现序列检测器的设计Verilog.docx

上传人:b****6 文档编号:8389695 上传时间:2023-01-31 格式:DOCX 页数:9 大小:16.63KB
下载 相关 举报
实验三用状态机实现序列检测器的设计Verilog.docx_第1页
第1页 / 共9页
实验三用状态机实现序列检测器的设计Verilog.docx_第2页
第2页 / 共9页
实验三用状态机实现序列检测器的设计Verilog.docx_第3页
第3页 / 共9页
实验三用状态机实现序列检测器的设计Verilog.docx_第4页
第4页 / 共9页
实验三用状态机实现序列检测器的设计Verilog.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实验三用状态机实现序列检测器的设计Verilog.docx

《实验三用状态机实现序列检测器的设计Verilog.docx》由会员分享,可在线阅读,更多相关《实验三用状态机实现序列检测器的设计Verilog.docx(9页珍藏版)》请在冰豆网上搜索。

实验三用状态机实现序列检测器的设计Verilog.docx

实验三用状态机实现序列检测器的设计Verilog

实验三_用状态机实现序列检测器的设计Verilog

实验三用状态机实现序列检测器的设计

一、实验目的:

用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。

二、原理说明:

序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出a,否则输出b。

由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。

在检测过程中,任何一位不相等都将回到初始状态重新开始检测。

例3-1述的电路完成对序列数"11100101"的。

当这一串序列数高位在前(左移)串行进入检描

测器后,若此数与预置的密码数相同,则输出“a”,否则仍然输出“b”。

【例3-1】

//顶层文件:

moduleXULIEQI(clk,reset,din18,LED7S);

inputclk;

inputreset;

input[17:

0]din18;

output[6:

0]LED7S;

wire[3:

0]AB;

wire[17:

0]din18;

xulieu1(clk,din18,reset,din);

schku2(din,clk,reset,AB);

decl7su3(AB,LED7S);

endmodule

//串行检测:

moduleschk(DIN,CLK,CLR,AB);

inputDIN,CLK,CLR;

output[3:

0]AB;

reg[3:

0]AB;

reg[7:

0]Q;

parameter

idle=8'b00000000,

a=8'b00000001,

b=8'b00000010,

c=8'b00000100,

d=8'b00001000,

e=8'b00010000,

f=8'b00100000,

g=8'b01000000,

h=8'b10000000;

parameterdata=8'b11100101;

always@(posedgeCLKornegedgeCLR)

if(!

CLR)

begin

Q<=idle;

end

else

begin

case(Q)

idle:

begin

if(DIN==data[7])Q<=a;

elseQ<=idle;

end

a:

begin

if(DIN==data[6])Q<=b;

elseQ<=idle;

end

b:

begin

if(DIN==data[5])Q<=c;

elseQ<=idle;

end

c:

begin

if(DIN==data[4])Q<=d;

elseQ<=c;

end

d:

begin

if(DIN==data[3])Q<=e;

elseQ<=a;

end

e:

begin

if(DIN==data[2])Q<=f;

elseQ<=idle;

end

f:

begin

if(DIN==data[1])Q<=g;

elseQ<=b;

end

g:

begin

if(DIN==data[0])Q<=h;

elseQ<=idle;

end

h:

begin

if(DIN==data[7])Q<=a;

elseQ<=idle;

end

default:

Q<=idle;

endcase

end

always@(Q)

begin

if(Q==h)AB<=4'b1010;

elseAB<=4'b1011;

end

endmodule

//前端预置8位数据输入:

modulexulie(clk,din18,reset,din);

inputclk;

input[17:

0]din18;

inputreset;

outputdin;

regdin;

parameter

s0=5'b00000,

s1=5'b00001,

s2=5'b00010,

s3=5'b00011,

s4=5'b00100,

s5=5'b00101,

s6=5'b00110,

s7=5'b00111,

s8=5'b01000,

s9=5'b01001,

s10=5'b01010,

s11=5'b01011,

s12=5'b01100,

s13=5'b01101,

s14=5'b01110,

s15=5'b01111,

s16=5'b10000,

s17=5'b10001;

reg[4:

0]cur_state,next_state;

always@(posedgeclkornegedgereset)

if(!

reset)

cur_state<=s17;

else

cur_state<=next_state;

always@(cur_stateordin18ordin)

begin

case(cur_state)

s17:

begin

din<=din18[17];

next_state<=s16;

end

s16:

begin

din<=din18[16];

next_state<=s15;

end

s15:

begin

din<=din18[15];

next_state<=s14;

end

s14:

begin

din<=din18[14];

next_state<=s13;

end

s13:

begin

din<=din18[13];

next_state<=s12;

end

s12:

begin

din<=din18[12];

next_state<=s11;

end

s11:

begin

din<=din18[11];

next_state<=s10;

end

s10:

begin

din<=din18[10];

next_state<=s9;

end

s9:

begin

din<=din18[9];

next_state<=s8;

end

s8:

begin

din<=din18[8];

next_state<=s7;

end

s7:

begin

din<=din18[7];

next_state<=s6;

end

s6:

begin

din<=din18[6];

next_state<=s5;

end

s5:

begin

din<=din18[5];

next_state<=s4;

end

s4:

begin

din<=din18[4];

next_state<=s3;

end

s3:

begin

din<=din18[3];

next_state<=s2;

end

s2:

begin

din<=din18[2];

next_state<=s1;

end

s1:

begin

din<=din18[1];

next_state<=s0;

end

s0:

begin

din<=din18[0];

next_state<=s17;

end

default:

begin

din<=1'b0;

next_state<=s0;

end

endcase

end

endmodule

提示:

1.若对于D<="11100101",电路需记忆:

初始状态、1、11、111、1110、11100、111001、1110010、11100101共9种状态。

三、实验内容:

1.编写由两个主控进程构成的有限状态机。

画出状态图,并给出其仿真测试波形;2.自己编写数码管显示程序(decl7s.v)来显示A或B状态。

已知数码管为共阳级连接。

输入(4bits)输出(7bits)显示内容

4’b10107’b0001000a

4’b10117’b0000011b

4’b00007’b10000000

提示:

可以在default分支选用显示“0”。

3.利用QuartusII对文本编辑输入、仿真测试并给出仿真波形,了解控制信号的时序。

最后进行引脚锁定并完成硬件测试实验。

建议用KEY3(PIN_W26)控制复位信号RESET;KEY2(PIN_P23)控制状态机工作时钟

CLK;指示输出AB接数码管HEX0(PIN_AF10,PIN_AB12,PIN_AC12,PIN_AD11,PIN_AE11,

PIN_V14,PIN_V13)。

5.下载后,按以下提示进行操作:

1)、按实验板“系统复位”键;

2)、用SW17-SW0键输入包含待测序列数"11100101"的18位数据;

3)、按下RESET键;

4)、按KEY2键(时钟clk输入)18次,这时若串行输入的18位二进制序列码中包含有"11100101",则数码管HEX0应从原来的B变成A,表示序列检测正确,否则仍为B。

四、思考题:

说明代码表达的是什么类型的状态机,它的优点是什么,详述其功能和对序列数检

测的逻辑过程;

五、实验报告:

根据以上的实验内容写出实验报告,包括设计原理、程序设计、程序分析、仿真分析、硬件测试和详细实验过程。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1