#数字电路综合设计实验报告文档.docx
《#数字电路综合设计实验报告文档.docx》由会员分享,可在线阅读,更多相关《#数字电路综合设计实验报告文档.docx(11页珍藏版)》请在冰点文库上搜索。
#数字电路综合设计实验报告文档
数字电路综合设计课程报告
姓名:
学号:
班级:
20120530
一.设计题目
基于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;
begin
if(clk'eventandclk='1')then
if(count=999999)then
clock<=notclock;
count:
=0;
else
count:
=count+1;
endif;
endif;
endprocess;
enddivide;
仿真:
为了在仿真中便于观察,将分频周期中999999改为6,将divide.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
分析:
由仿真可以看出,输出信号的频率明显减低,若将分频数值设置得更大,效果将更加明显,说明本代码可以用于系统使用。
5.3.2计数器
代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(clk:
instd_logic;
outp:
outstd_logic_vector(2downto0));
end;
architecturecounterofcounteris
signals1:
std_logic_vector(2downto0);
begin
process(clk)is
begin
if(clk='1'andclk'event)then
s1<=s1+'1';
endif;
endprocess;
outp<=s1;
endcounter;
仿真:
将counter.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
分析:
有仿真结果可以看出,对应于输入信号的每一个周期,输出都会改变,而且这种改变是有规律的,从000到111,符合了设计的要求,完全可以使用到系统设计之中。
5.3.3译码器
代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydecoderis
port(inp:
instd_logic_vector(2downto0);
outp:
outstd_logic_vector(7downto0));
end;
architecturedecoderofdecoderis
begin
process(inp)is
begin
caseinpis
when"000"=>outp<="00000001";
when"001"=>outp<="00000010";
when"010"=>outp<="00000100";
when"011"=>outp<="00001000";
when"100"=>outp<="00010000";
when"101"=>outp<="00100000";
when"110"=>outp<="01000000";
when"111"=>outp<="10000000";
endcase;
endprocess;
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代码编写的逻辑器件的代码时,需要将该文件设置为工程的顶层文件,否则后面的仿真出错。
在由逻辑器件组装好电路图时,需要将组装好的电路图文件设为顶层文件再编译,否则后面出错。
在下载到开发板之前,需要锁定引脚,之后还需要编译一次,否则会出错。
这些都是在开发设计过程中总结出的经验。
在设计过程中加深了对可编程逻辑器件的使用的理解,克服了一些困难,学到了一些以前没有学到的知识。