ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:132.08KB ,
资源ID:11742041      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11742041.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西电 数字电路与系统设计 EDA大作业.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西电 数字电路与系统设计 EDA大作业.docx

1、西电 数字电路与系统设计 EDA大作业数字电路与系统设计EDA实验报告班级:学号:姓名:西安电子科技大学电子工程学院基于FPGA的交通灯控制器一、实验功能简介:本实验基于XILINX的BASYS2 FPGA开发板,配合编写verilog HDL硬件描写语言,实现交通灯控制器的设计。应用板上的资源有四位数码管、一个拨键开关。四位数码管前两位显示A路绿灯、黄灯和红灯亮灯的时间数值,后两位显示B路绿灯、黄灯、红灯亮灯的时间数值。拨键开关SWO控制交通灯的工作状态。当SW0置为“1”时,交通灯控制器开始工作。当SW0置为“0”时,交通灯控制器进行复位操作。交通灯控制器的A方向的绿灯、黄灯和红灯亮灯时间

2、分别为25s、5s和30s,B方向的绿灯、黄灯和红灯亮灯时间也分别为25s、5s和30s。本实验在50MHZ的主时钟的条件下控制6个LED灯的亮熄以及用四位数码管显示亮熄的时间。这样便可以实现本实验的功能。二、实验条件:本实验所用到的开发板为Basys2开发板。它是构建在Xilinx Spartan3E现场可编程门阵列和一个Atmel AT90USB2 USB控制器。其核心部件为Xilinx Spartan3E-100 CP132,它采用100000-gate Xilinx Spartan3E FPGA;通过Atmel AT90USB2 全速USB2端口提供开发板所需的电源盒编程及数据输出接口

3、。开发板上的闪存来存储FPGA的声明。其外围部件有8路LED灯;4个7段的数码管;4个按键;8个滑行开关;PS/2端口;8位的VGAD端口;用户可选择开发板配置的时钟(25/50/100MHZ),也可以外接时钟;4组6针的扩展接口;所有输入输出信号都有ESD和短路保护电路。实验所用的综合软件为Xilinx ISE Design Suite 13.1,实验所用到的开发语言为Verilog,用Modelsim SE 6.5e编程和仿真。用DigilentAdept_v2-3-0来下载Bit文件。三、实验过程:1、系统组成框图:2、模块划分及各个模块的详细功能:本系统共包括个6个模块,分别为交通灯顶

4、层模块(top_traffic)、1s计时时钟产生模块(clock_1s)、数码管扫描时钟产生模块(display_DIV)、数码管扫描驱动模块(display)、交通灯控制模块(traffic)、十进制数字与数码管显示解码模块(dectohex)。交通灯顶层模块(top_traffic):此模块为顶层连接模块,负责将各个模块连接起来,包括总系统的输入与输出信号的定义与连接。1s计时时钟产生模块(clock_1s):此模块用来对主频进行分频,使其产生跑表计时所需要的1s的方波信号。数码管扫描时钟产生模块(display_DIV):此模块用来对主频进行分频,使其产生数码管扫描所需的2.5ms时钟

5、信号,此时钟信号为数码管扫描驱动模块(display)使用。数码管扫描驱动模块(display):此模块用来驱动数码管进行扫描显示,要显示的数据经由此模块显示到四位数码管上。十进制数字与数码管显示解码模块(dectohex):此模块是对要显示的数字进行解码,转换为数码管显示所需要的编码,此模块包含于数码管扫描驱动模块(display)。交通灯控制模块(traffic):此模块为整个系统的核心模块,用来控制输入的交通灯时钟信号,产生交通灯的效果,对交通灯进行开关与复位。3、流程图及流程图详细介绍:系统流程图为: 描述过程:当交通灯控制模块(traffic)启动时,首先判断使能端EN是否为1。若为

6、1则程序继续进行。接下来分别判断中间变量tempa与tempb是否为0.若为tempa为0,判断counta的数值。若counta为0,则此时A路绿灯亮,并且数码管开始倒数计时。当计时结束时,再返回判断counta的数值对应相应的交通灯亮熄。tempb的判断与tempa类似。说明:在流程图的任意一点,只要RESET复位被按下,直接从“开始”重新开始。按键说明:开关复位键(SW0)。4、详细的程序清单及程序注释:/* 交通灯顶层模块(top_traffic)将各个模块进行连接,并设置总系统的输入输出*/module top_traffic(mainclk, reset, display_led,

7、 led_control_1,led_control_2,led_control_3,led_control_4, traffic_control, LAMPA,LAMPB); /端口定义 input mainclk,reset,traffic_control;/输入主时钟、复位信号与交通灯控制信号 output 6:0 display_led;/输出数码管段选控制端 output led_control_1,led_control_2,led_control_3,led_control_4;/数码管位选控制端 output 2:0 LAMPA,LAMPB; wire 6:0 display_

8、led; wire led_control_1,led_control_2,led_control_3,led_control_4,drop; wire clock_1s,display_div;/分频时钟接线:交通灯计数时钟与数码管扫描时钟接线 wire 7:0 number1,number2;/待显示数字接线 /1s时钟 clock_1s u2(.clock_1s_clk(mainclk),.reset(reset),.clock_1s(clock_1s); /显示分频 display_DIV u4(.display_DIV_clk(mainclk),.reset(reset),.disp

9、lay_div(display_div); /数字显示 display u5(.display_clk(display_div),.reset(reset), .led1(led_control_1),.led2(led_control_2),.led3(led_control_3),.led4(led_control_4), .number1(number1),.number2(number2),.led_display_port(display_led); /交通灯 traffic u1(.traffic_clk(clock_1s),.en(traffic_control),.LAMPA(

10、LAMPA),.LAMPB(LAMPB),.numa(number1),.numb(number2); endmodule/* 1s计时时钟产生模块(clock_1s)输入:50MHz的主时钟(clock_1s_clk)输出:分频后信号5ms(clock_1s)转换公式:1/mainclk*clock_1s_value*2*/module clock_1s ( clock_1s_clk,reset,clock_1s ); parameter clock_1s_value=25000*1000;/更改此处的值改变分频时间 /端口定义 input clock_1s_clk,reset;/输入此模块

11、的时钟,与复位信号 output clock_1s;/输出此模块的时钟 reg 25:0 clock_1s_counter;/分频计数器 reg clock_1s;/ 计数分频 /模50000*1000/2计数器,即0.5s分频 always (posedge clock_1s_clk or posedge reset) begin if(reset) begin clock_1s_counter=26b0; end else begin if(clock_1s_counter=clock_1s_value-1b1) clock_1s_counter=26d0; else clock_1s_c

12、ounter=clock_1s_counter+1b1; end end /二分频,即1s分频 always (posedge clock_1s_clk or posedge reset) begin if(reset) begin clock_1s=1b0; end else if(clock_1s_counter=clock_1s_value-1b1) clock_1s=clock_1s; endendmodule/*数码管扫描时钟产生模块(display_DIV)输入:50MHz的主时钟(display_DIV_clk)输出:分频后LED扫描信号2.5ms(display_div)转换公

13、式:1/mainclk*display_div_value*2*/module display_DIV ( display_DIV_clk,reset,display_div ); parameter display_div_value=1250*5;/更改此处的值改变分频时间/端口定义 input display_DIV_clk,reset;/输入此模块的时钟,与复位信号 output display_div;/输出此模块的时钟 reg 19:0 display_div_counter=20b0;/分频计数器 reg display_div=1b0; /计数分频 /模1250*5/2计数器,

14、即1.25ms分频 always (posedge display_DIV_clk) begin if(display_div_counter=display_div_value-1b1) display_div_counter=20d0; else display_div_counter=display_div_counter+1b1; end /二分频,即2.5ms分频 always (posedge display_DIV_clk) begin if(display_div_counter=display_div_value-1b1) display_div=display_div; e

15、nd endmodule/* 数码管扫描驱动模块(display)输入:LED扫描信号(display_DIV) LED位选信号(led1,led2,led3,led4) 待显示数字(number1,number2)输出:控制LED段选信号(led_display_port)*/module display ( display_clk,reset,led1,led2,led3,led4,number1,number2,led_display_port ); /端口定义 input display_clk,reset;/显示输入时钟,与复位信号 output led1,led2,led3,led

16、4;/数码管位选控制端 input number1,number2;/输入待显示的数字 output led_display_port;/输出数码管段选控制端 wire 7:0 number1,number2; wire 6:0 led_display_port_temp;/连接此模块与dectohex模块的接线,将的dectohex模块的段选与此模块的段选输出连接 reg led1,led2,led3,led4; reg 6:0 led_display_port; reg 1:0 display_counter=2b0;/显示循环计数寄存器,加入初始值主要是为仿真时用 reg 3:0 num

17、ber_temp=4b0;/待显示数字中间变量,加入初始值主要是为仿真时用 / 扫描显示 /进行扫描循环计数 always (posedge display_clk) begin display_counter=display_counter+1b1; end /进行扫描循环显示 always (display_counter) begin if(display_counter=2b00) begin led1=1b0; led2=1b1; led3=1b1; led4=1b1; number_temp=number17:4; end else if(display_counter=2b01)

18、 begin led1=1b1; led2=1b0; led3=1b1; led4=1b1; number_temp=number13:0; end else if(display_counter=2b10) begin led1=1b1; led2=1b1; led3=1b0; led4=1b1; number_temp=number27:4; end else if(display_counter=2b11) begin led1=1b1; led2=1b1; led3=1b1; led4=1b0; number_temp=number23:0; end end /模块连接,进行十进制到数

19、码管的转换解码 dectohex u3(.number(number_temp),.light(led_display_port_temp); /数码管段选赋值接线 always (display_counter) led_display_port=led_display_port_temp;endmodule/*十进制数字与数码管显示解码模块(dectohex)输入:十进制数字(number),范围015输出:二进制数字(light),要对应数码管*/module dectohex(number,light);/端口定义 input 3:0 number; output 6:0 light;

20、 reg 6:0 light; /进行数值转换 always(*) case(number) 4d0: light=7b0000001; /0 4d1: light=7b1001111; /1 4d2: light=7b0010010; /2 4d3: light=7b0000110; /3 4d4: light=7b1001100; /4 4d5: light=7b0100100; /5 4d6: light=7b0100000; /6 4d7: light=7b0001111; /7 4d8: light=7b0000000; /8 4d9: light=7b0000100; /9 4d1

21、0: light=7b0001000; /A 4d11: light=7b1100000; /B 4d12: light=7b0110001; /C 4d13: light=7b1000010; /D 4d14: light=7b0110000; /E 4d15: light=7b0111000; /F endcase endmodule/* 交通灯控制模块(traffic) traffic_clk : 为1s同步时钟; en : 使能信号,为1的话,则控制器开始工作; LAMPA : 控制A方向3盏灯的亮灭;其中,LAMPA0LAMPA2,分别控制A方向的 绿灯、黄灯和红灯; LAMPB :

22、 控制B方向3盏灯的亮灭;其中,LAMPB0LAMPB2,分别控制B方向的 绿灯、黄灯和红灯; numa : 用于A方向灯的时间显示,8位; numb : 用于B方向灯的时间显示,8位。 */ module traffic(traffic_clk,en,LAMPA,LAMPB,numa,numb);/端口定义 input traffic_clk,en;/输入此模块的时钟与交通灯控制信号控制信号 output 2:0 LAMPA,LAMPB;/输出交通灯红绿黄灯亮灯的控制端 output 7:0 numa,numb; /输出数码管显示数值 reg 7:0 numa=8b0,numb=8b0; r

23、eg tempa=1b0,tempb=1b0; reg 1:0 counta=2b0,countb=2b0; reg 7:0 agreen,ayellow,ared; reg 7:0 bgreen,byellow,bred; reg 2:0 LAMPA=3b0,LAMPB=3b0;/设置各交通灯的持续时间初始化值 always (en) if(!en)/使能信号en无效时,对交通灯的计数值进行初始化 begin ared = 8b00110000;/左红灯亮灯30s ayellow = 8b00000101;/左黄灯亮灯5s agreen = 8b00100101;/左绿灯亮灯25s bred

24、 = 8b00110000;/右红灯亮灯30s byellow = 8b00000101;/右黄灯亮灯5s bgreen = 8b00100101;/左绿灯亮绿灯25s end /控制a方向3种灯的模块 always (posedge traffic_clk) begin if(en)/使能信号en有效时,交通灯开始工作 begin if(!tempa) begin tempa=1b1; case(counta)/使能信号en有效时,交通灯开始工作 0: begin/状态0 numa=agreen;/直行绿灯亮 LAMPA=3b001; /输出001 counta=3d1; /进入下一个状态

25、end 1: begin /状态1 numa=ayellow; /黄灯亮 LAMPA=3b010; /输出010 counta=3d2; /进入下一个状态 end 2: begin /状态2 numa=ared; /红灯亮 LAMPA=3b100; /输出100 counta=3d0; /进入下一个状态(状态0) end default:/默认状态 LAMPA1)/判断倒计时未归零时分别对高低位进行递减 if(numa3:0=4d0) begin numa3:0=4d9; numa7:4=numa7:4-1b1; end else numa3:0=numa3:0-1b1; if(numa=2)

26、 tempa=1b0;/倒计时结束,返回灯状态变化判断,将进入下一个状态 end end else begin LAMPA =3b100;/使能端无效时,红灯亮 counta=2d0;/返回方向A的状态0(绿灯状态) tempa =1b0;/进入状态变化判断 numa=0;/数码管进行清零 end end always (posedge traffic_clk) begin if(en) begin if(!tempb) begin tempb=1; case(countb) 0: begin numb=bred; LAMPB=3b100; countb=3d1; end 1: begin numb=bgreen; LAMPB=3b001; countb=3d2; end 2: begin numb=byellow; LAMPB=3b010; countb=3b0; end

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1