基于FPGA使用Verilog的交通信号灯论文 .doc

上传人:yy****2 文档编号:97663943 上传时间:2024-06-19 格式:DOC 页数:14 大小:46.50KB
返回 下载 相关 举报
基于FPGA使用Verilog的交通信号灯论文 .doc_第1页
第1页 / 共14页
基于FPGA使用Verilog的交通信号灯论文 .doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《基于FPGA使用Verilog的交通信号灯论文 .doc》由会员分享,可在线阅读,更多相关《基于FPGA使用Verilog的交通信号灯论文 .doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、FPGA课程论文 学 院:电气学院 专业班级: 姓 名: 学 号: 指导老师:李辉 日期:2015年12月13日目 录一、 摘要二、概念2.1 什么是FPGA 2.2 工作原理2.3 芯片结构2.4 配置模式三、FPGA的设计语言介绍3.1 VHDL语言介绍3.2 Verilog语言介绍四、交通灯的Verilog语言程序4.1 设计背景4.2 Verilog程序4.3 C语言程序五、学习体会六、参考文献FPGA结课论文一、摘要 现在,随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况

2、,得到迅速发展,出现了很多新的硬件描述语言,像Superlog、SystemC、CynlibC+等。 本次设计是基于FPGA/CPLD数控脉冲宽度调制信号发生器实现,该系统主要模块有:时钟产生电路模块、JTAG编程连接模块、电源电路模块,通过连线将各个模块进行连接成最小系统,系统精简,实现方便且功能强大,比起传统的信号发生器有着比较明显的优势。 本设计立足系统可靠性及稳定性等高技术要求,采用FPGA芯片实现数控脉冲宽度调制信号发生器的FPGA/CPLD设计,其电路设计比较简单,外围电路少,易于控制和检查,较传统的分离元件实现方式有着明显的优势,尤其是其设计电路实现周期,其抗干扰及调试过程都很简

3、单。二、 概念2.1什么是FPGA?FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。FPGA的基本

4、特点主要有:1) 采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。2) FPGA可做其它全定制或半定制ASIC电路的中试样片。3) FPGA内部有丰富的触发器和IO引脚。4) FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。2.2工作原理FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块

5、IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I

6、/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。2.3芯片结构主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。FP芯片主要由7部分完成,分别为:可编程输入输出单元、基本可编程逻辑元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌用硬件模块。每个模块的功能如下:1、 编程输入输出单元(IOB)可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的I/O按组分类,每组都能够

7、独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率。外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA内部。当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(HoldTime)的要求可以降低,通常默认为0。为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但

8、不同bank的VCCO可以不同。只有相同电气标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。2. 可配置逻辑块(CLB)CLB是FPGA内的基本逻辑单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。开关矩阵是高度灵活的,可以对其进行配置以便处理组合逻辑、移位寄存器或RAM。在xilinx公司的FPGA器件中,CLB由多个(一般为1个或2个)相同的Slice和附加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。3. 数字时钟管

9、理模块(DCM) 业内大多数FPGA均提供数字时钟管理(Xilinx的全部FPGA均具有这种特性)。Xilinx推出最先进的FPGA提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟综合,且能够降低抖动,并实现过滤功能。 4嵌入式块RAM(BRAM)大多数FPGA都具有内嵌的块RAM,这大大拓展了FPGA的应用范围和灵活性。块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。RAM、FIFO是比较普及的概念,在此就不冗述。CAM存储器在其内部的每个存储单元中都有一个比较逻辑,写入CAM中的数据会和内部的每一个数据进行比较,并返回与端口数

10、据相同的所有数据的地址,因而在路由的地址交换器中有广泛的应用。除了块RAM,还可以将FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。5.丰富的布线资源布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位

11、等控制信号线。6 底层内嵌功能单元内嵌功能模块主要指DLL(DelayLockedLoop)、PLL(PhaseLoop)、DSP和CPU等软处理核(SoftCore)。越来越丰富的内嵌功能单元,单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC过渡。DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比调整和移相等功能。Xilinx公司生产的芯片上集成了DLL,Altera公司的芯片集成了PLL核生成的工具方便地进行管理和配置。7. 内嵌专用硬核内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(HardCore),等

12、效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。例如:为了提高FPGA的乘法速度,主流的FPGA中都集成了专用乘法器;为了适用通信总线与接口标准,很多高端的FPGA内部都集成了串并收发器(SERDES),可以达到数十Gbps的收发速度。2.4配置模式FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。三、 FPGA的设计语言介绍FPGA设计通常会使用HDL语言,比如VerilogHDL或者VH

13、DL。当采用HDL语言来描述一个硬件电路功能的时候,要确保代码描述的电路是硬件可实现的。HDL语言的语法与C语言很相似,但是它们之间有着本质的区别。C语言是基于过程的高级语言,编译后可以在CPU上运行。而VerilogHDL语言描述的本身就是硬件结构,编译后是硬件电路。3.1 VHDL语言介绍Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage是VHDL的英文全名。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的

14、程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。3.2Verilog语言介绍HDL:HardwareDiscriptionLanguage,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻

15、辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。VerilogHDL提供了扩展的建模能力,其中许多扩展最初

16、很难理解。但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。一个完整的Verilog模块由以下五个部分组成:1 模块定义行:modulemodule_name(port_list);2 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性,最好将所有的说明部分放在语句前。说明部分包括:寄存器,线网,参数:reg,wir

17、e,paramer端口类型说明行:input,output,inout函数、任务:function,task等。3主体部分:这是一个模块最重要的部分,在这里描述模块的行为和功能,子模块的调用和连接,逻辑门的调用,用户自定义部的调用,初始态赋值,always块,连续赋值语句等等。4结束行,以 endmodule 结束,注意后面没有分号了。5. 在模块中,可用下述方式描述一个设计: 1) 数据流方式 2)行为方式; 3)结构方式; 4)上述描述方式的混合。四、 交通灯的Verilog语言程序4.1设计背景随着社会经济的发展,城市交通问题越来越引起人们的关注。出行交通的协调,已成为交通管理部门需要解

18、决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。随着城市机动车量的不断增加,许多城市出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处。4.2Verilog程序 Moduletraffic(clk,smbit,key,smse

19、g,en,rst,hold,light1,light2);inputclk;/定义时钟引脚inputrst,en;/定义复位和使能引脚output7:0sm_bit;/定义数码管位选引脚output7:0sm_seg;/定义数码管段选引脚 output2:0light1,light2;/定义两个方向交通灯reg7:0sm_bit_r;reg7:0sm_seg_r;reg3:0disp_dat;/定义数码管显示数据寄存器Reg24:0count;/定义计数器寄存器regsec;/定义秒信号寄存器regtim1,tim2,st1,st2;/定义tim1位倒计时是否到达的位标识 reg1:0stat

20、e1,state2,ste;/定义一些状态reg2:0light1,light2;reg3:0num;reg7:0num1,num2;/num1num2的值为倒计时的值reg7:0red1,red2,green1,green2,yellow1,yellow2;/定义红黄蓝灯的一些状态assignsmbit=smbitr;assignsmseg=smsegr;always(posedgeclk) begincount=count+1b1;if(count=25d)/时间达到一秒Begin count=25d0;sec=sec;endend always(posedgeclk) Begin cas

21、e(count17:15) 3d0:dispdat=num13:0;/秒个位 3d1:dispdat=num17:4;/秒十位 3d2:dispdat=4ha;/显示- 3d3:dispdat=num23:0;/分个位 3d4:dispdat=num27:4;/分十位 3d5:dispdat=4ha;/显示- endcasecase(count17:15)/选择数码管显示位3d0:smbitr=8b;/选择第一个数码管显示3d1:smbitr=8b;/选择第二个数码管显示3d2:smbitr=8b;/选择第三个数码管显示3d3:smbitr=8b;/选择第四个数码管显示3d4:smbitr=8

22、b;/选择第五个数码管显示3d5:smbitr=8b;/选择第六个数码管显示3d6:smbitr=8b;/选择第七个数码管显示3d7:smbitr=8b;/选择第八个数码管显示endcaseendalways(posedgeclk)Begincase(dispdat)4h0:smsegr=8hc0;/显示04h1:smsegr=8hf9;/显示1 4h2:smsegr=8ha4;/显示24h3:smsegr=8hb0;/显示34h4:smsegr=8h99;/显示44h5:smsegr=8h92;/显示54h6:smsegr=8h82;/显示64h7:smsegr=8hf8;/显示7 4h8:

23、smsegr=8h80;/显示8 4h9:smsegr=8h90;/显示9 4ha:smsegr=8hbf;/显示- default:smsegr=8hff;/不显示 endcase end always(en) if(!en) begin green1=8b; red1=8b; yellow1=8b; green2=8b; red2=8b; yellow2=8b; end always(posedge sec)/南北方向 begin if(!rst)/复位模块 begin light1=3b001; num1=green1; end if(!tim1) begin tim1=1; case(

24、state1) 2b00:beginnum1=green1;light1=3b110;state1=2b01;end 2b01:beginnum1=yellow1;light1=3b101;state1=2b11;end 2b11:beginnum1=red1;light1=3b011;state1=2b10;end 2b10:begin num1=yellow1;light1=3b101;state1=2b00;end/状态机使三个状态一直循环 default:light1=3b011; endcase end else begin if(num1=1)tim10) if(num13:0=0

25、) begin num13:0=4b1001;/倒计时模块 num17:4=num17:4-1; end else num13:0=num13:0-1; end end always(posedge sec)/东西方向 begin if(!rst)/复位模块 begin light2=3b100; num2=red2; end if(!tim2) begin tim2=1; case(state2) 2b00:beginnum2=red2;light2=3b011;state2=2b01;end 2b01:beginnum2=yellow1;light2=3b101;state2=2b11;e

26、nd 2b11:beginnum2=green2;light2=3b110;state2=2b10;end 2b10:beginnum2=yellow2;light2=3b101;state2=2b00;end default:light2=3b011; endcase end else begin if(num2=1)tim20) if(num23:0=0) begin num23:0=4b1001; num27:4=num27:4-1; end else num23:0=num23:0-1; end end endmodule 4.3 C语言程序 #include #define ucha

27、r unsigned char #define time 50000 #define ON 0 #define OFF 1 sbit NSB=P15;/南北绿灯 sbit NSY=P14;/南北黄灯 sbit NSR=P13; /南北红灯 sbit EWB=P12;/东西绿灯 sbit EWY=P11;/东西黄灯 sbit EWR=P10;/东西红灯 sbit P27=P27; sbit P26=P26; sbit P23=P23; sbit P22=P22; /*=倒计时=*/ uchar N=15,Y=12,Z=15,M=27,G=30,U=30; uchar C50ms; uchar s

28、eg=1; void InitialT1(void) ET1=0;TMOD=0x10; TH1=(65536-time)8; TL1=(65536-time)&0xff; TR1=1; ET1=1; EA=1; Void ISRT 1(void) interrupt3 TR1=0; TH1=(65536-time)8; TL1=(65536-time)&0xff; TR1=1; C50ms+; if(C50ms19) N-; M-; Y-; Z-; G-; U-; C50ms=0; /*=延时=*/ void Delay10uS(uchar second) int i; while(secon

29、d-)!=0) for(i=0;i3;i+); /*=led控制=*/ uchar discode10=0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; void display1(uchar num1,uchar num2) P0=discodenum1; P22=ON; Delay10uS(1); P22=OFF; /控制南led显示 P0=discodenum2; P23=ON; Delay10uS(1); P23=OFF; void display2(uchar num3,uchar num4) P0=discodenum3; P26

30、=ON; Delay10uS(1); P26=OFF; /控制东西led显示 P0=discodenum4; P27=ON; Delay10uS(1); P27=OFF; main() int i; / P0=0xff; /*=初始状态:东西南北都红灯=*/ NSR=ON; EWR=ON; for(i=0;i800;i+) Delay10uS(20); NSR=OFF; EWR=OFF; while(1) InitialT1();/ 初始化计时器 /*=状态1:东西绿灯(12s) 南北红灯(15s)=*/ /*=状态2:东西黄灯(3s) 南北红灯(15s)=*/ EWB=ON; NSR=ON;

31、 while(N!=0) display1(N/10,N%10);/ 南北红灯(15s) display2(Y/10,Y%10);/ 东西绿灯(12s) while(N=3) while(Z!=0) display1(N/10,N%10);/ 南北红灯(3s) display2(Z/10,Z%10);/ 东西黄灯(3s) EWB=OFF; EWY=ON; NSR=OFF; EWB=OFF; EWY=OFF; P0=0xff; /全关掉 /Delay10uS(1); /*=状态3:东西红灯(15s) 南北绿灯(12s)=*/ /*=状态4:东西红灯(15s) 南北黄灯(3s)=*/ EWR=ON

32、; NSB=ON; while(G!=0) display2(G/10,G%10);/ 东西红灯(12s) display1(M/10,M%10);/ 南北绿灯(12s) while(G=3) while(U!=0) display2(G/10,G%10);/ 东西红灯(3s) display1(U/10,U%10);/ 南北绿灯(3s) NSB=OFF; NSY=ON; EWR=OFF; NSB=OFF; NSY=OFF; /P0=0xFF; /Delay10uS(1); /*=重新赋值=*/ N=15,Y=12,Z=15,M=27,G=30,U=30; 五、 学习体会 半学期的学习让我对FPGA有了一定的了解,从一开始听老师讲课的云里雾里,到慢慢的理解。刚做FPGA实验时自己总觉着不知道在干什么,经过几次的练习慢慢的明白了其中的道理,在本学期的电子实习中还用到了VHDL语言,慢慢的意识到VHDL语言和Verilog语言的重要性和应用之处。感觉自己现在对FPGA和两种语言还差的太多,之后还得要学习更多。六、参考文献1潘松,黄继业等EDA技术实用技术北京:科学出版社,2004 3齐洪喜,陆颖VHDL电路设计实用教程北京:清华大学出版社,2004 4江国强,EDA技术与应用北京:电子工业出 2004.8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁