实验三 序列信号发生器与序列信号检测器的设计 一、实验目的:用VHDL语言实现序列信号发生器和检测器的设计, 并对其进行仿真和硬件测试。 二、实验要求: 1、利用VHDL语言设计一个8位任意序列的序列发生器,编译定 义引脚并下载到实验箱中进行验证。 2、利用VHDL语言设计一个8位任意序列的序检测器,显示检测 值,编译定义引脚并下载到实验箱中进行验证。 三、实验步骤: 1、利用VHDL语言设计一个具有串行输出和并行输出的任意序列 的8位序列发生器,编译并生产可调用的模块。 2、调用步骤1产生的模块生成定层原理图文件,选用工作模式4。 输入CLK定义为按键7,串行输出DOUT定义为串行口输出, 观测按键7按下时串行口输出的发光二极管情况。 3、利用VHDL语言设计一个可以检测任意序列的序列检测器,检 测长度为8位码元,编译并生产可调用的模块。 4、调用步骤1和步骤3产生的模块生成定层原理图文件,选用 工作模式5。输入时钟信号CLK定义为CLK2(1Hz),并行输 出信号DP[7..0]定义为PIO15~PIO8,检测码元输入 SETB[7..0]分别对应按键8~按键1,检测输出AB[3..0] 采用数码管1显示检测值,编译并下载到实验箱中进行验证。 序列发生器参考程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DSM IS PORT( CLK: IN STD_LOGIC; DP:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC ); END DSM; ARCHITECTURE A OF DSM IS SIGNAL ST:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL M:INTEGER RANGE 0 TO 7; BEGIN ST<="01110010"; DP<=ST; PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN M<=M-1; END IF; END PROCESS; DOUT<=ST(M); END A; 序列监测器参考程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS PORT( DIN,CLK: IN STD_LOGIC; SETB:IN STD_LOGIC_VECTOR(7 DOWNTO 0); AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END SCHK; ARCHITECTURE A OF SCHK IS SIGNAL Q:INTEGER RANGE 0 TO 8; BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN CASE Q IS WHEN 0=> IF DIN=SETB(7) THEN Q <= 1 ; ELSE Q <= 0; END IF; WHEN 1=> IF DIN=SETB(6) THEN Q <= 2 ; ELSE Q <= 0; END IF; WHEN 2=> IF DIN=SETB(5) THEN Q <= 3 ; ELSE Q <= 0; END IF; WHEN 3=> IF DIN=SETB(4) THEN Q <= 4 ; ELSE Q <= 0; END IF; WHEN 4=> IF DIN=SETB(3) THEN Q <= 5 ; ELSE Q <= 0; END IF; WHEN 5=> IF DIN=SETB(2) THEN Q <= 6 ; ELSE Q <= 0; END IF; WHEN 6=> IF DIN=SETB(1) THEN Q <= 7 ; ELSE Q <= 0; END IF; WHEN 7=> IF DIN=SETB(0) THEN Q <= 8 ; ELSE Q <= 0; END IF; WHEN OTHERS => Q<=0; END CASE; END IF; END PROCESS; PROCESS(Q) BEGIN CASE Q IS WHEN 0=> AB<="0000"; WHEN 1=> AB<="0001"; WHEN 2=> AB<="0010"; WHEN 3=> AB<="0011"; WHEN 4=> AB<="0100"; WHEN 5=> AB<="0101"; WHEN 6=> AB<="0110"; WHEN 7=> AB<="0111"; WHEN 8=> AB<="1000"; WHEN OTHERS=> NULL; END CASE; END PROCESS; END A;