基于FPGA的汽车尾灯控制电路.docx
- 文档编号:26883108
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:11
- 大小:145.60KB
基于FPGA的汽车尾灯控制电路.docx
《基于FPGA的汽车尾灯控制电路.docx》由会员分享,可在线阅读,更多相关《基于FPGA的汽车尾灯控制电路.docx(11页珍藏版)》请在冰豆网上搜索。
基于FPGA的汽车尾灯控制电路
1.设计题目
汽车尾灯控制电路
2.设计目的
本次设计的目的就是通过实践深入理解计算机组成原理,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。
以计算机组成原理为指导,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。
通过对实用汽车尾灯控制器的设计,巩固和综合运用所学知识,提高分析、解决计算机技术实际问题的独立工作能力。
3.设计内容
3.1EDA的介绍
3.1.1EDA技术的概念
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
3.1.2EDA技术的特点
利用EDA技术进行电子系统的设计,具有以下几个特点:
①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
3.1.3EDA设计流程
典型的EDA设计流程如下:
1、文本/原理图编辑与修改。
首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。
完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
4、行为仿真和功能仿真。
利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。
5、适配。
利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。
适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。
6、功能仿真和时序仿真。
7、下载。
如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。
8、硬件仿真与测试。
4.硬件描述语言(VHDL)
4.1VHDL的介绍
VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本
4.2VHDL语言的特点
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
5.总体设计
5.1需求分析
根据现代交通规则,汽车尾灯控制器应满足以下基本要求:
1.汽车右转时,右侧的三盏灯循环点亮
2.汽车左转时,左侧的三盏灯循环点亮
3.汽车刹车时,左右两侧的指示灯同时亮
4.汽车故障时,左右两侧的指示灯同时明灭闪烁
5.2程序代码
moduleweideng(nrst,haz,left,right,brake,lc,lb,la,ra,rb,rc,/*CLOCK_50*/clk,vga);
inputhaz,left,right,brake;//warning,turnleft,turnright,braking
inputnrst,/*CLOCK_50*/clk;outputlc,lb,la,ra,rb,rc;//6light
outputvga;reg[3:
0]vga;
wirelc,lb,la,ra,rb,rc;
//wirecp;//2HZ
reg[19:
0]state,next_state;
//14states
parameter[19:
0]idle=20'b00_0000_0000_0001_000_000,
l1=20'b00_0000_0000_0010_001_000,
l2=20'b00_0000_0000_0100_010_000,
l3=20'b00_0000_0000_1000_100_000,
r1=20'b00_0000_0001_0000_000_100,
r2=20'b00_0000_0010_0000_000_010,
r3=20'b00_0000_0100_0000_000_001,
full=20'b00_0000_1000_0000_111_111,
bl1=20'b00_0001_0000_0000_001_111,
bl2=20'b00_0010_0000_0000_010_111,
bl3=20'b00_0100_0000_0000_100_111,
br1=20'b00_1000_0000_0000_111_100,
br2=20'b01_0000_0000_0000_111_010,
br3=20'b10_0000_0000_0000_111_001;
//positionofeachstate
parameter[4:
0]idle_pos=5'd6,
l1_pos=5'd7,
l2_pos=5'd8,
l3_pos=5'd9,
r1_pos=5'd10,
r2_pos=5'd11,
r3_pos=5'd12,
full_pos=5'd13,
bl1_pos=5'd14,
bl2_pos=5'd15,
bl3_pos=5'd16,
br1_pos=5'd17,
br2_pos=5'd18,
br3_pos=5'd19;
//storestatus
always@(posedgeclk,negedgenrst)
begin
vga=4'b0001;
if(!
nrst)
state<=idle;
else
state<=next_state;
end
//statetransition***
always@(haz,left,right,brake)
begin
next_state=idle;
case(1'b1)
state[idle_pos]:
if(left&~haz&~right&~brake)
next_state=l1;
elseif(right&~haz&~left&~brake)
next_state=r1;
elseif(brake|haz|left&right)
next_state=full;
else
next_state=idle;
state[l1_pos]:
if(brake)
next_state=bl1;
elseif(haz&~brake)
next_state=full;
else
next_state=l2;
state[l2_pos]:
if(brake)
next_state=bl1;
elseif(haz&~brake)
next_state=full;
else
next_state=l3;
state[l3_pos]:
next_state=idle;
state[full_pos]:
if(~brake)
next_state=idle;
else
next_state=full;
state[r1_pos]:
if(brake)
next_state=br1;
elseif(haz&~brake)
next_state=full;
else
next_state=r2;
state[r2_pos]:
if(brake)
next_state=br1;
elseif(haz&~brake)
next_state=full;
else
next_state=r3;
state[r3_pos]:
next_state=idle;
state[br1_pos]:
if(~brake)
next_state=r1;
//elseif(~brake&haz)
//next_state=full;
else
next_state=br2;
state[br2_pos]:
if(~brake)
next_state=r1;
//elseif(~brake&haz)
//next_state=full;
else
next_state=br3;
state[br3_pos]:
if(~brake)
next_state=r1;
else
next_state=br1;
state[bl1_pos]:
if(~brake)
next_state=l1;
//elseif(~brake&haz)
//next_state=full;
else
next_state=bl2;
state[bl2_pos]:
if(~brake)
next_state=l1;
//elseif(~brake&haz)
//next_state=full;
else
next_state=bl3;
state[bl3_pos]:
if(~brake)
next_state=l1;
else
next_state=bl1;
default:
next_state=idle;
endcase
end
//outputlogic
assignla=state[3],
lb=state[4],
lc=state[5],
ra=state[2],
rb=state[1],
rc=state[0];
//2hzclock
/*divn#(.WIDTH(25),.N(25000000))
CLOCK_50u0(
.clk(CLOCK_50),
.rst_n(nrst),
.o_clk(cp)
);*/
endmodule
6.RTL网表
7.PIN 管脚
8.实验箱电路
9.设计总结
通过一个星期的设计,最后完成了我的设计任务——汽车尾灯控制器的设计。
通过本次课程设计的学习,我体会到设计课的重要性和目的性。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环节,让同学们学以致用。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 汽车 尾灯 控制电路