#数字电路综合设计实验报告文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路综合设计课程报告
姓名:
学号:
班级:
20120530
数字电路综合设计
目录
一. 设计题目 0
二.设计要求及技术指标 0
2.1实验目的 0
2.2 实验要求 0
2.3 实验原理 (1)
三.方案选择及总体设计 (1)
3.1 方案选择 (1)
3.2 总体设计 (1)
3.2.1 信号生成 (1)
3.2.2 分频 (1)
3.2.3 信号计数编码 (1)
3.2.4 信号译码输出 (2)
3.3 功能描述 (2)
3.4 总体结构框图 (2)
四. 硬件介绍 (3)
五. 软件设计 (3)
5.1 基本思路 (3)
5.2 程序框图 (3)
5.3 子程序设计(代码)及仿真波形及分析 (4)
5.3.1 分频器 (4)
5.3.2 计数器 (6)
5.3.3 译码器 (7)
5.4 主程序设计及仿真波形及分析 (8)
六. 调试及相关说明 (9)
七. 结束语 (10)
一. 设计题目
基于Quartus II的流水灯设计仿真
二.设计要求及技术指标
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 ********
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 分频器
代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity divide is
port(clk:in std_logic;
cp:out std_logic);
end;
architecture divide of divide is
signal clock:std_logic;
begin
cp<=clock;
process(clk,clock) is
variable count:integer range 0 to 999999;
begin
if(clk'event and clk='1')then
if(count=999999) then
clock<=not clock;
count:=0;
else
count:=count+1;
end if;
end if;
end process;
end divide;
仿真:
为了在仿真中便于观察,将分频周期中999999改为6,将divide.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
分析:
由仿真可以看出,输出信号的频率明显减低,若将分频数值设置
得更大,效果将更加明显,说明本代码可以用于系统使用。
5.3.2 计数器
代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(clk:in std_logic;
outp:out std_logic_vector(2 downto 0));
end;
architecture counter of counter is
signal s1:std_logic_vector(2 downto 0);
begin
process(clk) is
begin
if(clk='1' and clk'event)then
s1<=s1+'1';
end if;
end process;
outp<=s1;
end counter;
仿真:
将counter.vhd设为顶层文件,编译,新建一个波形文件,将端口导入,选择“功能仿真”、新建网表,为输入指定值,仿真后波形图如下:
分析:
有仿真结果可以看出,对应于输入信号的每一个周期,输出都会改变,而且这种改变是有规律的,从000到111,符合了设计的要求,完全可以使用到系统设计之中。
5.3.3 译码器
代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity decoder is
port(inp:in std_logic_vector(2 downto 0);
outp:out std_logic_vector(7 downto 0));
end;
architecture decoder of decoder is
begin
process(inp) is
begin
case inp is
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";
end case;
end process;
end decoder;
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代码编写的逻辑器件的代码时,需要将该文件设置为工程的顶层文件,否则后面的仿真出错。
在由逻辑器件组装好电路图时,需要将组装好的电路图文件设为顶层文件再编译,否则后面出错。
在下载到开发板之前,需要锁定引脚,之后还需要编译一次,否则会出错。
这些都是在开发设计过程中总结出的经验。
在设计过程中加深了对可编程逻辑器件的使用的理解,克服了一些困难,学到了一些以前没有学到的知识。