数字电路综合设计实验报告文档Word下载.docx
《数字电路综合设计实验报告文档Word下载.docx》由会员分享,可在线阅读,更多相关《数字电路综合设计实验报告文档Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
3.4总体结构框图4
四.硬件介绍4
五.软件设计4
5.1基本思路4
5.2程序框图5
5.3子程序设计(代码)及仿真波形及分析5
5.3.1分频器5
5.3.2计数器7
5.3.3译码器8
5.4主程序设计及仿真波形及分析9
六.调试及相关说明10
七.结束语11
一.设计题目
基于QuartusII的流水灯设计仿真
二.设计要求及技术指标
2.1实验目的
通过本次实验,引导学生以计算机辅助设计的手段来设计数字逻辑电路;
掌握QuartusII集成开发环境软件原理图输入的设计流程;
掌握简单流水灯的工作原理,学会通过QuartusII建立原理图设计小型数字电路;
掌握可编程逻辑器件(PLD)的开发步骤;
掌握对设计进行编译、仿真的方法。
流水灯工作效果如下:
2.2实验要求
用逻辑电路控制8个LED灯,始终保持1亮7暗,亮灯从左到右,在脉冲信号CP的推动下循环流动。
2.3实验原理
利用信号生成器生成固定频率信号,降低频率后对信号累计编码,对累计编码的信号译码后送给LED灯显示。
三.方案选择及总体设计
3.1方案选择
使用QuartusII6.0设计系统,应用VHDL语言编程构造所需器件,需要的器件有分频器、计数器、译码器,组装好后,编译仿真,锁定引脚下载到开发板。
3.2总体设计
分为三个大的模块,分别为分频器、计数器、译码器。
使用分频器将晶振送来的高频信号转化为低频,用计数器记录时钟周期产生三位的二进制码,使用3-8线译码器输出高电平有效的信号,从而控制LED灯。
3.2.1信号生成
使用开发板自带的晶振产生原始信号,但是频率较高需要降低频率(分频)。
3.2.2分频
使用一个较淡的分频逻辑器件分频,原理为输入信号多个周期产生一个输出周期。
3.2.3信号计数编码
对于分频后的信号,并不能直接用于控制LED灯,需要技术产生二进制代码,译码后控制LED灯。
计数器可以对输入信号累加计数,由于最后的LED灯数目为8个,23=8,故需要产生3位的二进制码,范围从000到111。
3.2.4信号译码输出
经过编码的信号从000到111依次循环,可利用3-8线译码器,产生译码输出信号,又由于要求的是有一个灯亮,故输出信号选为高电平有效。
输入与输出信号对应关系如下表:
输入信号
输出信号
000
00000001
001
00000010
010
00000100
011
00001000
100
00010000
101
00100000
110
01000000
111
10000000
3.3功能描述
8个LED灯,有一个灯亮着从左到右,一轮过后再次循环,其他灯则灭。
3.4总体结构框图
四.硬件介绍
计算机、开发板、开发板上面的芯片为MAXII系列的EPM240T100C5。
五.软件设计
5.1基本思路
利用分频器对晶振产生的信号进行分频使频率降低,计数器对信号累加,产生三位的信号(从000到111),再利用三八线译码器对计数器产生的信号译码,产生高电平有效地信号(从00000001到10000000),将引脚锁定,下载到开发板。
5.2程序框图
从左到右依次为:
晶振信号输入、分频器、计数器、译码器、LED灯输出。
5.3子程序设计(代码)及仿真波形及分析
5.3.1分频器
代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydivideis
port(clk:
instd_logic;
cp:
outstd_logic);
end;
architecturedivideofdivideis
signalclock:
std_logic;
begin
cp<
=clock;
process(clk,clock)is
variablecount:
integerrange0to999999;
if(clk'
eventandclk='
1'
)then
if(count=999999)then
clock<
=notclock;
count:
=0;
else
=count+1;
endif;
endif;
endprocess;
enddivide;
仿真:
为了在仿真中便于观察,将分频周期中999999改为6,将divide.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
分析:
由仿真可以看出,输出信号的频率明显减低,若将分频数值设置得更大,效果将更加明显,说明本代码可以用于系统使用。
5.3.2计数器
useieee.std_logic_arith.all;
entitycounteris
outp:
outstd_logic_vector(2downto0));
end;
architecturecounterofcounteris
signals1:
std_logic_vector(2downto0);
process(clk)is
if(clk='
andclk'
event)then
s1<
=s1+'
;
outp<
=s1;
endcounter;
将counter.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
有仿真结果可以看出,对应于输入信号的每一个周期,输出都会改变,而且这种改变是有规律的,从000到111,符合了设计的要求,完全可以应用到系统设计之中。
5.3.3译码器
entitydecoderis
port(inp:
instd_logic_vector(2downto0);
outstd_logic_vector(7downto0));
architecturedecoderofdecoderis
process(inp)is
caseinpis
when"
000"
=>
="
00000001"
001"
00000010"
010"
00000100"
011"
00001000"
100"
00010000"
101"
00100000"
110"
01000000"
111"
10000000"
endcase;
enddecoder;
5.4主程序设计及仿真波形及分析
将前面的VHDL代码生成器件,依照数据处理顺序组装成为如下的电路图:
从左到右依次为晶振信号,分频器,计数器,译码器,LED灯输出。
对总电路图编译后仿真如下图:
可看出系统总体符合要求,8个LED灯依次亮灭。
六.调试及相关说明
将输入信号输出信号与引脚绑定,下载到开发板观看效果。
类型
引脚名
绑定引脚编号
输入
clk
12
输出
Out[7]
86
Out[6]
87
Out[5]
88
Out[4]
89
Out[3]
90
Out[2]
91
Out[1]
92
Out[0]
95
绑定后如图:
绑定后再次编译Design.bdf文件,效果如图:
七.结束语
在此次课程设计过程中,学会了QuartusII软件的使用,在QuartusII中创建项目、新建文件、编译文件、对设计进行仿真以及对编译好的内容进行下载到开发板上观察效果。
在整个过程中,编译使用VHDL代码编写的逻辑器件的代码时,需要将该文件设置为工程的顶层文件,否则后面的仿真出错。
在由逻辑器件组装好电路图时,需要将组装好的电路图文件设为顶层文件再编译,否则后面出错。
在下载到开发板之前,需要锁定引脚,之后还需要编译一次,否则会出错。
这些都是在开发设计过程中总结出的经验。
在设计过程中加深了对可编程逻辑器件的使用的理解,克服了一些困难,学到了一些以前没有学到的知识。