实验三 序列信号发生器与序列信号检测器的设计
一、实验目的:用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;