收藏 分销(赏)

EDA课程设计之交通灯设计报告.doc

上传人:Fis****915 文档编号:551898 上传时间:2023-12-06 格式:DOC 页数:19 大小:3.97MB
下载 相关 举报
EDA课程设计之交通灯设计报告.doc_第1页
第1页 / 共19页
EDA课程设计之交通灯设计报告.doc_第2页
第2页 / 共19页
EDA课程设计之交通灯设计报告.doc_第3页
第3页 / 共19页
EDA课程设计之交通灯设计报告.doc_第4页
第4页 / 共19页
EDA课程设计之交通灯设计报告.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、EDA综合设计与实践一、设计目的和要求1.熟练掌握QuartusII软件的使用方法和系统总体设计。2.学会设计较复杂的数字系统,用Verilog HDL描述语言编写设计代码,并综合仿真验证设计,用FPGA试验箱验证设计。3.学习FPGA试验箱的使用,各种电路图的引脚接法及其功能。4.本实验要求学生以FPGA器件为目标器件,设计典型的数字系统。本设计选题为交通灯控制系统设计。二、设计方案:方案一:(1)明确系统的功能图1-1所示为位于主干道和支干道的十字路口交通灯系统,支干道两边是安装传感器S,要求优先保证主干道的畅通。平时处于主干道绿灯、支干道红灯的状态。当支干道有车时,传感器发出信号S=1,

2、主干道绿灯先转换成黄灯再转换成红灯,支干道由红灯转换为绿灯,支干道绿灯亮不超过30s,主干道每次通行不少于60s(在此期间,不管S是否有信号,都不改状态)。(2)画状态转换图说明:1)Tl:主干道绿灯亮的最短时间间隔,不少于60s;2)Ts:支干道绿灯亮的最长时间间隔不多于30s。3)Ty:主干道或支干道黄灯亮的时间间隔为5s4)HR、HY、HG分别表示主干道红黄绿灯;5)FR、FY、FG分别表示支干道红黄绿灯。注:H表示Header,F表示Follower,R表示Red,Y表示Yellow,G表示Green交通灯控制单元控制过程分四个阶段:分别用S0,S1,S2,S3表示:S0:主干道绿灯亮

3、,支干道红灯亮,此时若支干道有车等待,且主干道已亮足时间Tl,则控制器发出状态转换信号,输出从S0转换到S1。S1:主干道黄灯亮,支干道红灯亮,进入此状态,黄灯亮足规定时间间隔Ty时,控制器发出状态转换信号St,输出从此状态S1到S2。S2:支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮时间不超过Ts时间间隔,否则控制单元发出状态转换信号St,使输出转换到S3状态。S3:支干道黄灯亮,主干道红灯亮,此时状态与S1状态持续时间间隔相同,均为Ty,时间到时,控制器发出St信号,输出从状态S3回到S0状态。对四种状态用格雷码编码分别为00,01,11,10。由此得

4、图1-2交通灯控制单元状态图。方案二:本方案相对上一个方案加入了人工监督,且采用模块化设计。 (1)明确系统的功能,进行逻辑抽象如图2-1本方案可实现在确定时刻,倒计数数字显示能够及时变化,红黄绿灯能准确变化,考虑到实际应用,加入人工监督功能,当固定开关SW=0时,实现交警人为控制交通秩序,当SW=1时,为自动控制模式,默认为SW=1。本设计采用模块化设计,图2-2为本设计十字路口交通等系统的层次结构框图。(2)模块功能说明1.主控制模块control:控制系统输入输出之间联系。2.倒计时模块时间选择模块couterselect:选择不同的倒计时时间。3.倒计时时间驱动模块scan:驱动倒计时

5、时间长短选择模块电路。4.数码管分时显示模块datamux,倒计时间分时送入用于显示。5.倒计55s模块counter55,55s为绿灯点亮时间。6.倒计5s模块counter5,5s为黄灯点亮时间。7.顶层模块trafficlight,连接各模块设计,使之成为一个有机体。前6个模块分别进行仿真测试,成功后把所有.v文件包含在工程trafficlight,实现模块化设计。三、特殊要求(需要实验室提供的仪器设备、元器件和材料)PC机,windows系统,Quartus II 4.0软件,基于Cyclone型EP16Q240C8的实验箱。四、设计及仿真综合两个方案考虑,方案二比较实用,但因为方案一

6、容易实现,所以一开始做了方案一的设计,后来有时间,又完成了方案二。具体如下设计。方案一:(1)代码见附录1。(2)仿真结果及数据处理:分析说明:全局复位R=1无效,进入系统工作,先是主干道绿灯亮足60个时钟周期,因S=1,支干道有车等待,转入主干道黄灯亮5个时钟周期,然后进入支干道绿灯亮,30个时钟周期内支干道没车等待,所以S=0时转入主干道绿灯亮状态。通过仿真,可以看出本设计的逻辑上时序上是正确的。图1-3 方案一设计Functional仿真图1-3 方案一设计Timing仿真图1-3 方案一设计RTL(3)下载测试编程下载和硬件测试的步骤如下:1、 打开下载窗口。选择菜单“Tool“项的”

7、programmer“,便可打开下载窗口。2、 设置下载电缆。将ByteBlaster电缆的一端与微机的并行口相连,另一端10针插头与装有目标器件的PCB板上的插座相连。并在”Hardware Setup”中设置下载电缆。3、设置JTAG链。Altera器件基本都支持JTAG在系统编程方式,这种方式简单易行,不需要专门的编程器。4、选用模式NO.6(见附录3)如图1-4分配引脚,并编译后,把生成*.sof文件下载到基于Cyclone型EP16Q240C8的FPGA实验箱开发板上,成功查看结果,CLK时钟频率用1Hz,可通过实验箱上“键3”控制Reset全局复位,用“键5”可模拟传感器S的输入。

8、图1-4 配置引脚方案二(1)代码见附录2。(2)各模块RTL电路及功能仿真、时序仿真各模块分别建立工程文件,并进行功能仿真、时序仿真,前六个模块成功编译,得到正确仿真结果后,建立顶层模块。1) 模块一:控制模块(control.v)图2-3 控制模块control.v的RTL图2-4 控制模块control的Functional仿真图2-5 控制模块control的Timing仿真2)模块二:5s倒计时模块(counter5.v)图2-6 5s倒计时模块counter5.v的RTL图2-7 5s倒计时模块counter5.v的Functional仿真图2-8 5s倒计时模块counter5.

9、v的Timing仿真分析说明:通过功能仿真,可以看出5s倒计时模块不存在逻辑上错误,可以通过;通过时序仿真,可以看到结果存在毛刺,但是结合实际应用,可以接受,所以通过这一模块的设计。3)模块三:55s倒计时模块(counter55.v)图2-9 55s倒计时模块counter55.v的RTL图2-10 55s倒计时模块counter55.v的Functional仿真图2-11 55s倒计时模块counter55.v的Timing仿真分析说明:通过功能仿真和时序仿真,可以看出55s倒计时模块不存在逻辑、时序上错误,所以通过这一模块的设计。4)模块四:倒计时选择(couterselect.v)图2

10、-12 倒计时选择模块couterselect.v的RTL图2-13 倒计时选择模块couterselect.v的Functional仿真图2-14 倒计时选择模块couterselect.v的Timing仿真分析说明:D_OUT1选择高位输出,用于选择驱动55秒倒计时计时器,分别在状态输入为“00”“10”这两种状态,即对应的绿灯时间,输出高电平,实现55秒倒计时计数器D_OUT0:时间低位输出,用于选择驱动5秒倒计时计时器,分别在输入为“01”“11”时,即对应黄灯点亮时间,输出高电平,实现5秒倒计时。通过功能仿真和时序仿真,可以看出倒计时选择模块不存在逻辑、时序上错误(虽然时序仿真有毛刺

11、显现,但是结合实际应用,可以接受),所以通过这一模块的设计。5)模块五:数据选择显示(datamux.v)图2-15 数据选择显示datamux.v的RTL图2-16 数据选择显示datamux.v的Functional仿真图2-17 数据选择显示datamux.v的Timing仿真分析说明:倒计时模块主要完成的工作是:倒计时长短时间选择的功能,输入信号来自两个倒计时模块counter55和counter5,当倒计数完成时产生一个脉冲用于驱动此模块产生00,01,10,11序列来驱动倒计时时间模块选择。D_in1:高位驱动信号,来源于55秒计时到信号,当计数器计时完成后,产生这个信号驱动状态变

12、化。D_in0:低位驱动信号,来源于5秒计时到信号,当计数器计时完成后,产生这个脉冲来驱动状态的变化。通过功能仿真和时序仿真,可以看出数据选择显示模块不存在逻辑、时序上错误(虽然时序仿真有毛刺显现,但是结合实际应用,可以接受),所以通过这一模块的设计。6)模块六:时间选择驱动(scan.v)图2-18 时间选择驱动scan.v的RTL图2-19 时间选择驱动scan.v的Functional仿真图2-20 时间选择驱动scan.v的Timing仿真分析说明:此模块用于驱动倒计时时间长短选择。模块七:顶层模块(trafficlight.v)图2-21 方案二设计RTL图2-22 方案二设计的Fu

13、nctional仿真(SW=1,自动控制模式)图2-23 方案二设计的Functional仿真(SW=0,人工监督模式)图2-24 方案二设计的Timing仿真(SW=1,自动控制模式)图2-25 方案二设计的Timing仿真(SW=0,人工控制模式)分析说明:建立trafficlight项目,并设计顶层模块trafficlight.v,成功编译。通过功能仿真和时序仿真,可以看出本设计已经成功完成。达到目标:实现在确定时刻,倒计数数字显示能够及时变化,红黄绿灯能准确变化,当固定开关SW=0时,实现交警人为控制交通秩序,当SW=1时,为自动控制模式,默认为SW=1。(3)下载测试编程下载和硬件测

14、试的步骤如下:1、 打开下载窗口。选择菜单“Tool“项的”programmer“,便可打开下载窗口。2、 设置下载电缆。将ByteBlaster电缆的一端与微机的并行口相连,另一端10针插头与装有目标器件的PCB板上的插座相连。并在”Hardware Setup”中设置下载电缆。3、设置JTAG链。Altera器件基本都支持JTAG在系统编程方式,这种方式简单易行,不需要专门的编程器。4、选用模式NO.1(见附录3),如图2-26分配引脚,并编译后,把生成*.sof文件下载到基于Cyclone型EP16Q240C8的FPGA实验箱开发板上,成功查看结果,CLK时钟频率用1Hz,可通过实验箱上

15、“键7”控制Reset全局复位,用“键8”可控制SW选择自动模式或人工监督模式。图2-26五、设计总结经过此次课程设计,可以说收获良多,现总结为以下几点:1、熟悉掌握了Quartus这个软件。虽然上课时候已经看老师展示过这个软件的用法,但是没有亲力亲为始终对这个软件的掌握是很不够的。此次通过设计以上两个方案,我对Quartus II这个软件已经掌握的比较好了。2、通过以上两个方案的设计,我对正规的设计流程已经有了深刻的体会,相信以后遇到这种设计可以自如地应对了。可以设计遇到中案的设计够3、通过设计代码过程中遇到编译错误的问题,经过一次次的排错,我对Verilog HDL描述语言的掌握得到一定的

16、锻炼。4、设计工程中,让我感慨最多的是功能仿真和时序仿真,通过看仿真图,理解系统运行,优化系统,这是一个艰巨的任务,也是一个最有意义的任务。因为这一步的工作,我们不仅要把原理理解透彻,而且要联系FPGA试验箱开发板,所以对开发板的各种工作模式也要理解。5、由于试验箱有限,所以我是提前一天在实验室试验过程序的了。很多同学在答辩当天才下载程序试验,结果很多完成不了。下载到板上,也出现了一些问题,如引脚接错,选用模式不对,还有就是实验箱坏了。通过认真的思考,最终完成测试。附录1/*本系统采用用硬件描述语言Verilog HDL描述。分为四部分,第一部分定义系统输入输出及所用寄存器。第二部分,控制单元

17、状态转换的描述。第三部分,定时器工作的描述。第四部分,输出译码电路的描述。*/module Traffic(CLK,S,RESET,HG,HY,HR,FG,FY,FR);/第一部分,定义输入输出端口,以及系统内部信号变量及其类型input CLK,S,RESET;output HG,HY,HR,FG,FY,FR;reg HG,HY,HR,FG,FY,FR;reg 3:0TimerH,TimerL;wire T1,Ts,Ty;reg St;reg 1:0CurrentState,NextState;/对状态进行编码parameter S0=2b00, S1=2b01,S2=2b11, S3=2b

18、10;/第二部分,控制单元状态转换的描述always(posedge CLK or negedge RESET) begin if(RESET) CurrentState = S0; else CurrentState = NextState; end always(S or CurrentState or T1 or Ts or Ty) begin case(CurrentState) S0:begin NextState = (T1 & S)?S1:S0; St = (T1 & S)?1:0; end S1:begin NextState = (Ty)?S2:S1; St = (Ty)?1

19、:0; end S2:begin NextState = (Ts | S)?S3:S2; St = (Ts | S)?1:0; end S3:begin NextState = (Ty)?S0:S3; St = (Ty)?1:0; end / endcase end /第三部分,定时器工作的描述always(posedge CLK or negedge RESET) begin if(RESET) TimerH,TimerL = 8b0; else if(St) TimerH,TimerL = 8b0; else if(TimerH=5)&(TimerL=9) begin TimerH,Tim

20、erL = TimerH,TimerL; end else if(TimerL=9) begin TimerH = TimerH + 1; TimerL = 8b0; end else begin TimerH = TimerH; TimerL = TimerL+1; end end assign Ty = (TimerH=0)&(TimerL=4); assign Ts = (TimerH=2)&(TimerL=9); assign T1 = (TimerH=5)&(TimerL=9);/第四部分,输出译码电路的描述always(CurrentState) begin case(Curren

21、tState) S0:begin HG,HY,HR = 3b100; /主干道绿灯亮 FG,FY,FR = 3b001; /支干道红灯亮 end S1:begin HG,HY,HR = 3b010; /主干道黄灯亮 FG,FY,FR = 3b001; /支干道绿灯亮 end S2:begin HG,HY,HR = 3b001; /主干道红灯亮 FG,FY,FR = 3b100; /支干道绿灯亮 end S3:begin HG,HY,HR = 3b001; /主干道红灯亮 FG,FY,FR = 3b010; /支干道黄灯亮 end endcase end endmodule/*程序结束*/附录2

22、模块一:/* 主控制模块control.v */module control(EN_in,RST,SW1,Red1,Red2,Yellow1,Yellow2,Green1,Green2);/定义输入输出口output Red1;output Red2;output Yellow1;output Yellow2;output Green1;output Green2;input 1:0 EN_in;input SW1;input RST;/定义数据类型reg Red1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;always (EN_in,RST,SW1)

23、/always语句实现交通灯的总体工作控制begin /系统复位 if(SW1=0|RST=0) Red1,Red2,Yellow1,Yellow2,Green1,Green2=6b0; else /系统自动运行 begin case(EN_in) 2b00:Red1,Red2,Yellow1,Yellow2,Green1,Green2 = 6b010010; /方向1绿灯亮,方向2红灯亮 2b01:Red1,Red2,Yellow1,Yellow2,Green1,Green2 = 6b011000; /方向1黄灯亮,方向2红灯亮 2b10:Red1,Red2,Yellow1,Yellow2,

24、Green1,Green2 = 6b100001; /方向1红灯亮,方向2绿灯亮 2b11:Red1,Red2,Yellow1,Yellow2,Green1,Green2 = 6b100100; /方向1红灯亮,方向2黄灯亮 default:Red1,Red2,Yellow1,Yellow2,Green1,Green2 = 6b0; /方向1方向2等全灭 endcase endendendmodule/* 主控制模块control.v */模块二:/*5秒的倒计时模块counter5.v*/module counter05(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_OUT)

25、;/输出输入的定义output C_OUT;output 3:0 D_OUT1,D_OUT0;input C_CLK;input RST;input C_EN;/数据类型定义reg 3:0 D_OUT1,D_OUT0;reg C_OUT;reg 3:0 CData1,CData0;reg 7:0 DATA;always (posedge C_CLK) /always 语句块实现5秒自动循环倒计数,用加计数器 begin /系统复位或者未工作 if(RST=0|C_EN=0) begin C_OUT = 1b0; CData1 = 4b0000; CData0 = 4b0000; end els

26、e begin if(CData0 != 4b0101) begin CData0 = CData0 + 4b0001; C_OUT = 1b0; end else /防止生成锁相环 begin CData1 = 4b0000; CData0 = 4b0000; C_OUT = 1b1; end end endalways /加计数器的计数值到倒计时的数值转换 begin DATA = 8b00000101 - (CData14) + CData0); D_OUT1 4b0101) D_OUT0 = DATA & 4b1111 - 4b1011; else D_OUT0 = DATA & 4b

27、1111; endendmodule/*5秒的倒计时模块counter5.v*/模块三:/*55秒的倒计时模块counter55.v*/module counter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_OUT);/输出输入的定义output C_OUT;output 3:0 D_OUT1, D_OUT0;input C_CLK,RST,C_EN;/数据类型定义reg 3:0 D_OUT1,D_OUT0;reg C_OUT;reg 3:0 CData1,CData0;reg 7:0 DATA;always (posedge C_CLK) /always 语句块实现5

28、5秒自动循环倒计数,用加计数器 begin /系统复位或者未工作 if(RST=0|C_EN=0) begin C_OUT = 1b0; CData1 = 4b0000; CData0 = 4b0000; end /加计数器 else begin if(CData0 = 4b0101 & CData1 = 4b0101) begin CData1 = 4b0000; CData0 = 4b0000; C_OUT = 1b1; end else if(CData0 != 4b1001) begin CData0 = CData0 + 4b0001; C_OUT = 1b0; end else i

29、f(CData0 = 4b1001 & CData1 != 4b0101) begin CData1 = CData1 + 4b0001; CData0 = 4b0000; C_OUT = 1b0; end else /防止生成锁相环 begin CData1 = 4b0000; CData0 = 4b0000; C_OUT = 1b1; end end endalways /加计数器的计数值到倒计时的数值转换 begin DATA = 8b01010101-(CData14) & 4b1111) 4b0101) D_OUT1 4) & 4b1111 - 4b1111; else D_OUT1

30、 4) & 4b1111; if(DATA&4b1111)4b1001) D_OUT0 = DATA & 4b1111 - 4b0110; else D_OUT0 = DATA & 4b1111; endendmodule/*55秒的倒计时模块counter55.v*/模块四:/*倒计时时间选择模块模块couterselect.v*/module couterselect(D_IN,D_OUT1,D_OUT0);/输入输出端口定义output D_OUT1;output D_OUT0;input 1:0 D_IN;/数据类型定义reg D_OUT1;reg D_OUT0;always begi

31、n case(D_IN) 2b00:D_OUT1,D_OUT0 = 2b10; 2b01:D_OUT1,D_OUT0 = 2b01; 2b10:D_OUT1,D_OUT0 = 2b10; 2b11:D_OUT1,D_OUT0 = 2b00; default:D_OUT1,D_OUT0 = 2b00; endcase endendmodule/*倒计时时间选择模块模块couterselect.v*/模块五:/*倒计时时间选择输出显示模块datamux.v*/module datamux(D_IN3,D_IN2,D_IN1,D_IN0,SEL,D_OUT1,D_OUT0);/输入输出端口定义out

32、put 3:0 D_OUT1;output 3:0 D_OUT0;input 3:0 D_IN3;input 3:0 D_IN2;input 3:0 D_IN1;input 3:0 D_IN0;input 1:0 SEL;/数据类型定义reg 3:0 D_OUT1;reg 3:0 D_OUT0;always begin case(SEL) 2b00: begin D_OUT0 = D_IN0;D_OUT1 = D_IN1; end 2b01: begin D_OUT0 = D_IN2; D_OUT1 = D_IN3; end 2b10: begin D_OUT0 = D_IN0; D_OUT1

33、 = D_IN1; end 2b11: begin D_OUT0 = D_IN2; D_OUT1 = D_IN3; end default:begin D_OUT0 = 4b0000;D_OUT1 = 4b0000; end endcase endendmodule/*倒计时时间选择输出显示模块datamux.v*/模块六:/*倒计时时间选择驱动模块scan.v*/module scan(EN_in1,EN_in0,sdata);/输入输出端口定义output 1:0 sdata;input EN_in1;input EN_in0;/数据类型定义reg 1:0 sdata;wire EN_in

34、;assign EN_in = EN_in1 | EN_in0;always (posedge EN_in)begin sdata = sdata + 1b1; endendmodule/*倒计时时间选择驱动模块scan.v*/模块七:/*顶层模块trafficlight.v*/module trafficlight(Reset,SW,CLK,Red1,Red2,Yellow1,Yellow2,Green1, Green2,D_OUT1,D_OUT0);/输入输出端口定义input Reset;input SW;input CLK;output Red1;output Red2;output

35、Yellow1;output Yellow2;output Green1;output Green2;output 3:0 D_OUT1;output 3:0 D_OUT0;/数据类型定义reg 3:0 D_OUT1;reg 3:0 D_OUT0;wire SYNTHESIZED_WIRE_0;wire SYNTHESIZED_WIRE_1;wire SYNTHESIZED_WIRE_2;wire SYNTHESIZED_WIRE_3;wire 3:0 SYNTHESIZED_WIRE_4;wire 3:0 SYNTHESIZED_WIRE_5;wire 3:0 SYNTHESIZED_WIR

36、E_6;wire 3:0 SYNTHESIZED_WIRE_7;wire 1:0 SYNTHESIZED_WIRE_8;/倒计时选择驱动scan U0(.EN_in1(SYNTHESIZED_WIRE_0),.EN_in0(SYNTHESIZED_WIRE_1),.sdata(SYNTHESIZED_WIRE_8);/5秒倒计时counter5 U1(.C_CLK(CLK),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_3),.D_OUT1(SYNTHESIZED_WIRE_7), .D_OUT0(SYNTHESIZED_WIRE_6),.C_OUT(SYNTHESIZED_WIRE_1);/55秒倒计时counter55 U2(.C_CLK(CLK),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_2),.C_OUT(SYNTHESIZED_WIRE_0),

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服