建材秒知道
登录
建材号 > 设计 > 正文

基于FPGA的汽车尾灯控制器的设计

优雅的大门
淡然的金毛
2023-01-26 15:20:52

基于FPGA的汽车尾灯控制器的设计

最佳答案
生动的芹菜
孤独的画板
2025-08-28 04:08:38

1.1设计的目的

本次设计的目的就是通过实践深入理解计算机组成原理,了解EDA技术[2]并掌握VHDL硬件描述语言的设计方法和思想。以计算机组成原理为指导,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。通过对实用汽车尾灯控制器[3]的设计,巩固和综合运用所学知识,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。

1.2设计的基本内容

根据计算机中状态机原理,利用VHDL设计汽车尾灯控制器的各个模块,并使用EDA 工具对各模块进行仿真验证。汽车尾灯控制器的设计分为4个模块:时钟分频模块、汽车尾灯主控模块,左边灯控制模块和右边灯控制模块。把各个模块整合后就形成了汽车尾灯控制器。通过输入系统时钟信号和相关的汽车控制信号,汽车尾灯将正确显示当前汽车的控制状态。

1.3 EDA的介绍

1.3.1 EDA技术的概念

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

1.3.2 EDA技术的特点

利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。

1.3.3 EDA设计流程

典型的EDA设计流程如下:

1、文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。

2、编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。

3、 综合。将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。

4、 行为仿真和功能仿真。利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。

5、适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。

6、 功能仿真和时序仿真。

7、 下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。

8、 硬件仿真与测试。

1.4硬件描述语言(VHDL)

1.4.1 VHDL的介绍

VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本

1.4.2 VHDL语言的特点

1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。

2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。

3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。

4.可以进行从系统级到逻辑级的描述,即混合描述。

5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。

2.总体设计

2.1需求分析

根据现代交通规则,汽车尾灯控制器应满足以下基本要求:

1.汽车正常使用是指示灯不亮

2.汽车右转时,右侧的一盏灯亮

3.汽车左转时,左侧的一盏灯亮

4.汽车刹车时,左右两侧的指示灯同时亮

5.汽车夜间行驶时,左右两侧的指示灯同时一直亮,供照明使用

2.2汽车尾灯控制器的工作原理

汽车尾灯控制器就是一个状态机的实例。当汽车正常行驶时所有指示灯都不亮;当汽车向右转弯时,汽车右侧的指示灯RD1亮;当汽车向左侧转弯时,汽车左侧的指示灯LD1亮;当汽车刹车时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时亮;当汽车在夜间行驶时,汽车右侧的指示灯RD3和汽车左侧的指示灯LD3同时一直亮。通过设置系统的输入信号:系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT和系统的输出信号:汽车左侧3盏指示灯LD1、LD2、LD3和汽车右侧3盏指示灯RD1、RD2、

RD3实现以上功能。系统的整体组装设计原理如图3.1所示。

图2.3整体组装设计原理

2.3 汽车运行状态表和总体框图

汽车尾灯和汽车运行状态表如表1所示。

汽车尾灯和汽车运行状态表1-1

开关控制 汽车运行状态 右转尾灯 左转尾灯

S0 S1S2 R1 R2R3 L1L2L3

00 0 正常运行 灯灭 灯灭

00 1 左转弯 灯灭 按L1L2L3顺序循环点亮

01 0 右转弯 按R1R2R3顺序循环点亮 灯灭

01 1 临时刹车/检测 所有尾灯同时点亮

10 0 倒车 所有尾灯按照转弯次序点亮

10 1 晚上行车时 R3 ,L3一直点亮

汽车尾灯控制电路设计总体框图如图1所示:

图1汽车尾灯控制电路设计总体框图

3.详细设计

3.1各组成模块

实现的主要功能是通过开关控制从而实现汽车尾灯的点亮方式。汽车尾灯控制器有4个模块组成,分别为:时钟分频模块、汽车尾灯主控模块,左边灯控制模块和右边灯控制模块,以下介绍各模块的详细设计。

3.2时钟分频模块

整个时钟分频模块的工作框图如图3.2所示。

图3.2时钟分频模块工作框图

时钟分频模块由VHDL程序来实现,下面是其中的一段VHDL代码:

ARCHITECTURE ART OF SZ IS

SIGNAL COUNT:STD_LOGIC_VECTOR(7 DOWNTO 0)

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK = '1'THEN

COUNT <= COUNT + 1

END IF

END PROCESS

CP<= COUNT(3)

END ART

3.3 汽车尾灯主控模块

汽车尾灯主控模块工作框图如图3.3所示

图3.3 主控模块工作框图

汽车尾灯主控模块由VHDL程序来实现,下面是其中的一段VHDL代码:

ARCHITECTURE ART OF CTRL IS

BEGIN

NIGHT_LED<=NIGHT

BRAKE_LED<=BAKE

PROCESS(LEFT,RIGHT)

VARIABLE TEMP:STD_LOGIC_VECTOR(1 DOWNTO 0)

BEGIN

TEMP:=LEFT &RIGHT

CASE TEMP IS

WHEN "00" =>LP<='0'RP<='0'LR<='0'

WHEN "01" =>LP<='0'RP<='1'LR<='0'

WHEN "10" =>LP<='1'RP<='0'LR<='0'

WHEN OTHERS=>LP<='0'RP<='0'LR<='1'

END CASE

END PROCESS

END ART

3.4左边灯控制模块

左边灯控制模块的工作框图如图3.4所示。

图3.4左边灯控制模块的工作框图

左边灯控制模块由VHDL程序来实现,下面是其中的一段VHDL代码:

ARCHITECTURE ART OF LC IS

BEGIN

LEDB<=BRAKE

LEDN<=NIGHT

PROCESS(CLK,LP,LR)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN

IF(LR ='0')THEN

IF(LP = '0')THEN

LEDL<='0'

ELSE

LEDL<='1'

END IF

ELSE

LEDL <='0'

END IF

END IF

END PROCESS

END ART

3.5右边灯控制模块

右边灯控制模块的工作框图如图3.5所示

图3.5 右边灯控制模块的工作框图

右边灯控制模块由VHDL程序来实现,下面是其中的一段VHDL代码:

ARCHITECTURE ART OF RC IS

BEGIN

LEDB<=BRAKE

LEDN<=NIGHT

PROCESS(CLK,RP,LR)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN

IF(LR = '0')THEN

IF(RP = '0')THEN

LEDR <='0'

ELSE

LEDR <= '1'

END IF

ELSE

LEDR <='0'

END IF

END IF

END PROCESS

END ART

4.系统仿真与调试

4.1分频模块仿真及分析

分频模块由VHDL程序实现后,其仿真图如图4.1所示

图4.1 分频模块仿真图

对其仿真图进行仿真分析:如图所示,首先生成一个600ns的时钟脉冲,通过时钟分频把600ns的脉冲分成一个40ns的脉冲,实现了信号同步。

4.2汽车尾灯主控模块仿真及分析

汽车尾灯主控模块由VHDL程序实现后,其仿真图如图4.2所示。

图4.2主控模块时序仿真图

对时序仿真图进行分析:RIGHT,LEFT,NIGHT,BRAKE 为输入信号,RIGHT为1表示右转,LEFT为1表示左转,NIGHT为1表示夜间行路,BRAKE为1表示刹车。RP,LP,NIGHT_LED,BRAKE_LED为输出信号。如图所示:当RIGHT为1时,产生一个RP为1的信号脉冲输出,当LEFT为1时,产生一个LP为1的信号脉冲输出,当NIGHT为1时,产生一个NIGHT_LED为1的信号脉冲输出。当BRAKE为1时,产生一个BRAKE_LED为1的信号脉冲输出。

4.3左边灯控制模块仿真及分析

左边灯控制模块由VHDL程序实现后,其仿真图如下图4.3所示。

对时序仿真图进行分析:LP,LR,NIGHT,BRAKE 为输入信号,LP为1表示左转,LR为1表示右转,NIGHT为1表示夜间行路,BRAKE为1表示刹车。LEDL,LEDB,LEDN为输出信号,表示汽车左侧的三盏灯。如图所示:当LP为1时,LEDL输出为1表示左侧灯亮,当BRAKE为1时,LEDB输出为1表示左侧灯亮,当NIGHT为1时,LEDN输出为1表示左侧灯亮。当LR为1时,左侧三盏灯输出均为0。即没有灯亮。

图4.3左边灯控制模块时序仿真图

4.4右边灯控制模块仿真及分析

右边灯控制模块由VHDL程序实现后,其仿真图如图4.4所示。

图4.4 右边灯控制模块时序仿真图

对时序仿真图进行分析:RP,LR,NIGHT,BRAKE 为输入信号,LR为1表示左转,RP为1表示右转,NIGHT为1表示夜间行路,BRAKE为1表示刹车。LEDR,LEDB,LEDN为输出信号,表示汽车右侧的三盏灯。如图所示:当RP为1时,LEDR输出为1表示右侧灯亮,当BRAKE为1时,LEDB输出为1表示右侧灯亮,当NIGHT为1时,LEDN输出为1表示右侧灯亮。当LR为1时,右侧三盏灯输出均为0。即没有灯亮。

4.5整个系统仿真及分析

按图2.3组装系统后的仿真图如下图4.5所示。

对时序仿真图进行分析:RIGHT,LEFT,NIGHT,BRAKE 为输入信号,RIGHT为1表示右转,LEFT为1表示左转,NIGHT为1表示夜间行路,BRAKE为1表示刹车。RD1,RD2,RD3为输出信号,表示汽车右侧的三盏灯。LD1,LD2,LD3为输出信号,表示汽车左侧的三盏灯。如图所示:当RIGHT为1时,RD1输出为1表示右侧灯亮,当LEFT为1时,LD1为输出为1表示左侧灯亮,当NIGHT为1时,LD2,RD2输出均为1,表示左,右两侧各有一盏灯亮。当BRAKE为1时,LD3,RD3输出均为1,表示左,右两侧各有一盏灯亮。

图4.5 整个系统仿真图

4.6 总体设计电路图

图4.6总体设计电路图

总结

通过两星期的紧张工作,最后完成了我的设计任务——汽车尾灯控制器的设计。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。希望学校以后多安排一些类似的实践环节,让同学们学以致用。

在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。

参考文献

[1] 王爱英.计算机组成与结构.北京:清华大学出版社,2001.2,

[2] 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006

[3] 曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计.北京:清华大学出版社,2006.5

[4] 杨亦华,延明.数字电路EDA入门.北京:北京邮电大学出版社,2003

[5] 彭容修,《数字电子技术基础》, 武汉,武汉理工大学出版社,2005

[6] 潘松 ,黄继业《EDA技术与VHDL》,北京,清华大学出版社,2006

最新回答
怕孤独的铃铛
平常的书本
2025-08-28 04:08:38

整体思路就是计数分频,计数,译码输出我们做数电课程设计的题目:如果你要参考的话留下邮箱,整个工程发给你好了。题目3 多功能流水灯一、任务设计一个彩灯流水控制电路,其主要部分实现定时功能,即在预定的时间到来时,如何产生一个控制信号控制彩灯的流向、间歇等,可通过利用中规模集成电路中可逆计数器和译码器来实现正、逆流水功能,利用组合电路实现自控、手控、流向控制等功能。二、设计要求1、基本要求(1)用 8 个发光二极管作为彩灯显示,设计一个彩灯控制电路,能使彩灯的流向可以变化。具有彩灯亮点的右移、左移、全亮及全灭等功能。灯流动的方向可以手控也可以自控,自控往返变换时间为5秒。(2)彩灯可以间歇流动,10秒间歇1次,间歇时间1秒。2、发挥部分(1)彩灯流速可以改变。(2)设计显示图案循环的控制电路。 1.要求有手控和自控功能,即手控和自控都要实现。 2.手控按一个键,LED移动一位。也可再加其他键,按一下完成左移或右移等一个连续动作(如从第一位移到第八位)。 3.自控往返变换时间为5秒,是要求右移后左移,右移+左移共用5秒。 三、报告要求1、设计方案选取与论证 提出选择所选方案的理由、指出方案的可行性、优缺点,画出整机的原理框图。 2、单元电路设计 画出各单元电路的电路图,简述各单元电路的工作原理,重点是电路主要参数的计算和功能分析。3、*系统功能仿真验证和印制版图的设计(选做)简述系统功能仿真验证结果及仿真结果分析;印制版图的设计和印制版图。4、硬件的装配和调试装配和调试中的问题和解决办法,简述调试结果。5、结果分析和总结系统实现的实际功能指标,达标情况,特点和问题分析。作品的优缺点、特色和创新点的自我评价。

轻松的豆芽
生动的方盒
2025-08-28 04:08:38
这是大规模数字集成电路在系统可编程领域的经典课程设计。

数字频率计是近代电子技术领域的重要测量工具之一,同时也是其他许多领域广泛应用的测量仪器。数字频率计是在规定的基准时间内把测量的脉冲数记录下来,换算成频率并以数字形式显示出来。数字频率计用于测量信号(方波,正弦波或其他周期信号)的频率,并用十进制数字显示,它具有精度高,测量速度快,读数直观,使用方便等优点。

一个用VHDL语言实现的实例如下:

-- Project Name:恒精度频率计

-- Target Devices: FPGA or CPLD

-- Revision 0.01 - File Created

-- Comments: clk--系统工作时钟,2MHz

-------------reset--系统复位信号,高电平有效

-------------Fx--为待测信号

-------------FreqNx--为待测信号的计数值

-------------FreqNs--为标准信号的计数值

-------------Freq--为待测信号的频率

--

----------------------------------------------------------------------------------

library IEEE

use IEEE.STD_LOGIC_1164.ALL

use IEEE.STD_LOGIC_ARITH.ALL

use IEEE.STD_LOGIC_UNSIGNED.ALL

----------------------------------------------------------

entity Cymometer is

generic(clk_freq : integer := 2000000)--系统工作时钟频率

Port ( clk: in STD_LOGIC

reset : in STD_LOGIC

Fx : in STD_LOGIC----待测信号

FreqNs : out natural

FreqNx : out natural)

--Freq : out natural)

end Cymometer

----------------------------------------------------------

architecture Behavioral of Cymometer is

----------------------------------------

signal start : STD_LOGIC--此信号为高电平时计数器开始计数

signal CTRL : STD_LOGIC--CTRL信号为待测信号和门控信号产生的计数器启动信号

signal CNTx : natural--待测信号计数器

signal CNTs : natural--标准信号计数器

----------------------------------------

begin

--***************************************--

--产生一个门控信号,高电平有效

GateCtrl : process(clk)

---------------------------

variable CNT0 : integer range 0 to 2_097_152--门控信号计数器

---------------------------

begin

if rising_edge(clk) then

if reset='1' then

CNT0 := 0

else

CNT0 := CNT0 + 1

end if

---------

if reset='1' then

start <= '0'

elsif CNT0 <(clk_freq*3/4) then

start <= '1'

else

start <= '0'

end if

end if

end process GateCtrl

--***************************************--

--产生CTRL信号,由待测信号和门控信号产生的计数器启动信号

CtrlGen : process(Fx)

begin

if rising_edge(Fx) then

if reset='1' then

CTRL <= '0'

else

CTRL <= start

end if

end if

end process CtrlGen

--***************************************--

--用两个计数器分别对标准信号clk和待测信号signal计数

----------------------------------

--计数标准信号,CTRL高电平期间有效

CountS : process(clk)

begin

if rising_edge(clk) then

if reset='1' then

CNTs <= 0

elsif CTRL='1' then

CNTs <= CNTs + 1

else

CNTs <= 0

end if

end if

end process CountS

----------------------------------

--计数待测信号,CTRL高电平期间有效

CountX : process(Fx)

begin

if rising_edge(Fx) then

if reset='1' then

CNTx <= 0

elsif CTRL='1' then

CNTx <= CNTx + 1

else

CNTx <= 0

end if

end if

end process CountX

--***************************************--

--CTRL下降沿将技术结果和测量值输出

CountOut : process(CTRL)

begin

if falling_edge(CTRL) then

if reset='1' then

FreqNs <= 0

FreqNx <= 0

--Freq <= 0

else

FreqNs <= CNTs

FreqNx <= CNTx

--Freq <= (clk_freq / CNTs * CNTx)

end if

end if

end process CountOut

end Behavioral

下面是为上面的模块编写的测试平台,在Modelsim下仿真通过,因为数据量较大,建议不要使用Altera及ISE仿真。

--------------------------------------------------------------------------------

LIBRARY ieee

USE ieee.std_logic_1164.ALL

USE ieee.std_logic_unsigned.all

USE ieee.numeric_std.ALL

ENTITY tb IS

END tb

ARCHITECTURE behavior OF tb IS

-- Component Declaration for the Unit Under Test (UUT)

COMPONENT Cymometer

PORT(

clk : IN std_logic

reset : IN std_logic

Fx : IN std_logic

FreqNs : OUT natural

FreqNx : OUT natural

Freq : OUT natural

)

END COMPONENT

--Inputs

signal clk : std_logic := '0'

signal reset : std_logic := '1'

signal Fx : std_logic := '0'

--Outputs

signal FreqNs : natural

signal FreqNx : natural

-- signal Freq : natural

-- Clock period definitions

constant clk_period : time := 500ns

BEGIN

-- Instantiate the Unit Under Test (UUT)

uut: Cymometer PORT MAP (

clk =>clk,

reset =>reset,

Fx =>Fx,

FreqNs =>FreqNs,

FreqNx =>FreqNx,

-- Freq =>Freq

)

-- Clock process definitions

clk_process :process

begin

clk <= '0'

wait for clk_period/2

clk <= '1'

wait for clk_period/2

end process

--产生待测信号

Fx_process : process

begin

Fx <= '0'

wait for 2*clk_period

Fx <= '1'

wait for 2*clk_period

end process

-- Stimulus process

stim_proc: process

begin

-- hold reset state for 100ms.

wait for clk_period*10

reset <= '0'

-- insert stimulus here

wait

end process

END

参考原理M/T测频法。

超帅的画板
不安的期待
2025-08-28 04:08:38
你得知道自己为什么学习fpga,作为一个可编辑的接口,这是现在企业应用的一大部分,而fpga有很大部分是用来做通信应用的。如果你和一楼一样只是把fpga当做可编辑的接口,而且再加上如果你倾向于功能的实现,那么这部分的fpga是比较简单的,楼上的看法基本正确,就是看看目标接口的数据手册,满足时序的要求。fpga只是一个工具,一个算法实现的强大途径。你的基础课程已经够了,数电的内容基本满足了,学过51估计你也学过一些接口的编程了,懂得一些器件的时序了,基础都够了。不知道你是什么专业的,估计也是通信的吧,如果是自动化的话,现在企业中有部分是fpga和dsp结合应用。如果是通信的话,可以加把力好好学学,通信原理上的理论可以在这上面实现,像我们学校在大三下会有用fpga实现通信原理的课程设计,比较有用。板子我个人觉得是得买的,原因如下:

1、你学的是硬件而不是软件,单靠仿真毕竟不够

2、虽说modelsim仿真到后期也得学,但是入门就开始学会比较烦人,比较分心,而且缺少成就感。

fpga有几大厂家,多种序列,从高级到低级产品链很广,价格差非常多,贵的到数万,便宜的几十就够,我自己没买过板子,不知道具体价格。建议你去和熟悉的老师要板子,跟着老师做项目,或者以竞赛之类的搞到板子。如果没门道,去买的话,多了解了解,以自身的需求来买板子。