序列检测器之状态机设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

序列检测器之状态机设计

一、实验目的

8位序列数“110110011”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的“密码”数相同,则输出1,否则仍然输出0。

二、实验原理

(1)状态机用于序列检测器的设计比其他方法更能显示其优越性。

(2)序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种监测器必须记住前一次的正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测的过程中,任何一位不相等都将回到初始状态重新开始检测。

三、实验步骤

(1)检测数据110110011,高位在前的程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SCHK IS

PORT(DIN,CLK, RST : IN STD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT : OUT STD_LOGIC);--检验结果输出

END SCHK;

ARCHITECTURE behav OF SCHK IS

TYPE states IS (S0, S1, S2, S3,S4, S5, S6, S7, S8);--定义各种状态

SIGNAL ST, NST: states :=s0 ;--设定现态变量和次态变量

BEGIN

COM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式

CASE ST IS --11010011

WHEN s0 => IF DIN = '1' THEN NST <= s1 ; ELSE NST<=s0 ; END IF ; WHEN s1 => IF DIN = '0' THEN NST <= s2 ; ELSE NST<=s0 ; END IF ; WHEN s2 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN s3 => IF DIN = '1' THEN NST <= s4 ; ELSE NST<=s0 ; END IF ; WHEN s4 => IF DIN = '1' THEN NST <= s5 ; ELSE NST<=s0 ; END IF ; WHEN s5 => IF DIN = '0' THEN NST <= s6 ; ELSE NST<=s0 ; END IF ; WHEN s6 => IF DIN = '1' THEN NST <= s7 ; ELSE NST<=s0 ; END IF ; WHEN s7 => IF DIN = '0' THEN NST <= s8 ; ELSE NST<=s0 ; END IF ; WHEN s8 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN OTHERS => NST<=s0;

END CASE;

END PROCESS;

REG: PROCESS (CLK,RST) BEGIN ---时序进程

IF RST='1' THEN ST <= s0;

ELSIF CLK'EVENT AND CLK='1' THEN ST <= NST; END IF;

END PROCESS REG;

SOUT <= '1' WHEN ST=s8 ELSE '0' ;

END behav ;

(2)生成的RTL电路图如下所示:

图(1)

(3)生成symbol如图所示:

图(2)

(4)对其进行波形仿真得到波形如下所示:

图(3)

四、结果分析

图(3)的波形显示,当有正确序列进入时,到了状态S8时,输出正确标志

SOUT=1。而当下一位数据为0时,即DIN=0,进入状态s3。这是因为这是测出的数据110恰好与原序列数的头三位相同。

相关文档
最新文档