序列信号检测器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌大学实验报告
学生姓名:学号:专业班级:
实验类型:□验证□综合 设计□创新实验日期:实验成绩:实验三序列信号发生检测器
一、实验目的
1、学会运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。
2、掌握脉冲序列检测器的主要功能
二、实验要求
1、设计一个序列信号发生器,用以产生输入序列“1101010011010101”由左开始。
2、设计一个序列检测器,用以检测输入序列,检测序列为10011
3、运用QuartusⅡ软件中的仿真功能对所设计的序列检测器的各个模块及顶层电路的功
能进行仿真分析。
三、设计过程
1,序列信号检测器设计原理:
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,则输出 1,否则输出 0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码与预置数的对应码相同。设计中一般采用状态机来实现。
2,模块设计:
根据层次化设计理论以及序列信号检测器的基本原理,本次设计的序列检测器采用自顶向下的思路可分为时钟输入模块、序列发生模块、序列检测模块、数码管动态扫描显示模块及LED状态转换显示模块,系统框图如下
序列信号检测器系统框图
3、使用文本设计底层文件,并生成相应元器件,再使用原理图设计顶层文件
四、实验步骤
1、顶层文件的设计
顶层原理图设计可以依据系统框图进行,时钟输入模块(clkdiv)、序列发生模块(fsq)、序列检测模块(jcq)、数码管动态扫描显示模块及LED状态转换显示模块(scan_led)、序列信号译码模块(czb)
2,各模块设计文件
①时钟clkdiv:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DIV IS
PORT(CLK : IN STD_LOGIC;
CLK_DIV : OUT STD_LOGIC);
END DIV;
ARCHITECTURE RT1 OF DIV IS
SIGNAL DA TA:INTEGER RANGE 0 TO 500;
SIGNAL CLK_TEMP:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
IF(DA TA=500) THEN
DA TA<=0;
CLK_TEMP<=NOT CLK_TEMP;
ELSE
DA TA<=DATA+1;
END IF;
END IF;
CLK_DIV<=CLK_TEMP;
END PROCESS;
END RT1;
②序列发生器FSQ:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FSQ IS
PORT(
CLK,CLEA:IN STD_LOGIC;
Z :OUT STD_LOGIC);
END FSQ ;
ARCHITECTURE RTL OF FSQ IS
TYPE STA TE_TYPE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15);
SIGNAL CURRENT_STATE,NEXT_STA TE:STATE_TYPE;
BEGIN
PROCESS(CLK,CLEA)
BEGIN
IF(CLEA='1')THEN CURRENT_STATE<=S0;ELSE
IF(CLK'EVENT AND CLK='1')THEN
CURRENT_STATE<=NEXT_STATE;
END IF;
END IF;
END PROCESS;
STATE_TRANS:PROCESS(CURRENT_STATE) BEGIN
CASE CURRENT_STATE IS
WHEN S0=> NEXT_STATE<=S1; Z<='1';
WHEN S1=> NEXT_STATE<=S2; Z<='1';
WHEN S2=> NEXT_STATE<=S3; Z<='0';
WHEN S3=> NEXT_STATE<=S4; Z<='1';
WHEN S4=> NEXT_STATE<=S5; Z<='0';
WHEN S5=> NEXT_STATE<=S6; Z<='1';
WHEN S6=> NEXT_STATE<=S7; Z<='0';
WHEN S7=> NEXT_STATE<=S8; Z<='0';
WHEN S8=> NEXT_STATE<=S9; Z<='1';
WHEN S9=> NEXT_STATE<=S10; Z<='1';
WHEN S10=> NEXT_STA TE<=S11; Z<='0';
WHEN S11=> NEXT_STA TE<=S12; Z<='1';
WHEN S12=> NEXT_STA TE<=S13; Z<='0';
WHEN S13=> NEXT_STA TE<=S14; Z<='1';
WHEN S14=> NEXT_STA TE<=S15; Z<='0';
WHEN S15=> NEXT_STA TE<=S0; Z<='1';
END CASE;
END PROCESS;
END RTL;
③序列检测器JCQ
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JCQ IS
PORT(SIN, CLK, CLR : IN STD_LOGIC;
PUT : OUT std_logic_vector(0 downto 0));
END JCQ;
ARCHITECTURE one OF JCQ IS
TYPE STA is (S5,S4,S3,S2,S1,S0);
SIGNAL Qe : STA ;
SIGNAL D : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN
D <= "11010" ;
PROCESS( CLK, CLR )
BEGIN