综合电子实践Quartusii课程设计报告.docx

上传人:b****1 文档编号:539777 上传时间:2023-04-29 格式:DOCX 页数:35 大小:230.14KB
下载 相关 举报
综合电子实践Quartusii课程设计报告.docx_第1页
第1页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第2页
第2页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第3页
第3页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第4页
第4页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第5页
第5页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第6页
第6页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第7页
第7页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第8页
第8页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第9页
第9页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第10页
第10页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第11页
第11页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第12页
第12页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第13页
第13页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第14页
第14页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第15页
第15页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第16页
第16页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第17页
第17页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第18页
第18页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第19页
第19页 / 共35页
综合电子实践Quartusii课程设计报告.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

综合电子实践Quartusii课程设计报告.docx

《综合电子实践Quartusii课程设计报告.docx》由会员分享,可在线阅读,更多相关《综合电子实践Quartusii课程设计报告.docx(35页珍藏版)》请在冰点文库上搜索。

综合电子实践Quartusii课程设计报告.docx

综合电子实践Quartusii课程设计报告

 

综合电子实践Quartusii课程设计报告

 

姓名:

刘保帅

学号:

22011127

报告日期:

2013/9/4

 

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.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:

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..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.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选一的选择器来控制。

图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;--IEEE库使用声明

ENTITYfenpinqiIS--实体端口声明

PORT(clk,rst:

INstd_logic;--类型的输入端口

clk_10,clk_4,clk_6,clk_8:

OUTstd_logic);--输出口

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时,则a等于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;--关闭进程

p4:

process(clk,rst)--开启另外一个进程

variabled:

integerrange0to20;--定义d为变量

begin

ifrst='1'then

clk_10<='0';-----复位信号控制部分

else

ifclk'eventandclk='1'then

ifd>=9then

d:

=0;

clk_10<='1';

else

d:

=d+1;

clk_10<='0';

endif;

endif;

endif;

endprocessp4;

endcd;

图3.2集成分频器仿真波形

3.232进制计数器模块

1)32进制模块用来控制彩灯输出模块,即确定跑马灯控制器的不同的输出。

Rst:

输入信号复位信号用来复位32进制使其输出为“00000”。

Clk:

输入信号用来给模块提供工作频率。

Count_out[4..0]:

输出信号即为32进制计数器的输出。

图3.232进制计数器

2)32进制计数器VHDL程序编写及其仿真结果

libraryieee;

useieee.std_logic_1164.all;--IEEE库使用声明

entitycounter_32is--实体端口声明

port(clk,rst:

instd_logic;--声明clk,clr是标准逻辑位类型的输入端口

count_out:

outintegerrange0to31);

endcounter_32;

architectureaofcounter_32is

begin

process(rst,clk)

variabletemp:

integerrange0to32;--定义temp为变量

begin

ifrst='1'then--条件选择语句

temp:

=0;

elsif

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2