东南大学综合电子实践Quartus ii课程设计报告.docx
《东南大学综合电子实践Quartus ii课程设计报告.docx》由会员分享,可在线阅读,更多相关《东南大学综合电子实践Quartus ii课程设计报告.docx(48页珍藏版)》请在冰豆网上搜索。
东南大学综合电子实践Quartusii课程设计报告
综合电子实践Quartusii课程设计报告
姓名:
XXX
学号:
22011XXX
报告日期:
2013/9/6
A交通控制灯设计…………………………………………………………………………………..………………………3
1.系统设计要求……………………………………………………………………………………………..…………………….3
2.系统设计方案……………………………………………………………………………………………………………………3
2.1系统设计思路……………………………………………………………………………………………………………3
2.2系统设计方案分析…………………………………………………………………………………………………….5
3.交通控制灯各模块电路设计……………………………………………………………………………………………6
3.1控制模块controller………………………………………………………………………………………………………6
3.2时钟分频模块frequency10Hz和frequency…………………………………………………………………………10
3.3分位电路模块fenwei……………………………………………………………………………………………….……12
3.4带闪烁功能的七段数码驱动显示模块display…………………………………………………………….…………14
4.交通控制灯顶层电路设计……………………………………………………………………………………….………16
4.1原理说明…………………………………………………………………………………………………..…………………16
4.2端口设计说明…………………………………………………………………………………………….…………………16
4.3Quartusii仿真与结果分析………………………………………………………………………………………………..17
B跑马灯设计………………………………………………………………………………………………………………………19
1.设计要求……………………………………………………………………………………………………………………………….19
2.方案设计框架……………………………………………………………………………………………………………….………19
3.硬件电路的设计与软件设计………………………………………………………………………………………………..20
3.1集成分频器模块……………………………………………………………………………………………….……………20
3.232进制计数器模块…………………………………………………………………………………………………………24
3.3彩灯控制模块……………………………………………………………………………………………………………..…25
3.44选1选择器模块………………………………………………………………………………………………………..…28
3.54进制计数器模块…………………………………………………………………………………………………………..29
4.系统结构及仿真……………………………………………………………………………………………………………..…….31
C数字钟设计……………………………………………………………………………………………………32
1.系统设计要求………………………………………………………………………………………………………..32
2.系统设计和仿真验证………………………………………………………………………………………………33
2.1整体方案设计…………………………………………………………………………………………………..33
2.2端口设计说明………………………………………………………………………………………………….34
2.3功能仿真……………………………………………………………………………………………………...34
3.VHDL设计和RTL视图…………………………………………………………………………………………….35
3.1对应的的顶层VHDL设计…………………………………………………………………………………….35
3.2底部元件74161_0,74161_1,74161_2和74161_3VHDL设计………………………………………………………………….41
3.3RTL视图…………………………………………………………………………………………………….…42
D设计心得…………………………………………………………………………………………………………..42
※设计报告说明:
所有程序均在Quartusii9.0环境下运行,打开时可能会存在软件版本问题
A交通控制灯设计
1.系统设计要求
(1)在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一个方向是(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
(2)设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间。
其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
(3)当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束时,控制器恢复原来状态,继续正常运行。
2.系统设计方案
2.1系统设计思路
(1)本系统设计中均采用混合设计的方法,将整体方案划分成若干个模块进行设计。
采用VHDL硬件描述语言和原理图描述相结合的方式,对多种应用电路进行设计,其中底层电路(即模块电路)采用VHDL硬件描述语言方式实现,顶层电路采用原理图描述方式实现。
(2)系统设计流程
提出系统设计要求
需求分析
模块化方案设计
底层电路设计----VHDL模块电路设计
顶层电路设计----原理图描述+各模块连接
FPGA整体方案设计实现
FPGA整体方案编译仿真
时序仿真
功能仿真
硬件搭接和运行
FPGA整体方案设计完成
图1系统设计流程
2.2系统设计方案分析
根据任务要求,计数器的值和交通灯亮灭关系如图1所示。
显然,此任务设计的核心是一个技术范围为0~50s的计数器和一个根据计数值作出规定反应的控制器。
假设现有晶振为20MHz,因此还需要分频电路来得到10Hz和1Hz的时钟,最后要驱动七段数码管,还需要一个译码电路。
红灯亮
绿灯亮
黄灯亮
计数值
50
45
25
20
0
红灯亮
绿灯亮
黄灯亮
图2计数值和交通灯亮灭关系
根据上面的分析,交通控制灯系统框图如图3所示;
Hold
Reset
计数器
红、黄、绿发光二极管
控制器
倒计时数字及“闪烁控制信号”
Clk1Hz
分频电路
20MHz
分位译码电路
Clk10Hz
CPLD/FPGA
七段数码管
七段数码管驱动电路
图3交通控制等系统框图
3.交通控制灯各模块电路设计
3.1控制模块controller
(1)控制模块的作用是根据计数器的数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
计数范围为0~50。
计数到50后,下一个时钟沿回复到0,开始下一计数。
此外当检测到特殊情况(hold=”1”)发生时,计数器暂停计数,无条件点亮红色的发光二极管。
而系统复位信号reset则使计数器异步清零。
控制模块controller外部端口如图4所示。
图4控制模块controller外部端口
(2)控制模块的VHDL程序
程序说明:
控制模块描述了功能键hold和reset的功能;同时对频率为1Hz的时钟进行计数,通过计数值,对各个时间段内交通灯信号进行描述;此外,模块还给出了下一步用于倒计时的信号numa[4..0]和numb[4..0]。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycontrolleris
port(clock:
instd_logic;
reset:
instd_logic;
hold:
instd_logic;
flash:
outstd_logic;
numa,numb:
outintegerrange0to25;
reda,greena,yellowa:
outstd_logic;
redb,greenb,yellowb:
outstd_logic);
end;
architecturecontrolofcontrolleris
signalcountnum:
integerrange0to50;
begin
process(clock)
begin
ifreset='1'then
countnum<=0;
elsifrising_edge(clock)then
ifhold='1'then
flash<='1';
else
flash<='0';
ifcountnum=47then
countnum<=0;
else
countnum<=countnum+1;
endif;
endif;
endif;
endprocess;
process(clock)
begin
ifrising_edge(clock)then
ifhold='1'then
reda<='1';
redb<='1';
greena<='0';
greenb<='0';
yellowa<='0';
yellowb<='0';
else
ifcountnum<=17then
numa<=20-countnum;
reda<='0';
greena<='1';
yellowa<='0';
elsif(countnum<=24)then
numa<=25-countnum;
reda<='0';
greena<='0';
yellowa<='1';
else
numa<=50-countnum;
reda<='1';
greena<='0';
yellowa<='0';
endif;
ifcountnum<=24then
numb<=25-countnum;
redb<='1';
greenb<='0';
yellowb<='0';
elsifcountnum<=44then
numb<=45-countnum;
redb<='0';
greenb<='1';
yellowb<='0';
else
numb<=50-countnum;
redb<='0';
greenb<='0';
yellowb<='1';
endif;
endif;
endif;
endprocess;
end;
(3)控制模块的VHDL仿真验证
●初始状态
●整体功能验证
●reset键功能验证---将状态恢复至初始状态,计数器显示初始值,绿灯greena和红灯redb亮
●hold键功能验证----保持计数值不变,红灯reda和redb同时亮,flash闪烁输出为高电平
3.2时钟分频模块frequency10Hz和frequency
(1)时钟分频模块是对系统时钟(设为20MHz)进行分频,得到10Hz和1Hz的时钟。
时钟分频模块的外部端口如图5所示。
图5时钟分频模块的外部端口
(2)时钟分频模块frequency10Hz的VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfrequency10hzis
port(clk20m:
instd_logic;
clk10hz:
outstd_logic);
end;
architecturecountoffrequency10hzis
signaltout:
integerrange0to999999;
signalclk:
std_logic;
begin
process(clk20m)
begin
ifrising_edge(clk20m)then
iftout=999999then
tout<=0;
clk<=notclk;
elsetout<=tout+1;
endif;
endif;
endprocess;
clk10hz<=clk;
end;
(3)时钟分频模块frequency10Hz仿真验证
(4)时钟分频模块frequency的VHDL程序
程序说明:
通过一级分频得到10Hz的时钟,对其再次分频得到1Hz时钟。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfrequencyis
port(clk10hz:
instd_logic;
clk1hz:
outstd_logic);
end;
architecturecountoffrequencyis
signaltout:
integerrange0to4;
signalclk:
std_logic;
begin
process(clk10hz)
begin
ifrising_edge(clk10hz)then
iftout=4then
tout<=0;
clk<=notclk;
elsetout<=tout+1;
endif;
endif;
endprocess;
clk1hz<=clk;
end;
(5)时钟分频模块frequency仿真验证
3.3分位电路模块fenwei
(1)因为控制输出的倒计时数值可能是1位或者2位十进制数,所以七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5)。
(2)分位电路模块fenwei的外部端口如图6所示。
fenwei模块输出的计数值numa[4..0]和numb[4..0]将十位数和个位数分别存到数组里,这样可以得到两个路口倒计时时间显示的十位和个位信号。
图6分位电路模块fenwei外部端口
(3)分位电路模块fenwei的VHDL程序
程序说明:
以10Hz的速度提取显示值。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenweiis
port(clock:
instd_logic;
numin:
inintegerrange0to25;
numa,numb:
outintegerrange0to15);
end;
architecturefenoffenweiis
begin
process(clock)
begin
ifrising_edge(clock)then
ifnumin>=20then
numa<=2;
numb<=numin-20;
elsifnumin>=10then
numa<=1;
numb<=numin-10;
else
numa<=0;
numb<=numin;
endif;
endif;
endprocess;
end;
(3)分位电路模块fenwei仿真验证
3.4带闪烁功能的七段数码驱动显示模块display
(1)七段数码驱动显示模块对输入信号进行译码得到七段数码显示器的驱动信号,其外部端口如图7所示。
图7七段数码驱动显示模块display外部端口
(2)七段数码驱动显示模块display的VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydisplayis
port(clock:
instd_logic;
flash:
instd_logic;
qin:
instd_logic_vector(3downto0);
display:
outstd_logic_vector(0to6));
end;
architecturelightofdisplayis
signaltimeout:
integerrange0to11;
begin
process(clock)
begin
ifrising_edge(clock)then
if(flash='0')then
timeout<=0;
else
if(timeout=11)then
timeout<=timeout+1;
endif;
endif;
if(timeout<=6)then
caseqinis
when"0000"=>display<="1111110";
when"0001"=>display<="0110000";
when"0010"=>display<="1101101";
when"0011"=>display<="1111001";
when"0100"=>display<="0110011";
when"0101"=>display<="1011011";
when"0110"=>display<="1011111";
when"0111"=>display<="1110000";
when"1000"=>display<="1111111";
when"1001"=>display<="1111011";
whenothers=>display<="0000000";
endcase;
else
display<="0000000";
endif;
endif;
endprocess;
end;
(3)七段数码驱动显示模块display仿真验证
4.交通控制灯顶层电路设计
4.1原理说明
交通顶层电路图如图8所示。
图8中有3个输入信号clk20m、reset和hold。
clk20m为系统输入时钟,它通过分频器可分别得到1Hz和10Hz频率信号,分别用来向controller模块和display模块提供时钟脉冲。
controller模块根据时钟脉冲上升沿开始计数,将数据传输到numa[4…0]和numb[4…0]两个端口,并对reda、greena、yellowa和redb、greenb、yellowb两组红、黄、绿灯开始控制。
fenwei模块时钟由系统输入时钟clk20m控制,将controller模块输出端口numa[4…0]和numb[4…0]传输过来的数据分为十位数和个位数分别存到numina、numinb、numinc和numind两组两位数组里,然后分别送到display模块输入端口numina、numinb、numinc和numind进行数据显示。
图8交通控制灯顶层设计原理图
4.2端口设计说明
●clk20m:
系统输入时钟,来自于石英振荡器。
●hold:
输入,功能键,保持:
按hold键能实现特殊的功能:
显示倒计时的两组数码管闪烁;计数器停止计数并保持在原有的状态;东西,南北路口均显示红灯状态;特殊状态接触后可以继续计数。
●reset:
输入,功能键,复位。
●flash:
输出,转换期间的闪烁信号。
●redb:
输出,B路口显示红灯信号,高电平有效。
●greenb:
输出,B路口显示绿灯信号,高电平有效。
●yellowb:
输出,B路口显示黄灯信号,高电平有效。
●reda:
输出,A路口显示红灯信号,高电平有效。
●greena:
输出,A路口显示绿灯信号,高电平有效。
●yellowab:
输出,A路口显示黄灯信号,高电平有效。
●displaya:
A路口倒数时间显示十位数
●displayb:
A路口倒数时间显示个位数
●displayc:
B路口倒数时间显示十位数
●displayd:
B路口倒数时间显示个位数
4.3Quartusii仿真与结果分析
交通灯控制系统的时序仿真波形如图9~图11所示。
可见,图9中reset设置为高电平“1”时显示初始值,为低电平“0”时显示器开始倒计时。
图9交通灯控制系统的时序仿真波形1
图10是仿真结果的细节部分。
当A路口绿灯亮。
displaya和displayb从20s倒计时,同时B路口灯亮,displayc和displayd从25s倒计时。
当A路口绿灯倒计时结束时,让黄灯亮,倒计时5s为转换信号,当黄灯倒计时结束时红灯亮,displaya和displayb从25s倒计时。
B路口绿灯亮,displayc和displayd从20s倒计时,A路口红灯亮,displaya和displayb从25s倒计时,这时B路口重复A路口的上一次动作,如此循环下去。
图10交通灯控制系统的时序仿真波形2
图11交通灯控制系统的时序仿真波形3
从图11可以看出交通灯控制系统中hold键的功能。
当hold设置为高电平“1”时显示器保持原有数字不变,且无条件点亮红色的发光二极管reda=1。
当hold设置为低电平“0”时,显示器继续计数。
B跑马灯设计
1.设计要求
1.1学习并掌握Quartusii软件,掌握用自顶向下的设计方法,使用VHDL语言来实现跑马灯的设计,并在此基础上熟悉可编程逻辑器件的使用。
1.2基础功能要求:
实现8个红色LED的亮、灭、交错显示等,其显示如下
(1)复位时,8个灯全灭;
(2)从左到右第一个开始亮,依次亮到最后一个;
(3)从右到左第一个开始亮,依次亮到最后一个;
(4)从中间亮到两边;
(5)从两边亮到中间;
1.3扩展功能要求:
随着彩灯显示图案的变化,发出不同的音响声。
2.方案设计框架
2.1这次的跑马灯设计采用模块化方法设计,整体方案包括分频器模块、计数器模块、选择器模块和彩灯控制器模块。
其中彩灯控制器是用来输出不同的图案和音响声,彩灯控制器的输出则是用一个32进制的计数器来控制。
扬声器的输出用不同的频率来控制,因此用了一个集成分频器来使输入的频率被分为几种不同的频率。
不同频率的选择性的输出则是用一个4选一的选择器