设计一个的序列检测器完整版
- 格式:docx
- 大小:216.87 KB
- 文档页数:5
实验三、序列检测器的设计一、预习内容1、预习序列发生器和检测器的基本工作原理;2、画出实验原理草图;3、写出实验的基本步骤和源程序。
二、实验目的1、掌握序列检测器的工作原理;2、学会用状态机进行数字系统设计。
三、实验器材PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)、导线若干四、实验要求1、检测连续4个‘1’的状态机,画出状态转移图,并写出VHD代码;(必做部分)2、了解试验箱,完成数据分配器的硬件实验。
(实验一的硬件操作,首次使用请谨慎使用试验箱!)3、检测“10001110”序列,当检测到该序列后输出为‘1’。
(此部分选作)五、实验原理和实验内容1、序列发生器原理(此部分选作)在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。
本实验要求产生一串序列“10001110”。
该电路可由计数器与数据选择器构成,其结构图如图6-1所示,其中的锁存输出的功能是为了消除序列产生时可能出现的毛刺现象:图6-1 序列发生器结构图2、序列检测器的基本工作过程:序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,在数字通信中有着广泛的应用。
当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
状态图如图6-2所示:图6-2 序列检测器状态图3、状态机的基本设计思想:在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。
同时,状态机的设计方法也是数字系统中一种最常用的设计方法。
一般来说,标准状态机可以分为摩尔(Moore)机和米立(Mealy)机两种。
实验三序列信号检测器的设计一、实验目的:1、理解序列信号检测器的工作原理;2、掌握原理图和文本输入的混合设计输入方法;3、理解状态划分;4、掌握状态机程序的编写方法;二、实验原理:序列检测器是时序数字电路中非常常见的设计之一。
它的主要功能是:将一个指定的序列从数字码流中识别出来。
接下来的设计就是针对“011”这个序列的检测器。
设input为数字码流输入,output为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。
设输入的码流为“001101101111011111...”,在时钟2~4中,码流input里出现指定序列“011”,对应输出output在第4个时钟变为高电平“1”,表示发现指定"011”,以此类推。
序列发生器模块采用的是M(n=4)序列发生器,详细可以参考《EDA技术与应用》一书的4.4团队协作及逻辑锁定。
三、实验内容(1)最终的顶层设计原理图如下:左侧的四个D触发器组成的电路为M序列信号发生器模块,它可以产生15位随机的二进制码流。
发生器产生的二进制码流每隔15个时钟周期重复出现一次。
详细的可以在最终的时序仿真图中看出来。
右侧的get_str模块为检测模块,给予状态机的结构编写的,具体如下:library ieee;use ieee.std_logic_1164.all;entity get_ser isport(clk : in std_logic;input : in std_logic;reset : in std_logic;serout : out std_logic_vector(1 downto 0);output : out std_logic);end entity;architecture rtl of get_ser is-- Build an enumerated type for the state machine type state_type is (s0, s1, s2, s3);-- Register to hold the current statesignal state : state_type;beginserout <= ('0'&input);-- Logic to advance to the next stateprocess (clk, reset)beginif reset = '1' thenstate <= s0;elsif (rising_edge(clk)) thencase state iswhen s0=>if input = '0' thenstate <= s1;elsestate <= s0;end if;when s1=>if input = '1' thenstate <= s2;elsestate <= s1;end if;when s2=>if input = '1' thenstate <= s3;elsestate <= s1;end if;when s3 =>if input = '1' thenstate <= s0;elsestate <= s1;end if;end case;end if;end process;-- Output depends solely on the current state process (state)begincase state iswhen s0 =>output <= '0';when s1 =>output <= '0';when s2 =>output <= '0';when s3 =>output <= '1';end case;end process;end rtl;(2)理解状态机请根据上图对照get_str程序理解检测“011”序列的基本编程思路。
序列检测器设计实验内容:设计一个1110010序列检测器,即检测器检测到序列1110010时,输出为1,否则输出为0。
输入信号:一个时钟输入信号clk;一个输入端x以输入序列来检测;一个输入y用来选择是检测序列1110010或是检测自己输入的序列;一个输入k(7..0)用来输入想要检测器检测的序列;输出信号:一个7位输出信号q,用来输出正在检测的7位序列;一个1位输出信号unlk,当被检测序列符合时,输出unlk为1否则为0;中间信号:再定义两个7位的中间信号a和combination;执行操作:在上升的时钟沿时候,将从x输入的序列赋给7位a,在y等于1的情况下,令中间信号combination为1110010,否则,在y等于0的情况下,令中间信号combination为从k输入的七位长序列。
最后把a的值赋给q,如果a与combination输出unlk等于1否则等于0。
(1)序列检测器语言设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;USE IEEE.STD_LOGIC_ARITH.ALL;entity xulie2 isport (clk,x:in std_logic;y:in std_logic;k:in std_logic_vector(7 downto 1);unlk:out std_logic;q:out std_logic_vector(7 downto 1)); end xulie2;architecture art of xulie2 issignal a:std_logic_vector(7 downto 1);signal combination: std_logic_vector(7 downto 1);beginprocess(clk)beginif clk'event and clk='1' thena<=a(6 downto 1)&x;if y='1' thencombination<="1110010";else combination<=k;end if;end if;q<=a;end process;unlk<='1' when(a=combination) else '0';end art;序列检测器波形图:其中ENDTIME=10.0us GRIDSIZE=100.0ns波形图分析:如图,选择输入端y输入为1时,q对应着输出从x输入的7位序列,如果从x输入的待检测的7位序列为1110010时,unlk为1,否则为0,当选择输入端y输入为0时,q依旧对应着输出从x输入的待检测的当前7为序列,但是只有当从x输入的7为序列与从k输入的7位序列一致时,输出端unlk才为1,否则为0。
VHDL数字系统设计与测试实验报告(一)——有限序列检测器一、设计功能与要求1、实验要求:利用状态机原理设计一个7位序列检测器(1110010)。
2、功能分析:序列检测器一般有一个输入X和一个输出Y。
输入信号在不断变化,从而形成一个与时间相关的输入序列。
序列检测器就是当输入序列中包含特定串时,设置输出信号Y为高电平,表示检测到了特定串。
本设计中需要检测的序列是“1110010”。
二、设计思路序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,1110010 序列检测器的原理图如下:CPX Y 0111010010010首先,要从一串二进制编码中检测出一个已预置的七位二进制码1110010,每增加一位相当于增加一个状态,再加上一个初始态,用八个状态可以实现。
状态机初始状态为S1;当自动机接收到一个“1”时,自动机进入S2状态;如果在S2状态接收到“1”时,自动机进入到S3状态;如果在S3状态接收到“1”时,自动机进入到S4状态;如果在S4状态接收到“0”时,自动机进入到S5状态;如果在S5状态接收到“0”时,自动机进入到S6状态;如果在S6状态接收到“1”时,自动机进入到S7状态;如果在S7状态接收到“0”时,自动机进入到S8状态;如果自动机处于S8状态,则表示接收到了一个连续的串“1110010”,此时可以设置输出信号为高电平。
其Moore型原始状态转移图如下:根据状态转移图可以得出Moore型原始状态转移表为:三、源代码library ieee;use ieee.std_logic_1164.all;entity checkerarray isport(din:in std_logic;clk,clr:in std_logic;z:buffer std_logic);end checkerarray;architecture arch_check of checkerarray is type StateType is(s1,s2,s3,s4,s5,s6,s7,s8);signal present_state,next_state:StateType; beginstate_comb:process(present_state,din)begincase present_state iswhen s1=>z<='0';if din='1'thennext_state<=s2;elsenext_state<=s1;end if;when s2=>z<='0';if din='1'thennext_state<=s3;elsenext_state<=s2;end if;when s3=>z<='0';if din='1'thennext_state<=s4;elsenext_state<=s1;end if;when s4=>z<='0';if din='1'thennext_state<=s4;elsenext_state<=s5;end if;when s5=>z<='0';if din='1'thennext_state<=s2;elsenext_state<=s6;end if;when s6=>z<='0';if din='1'thennext_state<=s7;elsenext_state<=s1;end if;when s7=>z<='0';if din='1'thennext_state<=s3;elsenext_state<=s8;end if;when s8=>z<='1';if din='1'thennext_state<=s2;elsenext_state<=s1;end if;end case;end process state_comb;state_clocked:process(clk,clr) beginif(clr='1')thenpresent_state<=s1;elsif(clk'event and clk='1')thenpresent_state<=next_state;end if;end process state_clocked;end arch_check;四、仿真结果与说明上图即为在modelsim中进行仿真的波形图像。
《电子设计基础》课程报告设计题目:序列检测器学生班级:电气1101学生学号:20115122学生姓名:代涛指导教师:刘春梅时间:2013/6/28一、 设计任务用D 触发器设计一个11100111的序列检测器。
二、设计要求用D 触发器设计序列检测器。
三、 设计内容1、设计思想由课程设计的题目可知,该电路输入为序列号,所以还需一个序列发生器,输出为脉冲信号,最后安一个LED 灯来检测脉冲。
由于输入序列号为8位的,所以需要3个D 触发器。
2、设计说明该电路的元器件主要由D 触发器,与、非、或门,电源,LED 灯组成。
输入的序列号经D 触发器和门电路组成的电路输出为脉冲信号,当输入的序列号为11100111就会产生高电平,使LED 灯亮。
3、系统方案由于方便,我令A=000,B=001,C=010,D=011,E=100,F=101,G=110,H=111。
X 为输入信号,Y 为输出信号。
0/01/1状态转换图从表上可以看出状态D和I是等价状态,可以合并。
所以可以将I一行去n+1根据真值表得到输入的表达式,下面用卡诺图进行化简。
D 2 Q 1 XQ 0 Q 200 01 11 10 00011110D 2=X —Q 2Q —1Q —0+X —Q —2Q 1Q 0+XQ 2Q —1Q 0+XQ 2Q 1Q —D 1 Q 1 XQ 0 Q 2 00 01 11 100001 1110D 1=X(Q 1+Q 0)D 0Q 1 X Q 0 Q 2D0=X(Q1+Q—0)+Q2Q—1Q—0Y=XQ1Q2Q34、设计方案(1)、序列发生器为了仿真能成功,我设计了一个序列发生器。
序列信号是把一组0、1数码按一定规则顺序排列的串行信号,该序列发生器能发出11100111的序列号,为了测试我连了个LED灯,当出现高电平时灯亮。
序列发生器发出的序列波形仿真(2)、序列检测器序列检测器是一种能够检测输入的一串二进制编码,当该二进制码与事先设定的码一致时,检测电路输出高电平,否则输出低电平。
8-1 序列检测器设计一、实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计。
二、实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设计的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中任何一位不相等都将回到初始状态重新开始检测。
三、实验程序:实验一LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT(DIN,CLK,CLR:IN STD_LOGIC;AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;END SCHK;ARCHITECTURE behav OF SCHK ISSIGNAL Q:INTEGER RANGE 0 TO 8;SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIND<="11100101";PROCESS(CLK,CLR)BEGINIF CLR='1' THEN Q<=0;ELSIF CLK'EVENT AND CLK='1' THENCASE Q ISWHEN 0=> IF DIN=D(7)THEN Q<=1;ELSE Q<=0;END IF;WHEN 1=> IF DIN=D(6)THEN Q<=2;ELSE Q<=0;END IF;WHEN 2=> IF DIN=D(5)THEN Q<=3;ELSE Q<=0;END IF;WHEN 3=> IF DIN=D(4)THEN Q<=4;ELSE Q<=0;END IF;WHEN 4=> IF DIN=D(3)THEN Q<=5;ELSE Q<=0;END IF;WHEN 5=> IF DIN=D(2)THEN Q<=6;ELSE Q<=0;END IF;WHEN 6=> IF DIN=D(1)THEN Q<=7;ELSE Q<=0;END IF;WHEN 7=> IF DIN=D(0)THEN Q<=8;ELSE Q<=0;END IF;WHEN OTHERS=> Q<=0;END CASE;END IF;END PROCESS;PROCESS(Q)BEGINIF Q=8 THEN AB<="1010";ELSE AB<="1011";END IF;END PROCESS;END behav;实验二LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK1 ISPORT( CLK,CLR : IN STD_LOGIC;DIN : IN STD_LOGIC;AB : OUT INTEGER RANGE 0 TO 15 ); END SCHK1;ARCHITECTURE behav OF SCHK1 ISTYPE FSM_ST IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNAL current_state, next_state: FSM_ST;BEGINREG:PROCESS ( CLK ,CLR )BEGINIF CLR = '1' THEN current_state <= S0;ELSIF CLK='1' AND CLK'EVENT THENcurrent_state <= next_state ;END IF ;END PROCESS ;COM:PROCESS( current_state, next_state)BEGINCASE current_state ISWHEN S0 => AB<= 11;IF DIN = '1' THEN next_state<=S1 ;ELSE next_state<=S0;END IF;WHEN S1 => AB<= 11;IF DIN = '1' THEN next_state<=S2 ;ELSE next_state<=S0;END IF;WHEN S2 => AB<= 11;IF DIN = '1' THEN next_state<=S3 ;ELSE next_state<=S0;END IF;WHEN S3 => AB<= 11;IF DIN = '0' THEN next_state<=S4 ;ELSE next_state<=S0;END IF;WHEN S4 => AB<= 11;IF DIN = '0' THEN next_state<=S5 ;ELSE next_state<=S0;END IF;WHEN S5 => AB<= 11;IF DIN = '1' THEN next_state<=S6 ;ELSE next_state<=S0;END IF;WHEN S6 => AB<= 11;IF DIN = '0' THEN next_state<=S7 ;ELSE next_state<=S0;END IF;WHEN S7 => AB<= 11;IF DIN = '1' THEN next_state<=S8 ;ELSE next_state<=S0;END IF;WHEN S8 => AB<= 10;IF DIN = '0' THEN next_state<=S0 ;ELSE next_state<=S0;END IF;END CASE ;END PROCESS;END behav;实验三LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK2 ISPORT( CLK,CLR : IN STD_LOGIC;DIN : IN STD_LOGIC;DT : IN STD_LOGIC_VECTOR(7 DOWNTO 0);AB : OUT INTEGER RANGE 0 TO 15 );END SCHK2;ARCHITECTURE behav OF SCHK2 ISTYPE FSM_ST IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNAL C_ST: FSM_ST;SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINREG:PROCESS ( CLK ,CLR )BEGINIF CLR = '1' THEN D <= DT;C_ST <= S0;AB <= 11;ELSIF CLK='1' AND CLK'EVENT THEN--current_state <= next_state ;--END IF ;--END PROCESS ;--COM:PROCESS( current_state, next_state) --BEGINCASE C_ST ISWHEN S0 => AB<= 11;IF DIN = D(7) THEN C_ST<=S1 ;ELSE C_ST<=S0;END IF;WHEN S1 => AB<= 11;IF DIN = D(6) THEN C_ST<=S2 ;ELSE C_ST<=S0;END IF;WHEN S2 => AB<= 11;IF DIN = D(5)THEN C_ST<=S3 ;ELSE C_ST<=S0;END IF;WHEN S3 => AB<= 11;IF DIN = D(4) THEN C_ST<=S4 ;ELSE C_ST<=S0;END IF;WHEN S4 => AB<= 11;IF DIN = D(3)THEN C_ST<=S5 ;ELSE C_ST<=S0;END IF;WHEN S5 => AB<= 11;IF DIN = D(2) THEN C_ST<=S6 ;ELSE C_ST<=S0;END IF;WHEN S6 => AB<= 11;IF DIN = D(1) THEN C_ST<=S7 ;ELSE C_ST<=S0;END IF;WHEN S7 => AB<= 11;IF DIN = D(0) THEN C_ST<=S8 ;ELSE C_ST<=S0;END IF;WHEN S8 => AB<= 10;IF DIN = D(0) THEN C_ST<=S0 ;ELSE C_ST<=S0;END IF;END CASE ;END IF;END PROCESS;END behav;实验四LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK3 ISPORT(DIN,CLK,CLR:IN STD_LOGIC;DATAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ; END SCHK3;ARCHITECTURE f3 OF SCHK3 ISTYPE ST_TYPE1 IS (s0,s1,s2,s3,s4,s5,s6,s7,s8);SIGNAL C_ST:ST_TYPE1;SIGNAL Q:STD_LOGIC;BEGINPROCESS(CLR,CLK)BEGINIF CLR='1' THEN C_ST<=s0;Q<='0';ELSIF CLK='1' AND CLK'EVENT THENCASE C_ST ISWHEN s0 => IF DATAIN(7)=DIN THEN C_ST<=s1;ELSIF C_ST<=s0;END IF;WHEN s1 => IF DATAIN(6)=DIN THEN C_ST<=s2;ELSIF C_ST<=s0;END IF;WHEN s2 => IF DATAIN(5)=DIN THEN C_ST<=s3;ELSIF C_ST<=s0;END IF;WHEN s3 => IF DATAIN(4)=DIN THEN C_ST<=s4;ELSIF C_ST<=s0;END IF;WHEN s4 => IF DATAIN(3)=DIN THEN C_ST<=s5;ELSIF C_ST<=s0;END IF;WHEN s5 => IF DATAIN(2)=DIN THEN C_ST<=s6;ELSIF C_ST<=s0;END IF;WHEN s6 => IF DATAIN(1)=DIN THEN C_ST<=s7;ELSIF C_ST<=s0;END IF;WHEN s7 => IF DATAIN(0)=DIN THEN C_ST<=s8;ELSIF C_ST<=s0;END IF;WHEN s8 => Q<='1';END CASE;END IF;END PROCESS;IF Q='1' THEN AB<="1010";ELSIF AB<="1011";END IF;END f3;四、仿真结果:实验一实验二实验三实验四五、硬件分配:实验一F-7键7 键6 键2、键1 数码管6CLR CLK DIN AB(3) AB(2) AB(1) AB(0) PIO11 PIO9 PIO10 PIO39 PIO38 PIO37 PIO36 Pin4 Pin 2 Pin3 Pin160 Pin159 Pin158 Pin141 实验二同上实验三同上实验四同上六、实验结论:实验一是moore型状态机,其优点是其输出仅与当前的状态有关,是同步输出状态机。
实验题目:设计串行数据检测器实验说明:设计一个“1101”串行数据检测器。
使得但输出序列中出现“1001”时,结果中就输出1。
输入/输出如下所示:输入x:000 101 110 011 011 101 101 110 101输出z:000 000 000 010 010 000 001 000 000实验分析:初始状态设为s0,此时检测数据序列为“0000”,当再检测到一个0时,仍为s0,当检测到1时,进入下一个状态s1,此时序列为“0001”;当在状态s1检测到0时,进入到状态s2,此时序列为“0010”,当检测到1时,仍为s1;当在状态s2检测到0时,进入到状态s3,此时序列为“0100”,当检测到1时,进入s1;当在状态s3检测到0时,进入s0,当检测到1时,进入状态s4,此时序列为“1001”,结果输出为1;当在s4检测到0时,进入状态s2,当检测到1时,进入状态s1。
状态图如下:实验代码:module sjjcq10_3(x,z,clk,reset,state);input x,clk,reset;output z;output[2:0]state;reg[2:0]state;reg z;parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;always@(posedge clk)beginif(reset)begin state<=s0;z<=0;endelsecasex(state)s0: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s1;z<=0;endends1: beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endends2:beginif(x==0) begin state<=s3;z<=0;endelse begin state<=s1;z<=0;endends3:beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s4;z<=1;endends4:beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endenddefault: state<=s0;endcaseendendmodule实验仿真波形:分析:每当到达状态四即s4,此时检测序列为“1101”,输出即为1.。
目录1摘要 (1)2设计步骤 (1)2.1划分状态 (1)2.2画出状态图 (1)2.3列出状态表 (1)2.4化简状态表 (2)2.5对状态进行编码并化简状态图 (2)2.6画出真值表 (2)3用QuartusII进行软件仿真 (3)3.1初步仿真 (3)3.2修改问题 (4)4心得体会 (5)4.1化简问题 (5)4.波形输出问题 (5)5参考文献 (5)1摘要序列检测器多用于通信系统中对禁用码的检测,或者是对所需信号的提取,即一旦检测到所需信号就输出高电平,这在数字通信领域有广泛的应运。
本次课程设计是设计检测110码的序列检测器,并以此来描述序列检测器的设计过程和基于FPGA的软件仿真。
最后通过QuartusII的波形输出对设计方案进行检测,经检测波形输出正确设计符合要求。
2设计步骤2.1划分状态对于110码可以划分为S1,S2,S3,S4四种状态,分别是:S1:只有’0’信号的输入状态S2:检测到1个’1’信号S3:检测到连续的俩个’1’信号S4:检测到’110’信号2.2画出状态图如图-1所示(A表示输入Z表示输出)2.3列出状态表2.4化简状态表将状态的次态变化以及输入输出完全相同的现态进行合并入下表所示。
表-22.5对状态进行编码并化简状态图化简后状态有三个,可以用二进制代码组合(00,01,10,11)综合多方面考虑,这里采用00,01,11,00循环码变化顺序可以使电路更简单,于是令S1=00,S2=01,S3=11,得状态图如下。
图-22.6表-3经卡诺图化简得表达式如下:J1=Q0A K1=~AJ0=A K0=~AY=Q1~A(重做)经检查可以自启动逻辑算正确。
3用QuartusII进行软件仿真3.1初步仿真图-3如图-3所示本系统是由两个JK触发器和若干个与非门按照计算出的逻辑表达式连接而成的。
这张图是从QuartusII中的电路文件中截取下的硬件电路仿真另外JK触发器是用VerilogHDL程序编写的程序如下:module JK_FF(Q,Qnot,J,K,CP);output Q,Qnot;input J,K,CP;reg Q;assign Qnot=~Q;always @ (negedge CP)case ({J,K})2'b00:Q<=Q;2'b01:Q<=1'b0;2'b10:Q<=1'b1;2'b11:Q<=~Q;endcaseendmodule图-43.2修改问题这个波形仿真基本正确但还存在问题,就是输出脉冲宽度不一致,经检查发现是由于竞争冒险与输入信号与时钟不同步产生的影响。
设计一个的序列检测器 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】
二、设计一个1010的序列检测器,检测到1010时输出为“1”否则为“0”,用D触发器实现。
第一步:根据要求进行逻辑抽象,得出电路的原始状态转换图和状态转换表。
取输入数据变量为X,检测的输出变量为Z,
该同步时序逻辑电路的功能是检测输入序列是否为1010,一旦输入序列出现一个1就记下来,因为这个1可能是1010序列的第一个1,;接着看输入是否为0,因为10是序列1010的前两位;其次再看输入是否为1,因为101是1010序列的前三位;最后再输入一个0,输出则为1,因为出现了一个1010序列,泽电路必须记住1,10,101,1010四种输入情况,每一种输入情况应与电路的一个状态相对应。
根据题意,设电路随机的输入和输出序列为:
X: 0 1 0 1 0 0 0 1 0 1 0 1 0……
Z: 0 0 0 0 1 0 0 0 0 0 1 0 0……
该电路仅有一个输入端,每个现态有两个可能转移方向,设电路初态为
S 0,当X=0时,电路仍处在状态S
,当输入一个1以后的状态为S
1
,输入10以后的状
态为S
2,输入101以后的状态为S
3
,输入1010以后的状态为S
4。
以S n表示电路的现
态,S n+1表示电路的次态。
由此得出原始状态转换图和原始状态转换表:
依据状态等效条件判断得出S
0和S
4
在相同的输入条件下,它们转换到相同的
次态去,且有相同的输出,故S
0和S
4
等效,经分析比较,找出最大等效类:{S
1
},
{S
2},{S
3
},{S
,S
4
}。
由此得出化简的状态转换图和最简状态表:
最贱状态表共有四种状态,可用两位二进制代码来表示,设状态变量为Q
1
,
Q 2,依据状态编码原则,确定S
=00,S
1
=01,S
2
=11,S
3
=10四种状态,其编码后的状态
转换图和状态转换表:
n n
n+1n n n n
(3)
Q
1n+1 = X Q
2
n + X Q
1
n + Q
3
n Q
1
n
由D触发器特性方程求出各个触发器的驱动方程:
D
2 = X Q
2
n Q
1
n + X Q
2
n Q
1
n
D
1 = X Q
2
n + X Q
1
n + Q
2
n Q
1
n
第五步:画出逻辑电路图:
第六次:检测该电路是否有自启动能力。
该电路没有无关状态。
当X=0时,输出Z=XQ
2n Q
1
n,触发器的次态
Q 2n+1=X Q
2
n Q
1
n+ XQ
2
n Q
1
n=0,Q
1
n+1=Q
2
n Q
1
n+ X Q
1
n=0,
若此时来一个时钟脉冲CP,则可转入有效状态00,即S。
当X=1时,输出Z=XQ
2n Q
1
n,触发器的次态
Q 2n+1=X Q
2
n Q
1
n+ XQ
2
n Q
1
n=1,Q
1
n+1= Q
2
n Q
1
n+ X Q
1
n=0,
若此时来一个时钟脉冲CP,则可转入有效状态10,即S
3。
所以该逻辑电路具有自启动能力。