课程设计
总结报告
题目:1、红绿灯控制器
2、彩灯显示电路目录
一、设计任务书………………………………………………
二、设计框图及整机概述……………………………………
三、各单元电路的设计方案及原理说明(包括单元电路原理图)……………………………………………………………
四、根据电路原理图手工做板与用FPGA开发板实现的对比……………………………………
五.设计及调试中的体会……………………………
六.对本次课程设计的意见及建议…………………………
七.附录(包括:整机逻辑电路图和元器件清单)………一、设计任务书
课程设计任务书
一、题目:1、红绿灯控制器
2、彩灯显示电路
二.基本设计要求:
1、设计一个红绿灯控制器控制器,设计应具有以下功能:
(1)东西方向绿灯亮,南北方向红灯亮。.
(2)东西方向黄灯亮,南北方向红灯亮。
(3)东西方向红灯亮,南北方向绿灯亮。
(4)东西方向红灯亮,南北方向黄灯亮。
要求有时间显示(顺数、逆数皆可),时间自定。(可添加其他功能。用EWB或Multism做出仿真。
红绿黄
红
绿
黄
十字路口交通示意图
2、设计一个彩灯显示电路,设计应具有以下功能:
至少八路显示,功能有八盏灯依亮灭,时间间隔一秒;八盏灯同时亮,同时灭间隔一秒,重复四次。(加多其他的功能更好:两盏或叁盏流水灭)。用EWB或Multism做出仿真,并在FPGA开发板上用原理图输入的方法实现。
三、给定条件
只能采用实验室提供的中小规模电路进行设计。(不一定是实验用过的)。
二、设计框图及整机概述
1、红绿灯控制器
<一>设计框图
红绿灯控制模块数码管显示控
计数器状态产生
模块
1HZ方波脉冲信
<二>整机概述
(1)用函数信号发生器产生1HZ(1S)的方波脉冲作为计数器的CLK(时钟)输入端。
(2)采用两片74LS160十进制计数器构成四十八进制计数器,产生48个状态。
(3)通过对48个状态的利用,经过红绿灯控制电路,实现红绿灯有规则的亮灭,并用数码管显示时间。 整体功能:
2、彩灯控制器 <一>设计框图
0~39s 东西方向红灯亮,南北方向绿灯亮
40~48s 东西方向红灯亮,南北方向黄灯亮
0~39s 东西方向绿灯亮,南北方向红灯亮
40~48s 东西方向黄灯亮,南北方向红灯亮
50MHZ 晶振 频
率
计数器分频模块 计数器状态产生
模块
<二>整机概述
(1)FPGA开发板晶振频率为50MHZ,实验要求为1HZ(1S)的脉冲信号。故采用7片74LS160十进制计数器和1片74LS90二-五-十进制计数器构成分频模块,通过分频产生1HZ(1S)的脉冲信号。
(2)将1HZ脉冲信号作为74LS93四位二进制计数器的时钟输入,并将74LS93四位二级制计数器做成十六进制计数器,产生16个状态(编码)。
(3)用74LS138三-八线译码器对前8个状态(编码)进行译码,八个输出引脚依次输出低电平“0”并循环。结合逻辑控制电路,利用后8个状态实现全部八盏灯的四次亮灭。
(4)FPGA开发板上的八个发光二级管为共阳型,即低电平有效。
三、各单元电路的设计方案及原理说明
1、红绿灯控制器
共四个单元模块:1HZ 方波脉冲信号、计数器状态产生模、红绿灯控
制模块、数码管显示控制模块。
(1)1HZ方波脉冲信号:外接函数信号发生器,设置信号发生器,产生1HZ方波脉冲信号,作为计数器CLK(时钟)输入。(2)计数器状态产生模块:采用两片74LS160同步十进制计数器构成四十八进制计数器,产生48个状态。
采用整体置零法构成四十八进制计数器:
clk
如图所示,将两片74LS160以并行进位方式连接,其中下面的芯片是低位片,上面的芯片是高位片。时钟信号同时接到两个芯片的时钟输入端,并连接好其它使能端。低位片产生0000~1001十个状态的循环,当从1001→0000时,RC0产生进位,使高位片的ENT置1,高位片全部使能,从0000→0001,等下一个低位片RC0脉冲到来时,又从0001
→0002。这样就实现高位片代表十位,低位片代表个位。当高位片为4,低位片为8,即整个模块到48时,高位片Qc 与低位片Qd 同时输出高电平"1",将两个引脚级联,通过与非门接到两芯片的置零端,这样就将两个芯片的状态全置为0000,即整个模块为0.如此便实现了0~48的循环。构成四十八进制计数器,但此处没用到进位,只是用到48个状态。 (3)红绿灯控制模块:
①
如图所示,先考虑东西方向和南北方向红灯的交替亮灭。用到一个JK 触发器,使用JK 触发器的翻转功能(将J 和K 同时置“1”)。如图JK 触发器为下降沿有效,高位片的Qc 接到时钟输入端,每当计数器从48→0时,Qc 从1→0,JK 触发器翻转一次,如此便实现输出端Q 和Q'交替输出高电平"1",便实现了每过48秒,两红灯状态交换一次。 ②
若将高位片Qc 通过非门连接到绿灯,则在0~39s 内,Qc 一直输出低电平"0",通过非门后则一直输出高电平"1",如此便实现0~39s 内绿灯一直亮。
高位片Qc
红灯
红灯
③
若将高位片Qc 连接到黄灯,则在0~39s 内,Qc 一直输出低电平"0",黄灯一直灭,40~48秒内,Qc 一直输出高电平"1
但是实验要求一个方向红灯亮时,只有另一个方向的绿灯和黄灯能亮,而此方向的绿灯和黄灯要一直灭。要实现此功能只需将使一个方向红灯亮灭的状态先和实现绿灯和黄灯亮灭的状态相与,再连接到另一个方向的绿灯和黄灯。这样就能实现一边红灯亮,本边绿灯和黄灯不能亮,另一边绿灯和黄灯才能亮。 以上四步结合便实现了红绿灯控制模块
(4)
数码管显示控制模块
EWB 仿真中提供的数码管默认带有译码电路,故直接将高位片的Qd~Qa 从左向右依次连在左侧数码管的四个管脚,将低位片的Qd~Qa 从左向右依次连在右侧数码管的四个管脚即可。
高位片Qc
红绿黄
红绿
黄
但在自己制作实际的电路时,需要自己设计译码电路。 2、彩灯显示电路
共有三个单元模块:计数器分频模块、计数器状态产生模块、彩灯控制显示模块。 (1)计数器分频模块
因为彩灯显示电路要求在FPGA 开发板以原理图输入形式实现,而所用FPGA 开发板固有时钟频率为50 MHZ(0.00000002s),所以要实现实验要求的1HZ(1s),就要使用计数器对时钟信号进行50000000分频。这里采用1片74LS90二-五-十进制计数器、7片74LS160十进制计数器实现。
共七个74160
如图所示,采用串行接法,74LS90做成五进制计数器,实现五分频,Qd 作为进位输出接到下一片74LS160的时钟输入。每片74LS160都为十进制计数器,实现十分频,RC0进位输出接到下一片的时钟输入,最终共5*10*10*10*10*10*10*10=50000000分频,所以最后一片74LS160的进位输出RC0输出信号为1HZ 。 (2)计数器状态产生模块
进位输出(1HZ )
时钟输入(50MHZ )
采用74LS93四位二进制计数器,做成十六进制计数器,产生十六个状态(编码)。
按如图所示接法即可做成十六进制计数器,Qa 、Qb 、Qc 、Qd 为输出。 (3)彩灯控制显示模块
首先考虑使八个发光二级管依次亮,这里采用74LS138三-八线译码器实现。
输入
输出
S1 S2'+s3' A2 A1 A0 Y0' Y1' Y2' Y3' Y4' Y5' Y6'
Y7' 0 X 1 1 1 1 1 1 1 1
X 1 0 0 0 0 0 0 0 0
x x x x x x 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
如图所示为74LS138译码器的功能表。因为FPGA 开发板上八个发光二级管为共阳型,所以给低电平“0”时亮,故只要依次给八个发光二级管一个低电平,就能实现流水灯。所以只需将译码器的输出引脚
时钟输入 (1HZ )
再考虑使八盏灯重复四次的全亮全灭。由74LS138译码器的功能表可知,当使能端S2'+S3'输入为“1”时,八个输出端全部封锁在高电平,此时八个发光二级管全灭。所以考虑将计数器的输出端Qd与此使能端相连,作为使能端的输入。所以前八个状态时Qd为“0”,译码器正常工作,后八个状态时Qd为“1”,译码器输出端全部封锁在高电平。
Qd Qc Qb Qc 功能
1 0 0 0 八盏灯全亮(0)
1 0 0 1 八盏灯全灭(1)
1 0 1 0 八盏灯全亮(0)
1 0 1 1 八盏灯全灭(1)
1 1 0 0 八盏灯全亮(0)
1 1 0 1 八盏灯全灭(1)
1 1 1 0 八盏灯全亮(0)
1 1 1 1 八盏灯全灭(1)
由上图可知,要实现八盏灯全亮或者全灭,只需Y=(Qd.Qc')'
将前八个状态和后八个状态联系起来,通过与门后接到发光二极管的阴极,就实现了实验要求的全部功能。
clk
四、根据电路原理图手工做板与用FPGA开发板实现的对比
1、根据原理图手工做板,是一个从无到有的过程,根据原理图的需要获取芯片和元器件,将它们集成固定到一个板上,并按原理图电气连接关系将它们连接,从而实现设计者所想要实现的功能。
2、FPGA,即现场可编程门阵列,它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定置电路的不同,又克服了原有可编程器件门电路数有限的缺点。通俗地说就是它事先已经将多种功能元件集成在一起,设计者可根据需要,通过可编程逻辑的链接,把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。成品FPGA板的逻辑块和连接可以按照设计者的需求而改变。也就是说,不同设计者所要求实现的功能虽不同,但设计者不必动手去制作不同的电路板,在同一个FPGA成品板中完全能实现。
目前FPGA主要是通过硬件描述语言(verilog和VHDL)来实现对电路设计的编程,烧录至FPGA上进行测试。也可通过原理图输入法,即在软件平台上将电路原理图画出来,编译后烧录至FPGA 上进行测试,本实验即采用此种方法。
3、就两者对比来说,用FPGA省去了设计者动手做板的麻烦,设计者只需在软件平台上,将虚拟的逻辑连接关系烧录至现成的FPGA成品板中,就能实现所要求的功能。但是FPGA是一门很高深的学问,皮毛易懂,想要学精要下大功夫。
五、设计及调试中的体会
1、在设计红绿灯控制器和彩灯显示器的过程中,虽然思路很清晰,但仍出现了不少错误。在红绿灯控制器设计中,构成48进制计数器时,开始我是用两片74LS90来设计的,但在48→0的时候,因为竞争冒险现象,导致从48直接跳到了10,恰好我的学号是48号,若是其他学号,就不会出现这种现象。所以我改用了两片74LS160同步十进制计数器并行接法来实现48进制计数器,这样就不会出现竞争冒险。所以我认为在实在没有办法对当前电路错误做出修正时,用同种功能的其他电路来实现也不失是一种办法。
2、在设计红绿灯控制器的红绿灯控制模块时,因为逻辑比较复杂,刚开始思路不是很清晰,所以我采用了分步的方法,先设计两方向红灯的交替亮灭,再设计绿灯和黄灯的亮灭,最终将红黄绿三灯统一起来。所以在对整体的思路不是很清晰时,可以分立开来,逐步突破。这点我在设计彩灯控制电路时也深有体会。
3、在设计彩灯显示电路的计数器分频模块时,我对自己的电路很是自信,且检查了好几遍,各使能端、输入信号端、进位端、输出端连接都没问题,但编译后烧录到FPGA板中就是没有任何反应,在纠结了好几个晚上后,还是没能检测到错误,放了一段时间后,我在翻数电课本时,偶然发现74LS160十进制计数器的进位端想要有进位输出,必须是从1001→0000时才行。而我最后一片74LS160是设计成五进制计数器的,最多能到0100,所以不会产生进位信号,导致后面的电路功能无法实现。所以在电路中的一个不起眼的小问题就会导致全盘电路无法实现功能,这就反映出了平时功底的不扎实。
4、虽然出现一些小错误从而花了很多时间去解决,但我并不认为这是浪费时间。因为在想办法查找这些错误以及解决他们时,我在查资料,看书,重画电路图的过程中,潜移默化的接触到了更多的知识,这是一个提高的过程。
六.对本次课程设计的意见及建议
1、建议在布置实验要求后,不要隔很长一段时间再发元器件,这样会将时间拖得很长,有不少同学已经很早就把仿真做出来了,但等了很长时间才能做板。这样只要仿真做出来,检查通过后就能获得器件,将取元器件的时间段也能分开,不至于出现元器件一抢而空的局面。
2、建议将分值比例中做板占的分值比例提升。因为不少同学为了将板做的精美,下了不少功夫,而且做板也很能体现一个人的能力以及对待这个实验的认真程度。
七.附录
1、红绿灯控制器
元器件:74LS160十进制可预置同步计数器两片74LS03二输入四与非门一片
74LS04六反相器一片
74LS08二输入四与门一片
74LS76双J-K触发器一片
数码管两个
LED红灯两个
LED绿灯两个
LED黄灯两个
2、彩灯显示电路
元器件:74LS160十进制可预置同步计数器七片74LS90二-五-十进制计数器一片
74LS93四位二进制计数器一片
74LS138三-八线译码器一片
74LS08二输入四与门两片