完整word版实验四序列发生器Word文档下载推荐.docx
- 文档编号:6034140
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:25
- 大小:506.34KB
完整word版实验四序列发生器Word文档下载推荐.docx
《完整word版实验四序列发生器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整word版实验四序列发生器Word文档下载推荐.docx(25页珍藏版)》请在冰点文库上搜索。
1011
1100
1101
1110
1111
2.序列检测器
序列检测器设计的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及序列,直到在连续的检测中收到的每一位码都与实验要求相同。
在此,必须利用状态转移图。
电路需要分别不间断记忆:
初始状态、1、11、110、1101、11010共六种状态,状态转移如图:
11010
S0S1S2S3S4S5
0
01
1
若检测到“11010”序列,则输出信号N为1,定义VARIABLEX:
STD_LOGIC_VECTOR(3DOWNTO0)进行计数,最后把变量X赋给输出SS,在数码管上显示检测到序列“11010”的次数。
3.时钟脉冲的选择
数码管显示的扫描时钟需要很快的速度,因此采用1KHz频率的时钟;
而序列发生器,为了能够人眼识别亮灭,则我选择采用2000分频之后得到的0.5Hz频率
五.原理图输入法设计(程序来源:
基本上独立完成)
1.建立文件夹
建立自己的文件夹(目录),如c:
\myeda,进入Windows操作系统
●QuartusII不能识别中文,文件及文件夹名不能用中文。
2.原理图设计输入
打开QuartusII,选菜单File→New,选择“DeviceDesignFile->
BlockDiagram->
SchematicFile”项。
点击“OK”,在主界面中将打开“BlockEditor”窗口。
(1)分频器模块:
(实体名为DIV)
本设计使用的FPGA开发板中使用的芯片是CycloneIIEP2C35F672C8,使用的是10kHz的时钟脉冲输入,根据电路的具体设计需要,对其进行分频设计。
如图1所示为系统的分频模块,其中模块Clockout管脚输出为0.5hz的时钟脉冲,得出序列发生器和序列检测器模块正常工作的时钟信号,在Clockin管脚输出为一个1khz的时钟脉冲,作用与动态扫描模块的正常工作。
输入管脚:
Clockin为1khz脉冲输入;
输出管脚:
Clockout为0.5hz脉冲输出;
图1
--时间:
2012年11月10号
--版本:
7.2
--功能:
分频器(2000分频)
分频模块DIV源代码div.vhd如下:
-------分频程序,从1KHZ中得到0.5HZ的计数频率,2000分频----------
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
--这3个程序包足发应付大部分的VHDL程序设计
USEIEEE.STD_LOGIC_Arith.ALL;
USEIEEE.STD_LOGIC_Unsigned.ALL;
ENTITYDIVIS
GENERIC(N:
Integer:
=20000);
--此处定义了一个默认值N=10000,即电路为10000分频电路;
Port(Clockin:
INSTD_LOGIC;
ClockOut:
OUTSTD_LOGIC);
END;
ARCHITECTUREDeviderOFDIVIS
SIGNALCounter:
IntegerRANGE0TON-1;
SIGNALTemp1:
STD_LOGIC;
--信号的声明在结构体内,进程外部
BEGIN
PROCESS(Clockin)
BEGIN
IFRISING_EDGE(Clockin)THEN
IFCounter=N-1THEN
counter<
=0;
Temp1<
=NotTemp1;
ELSE
Counter<
=Counter+1;
IFCounter=(N/2-1)THEN
=NOTTemp1;
ENDIF;
ENDPROCESS;
ClockOut<
=Temp1;
(2)序列发生器模块:
(实体名为C_OUT)
序列发生器模块如图2所示,其中:
输入管脚:
CLK为0.5hz的时钟脉冲;
RST为复位信号;
CO序列发生器设计时用于计数,实现模16计数,以产生16位的序列
图2
产生一个十六位的指定序列
-----------------C_OUT------------------------------------------------------------------
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
--为了重载
ENTITYC_OUTIS
PORT(CLK,RST:
--定义时钟和复位信号
CO:
OUTSTD_LOGIC);
--序列发生器设计时用于计数,实现模16计数,以产生16位的序列
ENDC_OUT;
----------------------------------------------------------------------------------------
ARCHITECTUREbehavOFC_OUTIS
SIGNALCQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
--定义信号进行计数.实现模16计数,对应依次产生序列的位0到位15;
SIGNALQ:
STD_LOGIC;
PROCESS(CLK,RST,Q)
IFRST='
1'
THENCQ1<
="
0000"
;
Q<
='
0'
--如果复位,则计数器清0,M也清0
ELSIFCLK'
EVENTANDCLK='
THEN
CQ1<
=CQ1+1;
--时钟上升沿到来,Q开始计数,产生序列
CASECQ1IS
WHEN"
=>
Q<
0001"
0010"
0011"
0100"
0101"
0110"
0111"
1000"
1001"
1010"
1011"
1100"
1101"
1110"
1111"
ENDCASE;
ENDIF;
--序列发生器到此结束
CO<
ENDbehav;
(3)序列检测模块:
(实体名为SCHK)
序列检测模块如图3所示,其中:
EN为使能端,为1才正常工作;
M为显示当前产生的位;
N为显示满足序列要求时,产生‘1’,即为标志位。
图3
检测指定的序列
----------SCHK------------------------------------------------------------------------------
LIBRARYIEEE;
ENTITYSCHKIS
PORT(CLK,EN,M:
INSTD_LOGIC;
--EN为使能端,为1才正常工作;
M为显示当前产生的位
N:
OUTSTD_LOGIC);
-N为显示满足序列要求时,产生‘1’,即为标志位
ENDSCHK;
ARCHITECTUREbehavOFSCHKIS
TYPESTATEIS(S0,S1,S2,S3,S4,S5);
---状态机的定义,5个状态
SIGNALS:
STATE;
SIGNALA1,A2,A3,A4,A5:
--SIGNALQ:
INTEGERRANGE0TO5;
--SIGNALD:
STD_LOGIC_VECTOR(4DOWNTO0);
SIGNALN1:
PROCESS(CLK,S,N1,EN)---序列检测器进程
IFEN='
THEN
S<
=S0;
N1<
A5<
A4<
A3<
A2<
A1<
ELSIFCLK'
CASESIS
WHENS0=>
ifM='
thenS<
=S1;
elseS<
endif;
WHENS1=>
=S2;
WHENS2=>
=S3;
WHENS3=>
=S4;
WHENS4=>
=S5;
----生成一个11010序列
elseS<
endif;
--11011010里有一个,同时计数
WHENothers=>
S<
A5<
=A4;
---移位输出显示在led上以便观看
A4<
=A3;
A3<
=A2;
A2<
=A1;
A1<
=M;
--将最近生产的序列赋给最前端的A1位
N<
=N1;
--显示检测到11010,检测到时它为高电平,它所对应二极管亮,否则二极管灭
ENDbehav;
(4)16进制计数模块(实体名:
COUNT)
16进制计数模块如图4所示,其中:
CLK为检测到一个序列产生一个脉冲;
RST为计数复位信号;
EN为使能端;
Q[3..0]为计数的个位;
COUNT计数达到15时,产生标志信号
图4
16进制计数模块
-------------COUNT-----------------------------------------------
ENTITYCOUNTIS
PORT(CLK,RST,EN:
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDENTITYCOUNT;
ARCHITECTUREONEOFCOUNTIS
PROCESS(CLK,EN,RST)
VARIABLECQI:
BEGIN
IFRST='
THENCQI:
=(OTHERS=>
'
);
IFEN='
IFCQI<
15THEN
CQI:
=CQI+1;
ELSECQI:
IFCQI=15THENCOUT<
ELSECOUT<
=CQI;
ENDPROCESSCOUNT;
ENDARCHITECTUREONE;
(5)数码管显示模块(实体名:
scan_led)
数码管显示模块如图5所示,其中:
CLK为1khz的时钟脉冲;
data1[3..0]为要显示的数的个位;
data2[3..0]为要显示的数的十位;
scan数码管显示码
choose数码管位选信号
图5
将计数结果在数码管显示
---------------scan_led---------------------------------
ENTITYscan_ledIS
PORT(clk:
data1,data2
:
INSTD_LOGIC_VECTOR(3DOWNTO0);
scan:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
--scan数码管显示码
choose:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
--choose数码管位选信号
ENDENTITY;
ARCHITECTUREoneOFscan_ledIS
SIGNALcout8:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALA:
P1:
PROCESS(cout8)—片选
CASEcout8IS
000"
choose<
="
A<
=data1;
001"
=data2;
010"
011"
100"
101"
110"
;
111"
WHENOTHERS=>
NULL;
ENDPROCESSP1;
P2:
PROCESS(clk)
IFclk'
EVENTANDclk='
THENcout8<
=cout8+1;
ENDPROCESSP2;
P3:
PROCESS(A)—译码
CASEAIS
=>
scan<
0111111"
--0
0000110"
--1
1011011"
--2
1001111"
--3
1100110"
--4
1101101"
--5
1111101"
--6
0000111"
--7
1111111"
--8
1101111"
--9
WHEN"
1110111"
--A
1111100"
--B
0111001"
--C
1011110"
--D
1111001"
--E
1110001"
--F
WHENOTHERS=>
ENDPROCESSP3;
2.包装元件入库。
编译通过后,单击File→CreateDefaultSymbol,当前文件变成了一个包装好的自己的单一元件,并被放置在工程路径指定的目录中以备后用。
3.保存各个模块的原理图
单击File→Saveas…按扭,出现对话框,选择自己的目录(如c:
\myeda),合适名称保存刚才输入的原理图,原理图的扩展名为.bdf。
4.设置工程文件(Project)
以EXP4为工程名命名
5.选择目标器件
6.放置元件
7.添加连线
将以上各器件连接成实验原理图如下:
图6原理图设计
8.编译(Compiler)
单击→QuartusIICompiler,跳出Compiler窗口,此编译器的功能包括网表文件的提取、设计文件的排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。
单击Start,开始编译!
如果发现有错,排除错误后再次编译。
7.仿真,测试项目的正确性(仅对计数模块进行仿真测试)
1)建立新的波形激励文件
2)在波形编辑器窗口添加节点
3)通过Edit->
EndTime来设定仿真结束时间为1ms
4)在CLOCK窗口中设置clk的时钟周期为10ns
时间设置如下:
5)点击save保存,输入波形如下:
6)通过Tools下的SimulatorTools项进行仿真,然后观察输出波形。
仿真波形以及分析如下:
初步检验:
对上述问题进行调整
对序列发生器的考察:
对检测器进行考察:
对序列发生器清零端进行考察:
对计数器的考察:
对计数清零端进行考察:
对状态图的考察
由上可知,仿真结果与要求一致!
六、引脚锁定和编程下载
1.Assignments-.>
device->
引脚锁定,参照下载实验板1K100的引脚号说明书,选择适当的引脚
2.引脚锁定后,保存,必须重新进行一次全程编译,编译通过后才能编程下载。
3、编程下载,用下载线将计算机并口和试验箱上的JTAG口接起来,接通电源。
选择Tools—>
Programmer菜单,打开programmer窗口。
在mode中选中JTAG,将Program/Configure下的笑方框选中
4在开始编程之前,必须正确设置编程硬件。
点击“HardwareSetup”按钮,打开硬件设置口。
点击“AddHardware”打开硬件添加窗口,在“Hardwaretype”下拉框中选择“ByteBlasterMVorByteBlasterII”,“Port”下拉框中选择“LPT1”,点击OK按钮确认,关闭HardwareSetup窗口,完成硬件设置。
5、点击“Start”按钮,开始编程下载
图(14)下载成功
七、硬件测试结果
(1)序列发生器测试结果,实验中产生了序列0111010011011010
而且产生的原理即为:
看到的现象即为Q连接的数码管从0到15计数时,co连接的二极管会依次出现:
灭、亮、亮、亮、灭、亮、灭、灭、亮、亮、灭、亮、亮、灭、亮、灭
即产生了序列0111010011011010
(2)序列检测器测试结果
当产生的序列为11010时,与N相连的l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 实验 序列 发生器
![提示](https://static.bingdoc.com/images/bang_tan.gif)