西工大FPGA实验大作业

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西北工业大学《硬件描述语言与FPGA》实验报告学院:学号:姓名:专业:实验时间:实验地点:指导教师:西北工业大学20年月基于Verilog交通灯的设计与实现一、实验目的及要求实验目的:通过交通灯的设计与仿真综合,体会复杂时序的实现方法,学会用框图表示程序的设计思想,掌握中小规模集成电路的系统综合设计方法。实验要求:设计一个交通灯信号控制电路。具体要求为:输入为50MHz的时钟和复位信号,输出为红、绿、黄三个信号(高电平为亮)。复位信号(高电平)有效,红、绿、黄灯灭;接着进行如下循环:绿灯亮1分钟,黄灯闪烁10秒,红灯亮1分钟。在此基础上再加两个数码管,对倒计时的数显示。二、实验设备(环境)及要求ModelSimSE和SynplifyPro9.6.2三、实验内容与步骤1.设计思路概述:考虑一个红绿黄交通灯及倒计时显示器设计首先复位电平置1,所有的交通灯电平为低,即灭。首先绿灯亮60s,然后黄灯闪烁10s;红灯再接着亮60s;而后绿灯亮60s,黄灯闪烁10s,红灯亮60s……以此循环,直至复位电平置1,所有交通灯灭。2.模块结构设计及流程图顶层模块(modulelights):模块例化,对控制模块和译码模块进行例化控制模块:交通灯颜色和倒计时○1时钟分频(frequencies):将50MHZ的频率分成我们所需要的1HZ;○2颜色变化:状态循环及倒计时,状态用light_status,如果状态light_status为0,绿灯亮,时间(60s)给统计灯亮时间的变量light_long,并且把显示灯亮的变量light_select赋值100(高电平表示亮),最后把状态标志位light_status赋1,控制倒计时。交通灯亮灭情况:light_out交通灯亮灭情况001红灯亮010黄灯亮100绿灯亮○3倒计时:灯亮或闪烁时间(绿、黄、红分别为60s、10s、60s)用BCD码表示(分别为60h、10h、60h),倒计时的时候个位和十位分别是高四位和低四位,首先是低四位倒数,当倒数到0时,重新赋值为9,且高四位减1,如此循环,直到这个数减到0,灯亮的时间到,接着进行下一个状态,在时间减到0的时候,给使能端enable赋值0;高四位和低四位分别显示十位和个位。译码模块:黄灯闪烁及倒计时译码输出。○1黄灯闪烁:黄灯在1s内亮0.5s灭0.5s,中间位当分频时钟y_flicker为高且输入light_select为高时,输出light_out才为高(黄灯亮),别的情况light_out中间位都为低(黄灯灭)。○2七段译码:3—8译码器,把倒计时译码输出显示七段数码显示管二进制代码顺序:7’babcdefgfecabdg模块框图:3.时序说明在0时刻,加上系统时钟,首先进行reset置1,计数器清零,所有交通灯为灭的状态,二进制代码为00,七段译码无显示。在reset为0时,系统开始正常工作。计数器开始工作,纵向路口的路灯亮,横向路口的红灯亮,二进制代码为01,同时两个倒计时显示器工作,从59到0的倒计时。经过60s(也就是经过60*50M个系统时钟上升沿之后)纵向路口,横向路口的黄灯开始闪烁(1秒内只有半秒,黄灯是亮的,从9秒到8.5秒之间黄灯是亮的,然后8.5到8是灭的,如此继续下去,知道10秒结束)又经过10s(70*50M个系统时钟上升沿),状态转移到红灯,然后显示及七段译码过程与绿灯相似。至此一个周期已经完成,接下来就是循环执行以上步骤的过程,直到有reset清零端打断其正常工作。控制模块顶层模块译码模块4.计框图及相关时序四.实验代码//顶层模块resetck50M黄灯闪烁十位个位七段数码管交通灯状态时钟分频状态3红灯亮60s状态2黄灯闪烁10s状态1绿灯亮60s初始状态modulelights(clk50MHz,reset,light_out,led_ctrlge,led_ctrlshi);inputclk50MHz;inputreset;output[2:0]light_out;output[6:0]led_ctrlge;output[6:0]led_ctrlshi;wire[3:0]dataoutge;wire[3:0]dataoutshi;wire[2:0]light_selccted;controlcontrollk50MHz),.reset(reset),.doutge(dataoutge),.doutshi(dataoutshi),.light_select(light_selccted));//控制模块例化decodeU_decode(.sysclk_50MHz(sysclk_50M,.reset(reset),.inge(dataoutge),.inshi(dataoutshi).light_sel(light_selccted),.light_out(light_out),.led_datage(led_ctrlge),.led_datashi(led_ctrlshi));//译码模块例化endmodule//控制模块Modulecontrol(clk50MHz,reset,outge,outshi,light_select);inputclk50MHz;inputreset;output[3:0]outge;output[3:0]outshi;output[2:0]light_select;reg[2:0]light_select;reg[1:0]light_status;regclk1Hz;reg[24:0]counter;regenable;reg[7:0]light_long;parameterg_long=8'h59;parametery_long=8'h09;parameterr_long=8'h59;always@(posedgeclk50MHzorposedgereset)beginif(reset)beginclk1Hz=0;counter=5'd0;endelseif(counter==25'd25000000-1)begincounter=25'd0;clk1Hz=~clk1Hz;endelsecounter=counter+1;endalways@(posedgeclk1Hzorposedgereset)beginif(reset)beginlight_select=3'b000;light_status=2'd0;enable=0;endelseif(enable==0)beginenable=1;case(light_status)0:beginlight_long=g_long;light_select=3'b100;light_status=2'd1;end1:beginlight_long=y_long;light_select=3'b010;light_status=2'd2;end2:beginlight_long=r_long;light_select=3'b001;light_status=2'd0;enddefaultlight_select=3'b000;endcaseendelseif(light_long==0)enable=0;elseif(light_long[3:0]==0)beginlight_long[3:0]=4'd9;light_long[7:4]=light_long[7:4]-1;endelselight_long[3:0]=light_long[3:0]-1;endassignoutge=light_long[3:0];assignoutshi=light_long[7:4];endmodule//译码模块moduledecode(clk50MHz,reset,inge,inshi,light_sel,light_out,led_datage,led_datashi);inputclk50MHz;inputreset;input[3:0]inge;input[3:0]inshi;input[2:0]light_sel;output[2:0]light_out;output[6:0]led_datage;output[6:0]led_datashi;reg[6:0]led_datage;reg[6:0]led_datashi;reg[2:0]light_out;reg[24:0]counter_yell;regfrequencies;always@(posedgeclk50MHzorposedgereset)beginif(reset)begincounter_yell=25'd0;frequencies=0;endelseif(counter_yell==25'd25000000-1)begincounter_yell=25'd0;frequencies=~frequencies;endelsecounter_yell=counter_yell+1;endalways@(frequenciesorlight_sel)beginlight_out[2]=light_sel[2];light_out[0]=light_sel[0];if((frequencies==1)&&(light_sel[1]==1'b1))light_out[1]=1'b1;elselight_out[1]=1'b0;endalways@(inge)begincase(inge)//个位七段译码,低电平有效4'h0:led_datage=7'b0001000;4'h1:led_datage=7'b1101101;4'h2:led_datage=7'b0100010;4'h3:led_datage=7'b0100100;4'h4:led_datage=7'b1000101;4'h5:led_datage=7'b0010100;4'h6:led_datage=7'b0010000;4'h7:led_datage=7'b0101101;4'h8:led_datage=7'b0000000;4'h9:led_datage=7'b0000100;default:led_datage=7'b1111111;endcaseendalways@(inshi)begincase(inshi)//十位七段译码,低电平有效4'h0:led_datashi=7'b0001000;4'h1:led_datashi=7'b1101101;4'h2:led_datashi=7'b0100010;4'h3:led_datashi=7'b0100100;4'h4:led_datashi=7'b1000101;4'h5:led_datashi=7'b0010100;4'h6:led_datashi=7'b0010000;4'h7:led_datashi=7'b0101101;4'h8:led_datashi=7'b0000000;4'h9:led_datashi=7'b0000100;default:led_datashi=7'b1111111;endcaseendendmodule测试代码`timescale1ns/1nsmoduletraffic_tb;regclk50MHz;regreset;wire[2:0]light_out;wire[6:0]led_ctrlge;wire[6:0]led_ctrlshi;initialbeginreset=1;#1reset=0;endalwaysbegin#1clk50MHz=0;#1clk50MHz=1;endlightslights(.clk50MHz(clk50MHz),.reset(reset),.light_out(light_out),.led_ctrlge(led_ctrlge),.led_ctrlshi(led_ctrlshi));endmodule五.实验结果仿真图绿

1 / 15
下载文档,编辑使用

©2015-2020 m.111doc.com 三一刀客.

备案号:赣ICP备18015867号-1 客服联系 QQ:2149211541

×
保存成功