VHDL序列检测器.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVHDL序列检测器VHDL数字系统设计与测试课程作业作业一:序列检测器(1110010)1 设计功能与要求(1) 利用有限状态的状态机设计一个序列检测器,序列检测器要检测的序列设定为“1110010”。 (2) 根据设计功能和要求运用VHDL硬件描述语言进行设计编程,并且画出序列检测器的原理流程图。 (3) 对设计的序列检测器程序进行仿真,并予以分析和说明。2 设计思路序列检测器的设计是采用VHDL硬件描述语言设计程序,对预先设置的序列信号进行检测。序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,则输出1,否则输出0。设计采用有限状态机来实现序列检测器。3 原理流程图根据预先设置的序列信号“1110010”,根据有限状态机的原理进行编程,设计出符合要求的八状态的状态机的序列检测器,原理流程说明如下图。如图所示,假设状态机的初始状态为S1,当输入信号为“1”时,进入S2状态;为“0”还是在S1状态。在S2状态下,如果输入信号为“1”,则进入S3状态,为“0”则返回S1状态。在S3状态下,如果输入信号为“1”,则进入S4状态,为“0”则返回S1状态。在S4状态下,如果输入信号为“0”,则进入S5状态,为“0”还是在S4状态。在S5状态下,如果输入信号为“0”,则进入S6状态,为“1”则进入S2状态。在S6状态下,如果输入信号为“1”,则进入S7状态,为“0”则返回S1状态。在S7状态下,如果输入信号为“0”,则进入S8状态,为“1”则进入S3状态。在S8状态下,如果输入信号为“1”,则进入S2状态,为 “0”则返回S1状态,并输出序列信号1110010。4 序列检测器VHDL程序代码在序列检测器的程序代码中采用cin表示输入序列信号,clr为复位控制信号,clk为时钟信号,cout为输出信号。当检测到序列信号中出现“1110010“序列的时候,cout输出为高电平,否则为低电平,详细程序代码如下。library ieee;use ieee.std_logic_1164.all;entity sq_det isport(cin,clr,clk:in std_logic; cout:out std_logic);end sq_det;architecture behav of sq_det istype state is(s1,s2,s3,s4,s5,s6,s7,s8);signal c_state,n_state:state;beginprocess(clk,clr) beginif(clr='1')then c_state<=s1;elsif(clk'event and clk='1') then c_state <=n_state;end if;end process;process(c_state,cin) begin case(c_state) is when s1=>cout<='0'if(cin='1')then n_state<=s2;else n_state<=s1; end if;when s2=>cout<='0'if(cin='1')then n_state<=s3;else n_state<=s1;end if; when s3=>cout<='0'if(cin='1')then n_state<=s4;else n_state<=s1;end if;when s4=>cout<='0'if(cin='1')thenn_state<=s4;else n_state<=s5;end if;when s5=>cout<='0'if(cin='1')then n_state<=s2; else n_state<=s6;end if;when s6=>cout<='0'if(cin='1')then n_state<=s7;else n_state<=s1;end if;when s7=>cout<='0'if(cin='1')then n_state<=s3;else n_state<=s8;end if; when s8=>cout<='1'if(cin='1')then n_state<=s2; else n_state<=s1;end if;end case;end process; end architecture behav;5 仿真结果与说明序列检测器程序仿真结果如下图,cin为输入序列信号,clr为复位控制信号,高电平复位清零准备进入工作状态,clk为时钟信号,cout为输出信号。当检测到序列信号cin中出现“1110010“序列的时候,cout输出为高电平。当没有出现“1110010”序列时,cout输出低电平,如下如所示。作业二:三位任意二值序列检测器1 设计功能与要求(1) 利用有限状态的状态机设计一个序列检测器,序列检测器可以检测输入序列中的任意一个3位2进制数。 (2) 根据设计功能和要求运用VHDL硬件描述语言进行设计编程,并且画出序列检测器的原理流程图。 (3) 对设计的序列检测器程序进行仿真,并予以分析和说明。2 设计思路序列检测器的设计是采用VHDL硬件描述语言设计程序,对预先设置的序列信号进行检测。序列检测器可用于检测任意三位2进制数,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,则输出1,否则输出0。设计采用有限状态机来实现序列检测器。3 原理流程图4.RTL级表示5.程序LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY detect_3 ISPORT( Din:IN STD_LOGIC; Clk:IN STD_LOGIC; reset:IN STD_LOGIC; Dout_000,Dout_001,Dout_010,Dout_011,Dout_100,Dout_101,Dout_110,Dout_111:OUT STD_LOGIC );END detect_3;ARCHITECTURE RTL OF detect_3 ISTYPE STATE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14);SIGNAL pre_state,next_state:STATE;BEGINPROCESS(Din,pre_state) -Input Combinational LogicBEGINCASE pre_state ISWHEN S0=>IF(Din='1')THENnext_state<=S2;ELSEnext_state<=S1;END IF;WHEN S1=>IF(Din='1')THENnext_state<=S4;ELSEnext_state<=S3;END IF;WHEN S2=>IF(Din='1')THENnext_state<=S6;ELSEnext_state<=S5;END IF;WHEN S3=>IF(Din='1')THENnext_state<=S8;ELSEnext_state<=S7;END IF;WHEN S4=>IF(Din='1')THENnext_state<=S10;ELSEnext_state<=S9;END IF;WHEN S5=>IF(Din='1')THENnext_state<=S12;ELSEnext_state<=S11;END IF;WHEN S6=>IF(Din='1')THENnext_state<=S14;ELSEnext_state<=S13;END IF;WHEN S7=>IF(Din='1')THENnext_state<=S8;ELSEnext_state<=S7;END IF;WHEN S8=>IF(Din='1')THENnext_state<=S10;ELSEnext_state<=S9;END IF;WHEN S9=>IF(Din='1')THENnext_state<=S12;ELSEnext_state<=S11;END IF;WHEN S10=>IF(Din='1')THENnext_state<=S14;ELSEnext_state<=S13;END IF;WHEN S11=>IF(Din='1')THENnext_state<=S8;ELSEnext_state<=S7;END IF;WHEN S12=>IF(Din='1')THENnext_state<=S10;ELSEnext_state<=S9;END IF;WHEN S13=>IF(Din='1')THENnext_state<=S12;ELSEnext_state<=S11;END IF;WHEN S14=>IF(Din='1')THENnext_state<=S14;ELSEnext_state<=S13;END IF;END CASE;END PROCESS;PROCESS(Clk,reset) BEGIN IF(reset='1')thenpre_state<=s0;ELSIF(clk'event and clk='1') THEN pre_state<=next_state;END IF;END PROCESS;PROCESS(pre_state) BEGINIF(pre_state=S7)THENDout_000<='1'ELSEDout_000<='0'END IF;IF(pre_state=S8)THENDout_001<='1'ELSEDout_001<='0'END IF;IF(pre_state=S9)THENDout_010<='1'ELSEDout_010<='0'END IF;IF(pre_state=S10)THENDout_011<='1'ELSEDout_011<='0'END IF;IF(pre_state=S11)THENDout_100<='1'ELSEDout_100<='0'END IF;IF(pre_state=S12)THENDout_101<='1'ELSEDout_101<='0'END IF;IF(pre_state=S13)THENDout_110<='1'ELSEDout_110<='0'END IF;IF(pre_state=S14)THENDout_111<='1'ELSEDout_111<='0'END IF;END PROCESS;END RTL;6.仿真图仿真图分析:输入:1111110110100输出:前三个序列式111,在第四个时钟周期的上升沿,Dout_111置高电平接着是111,在第五个周期的上升沿,Dout_111置高电平,依次类推,接着是101,对应的Dout_101为高电平。-