文档介绍:11 南昌大学实验报告姓名: 学号: 6100210173 专业班级: 中兴通信 101 实验类型:验证□综合■设计□创新□实验日期: 2012 、 11、16 实验四序列信号发生器与检测器设计一、实验目的 1、.学习 VHDL 文本输入法 2、学习有限状态机的设计 3、 , 完成序列为 01110********** 的序列生成器 ,实现串行序列 11010 的检测器 ,则输出显示位为“1”,否则为“0” . 设计思路 ,所以必须设计一个分频器, 将起始频率作为数码管的扫描频率,而将分频后的频率作为序列发生器的移位频率, 所以在程序中设置 10KHZ 进行分频分成 1HZ 脉冲(10KHZ 的扫描频率是为了让数码管的动态显示更加清晰) 16位的序列,而是通过直接设计一串 16位的序列,通过对最高位的输出与并置来形成一串循环的 16位序列,这样设计简单方便,易于操作与控制,也减少了在状态转移产生的误差,其主要的核心程序为: architecture bhv ofp2is signal bs: std_logic_vector(15 downto 0):="01110**********"; begin xlout<=bs(15); process (clk1hz) begin if(clk1hz'event and clk1hz='1') then bs<= bs(14 downto 0)&bs(15); 先将序列最高位输出至序列检测器中,然后在一个脉冲作用下,将此时最高位变成最低位,其余 14位不变,使序列循环移动,最终形成一个 16位循环序列。 ,通过状态的转移来实现被检测序列的的检测,首先设定 6个状态 S0S1S2S3S4S5通过这 6个状态的转移情况来检测出 11010 这个序列。 22 但因为序列发生器发生的序列不断循环过程中也会出现一些类似 11010 的特殊序列,则在状态转移中则需要通过一些状态的变换来检测出里面包含的 11010 序列, 如下文所讲的两种特殊情形便是我们序列发生器产生序列中出现的特殊序列: (1)在序列发生器产生序列不断循环过程中出现该序列 1110100 ,此序列中也有一个要检测到的序列但在状态转移过程需要注意: 1110100S0S1S2S2S3S4S5S0 即当 S2状态转移到 S3状态时,如果此时序列值为 1,则只需转移到状态本身 S2 而不需要转移至 S0,这样即可节约转移时间也可提高检测效率,之后的状态按正常转移并且最后从状态 S5回到 S0。(2) 在序列发生器产生序列不断循环过程中出现该序列 110110100 ,此序列中也有一个要检测到的序列但是在状态团转移时同样需要注意: 110110100 S0S1S2S3S4S2S3S4S5S0 即当状态 S4转移到 S5状态时,如果此时序列值为 1,则需要将状态转移至 S2状态, 从S2状态重新开始检测,而不需要转移至 S0,之后其它状态正常转移并且最后由 S5 状态转移至 S0状态。 S1 S0 S4 S3 S2 01 1010 01 0 1 0从上面的流程图可以看出所有的回路在检测完一次序列后在下一次没有该序列时会流向初始状态 S0,而当两个或多个被检测序列连续在一起时,状态 S5会跳过状态S0直接转移至状态 S1完成序列的的检测,直到检测完后再次回到初始状态 S0,并且为了避免上面所讲的两种特殊序列在状态转移都进行了改进,在状态 S2至状态 S3 时若序列值为 1则返回自身,消除第一种特殊情况下序列的检测问题,在状态 S4至状态S5时若序列值为 1返回到状态 S2,消除第二种特殊情况对 1101016 序列的检测。 3、此外在设计序列检测器时,为了使实验现象更明显,更好的观测序列的的移动与检测情况我使用了 5个LED 分别来显示最新产生的五个序列位,分别输出到端口 ledag(4),ledag(3),ledag(2),ledag(1),ledag(0) 实现程序语句如下 if(clk1hz'event and clk1hz='1') then ledag(4)<=ledag(3);--- 移位输出显示在 led 上以便观看 S533 ledag(3)<=ledag(2); ledag(2)<=ledag(1); ledag(1)<=ledag(0); ledag(0)<=xlout;-- 将最近生产的序列