资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,课堂练习序列检测器设计,1,序列检测器设计,序列检测器是时序逻辑中的经典问题,序列检测器一般有一个输入X和一个输出Y。输入信号在不断变化,从而形成一个与时间相关的输入序列。序列检测器就是当输入序列中包含特定串时,设置输出信号Y为高电平,表示检测到了特定串。,本设计中需要检测的序列是“1110010”,2,序列检测器设计的关键是设计相应的有限状态自动机,自动机初始状态为S0;,当自动机接收到一个“1”时,自动机进入S1状态;,如果在S1状态接收到“1”时,自动机进入到S2状态;,如果在S2状态接收到“1”时,自动机进入到S3状态;,如果在S3状态接收到“0”时,自动机进入到S4状态;,如果在S4状态接收到“0”时,自动机进入到S5状态;,如果在S5状态接收到“1”时,自动机进入到S6状态;,如果在S6状态接收到“0”时,自动机进入到S7状态;,如果自动机处于S7状态,则表示接收到了一个连续的串“1110010”,此时可以设置输出信号为高电平;,这就首先得到了有限状态机的基本框架。,3,序列检测器的设计难点在于各种状态在各种输入情况下的下一状态设计,以S3状态为例,由于进入S3状态表示前一输入为“1”,因此如果在S3状态下输入“1”,则表示当前三个输入为“111”,考察待检测序列为“1110010”,就知道此时状态机应保持S3状态,4,序列检测器的设计难点在于各种状态在各种输入情况下的下一状态设计,再如S4状态,由于进入S4状态前的输入序列为“1110”,因此如果在S4 状态下输入“1”,则表示当前输入序列为“11101”,考察待检测序列为“1110010”,可以发现实际输入了“1”,就知道此时状态机应转移到S1状态,为了更清晰的表示各个状态之间的关系,应画出状态转换图,5,序列检测器的VHDL语言描述,library ieee;,use ieee.std_logic_1164.all;,entity FSM_sequence_detector is,port(clk,xi: in std_logic;,output: out std_logic,);,end FSM_sequence_detector;,6,序列检测器的VHDL语言描述,architecture fsm of FSM_sequence_detector is,type states is (s0,s1,s2,s3,s4,s5,s6,s7);,signal state: states:=s0;,begin,process(xi,state),begin,if clkevent and clk=1 then,case state is,when s0=output=0;,if(xi=1) then,state=s1;,else,stateoutput=0;,if(xi=1) then,state=s2;,else,stateoutput=0;,if(xi=1) then,state=s3;,else,stateoutput=0;,if(xi=0) then,state=s4;,else,stateoutput=0;,if(xi=0) then,state=s5;,else,stateoutput=0;,if(xi=1) then,state=s6;,else,stateoutput=0;,if(xi=0) then,state=s7;,else,stateoutput=1;,if (xi=0) then,state=s0;,else,state=s1;,end if;,end case;,end if;,end process;,end fsm;,10,序列检测器的功能仿真波形的建立,11,序列检测器的功能仿真结果,12,
展开阅读全文