序列检测器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序列检测器设计
实验内容:
设计一个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 is
port (
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 is
signal a:std_logic_vector(7 downto 1);
signal combination: std_logic_vector(7 downto 1);
begin
process(clk)
begin
if clk'event and clk='1' then
a<=a(6 downto 1)&x;
if y='1' then
combination<="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 is
port(
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 is
begin
process(clk)
begin
if(clk'event and clk='1')then
case a is
when "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";