您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 用状态机实现序列检测器的设计
1.掌握基于语言的ISE设计全流程;实验三:用状态机实现序列检测器的设计一、实验目的2.用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。3.掌握基于语言的ISE设计全流程;4.熟悉、应用VerilogHDL描述数字电路;二、实验原理与设计过程(一)实验内容:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对序列数11100101的。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“b”。(二)本次实验的核心是:应用有限状态机的设计思路,检测输入的串行数据是否是8’b11100101。根据下载电路板的资源,拟用SW3---SW0,J4接口的E8,F8,C7,D7作为系统输入(系统由此需要设计一个8bits并行数据转串行的模块),一个7段数码显示译码器作为检测结果的输出显示,如果串行序列为”11100101”,显示A,否则显示b(系统需要设计一个7段数码显示译码器模块),为了显示可控,清晰,拟用V16,D18实现时钟,复位信号的输入。(三)设计参考:本实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成:a)系统共包括4个模块:并行数据转串行数据模块、串行检测模块、数码管显示模块、消抖模块。由于需要用按键V16作为时钟输入,为保证实验效果,调用实验二中应用的消抖模块,对时钟clk输入信号进行消抖。b)对于并行数据转串行数据模块输入输出端口说明:i.clk-----系统时钟,由按键V16通过消抖模块后提供。ii.din8-----8bits输入数据,需在时钟控制下,串行输出。iii.reset----系统复位信号,当reset=1’b1时,系统输出复位,否则系统正常工作。iv.din----------1bit输出信号。该并行模块的设计如下:modulexulie_u1(clk,din8,reset,din);inputclk;input[7:0]din8;inputreset;outputdin;parameters0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110,s7=3'b111;reg[2:0]cur_state,next_state;regdin;always@(posedgeclkorposedgereset)if(reset)cur_state=s0;elsecur_state=next_state;always@(cur_stateordin8ordin)begincase(cur_state)s0:begindin=din8[7];next_state=s1;ends1:begindin=din8[6];next_state=s2;ends2:begindin=din8[5];next_state=s3;ends3:begindin=din8[4];next_state=s4;ends4:begindin=din8[3];next_state=s5;ends5:begindin=din8[2];next_state=s6;ends6:begindin=din8[1];next_state=s7;ends7:begindin=din8[0];next_state=s0;enddefault:begindin=1'b0;next_state=s0;endendcaseendendmodule(四)对于串行检测模块其输入输出端口说明如下:a)din-----1bit的串行输入数据b)clk-----同步输入时钟c)clr------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作d)AB--------4bits数据,如果系统检测到8’b11100101的串行输入,AB=4’b1010,否则,AB=4’b1011.e)其设计代码如下:moduleschk_u2(din,clk,reset,AB);inputdin;inputclk;inputreset;output[3:0]AB;reg[3:0]AB;reg[3:0]current_state,next_state;parameterst0=4'b0000,st1=4'b0001,st2=4'b0010,st3=4'b0011,st4=4'b0100,st5=4'b0101,st6=4'b0110,st7=4'b0111,st8=4'b1000;always@(posedgeclkorposedgereset)beginif(reset)current_state=st0;elsecurrent_state=next_state;endalways@(current_stateordin)begincase(current_state)st0:beginAB=4'b1011;next_state=(din==1)?st1:st0;endst1:beginAB=4'b1011;next_state=(din==1)?st2:st0;endst2:beginAB=4'b1011;next_state=(din==1)?st3:st0;endst3:beginAB=4'b1011;next_state=(din==0)?st4:st3;endst4:beginAB=4'b1011;next_state=(din==0)?st5:st1;endst5:beginAB=4'b1011;next_state=(din==1)?st6:st0;endst6:beginAB=4'b1011;next_state=(din==0)?st7:st1;endst7:beginif(din==1)beginAB=4'b1010;next_state=st8;endelsebeginAB=4'b1011;next_state=st0;endendst8:beginAB=4'b1011;next_state=(din==1)?st1:st0;endendcaseendendmodule(五)其中最后的LED驱动模块不做过多说明,只是简单的设计如下:moduledecled7s_u3(AB,led7);input[3:0]AB;output[6:0]led7;reg[6:0]led7;wire[3:0]AB;initialled7=7'b0000000;always@(AB)begincase(AB)4'b1010:led7=7'b1110111;4'b1011:led7=7'b1111100;default:led7=7'b0111111;endcaseendEndmodule·(六)最终加入消抖模块综合结果如下:(七)综合模块代码:moduleXULIEQI(clk_50M,clk1,reset,din8,led7);inputclk_50M,clk1;inputreset;input[7:0]din8;output[6:0]led7;wire[3:0]AB;wiredin,clk;debounce_moduleu1(clk_50M,reset,clk1,clk);xulie_u1u2(clk,din8,reset,din);schk_u2u3(din,clk,reset,AB);decled7s_u3u4(AB,led7);endmodule三、实验仿真(一)根据实验过程综合程序结果:(二)实验引脚约束文件如下:NETclk1LOC=V16|PULLDOWN;NETclk_50MLOC=C9;NETdin8[0]LOC=D7;NETdin8[1]LOC=C7;NETdin8[2]LOC=F8;NETdin8[3]LOC=E8;NETdin8[4]LOC=L13;NETdin8[5]LOC=L14;NETdin8[6]LOC=H18;NETdin8[7]LOC=N17;NETled7[0]LOC=D5;NETled7[1]LOC=C5;NETled7[2]LOC=B6;NETled7[3]LOC=E7;NETled7[4]LOC=F7;NETled7[5]LOC=A4;NETled7[6]LOC=B4;NETresetLOC=D18;NETclk1CLOCK_DEDICATED_ROUTE=FALSE;(三)并行模块的时序仿真情况为:(四)串行检测模块的相应仿真:四、思考题本次实验的设计代码表达的是Moore类型的状态机它的输出信号仅与当前的状态有关,与当前的输入无关。reset=0时,当din=1,idle状态转为s1状态,输出为b;当din=1,s1状态转为s2状态,输出为b;当din=1,s2状态转为s3状态,输出为b;当din=1,s3状态转为s4状态,否则转为s3状态,输出为b;当din=0,s4状态转为s5状态,输出为b;当din=1,s5状态转为s6状态,输出为b;当din=0,s6状态转为s7状态,否则转为s2状态,输出为b;当din=1,s7状态转为s8状态,输出为A。当din=1,s8状态转为s1状态,输出为b,依次循环。当reset=1时,输出复位为b。
本文标题:用状态机实现序列检测器的设计
链接地址:https://www.777doc.com/doc-4893568 .html