1.设计思路
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,这在数字通信领域有广泛的应用。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。如图6.3所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B”。
图6.3 8位序列检测器逻辑图
2.VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CHK IS
PORT(DIN:IN STD_LOGIC; --串行输入数据位
CLK,CLR:IN STD_LOGIC; --工作时钟/复位信号
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);--8位待检测预置数
AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--检测结果输出
END CHK;
ARCHITECTURE ART OF CHK IS
SIGNAL Q :INTEGER RANGE 0 TO 8;
BEGIN
PROCESS ( CLK,CLR )
BEGIN
IF CLR= '1' THEN Q<=0;
ELSIF CLK'EVENT AND CLK= '1' THEN
--时钟到来时,判断并处理当前输入的位
CASE Q IS
WHEN 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 IF ;
END PROCESS;
PROCESS(Q) --检测结果判断输出
BEGIN
IF Q= 8 THEN AB<= "1010"; --序列数检测正确,输出“A”
ELSE AB<= "1011"; --序列数检测错误,输出 “B”
END IF ;
END PROCESS;
END ART;
3.硬件逻辑验证
选择实验电路结构图NO.8,由5.2节的实验电路结构图NO.8和图6.3确定引脚的锁定。待检测串行序列数输入DIN接PIO10(左移,最高位在前),清零信号CLR接PIO8,工作时钟CLK接PIO9,预置位密码D[7..0]接PIO7~PIO0,指示输出AB[3..0]接PIO39~PIO36(显示于数码管6)。
进行硬件验证时方法如下:① 选择实验电路结构图NO.8,按实验板“系统复位”键;② 用键2和键1输入两位十六进制待测序列数;③ 利用键4和键3输入两位十六进制预置码;④ 按键8,高电平初始化清零,低电平清零结束(平时数码6应显“B”);⑤ 按键6(CLK)8次,这时若串行输入的8位二进制序列码与预置码相同,则数码7应从原来的“B”变成“A”,表示序列检测正确,否则仍为“B”。
本文来源:https://www.2haoxitong.net/k/doc/485c214ce518964bcf847cba.html
文档为doc格式