综合电子实践Quartusii课程设计报告.docx
- 文档编号:4041956
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:34
- 大小:154.04KB
综合电子实践Quartusii课程设计报告.docx
《综合电子实践Quartusii课程设计报告.docx》由会员分享,可在线阅读,更多相关《综合电子实践Quartusii课程设计报告.docx(34页珍藏版)》请在冰点文库上搜索。
综合电子实践Quartusii课程设计报告
姓名:
刘保帅
学号:
22011127
报告日期:
2013/9/4
A交通控制灯设计
1.系统设计要求
(1)在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一个方向是(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
(2)设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间。
其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
(3)当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束时,控制器恢复原来状态,继续正常运行。
2.系统设计方案
2.1系统设计思路
(1)本系统设计中均采用混合设计的方法,将整体方案划分成若干个模块进行设计。
采
用VHDL硬件描述语言和原理图描述相结合的方式,对多种应用电路进行设计,其中底层电路(即模块电路)采用VHDL硬件描述语言方式实现,顶层电路采用原理图描述方式实现。
提出系统设计要求
需求分析
模块化方案设计
底层电路设计----VHDL模块
电路设计
顶层电路设计----原理图描
述+各模块连接
FPGA整体方案设计实现
FPGA整体方案编译仿真
硬件搭接和运行
FPGA整体方案设计完成
图1系统设计流程
2.2系统设计方案分析
根据任务要求,计数器的值和交通灯亮灭关系如图1所示。
显然,此任务设计的核心是一个技术范围为0~50s的计数器和一个根据计数值作出规
定反应的控制器。
假设现有晶振为20MHz,因此还需要分频电路来得到10Hz和1Hz的时
钟,最后要驱动七段数码管,还需要一个译码电路。
绿灯亮
黄灯亮
红灯亮
2025
4550
计数值
红灯亮
绿灯亮
黄灯亮
图2计数值和交通灯亮灭关系
根据上面的分析,交通控制灯系统框图如图3所示;
Hold
Reset
计数器控制器—
红、黄、绿发光
二极管
倒计时数字及“闪
烁控制信号”
Clk1Hz
分频电路
20MHz
事分位译码电路
Clk10Hz
CPLD/FPGA
七段数码管驱动电路
七段数码管
图3交通控制等系统框图
3.交通控制灯各模块电路设计
3.1控制模块controller
(1)控制模块的作用是根据计数器的数值控制发光二极管的亮、灭,以及输出倒计时数值
给七段数码管的分位译码电路。
计数范围为0~50。
计数到50后,下一个时钟沿回复
到0,开始下一计数。
此外当检测到特殊情况(hold=””发生时,计数器暂停计数,
无条件点亮红色的发光二极管。
而系统复位信号reset则使计数器异步清零。
控制模
块controller外部端口如图4所示。
cor«roA«r
clock
―
hold
iuimb(4.0]
二
grwna
yetgma
redb
—[
—?
一;
图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=47thencountnum<=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<=17thennuma<=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.2时钟分频模块frequencylOHz和frequency
(1)时钟分频模块是对系统时钟(设为20MHz)进行分频,得到10Hz和1Hz的时钟。
时钟分频模块的外部端口如图5所示。
f瞥■■!
1)■IJ1I!
JLUIIbJliiLI1ilLLIiL■■h■JJJ.UJIJ.till■■
|frequencylOhz
1■*L・t
1
i
U
1
P
clk20nnclk1Ohz
.\instIO
图5时钟分频模块的外部端口
(2)时钟分频模块frequency10Hz的VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfrequency10hzisport(clk20m:
instd_logic;
clk10hz:
outstd_logic);
end;
architecturecountoffrequency10hzissignaltout:
integerrange0to777777;signalclk:
std_logic;
begin
process(clk20m)
begin
ifrising_edge(clk20m)then
iftout<=777777then
tout<=0;
clk<=notclk;
elsetout<=tout+1;
endif;
endif;
endprocess;
clk10hz<=clk;
end;
(3)时钟分频模块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;
3.3分位电路模块fenwei
(1)因为控制输出的倒计时数值可能是1位或者2位十进制数,所以七段数码管的译码电
路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5)。
(2)分位电路模块fenwei的外部端口如图6所示。
fenwei模块输出的计数值numa[4..O]和numb[4..O]将十位数和个位数分别存到数组里,这样可以得到两个路口倒计时时间显示的十位和个位信号。
jfemvei
:
clock
fiuiria[3..O]
1numin[40]
ridmb[3.0]
1irxsti1
、■・r■■■■■:
p・・・■«mu■■■abtb■an■
■・r・rnd・■■j■■bub・・■>■■・・・aiaana■■■|biiii4■■■
■
图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>=10thennuma<=1;numb<=numin-10;
else
numa<=0;
numb<=numin;
endif;
endif;
endprocess;
end;
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;
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选一的选择器来控制。
眈进制计數器跑马灯控制器iLED输出
图3.1跑马灯的输出原理方框图
扬芦器输出*
堤供选择端屮
图3.2扬声器输出原理方框图
3.硬件电路的设计与软件设计
3.1集成分频器模块
1)设计要求显示不同的跑马灯的时候要伴随不同的音乐,所以设计分频器来用不同的频率控制不同的音乐输出。
模块说明:
Rst:
输入信号,复位信号,用来复位集成分频器的输出使输出为“0”,及没有音
乐输出。
Clk:
输入信号,即为分频输入的频率信号。
Clk_4、clk_6、clk_8、clk_10:
输出信号即为分频模块对输入信号clk的分频,
分别为1/4分频输出、1/6分频输出、1/8分频输出、1/10分频输出。
图3.1集成分频器
2)分频器VHDL程序编写及仿真结果
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYfenpinqiIS
P0RT(clk,rst:
INstd_logic;
--IEEE库使用声明
--实体端口声明
--类型的输入端口
clk_10,clk_4,clk_6,clk_8:
OUTstd」ogic);--输出口
ENDfenpinqi;
ARCHITECTUREcdOFfenpinqiIS
--结构体功能描述语句
begin
p1:
process(clk,rst)--进程语句
variablea:
integerrange0to20;
begin
ifrst='1'then
clk_4<='0';
else
ifclk'eventandclk='1'then
---复位信号控制部分
--时钟信号clk,上升沿有效边沿
ifa>=3thena:
=0;
--当a大于等于3时,贝Ua等于0
clk_4<='1';
else
a:
=a+1;
--否贝a等于a加1
clk_4<='0';
endif;
endif;
endif;
endprocessp1;
p2:
process(clk,rst)
variableb:
integerrange0to20;
begin
ifrst='1'then
clk_6<='0';
复位信号控制部分
else
ifclk'eventandclk='1'then
ifb>=5then
b:
=0;
clk_6<='1';
else
b:
=b+1;
clk_6<='0';
endif;
endif;
endif;
endprocessp2;
p3:
process(clk,rst)
variablec:
integerrange0to20;
begin
ifrst='1'then
clk_8<='0';复位信号控制部分
else
ifclk'eventandclk='1'then
ifc>=7then
c:
=0;
clk_8<='1';
else
c:
=c+1;
clk_8<='0';
endif;
endif;
endif;
endprocessp3;--关闭进程
--定义d为变量
复位信号控制部分
variabled:
integerrange0to20;
begin
ifrst='1'then
clk_10<='0';
else
ifclk'eventandclk='1'thenifd>=9then
d:
=0;
clk_10<='1';
else
d:
=d+1;
clk_10<='0';
endif;
endif;
endif;
endprocessp4;
endcd;
3.232进制计数器模块
1)32进制模块用来控制彩灯输出模块,即确定跑马灯控制器的不同的输出
Rst:
输入信号复位信号用来复位32进制使其输出为“00000”。
Clk:
输入信号用来给模
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 电子 实践 Quartusii 课程设计 报告