找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8353|回复: 4
打印 上一主题 下一主题
收起左侧

Quartus EDA交通灯控制电路的设计实训报告与Verilog源码

[复制链接]
跳转到指定楼层
楼主


全部资料51hei下载地址:
设计资料.7z (1.31 MB, 下载次数: 151)



《EDA技术及应用》实训报告

实训题目:交通灯控制电路的设计
1 系统设计
1.1 设计要求
1.1.1 设计任务  
设计并制作一个交通灯电路,使它能符合实际交通道路控制的要求。
1.1.2 性能指标要求
① 用EDA实训仪上的4只八段数码管分别显示道路东西和南北通行和禁止的倒计时时间。
② 能设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。
③ 交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果。
④ 红、绿、黄灯显示的次序应符合实际交通道路控制的要求。
1.2 设计思路及设计框图
1.2.1设计思路
此方案需要设计一个分频器和两个计时模块一个红绿灯模块,分频器模块用于将20MHz转换为1Hz的时钟,两个计时器分别进行东西红绿灯的倒计时。灯的模块只需要设计一个模块,将黄灯和红绿灯分开,定义一个8位的reg型变量来控制红绿两色LED灯和一个4位reg型变量黄色LED灯,黄灯实现倒计时外,加上了闪烁的功能。
此外,为此方案加入了一个暂停模块。
1.2.2总体设计框图
fenpin:分频模块;
zt:暂停模块;
jishi,jishib:倒计时模块;
hld:红绿灯模块;
2 各个模块程序的设计
  • 分频模块:

即fenpin 模块。这个模块是把EDA实训仪主板提供的20MHZ的主频经两千万分频后,得到电路所需的1秒脉冲。其中clk是时钟输入端,clk_HZ是输出端。
  • 暂停模块

“zt”输入端高电平时使计数暂停(clk_0与clk断开),低电平时使计数继续(clk_0与clk连接)。
  • 倒计时模块


以“jihshi”模块为例:clk是经过分频器输出的1HZ时钟信号;lod是控制交通灯模式转换的标志位;ma[7..0]输入的是从qa[7..0]拿到的数值;qa[7..0]是输出端既输出给红绿灯模块和黄灯模块,又将数值显示在数码管上。
  • 红绿灯模块

clk是分频器输出的时钟信号; qa,qb是计时器输出的时间信号,用于判断并改变lod的状态;ma,mb是从预先定义红黄绿LED灯的时间中拿到的数值,再输出给计时模块;hld是显示输出端,接LED的红绿两种灯;hd 是显示输出端,接LED的黄灯。其中lod是控制交通灯模式转换的标志位,qm表示红绿灯的四种状态。 flag是控制黄灯的三种状态。
3  调试过程
在设计前根据要求做一个交通灯的这个设计流程图,注意红绿黄三种灯的变换。对各个小模块的程序进行编写和调试,各个小模块程序调试完毕之后,接着就要从整个交通灯系统的一些细节进行修改。
东西和南北方向分别亮红灯和绿灯,同时两组的数码管从开始设的26秒和30秒开始倒计时,等倒计时完东西组灯先从绿灯转到黄灯,南北组从红灯转绿灯,但是在这模块的时候设置的时间没设好,黄灯亮了以后绿灯还没灭,经过审查问题最终被解决了
对程序编译成功后下载到EDA试验箱,LED开始亮,开始自动倒计时,红黄绿灯跳变。
4  功能测试
4.1 测试仪器与设备
电脑 :一台
EDA实验箱 :一台
4.2 性能指标测试
1.东西南北的红绿灯可以通过倒计时来禁止和发亮。
2.实现在1秒到99秒内可调。
3.能在数码管上分别显示两个方向的交通灯倒计时,。
4.红黄绿灯的变化基本符合实际交通灯。
5方向红灯倒计时30s,绿灯26s,倒计时至0s,黄灯亮倒计时3,红绿灯转换黄灯闪烁。
4.3 误差分析
本题目没有误差分析。
5  实训心得体会
从一开始完全没有头绪到画出设计流程图,在接下来熟悉Verilog HDL,下载Quartus9.0并熟练操作。
通过本次实训,使我对EDA这门课有了更深的了解,课堂上所学到的知识要融会贯通,要自己亲手去操作、学习,而且尽可能多的去拓展知识,去揣摩我们学到的东西。遇到难题别慌张,确定预想结果及方案,分模块解决,问题就会变得简单。另外一个模块做好最好先编译一下,成功后再做接下来的。
通过这次EDA实训,使我对EDA更加的充满兴趣,同时对QuartusⅡ这个软件有了进一步的了解,我学会了如何设计一个交通灯控制电路并且成功验收。在进行实训的的过程中,不仅提高了我的编程能力,同时还让我对交通灯控制系统也进一步认识并加深了学习。当然实训当中,我遇到许多问题,通过上网查找资料,询问老师同学后使问题得到了解决。在此,非常感谢老师和同学的帮助。我认真的学习了每一条程序的作用,在验收的时候也能基本回答出老师问的每一个问题。我深刻的明白了知识在于一点一点的积累,这一次的实训涉及了方方面面的知识,有分频器,有减法计数器等等模块的设计,可以说这是对我们能力的一次大检验。
所以,这让我懂得了很多知识都是要平时积累的,知识积累得多了那我们学习的时候就会有更多的依据,会有更多新的想法。所以今后一定要积累更多的知识,为以后对各个科目的深入学习做铺垫。同时也要懂得把学到的知识运用到实际当中去。
6  参考文献
[1] 谢自美.电子线路设计·实验·测试(第二版).武汉:华中科技大学出版社,2000.
[2] 江国强.EDA技术与应用(第五版).北京:电子工业出版社,2017.
[3] 潘松,黄继业,潘明.EDA技术实用教程——VerilogHDL版(第五版).北京:科学出版社,2013.
[4] 阎石.数字电子技术基础(第五版).北京:高等教育出版社,2006.


附录1:仿真波形图(部分模块)


总模块仿真(需要去掉分频器):


②暂停模块:

③计时模块:

附录2:程序清单
  1. ①分频模块:
  2. module fenpin(clk,clk_HZ);
  3. input clk;
  4. output reg clk_HZ;
  5. reg[24:0] counter;
  6. initial
  7. begin
  8.               clk_HZ=0;
  9.               counter=0;
  10. end
  11. always @(posedge clk)                                                         
  12. begin
  13.               if(counter==10000000-1)
  14.               begin
  15.               counter=0;
  16.               clk_HZ=~clk_HZ;            
  17.               end
  18.               else
  19.               counter = counter + 1;
  20. end
  21. endmodule

  22. ②暂停模块:
  23. module zt(zt,clk_0,clk);
  24. input zt,clk_0;
  25. output reg clk;
  26. always @(posedge clk_0,negedge zt)
  27. begin
  28.               if(~zt)
  29.               clk=clk_0;
  30. end
  31. endmodule
  32. ③计时模块(a):
  33. module jishi(clk,lod,ma,qa);
  34. input clk,lod;
  35. input[7:0] ma;
  36. output reg[7:0] qa;
  37. always @(posedge clk , posedge lod)
  38. begin
  39.               if(lod)
  40.                             begin
  41.                                           qa=ma;
  42.                             end
  43.               else
  44.                             begin
  45.                                           if(qa==0)
  46.                                                         qa='h99;
  47.                                           else
  48.                                                         qa=qa-1;
  49.                                           if(qa[3:0]>'ha)
  50.                                                         qa[3:0]=9;
  51.                             end
  52. end
  53. endmodule

  54. ④计时模块(b):
  55. module jishib(clk,lod,mb,qb);
  56. input clk,lod;
  57. input[7:0] mb;
  58. output reg[7:0] qb;
  59. always @(posedge clk or posedge lod)
  60. begin
  61.               if(lod)
  62.                             begin
  63.                                           qb=mb;
  64.                             end
  65.               else
  66.                             begin
  67.                             if(qb==0)
  68.                                           qb='h99;
  69.                             else
  70.                                           qb=qb-1;
  71.                             if(qb[3:0]>'ha)
  72.                                           qb[3:0]=9;
  73.                             end
  74. end
  75. endmodule

  76. ⑤交通灯模块:
  77. module hld(lod,clk,ma,mb,qa,qb,hld,hd);
  78. input[7:0] qa,qb;
  79. input   clk;
  80. output reg[7:0] ma,mb;
  81. output reg[7:0] hld;
  82. output reg[3:0] hd;
  83. output reg  lod;
  84. reg[1:0] flag;
  85. reg[1:0] qm;
  86. reg[7:0] timeg,timer,timey;
  87. initial
  88. begin
  89.               timer='h30;
  90.               timeg='h26;
  91.               timey='h03;
  92.               flag=0;
  93.               qm=0;
  94.               hd='b0000;
  95. end
  96. always @(posedge clk)
  97. begin
  98.               if(qa==0||qb==0)
  99.                             lod=1;
  100.               else lod=0;
  101. end
  102. //红绿LED灯
  103. always @(posedge lod)
  104. begin
  105.               if(qm>3)              qm=0;
  106.               if(qm==0) begin
  107.                                                         ma=timer;mb=timeg;
  108.                                                         hld='b01100110;
  109.                                                         flag=2;
  110.                                             end
  111.               else if(qm==1) begin
  112.                                                         ma=timey;mb=timey;
  113.                                                         hld='b00100010;
  114.                                                         flag=0;
  115.                                                         end
  116.               else if(qm==2) begin
  117.                                                         ma=timeg;mb=timer;
  118.                                                         hld='b10011001;
  119.                                                         flag=2;
  120.                                                         end
  121.               else if (qm==3) begin
  122.                                                         ma=timey;mb=timey;
  123.                                                         hld='b10001000;
  124.                                                         flag=1;
  125.                                                         end
  126.               qm=qm+1;
  127. end
  128. //yellow
  129. always@(posedge clk)
  130. begin
  131.               if(flag==0)
  132.               begin
  133.                             if(qa=='h03&&qb=='h03)                                                        hd='b1010;
  134.                             if(qa=='h02&&qb=='h02)                                                        hd='b0000;
  135.                             if(qa=='h01&&qb=='h01)                                                        hd='b1010;
  136.                             if(qa=='h00&&qb=='h00)                                                        hd='b0000;            
  137.               end
  138.               if(flag==1)
  139.               begin
  140.                             if(qa=='h03&&qb=='h03)                                                        hd='b0101;
  141.                             if(qa=='h02&&qb=='h02)                                                        hd='b0000;
  142.                             if(qa=='h01&&qb=='h01)                                                        hd='b0101;
  143.                             if(qa=='h00&&qb=='h00)            
  144. hd='b0000;
  145.               end
  146. end
  147. endmodule
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:351538 发表于 2018-6-14 01:06 | 只看该作者
楼主,请问有联系方式吗,我在模仿你做这个仿真作业时波形出不来不知道咋回事,求请帮忙
回复

使用道具 举报

板凳
ID:351538 发表于 2018-6-14 01:08 | 只看该作者
你好,请问可以给一个联系方式吗,我是杭州电子科技大学的学生,在模仿您的电路时,仿真波形出不来,请求帮助
回复

使用道具 举报

地板
ID:351538 发表于 2018-6-14 01:10 | 只看该作者
你好,请问可以给一个联系方式吗,我是杭州电子科技大学的学生,在模仿您的电路时,仿真波形出不来,请求帮助
回复

使用道具 举报

5#
ID:329016 发表于 2018-7-30 16:41 | 只看该作者
SJC123 发表于 2018-6-14 01:06
楼主,请问有联系方式吗,我在模仿你做这个仿真作业时波形出不来不知道咋回事,求请帮忙

不好意思 号刚找回来 ,如果你还需要问题 或者有其他问题 就回帖吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表