欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    verilog语言 设计一个交通灯信号控制电路要点.docx

    • 资源ID:9779496       资源大小:169.08KB        全文页数:19页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    verilog语言 设计一个交通灯信号控制电路要点.docx

    1、verilog语言 设计一个交通灯信号控制电路要点 西北工业大学 实验报告FPGA 学 院: 软件与微电子学院 2011303596 号: 学 名:姓 杨清山 专 业:微电子学 2013/11/11 实验时间: 毅字楼335 实验地点: 韩兵 指导教师: 西北工业大学 2013 年 11 月 大作业 设计一个交通灯信号控制电路 一、实验目的及要求 实验目的:通过交通灯的设计与仿真综合,体会复杂时序的实现方法,学会用框图表示程序的设计思想,掌握中小规模集成电路的系统综合设计方法。 实验要求:设计一个交通灯信号控制电路。具体要求为:输入为50MHz的时钟和复位信号,输出为红、绿、黄三个信号(高电平

    2、为亮)。复位信号(高电平)有效,红、绿、黄灯灭;接着进行如下循环:绿灯亮1分钟,黄灯闪烁10秒,红灯亮1分钟。在此基础上再加两个 数码管,对倒计时的数显示。 二、实验设备(环境)及要求 机。的PCSynplify Pro 9.6.2和ModelSim SE 6.2b工具为 实验EDA: 预装了 三、实验内容与步骤 1.设计思路概述 总体上分为三个大模块,即:顶层模块、分频模块、控制模块、译码显示模块。作用如下: 顶层及控制模块: 此模块做例化,和控制,是本程序的主体,对底层的分频模块和译码显示模块进行例化,并且做控制设计。控制设计如下: 采用同步时序逻辑。包括一个循环计数器,三个比较器,alw

    3、ays 控制。 通过分频后的CLK1新号(1Hz),进行对一个循环变量“k”的周期为130的循环,进时,重新复值K=0;当1值减k每进行一次跳变,clk1而控制三个灯的控制;具体循环为:为129。 通过比较器,每个灯的条件不同,当129=k=70时绿灯亮,69=k=60黄灯闪烁,59=k=0红灯亮。 对于数码管输出,当129=k=70时,数码管个位输出=(k-70)_x0010_,十位输出为(k-70-个位)/10;当69=k=60数码管个位输出=(k-60)_x0010_,十位输出为(k-60-个位)/10,当59=k=0时,数码管个位输出=k_x0010_十位输出为(k-个位)/10。 分

    4、频模块: 分频模块用以把输入的50MHz的信号转换为1Hz信号,便于其后的交通灯控制及数码管输出。 译码模块: 考虑到数字显示需要两个七段译码器,且在数字系统中,数字的表示都是采用二进制,因为两个管子分别输入,所以需要把循环变量k转换为有用的十位和各位输出。 为了方便,把循环变量k减去各状态的基数值后,用数学方法取十位和各位分别做输入。 如绿灯时,129=k=70时,数码管个位输出=(k-70)_x0010_,十位输出为(k-70-个位)/10。 七段译码器的设计原理如图: 2.总体设计框图及说明: blu rst Clk 50Hz 循环变量k 控制 yel Clk1 1Hz 1290 red

    5、 图一 输入:clk 全局时钟信号,50MHz rst 全局复位端,高电平有效 输出:ctrl_1s 倒计时个位上数字 ctrl_10s 倒计时十位上数字 blu,yel,red 各个灯状态 框图说明: 状态机的输入,只有时钟信号clk和复位信号reset.输出为数码管十位和个位的二进制显示状态以及三个灯的颜色显示(blu,yel,red,分别是绿黄红灯,“1”表示灯亮,“0”表示灭)。 输入clk的频率很大,需要通过计数器对其进行分频。首先计数产生一个1Hz的输出,通过该输出再次循环计数,产生周期为130的计数变量,从而控制各个灯的亮灭。而控制黄灯闪烁的分频,为方便起见,仍以1s为单位,每秒

    6、钟改变一次。 嵌套语句来控制三灯亮与灭,同时间接地进行倒计时的过程,输出个位和十位上的数,if用直接用两个七段译码显示倒计时数。 。0”1”时,三个信号灯及循环变量k复位置“Rst信号是清零用的,为“ 流程图 开始 50MHz 输入 clk1:1Hz 循环变量k计数 70k blu=1 k60 69 yel=yel 0kred=1 图四 显示输出 时序说明:3. 整段程序共有四个状态:初始状态、绿灯状态、黄灯状态、红灯状态。 如果有rst的“1”状态,则要进行清零,恢复到初始状态;这是在控制模块的计数器会清零,倒计时不再进行,三个灯都是灭的状态, Rst为“1”状态跳转为初始状态的,等待着清零

    7、结束,开始工作;此时七段译码也不会显示。 清零结束后,系统开始正常工作。首先是分频时钟开始工作,此时循环变量开始循环,绿灯亮60s,译码器开始显示倒计时的输出,直到k=70。当循环变量k=69时,黄灯闪烁10s,同时译码倒计时,直到k=60;当循环变量k=59时,红灯亮,同时译码倒计时直到k=0。至此一个周期已经完成,沿此过程循环进行,直到reset信号的出现。 初始 K=K-1 绿灯状态 K69 使0KK=129 K=K-1 黄灯状态 红灯状态 K=K-1 K59 图二 4.模块设计框图、相关时序 本程序分为三个模块,顶层模块、控制模块、译码模块,各模块的设计框图以及相关时序说明如下: 顶层

    8、及控制模块框图 顶层 控制 译码显 分频 示块 图三 输入:clk 全局时钟信号,50MHz rst 全局复位端,高电平有效 输出:led1 个位七段译码 led10 十位七段译码 时序说明:加上时钟信号之后,首先用reset清零,然后分频模块会分频产生分频时钟clk1,根据分频时钟的高与低,进而进行变量循环,然后会控制3个状态之间的跳转,译码显示模块会同步通过数码管来显示倒计时数;灯控信号blu,yel,red同时输出对交通灯的控制。 分频模块: 输入50MHz的信号,rst为“1”时,计数器j置“0”,并在以后每经历一个系统时钟周期时加1,知道k=49999999时,clk1=clk1,同

    9、时k=0.到此分频完成。 (在实际代码编写中,为了代码的精简,此模块已经集成入顶层及控制模块) 计数器显示计数 J=4999 clk 50MHz 9999 clk=clk rst 图四 译码显示模块: 输入端口: din_1s 显示器个位数据,由控制模块输入 din_10s 显示器十位数据,由控制模块输入 输出端口: led_data_1s 显示器个位数据的译码 led_data_10s 显示器十位数据的译码 时序说明: 和clk(50MHz) (系统时钟)并间接受此模块接受主模块输出的个位和十位的数值控制, (全局复位)rst,及分频时钟clk1的控制,均为上升沿触发,当 rst 为高电平时

    10、,电路复位,重新开始工作。当rst为低电平时,电路正常。 5.仿真及综合结果 表1 仿真结果信号解释说明 信号 解释 备注 clk 为了方便,这里取2ns 系统时钟, 50MHz blu,yel,red 分别绿红灯, 最终三灯状态 “1”为亮“0”为灭 k 循环计数变量 用以状态判断控制 led10 数码管十位显示倒计时十位七段译码 led1 数码管个位显示 倒计时个位七段译码 out1 控制模块的输出倒计时个位上的数字 out10 控制模块的输出倒计时十位上的数字 rst 高电平有效系统控制变量 上图中blu,yel,red,三个信号反映的绿黄红交通灯的状态,其中包括绿灯亮60秒,黄灯以2H

    11、Z为周期闪烁,红灯亮60s,总周期为130s。 上图为循环控制变量的值随分频后信号从129到0的循环计数。 综合结果: 顶层及控制,分频模块的综合RTL级电路如图: 译码显示模块的综合如下: RTL级 门级 6.代码及注释 此为顶层及控制模块代码: include ./decode.v module bulb(clk,rst,red,blu,yel,led1,led10); input clk,rst; output blu,yel,red,led1,led10; reg red,yel,blu; wire 6:0 led1; wire 6:0 led10; reg3:0 out10,out1

    12、; reg5:0 j; reg7:0 k; /j,k reg clk1; / initial begin k=d129; blu=0; yel=0; red=0; /j=0; /clk1=0; end /* /这是分频部分功能实现 /*?* always(posedge clk or posedge rst) begin if(rst) begin clk1=0; j=0; end else if(j=4) / begin j=0; clk1=clk1; end else begin j=d70&k=d129) begin red=0; blu=d60&k=d69) begin yel=yel

    13、; /黄灯闪烁 blu=0; out1=(k-60)_x0010_; out10=(k-60-out1)/10; end else red=1; /yel=0; out1=k_x0010_; out10=(k-out1)/10; end else begin blu=0; yel=0; red=0; end decode d(.din_1s(out1), .din_10s(out10), .led_data_1s(led1), .led_data_10s(led10); Endmodule 以下是译码及显示模块代码: module decode ( din_1s, /个位输入 din_10s,

    14、 / 十位输入 led_data_1s, / 数码管个位输出 led_data_10s / 数码管十位输出 ); input din_1s; input din_10s; output 6:0 led_data_1s; output 6:0 led_data_10s; reg 6:0 led_data_1s; reg 6:0 led_data_10s; always(din_1s) begin case(din_1s) 0 : led_data_1s = 7b0001000; 1 : led_data_1s = 7b1101101; 2 : led_data_1s = 7b0100010; 3

    15、 : led_data_1s = 7b0100100; 4 : led_data_1s = 7b1000101; 5 : led_data_1s = 7b0010100; 6 : led_data_1s = 7b0010000; 7 : led_data_1s = 7b0101101; 8 : led_data_1s = 7b0000000; 9 : led_data_1s = 7b0000100; default : led_data_1s = 7b1111111; endcase end always(din_10s) begin case(din_10s) 0 : led_data_10

    16、s = 7b0001000; 1 : led_data_10s = 7b1101101; 2 : led_data_10s = 7b0100010; 3 : led_data_10s = 7b0100100; 4 : led_data_10s = 7b1000101; 5 : led_data_10s = 7b0010100; 6 : led_data_10s = 7b0010000; 7 : led_data_10s = 7b0101101; 8 : led_data_10s = 7b0000000; 9 : led_data_10s = 7b0000100; default : led_d

    17、ata_10s = 7b1111111; endcase end endmodule 测试模块代码: timescale 1ns/1ns include ulb.v module top; reg clk,rst; wire red,blu,yel,led1,led10; /reg clk1,red,blu,yel; initial begin rst=1; clk=1; #500 rst=0; #500 rst=1; #500 rst=0; end always #20 clk=clk; bulb bulb(clk,rst,red,blu,yel,led1,led10); Endmodule

    18、 五、分析与讨论 电路关键是在进行时序状态转换,倒计时计数,控制黄灯闪烁过程,经过分析,需要一个来判断三个灯状态的判断条件。本电路主要运用一个循环变量k,作为程序控制的灵魂, 进行各个状态循环,黄灯闪烁的判断和数码管的输入。程序亮点:为了数码管的个位十位输入,把循环变量k 进行倒数计时,这样与数码管的倒计时数值一致,经过简单数学计算,就可以把每个状态的k的值换算为数码管的个位十位。这样一来,省去了为数码管单独设置的变量,化简了代码。 优点:代码简单易懂。中心代码仅150多行。 缺陷:由于未设定具体的状态机循环,只是运用变量k的循环控制,造成了综合时的线路繁杂以及冗余,不能完美符合Verilog语言的关注硬件的特点。但是没有任何代码是完美的,这也正是我通过此次编程学到的最大的经验。 待优化:中间黄灯的闪烁频率有点过慢,时间匆忙,未能优化,若把分频频率clk1改为0.5Hz,然后循环变量k 按照clk1 每2个周期改变一次,即可实现黄灯每0.5s闪一次。 六、教师评语 签名: 日期: 成绩


    注意事项

    本文(verilog语言 设计一个交通灯信号控制电路要点.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开