实验三序列发生器与序列检测器实验报告

时间:2025-03-10

南昌大学实验报告

姓名: 学号: 6100210173 专业班级: 中兴通信101 实验类型:验证 □综合 ■设计 □创新 □实验日期:2012、11、16

实验四 序列信号发生器与检测器设计

一、实验目的

1、.学习VHDL文本输入法 2、学习有限状态机的设计 3、设计序列信号发生器和检测器 二.实验内容与要求

1. 设计序列发生器,完成序列为0111010011011010的序列生成器 2.用有限状态机设计序列检测器,实现串行序列11010的检测器 3. 若检测到符合要求的序列,则输出显示位为“1”,否则为“0”

4. 对检测到的次数计数 三. 设计思路

1. 设计分频器 因为最终要把待检测序列的检测次数在数码管上显示出,所以必须设计一个分频器,将起始频率作为数码管的扫描频率,而将分频后的频率作为序列发生器的移位频率,所以在程序中设置10KHZ进行分频分成1HZ脉冲(10KHZ的扫描频率是为了让数码管的动态显示更加清晰)

2. 设计序列发生器

在这次的设计序列发生器时没有用状态转移的方法来来形成一个16位的序列,而是通过直接设计一串16位的序列,通过对最高位的输出与并置来形成一串循环的16位序列,这样设计简单方便,易于操作与控制,也减少了在状态转移产生的误差,其主要的核心程序为:

architecture bhv of p2 is

signal bs: std_logic_vector(15 downto 0):="0111010011011010"; begin

xlout<=bs(15); process (clk1hz) begin

if (clk1hz'event and clk1hz='1') then bs<= bs(14 downto 0)&bs(15);

先将序列最高位输出至序列检测器中,然后在一个脉冲作用下,将此时最高位变成最低位,其余14位不变,使序列循环移动,最终形成一个16位循环序列。

3. 设计序列检测器

基本思想是采用有限状态机设计,通过状态的转移来实现被检测序列的的检测,首先设定6个状态S0 S1 S2 S3 S4 S5 通过这6个状态的转移情况来检测出11010这个序列。

但因为序列发生器发生的序列不断循环过程中也会出现一些类似11010的特殊序列,则在状态转移中则需要通过一些状态的变换来检测出里面包含的11010序列,如下文所讲的两种特殊情形便是我们序列发生器产生序列中出现的特殊序列:

(1)在序列发生器产生序列不断循环过程中出现该序列1110100,此序列中也有一个要检测到的序列但在状态转移过程需要注意:

1 1 1 0 1 0 0 S0 S1 S2 S2 S3 S4 S5 S0

即当S2状态转移到S3状态时,如果此时序列值为1,则只需转移到状态本身S2而不需要转移至S0,这样即可节约转移时间也可提高检测效率,之后的状态按正常转移并且最后从状态S5回到S0。

(2)在序列发生器产生序列不断循环过程中出现该序列110110100,此序列中也有一个要检测到的序列但是在状态团转移时同样需要注意:

1 1 0 1 1 0 1 0 0 S0 S1 S2 S3 S4 S2 S3 S4 S5 S0 即当状态S4转移到S5状态时,如果此时序列值为1,则需要将状态转移至S2状态,从S2状态重新开始检测,而不需要转移至S0,之后其它状态正常转移并且最后由S5状态转移至S0状态。

从上面的流程图可以看出所有的回路在检测完一次序列后在下一次没有该序列时会流向初始状态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上以便观看

ledag(3)<=ledag(2); ledag(2)<=ledag(1); ledag(1)<=ledag(0);

ledag(0)<=xlout;--将最近生产的序列赋给最前端的ledge(0)位 end if; 4、设计计数器模块

因为序列发生器产生的序列不断地循环,待检测序列11010的个数很多,则在程序中设计计数模块,当序列检测器模块检测完一次待检测序列11010时产生一次下降沿,而计数器模块通过该下降沿进行计数自动加一,因为用两个数码管来表示待检测序列的个数,所以计数模块取上限为99即用数码管译码模块将计数值在数码管表示出来时最多能计99检测序列之后清零重新计数,这样设计之后比通过LED

四、实验程序(程序来源于自己编写) --

--分频器模块

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity p1 is

rt(clk:in std_logic;

clk1hz:out std_logic --分频的频率1HZ的输出端口 ); end p1;

architecture behave of p1 is

Signal Clk_Count1 : std_logic_vector(13 downto 0); begin

process(clk) --将10KHZ的频率分频成1HZ begin

if(Clk'event and Clk='1') then if(Clk_Count1<10000) then

Clk_Count1<=Clk_Count1+1; --在小于10000时,自动加1 else

Clk_Count1<="00000000000001&q …… 此处隐藏:6537字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验三序列发生器与序列检测器实验报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219