1、实验三用状态机实现序列检测器的设计Verilog实验三_用状态机实现序列检测器的设计Verilog实验三 用状态机实现序列检测器的设计 一、实验目的: 用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。 二、原理说明: 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出a,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例
2、3-1述的电路完成对序列数11100101的。当这一串序列数高位在前(左移)串行进入检描测器后,若此数与预置的密码数相同,则输出“a”,否则仍然输出“b”。 【例3-1】 /顶层文件: module XULIEQI(clk,reset,din18,LED7S); input clk; input reset; input 17:0 din18; output 6:0 LED7S; wire 3:0 AB; wire 17:0 din18; xulie u1 (clk, din18, reset, din); schk u2 (din,clk,reset,AB); decl7s u3 (AB,L
3、ED7S); endmodule /串行检测: module schk(DIN,CLK,CLR,AB); input DIN,CLK,CLR; output3:0 AB; reg 3:0 AB; reg 7:0 Q; parameter idle = 8b00000000, a = 8b00000001, b = 8b00000010, c = 8b00000100, d = 8b00001000, e = 8b00010000, f = 8b00100000, g = 8b01000000, h = 8b10000000; parameter data=8b11100101; always
4、(posedge CLK or negedge CLR) if(!CLR) begin Q = idle; end else begin case(Q) idle: begin if(DIN=data7) Q=a; else Q=idle; end a: begin if(DIN= data6) Q=b; else Q=idle; end b: begin if(DIN= data5) Q=c; else Q=idle; end c: begin if(DIN= data4) Q=d; else Q=c; end d: begin if(DIN= data3) Q=e; else Q=a; e
5、nd e: begin if(DIN= data2) Q=f; else Q=idle; end f: begin if(DIN= data1) Q=g; else Q=b; end g: begin if(DIN= data0) Q=h; else Q=idle; end h: begin if(DIN= data7) Q=a; else Q=idle; end default : Q=idle; endcase end always (Q) begin if(Q=h) AB = 4b1010 ; else AB = 4b1011 ; end endmodule /前端预置8位数据输入: m
6、odule xulie(clk, din18, reset, din); input clk; input17:0 din18; input reset; output din; reg din; parameter s0 = 5b00000, s1 = 5b00001, s2 = 5b00010, s3 = 5b00011, s4 = 5b00100, s5 = 5b00101, s6 = 5b00110, s7 = 5b00111, s8 = 5b01000, s9 = 5b01001, s10 = 5b01010, s11 = 5b01011, s12 = 5b01100, s13 =
7、5b01101, s14 = 5b01110, s15 = 5b01111, s16 = 5b10000, s17 = 5b10001; reg4:0 cur_state,next_state; always (posedge clk or negedge reset) if(!reset) cur_state = s17; else cur_state = next_state; always (cur_state or din18 or din ) begin case (cur_state) s17 : begin din = din1817; next_state = s16; end
8、 s16 : begin din = din1816; next_state = s15; end s15 : begin din = din1815; next_state = s14; end s14 : begin din = din1814; next_state = s13; end s13 : begin din = din1813; next_state = s12; end s12 : begin din = din1812; next_state = s11; end s11 : begin din = din1811; next_state = s10; end s10 :
9、 begin din = din1810; next_state = s9; end s9 : begin din = din189; next_state = s8; end s8 : begin din = din188; next_state = s7; end s7 : begin din = din187; next_state = s6; end s6 : begin din = din186; next_state = s5; end s5 : begin din = din185; next_state = s4; end s4 : begin din = din184; ne
10、xt_state = s3; end s3 : begin din = din183; next_state = s2; end s2 : begin din = din182; next_state = s1; end s1 : begin din = din181; next_state = s0; end s0: begin din = din180; next_state = s17; end default : begin din = 1b0; next_state = s0; end endcase end endmodule 提示:1.若对于D = 11100101 ,电路需记忆
11、:初始状态、1、11、111 、 1110 、11100、111001、1110010、11100101 共9种状态。 三、实验内容: 1. 编写由两个主控进程构成的有限状态机。画出状态图,并给出其仿真测试波形; 2. 自己编写数码管显示程序(decl7s.v)来显示A或B状态。已知数码管为共阳级连接。 输入(4bits) 输出(7bits) 显示内容 4b1010 7b 0001000 a 4b1011 7b 0000011 b 4b0000 7b1000000 0 提示:可以在default分支选用显示“0”。 3. 利用QuartusII对文本编辑输入、仿真测试并给出仿真波形,了解控制信
12、号的时序。最后进行引脚锁定并完成硬件测试实验。 建议用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