当前位置:文档之家› 序列检测器实验报告

序列检测器实验报告

序列检测器设计实验内容:设计一个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。

(2)扫描器与七段译码器一起的设计方案为实现输出值在七段译码器上显示,需要有一个扫描器依次循环输出,为使设计更简单可以将扫描器和七段译码器设计在一起,并一起打包。

输入信号:一个扫描时钟输入信号clk;一个输入信号b;一个7位输入信号c;输出信号:一个7位输出信号q;一个7位输出信号ai;中间信号:一个8位扫描信号a;具体设计:为实现器件所要求功能,在上升的时钟沿下,当扫描信号在第一位时,将从c输入的第一位赋给q,并判断其值,若为0,则使接到七段译码器的显示0,否则为1的时候显示1。

同样一直跳转,同样赋值,至最后一位,如果从序列输出端接入的输入b(序列检测器中unlk)为1时,令最后一根七段译码器显示1,否则,b为0时,最后一个七段译码器显示0。

至扫描信号跳过最后一个七段译码器至其他情况时,返回至第一个七段译码器,重新循环扫描。

实现扫描器和七段译码器的语言(VHD):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SCA2 isport(clk:in std_logic;Q:buffer std_logic_vector(7 downto 1);b:in std_logic;c:in std_logic_vector(7 downto 1);a : buffer std_logic_vector(7 downto 0);AI:out std_logic_vector(6 downto 0));end entity;architecture bhv of SCA2 isbeginprocess(clk)beginif(clk'event and clk='1')thencase a iswhen "00000001"=>a<="00000010";IF c(7)='0' THEN q(1)<='0';AI<="1111110";ELSE q(1)<='1';AI<="0110000";END IF;when "00000010"=>a<="00000100";IF c(6)='0' THEN q(2)<='0';AI<="1111110";ELSE q(2)<='1';AI<="0110000";END IF;when "00000100"=>a<="00001000";IF c(5)='0' THEN q(3)<='0';AI<="1111110";ELSE q(3)<='1';AI<="0110000";END IF;when "00001000"=>a<="00010000";IF c(4)='0' THEN q(4)<='0';AI<="1111110";ELSE q(4)<='1';AI<="0110000";END IF;when "00010000"=>a<="00100000";IF c(3)='0' THEN q(5)<='0';AI<="1111110";ELSE q(5)<='1';AI<="0110000";END IF;when "00100000"=>a<="01000000";IF c(2)='0' THEN q(6)<='0';AI<="1111110";ELSE q(6)<='1';AI<="0110000";END IF;when "01000000"=>a<="10000000";IF c(1)='0' THEN q(7)<='0';AI<="1111110";ELSE q(7)<='1';AI<="0110000";END IF;when "10000000"=>a<="00000001";IF b='0' THEN AI<="1111110";ELSE AI<="0110000";END IF;when others=>a<="00000001";end case;end if;end process;end bhv;波形图:其中ENDTIME=100.0us GRIDSIZE=100.0ns波形图分析:如图在在每一个上升时钟沿,扫描信号对应着进行循环扫描,并且输出q与输入的c值一样,其中ai对应着输出每一位相应的c输入,显示为0或是1,而当跳转到最后一个七段译码器时,若是b为1则显示1,否则显示0,分析可知,当扫描频率足够大时,肉眼无法分辨哪个七段译码器在亮,结果是八位七段译码器都在亮。

实验实现最后电路:把实验电路下载至试验箱验证:管脚锁定:CLK1:122 CLK2:125 y: 73 x: 86 a,b,c,d,e,f,g 对应着接51,....43,f[7..0]接96,97,98,99,100,101,102,8 输出h[6..0]对应着输出显示灯对应着接输出显示灯输入k[7..1]对应着输入端实验电路验证结论:在人的肉眼能够辨认的范围内,显示器持续的跳动,并且若输入y为1的话,只有当从x输入的序列中有1110010时,最后一个显示管显示1,否则为0;当y为0时,只有从x与对应着从k输入的值相同时,最后一个显示器为1,否则为0。

其他七个显示管一直显示从x 输出的七位序列。

而显示灯也显示从x的输入值。

实验结论:在误差允许的情况下,序列检测器成功的完成了其功能。

相关主题