序列检测器设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 这就首先得到了有限状态机的基本框架。 这就首先得到了有限状态机的基本框架。
3
序列检测器的设计难点在于各种状态在各种输入情 况下的下一状态设计
• 以S3状态为例,由于进入S3状态表示前一输入为“1”, 因此如果在S3状态下输入“1”,则表示当前三个输入为 “111”,考察待检测序列为“1110010”,就知道此时状态 机应保持S3状态
2
序列检测器设计的关键是设计相应的 有限状态自动机
• • • • • • • • • 自动机初始状态为S0; 当自动机接收到一个“1”时,自动机进入S1状态; 如果在S1状态接收到“1”时,自动机进入到S2状态; 如果在S2状态接收到“1”时,自动机进入到S3状态; 如果在S3状态接收到“0”时,自动机进入到S4状态; 如果在S4状态接收到“0”时,自动机进入到S5状态; 如果在S5状态接收到“1”时,自动机进入到S6状态; 如果在S6状态接收到“0”时,自动机进入到S7状态; 如果自动机处于S7状态,则表示接收到了一个连续的串 “1110010”,此时可以设置输出信号为高电平;
7
序列检测器的VHDL语言描述 语言描述 序列检测器的
when s1=>output<='0'; if(xi='1') then state<=s2; else state<=s0; end if; when s2=>output<='0'; if(xi='1') then state<=s3; else state<=s0; end if; when s3=>output<='0'; if(xi='0') then state<=s4; else state<=s3; end if;
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 clk'event and clk='1' then case state is when s0=>output<='0'; if(xi='1') then state<=s1; else state<=s0; end if;
9
序列检测器的VHDL语言描述 语言描述 序列检测器的
when s7=>output<='1'; if (xi='0') then state<=s0; else state<=s1; end if; end case; end if; end process; end fsm;
wenku.baidu.com10
序列检测器的功能仿真波形的建立
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;
11
序列检测器的功能仿真结果
12
4
序列检测器的设计难点在于各种状态在各种输入情 况下的下一状态设计
• 再如S4状态,由于进入S4状态前的输入序列为“1110”, 因此如果在S4 状态下输入“1”,则表示当前输入序列为 “11101”,考察待检测序列为“1110010”,可以发现实 际输入了“1”,就知道此时状态机应转移到S1状态 • 为了更清晰的表示各个状态之间的关系,应画出状态转换 图
课堂练习——序列检测器设计
1
序列检测器设计
• 序列检测器是时序逻辑中的经典问题 • 序列检测器一般有一个输入X和一个输出Y。输入信号在 不断变化,从而形成一个与时间相关的输入序列。序列检 测器就是当输入序列中包含特定串时,设置输出信号Y为 高电平,表示检测到了特定串。 • 本设计中需要检测的序列是“1110010”
8
序列检测器的VHDL语言描述 语言描述 序列检测器的
when s4=>output<='0'; if(xi='0') then state<=s5; else state<=s1; end if; when s5=>output<='0'; if(xi='1') then state<=s6; else state<=s0; end if; when s6=>output<='0'; if(xi='0') then state<=s7; else state<=s2; end if;