实验四序列发生器.doc
文本预览下载声明
南昌大学实验报告
学生姓名: 学 号: 专业班级:中兴101班
实验类型:□验证 □综合 ■设计 □创新 实验日期:2012、11、16 成绩:
实验四 序列信号发生器检测器设计
PC机、Quartus II软件、EDA实验箱
四、实验思路
设计序列发生器
基本思想为一个信号CQ1计数,给另一个信号CO(代表序列的每一位)赋值的方法:
先设定端口CQ1用于产生序列时计数,因为序列共16位,因此端口CQ1为标准逻辑矢量,位宽为4,设另一个端口M代表序列的每一位,CQ1每计一个数,就给M赋一个值,这样产生一个16位的序列。由于端口不能参与相关运算,因此在结构体中我分别定义了信号CQ1(标准逻辑矢量,位宽4),信号Q与相应的端口CQ1 CO对应,在进程中参与相应的运算,在程序的最后再用端口接收信号: CO=Q;
在进程中我采用case – when 语句,如当CQ1为“0000”的时候,给另一信号Q赋‘0’,当CQ1为“0001”时,为Q赋‘1’以此类推,且让CQ1产生循环,即可源源不断的产生所需序列了,如下表
CQ1 0000 0001 0010 0011 0100 0101 0110 0111 Q 0 1 1 1 0 1 0 0 CQ1 1000 1001 1010 1011 1100 1101 1110 1111 Q 1 1 0 1 1 0 1 0 序列检测器
序列检测器设计的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及序列,直到在连续的检测中收到的每一位码都与实验要求相同。在此,必须利用状态转移图。
电路需要分别不间断记忆:初始状态、1、11、110、1101、11010共六种状态,状态转移如图:
1 1 0 1 0
S0 S1 S2 S3 S4 S5
0
0 1
1
1
若检测到“11010”序列,则输出信号N为1,定义VARIABLE X:STD_LOGIC_VECTOR (3 DOWNTO 0)进行计数,最后把变量X赋给输出SS,在数码管上显示检测到序列“11010”的次数。
3.时钟脉冲的选择
数码管显示的扫描时钟需要很快的速度,因此采用1KHz频率的时钟;而序列发生器,为了能够人眼识别亮灭,则我选择采用2000分频之后得到的0.5Hz频率
五.原理图输入法设计(程序来源:基本上独立完成)
1. 建立文件夹
建立自己的文件夹(目录),如c:\myeda,进入Windows操作系统
Quartus II不能识别中文,文件及文件夹名不能用中文。
2. 原理图设计输入
打开Quartus II,选菜单File→New,选择“Device Design File-Block Diagram-Schematic File”项。点击“OK”,在主界面中将打开 “Block Editor”窗口。
图1
--时间:2012年11月10号
--版本:7.2
--功能:分频器(2000分频)
分频模块DIV源代码div.vhd如下:
-------分频程序,从1KHZ中得到0.5HZ的计数频率,2000分频----------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --这3个程序包足发应付大部分的VHDL程序设计
USE IEEE.STD_LOGIC_Arith.ALL;
USE IEEE.STD_LOGIC_Unsigned.ALL;
ENTITY DIV IS
GENERIC(N:Integer:=20000);--此处定义了一个默认值N=10000,即电路为10000分频电路;
Port(Clockin:IN STD_LOGIC;
ClockOut:OUT STD_LOGIC);
END;
ARCHITECTURE Devider OF DIV IS
SIGNAL Counter:Integer RANGE 0 TO N-1;
SIGNAL Temp1:STD_LOGIC; --信号的声明
显示全部