序列信号发生器和检测器.doc
文本预览下载声明
南昌大学实验报告
学生姓名: 赖硕秋 学 号: 6100208060 专业班级: 电子081
实验类型:□ 验证 □ 综合 ■ 设计 □ 创新 实验日期:2010.11.12 实验成绩:
实验三 序列信号发生器与检测器设计
一、实验目的
(1)掌握产生特定序列信号的方法;
(2)学会用状态机方法来实现VHDL编程设计;
(3)进一步巩固分层设计的方法.
二、实验内容与要求
用状态机设计实现串行序列检测器,先设计序列信号发生器,产生序列“0111010011011011010”;再设计检测器,若检测到串行序列11010则输出计数器计入个数,并对其进行仿真和硬件测试。
三、设计原理
本实验中,采用分层设计的思想,底层分别用VHDL文本来描述序列发生器和序列检测器,顶层用原理图法连线好元件化的器件。
对于序列发生器(特定序列)设计比较多样,可以采用并行case语句来实现产生特定的周期性序列;序列检测器采用状态机的设计方法,在不同状态下检测特定的序列信号,最后通过一个计数器计入所检测到的序列个数,并且通过并行移位来显示有限个产生信号。根据所检测的序列“11010”,可以得到以下的状态转移图:
四、实验程序
方法一:VHDL文本法,不分层(独立编写)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY XULIE IS
PORT(CLK,CLR,RESET:IN STD_LOGIC;
M:OUT STD_LOGIC;
COUT1,COUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY;
ARCHITECTURE ONE OF XULIE IS
TYPE M_STATE IS(ST0,ST1,ST2,ST3,ST4);
SIGNAL STA:M_STATE;
SIGNAL SHUZI:STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL A:STD_LOGIC;
SIGNAL CC:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
SHUZI=11010;
PROCESS(CLK,CLR,RESET,A,CC)
VARIABLE N:INTEGER RANGE 16 DOWNTO 1;
BEGIN
IF RESET=1 THEN N:=1; --序列发生器0111010011011010
ELSIF CLKEVENT AND CLK=1
THEN CASE N IS
WHEN 1=A=0;N:=N+1;
WHEN 2=A=1;N:=N+1;
WHEN 3=A=1;N:=N+1;
WHEN 4=A=1;N:=N+1;
WHEN 5=A=0;N:=N+1;
WHEN 6=A=1;N:=N+1;
WHEN 7=A=0;N:=N+1;
WHEN 8=A=0;N:=N+1;
WHEN 9=A=1;N:=N+1;
WHEN 10=A=1;N:=N+1;
WHEN 11=A=0;N:=N+1;
WHEN 12=A=1;N:=N+1;
WHEN 13=A=1;N:=N+1;
WHEN 14=A=0;N:=N+1;
WHEN 15=A=1;N:=N+1;
WHEN 16=A=0;N:=1;
WHEN OTHERS=NULL;
END CASE;
END IF;
IF CLR=1 THEN STA=ST0;CC=(OTHERS=0); --序列检测器11010
ELSIF CLKEVENT AND CLK=0 THEN
CASE STA IS
WHEN ST0= IF A=SHUZI(4) THEN STA=ST1;
ELSE STA=ST0;
END IF;
WHEN ST1= IF A=SHUZI(3) THEN STA=ST2;
ELSE STA=ST0;
END IF;
显示全部