序列检测器之状态机设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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恰好与原序列数的头三位相同。