一、设计题目及要求
1.有十六只LED,L0……L15
2.显示方式
①先奇数灯依次灭
②再偶数灯依次灭
③再由L0到L15依次灭
3.显示间隔05S,1S可调。
二、设计过程及内容(包括1总体设计的文字描述,即由哪几个部分构成的,各个部分的功能及如何实现方法;2主要模块比较详尽的文字描述,并配以必要的加以说明,但数量无需太多)
1设计方案
从课程设计要求来看,要求实现彩灯的23种状态,所以,可以用一个23进制的计数器,从0到22来控制这23种状态。
再画出这23种状态和计数器数字对应的状态图,计算出逻辑式,便可实现彩灯的控制。由于变量过多,逻辑式的化简比较困难,所以我们使用了译码器来得到最小项,直接用最小项进行连接。
题目要求实现频率的选择,所以我使用了74161进行分频,从实验箱得到8Hz的脉冲信号,经分频得到2Hz和1Hz的信号,然后用数据选择器进行选择。
模块一,23进制计数器
使用2块74161扩展成为23进制计数器,采用并行进位方式、整体置数。因为计数器需要23种状态(00000-10110),所以,我先用两片74161连接成256(16×16)进制计数器,然后在输出为10110(22)时,用与非门来控制两计数器的LDN端清零。同时清零信号可作为进位信号输出。
具体连接如下:
仿真图如下:
每次计数器输出22时,CO端输出高电平。
模块二,5-32译码器
用两片74154(4-16译码器)扩展为5-32译码器。74154只有4个地址输入端A,B,C,D,如果对5为二进制代码译码,就要利用一个附加控制端来实现扩展。A,B,C,D分别对应连接两片74154的A,B,C,D输入端,另外一个输入端E,利用74154的G1N和G2N来实现选择两片之一。高位的O0N――O15N分别表示O16N――O31N。
具体连接如下图:
仿真图如下:
输入端分别输入0—31,可得到如下波形
模块三,分频器
用74161做23进制计数器进行分频分出8Hz,用数据选择器和一个数据选择器,控制时间间隔分别为05s,1s可调。用跳线选择实验箱上的CLK2的183Hz,用模块一的23进制计数器来实现23分频,可得到8Hz的时钟信号,在把得到的信号用74151再次分频,选择B,C端输出,即可得到2Hz和1Hz的时钟信号。具体连接如下图:
仿真图如下:
模块四,控制模块
由23进制计数器输入一个五位二进制数(00000-10110),输出彩灯所对应的状态(1表示灯亮,0表示灯灭)。对应的状态图如下:
由上表可得到各个输出对应输入端的逻辑表达式
L0=M0+M1+M2+M3+M4+M5+M6+M12
L1=M0+M6+M7+M8+M9+M10+M11+M12+M13
L2= M0+M1+M2+M3+M4+M5+M6+M7+M12+M13+M14
L3= M0+M1+ M6+M7+M8+M9+M10+M11+M12+M13+M14+M15
L4= M0+M1+M2+M3+M4+M5+M6+M7+M8+M12+M13+M14+M15+M16
L5= M0+M1+M2+ M6+M7+M8+M9+M10+M11+M12+M13+M14+M15+M16+M17
L6= M0+M1+M2+M3+M4+M5+M6+M7+M8+M9+M12+M13+M14+M15+M16+M17+M18=
然后进行连线。
具体连接如下:
仿真图如下:
其中cp为时钟信号,L0—L9表示10个彩灯
模块五,总控制模块
把频率控制模块(模块三)和彩灯控制模块(模块四)连接起来,就组成了频率可调的彩灯控制器,输入端control可控制输入频率(0为2赫兹,1为1赫兹)。
仿真波形如下:
图中显示了控制信号分别为0和1时的波形
三、设计结论(包括设计过程中出现的问题;对EDA课程设计感想、意见和建议)
1. 硬件实验情况
软件设计是非常重要的,但是还是纸上谈兵啊,真正要到了 安装调试的时候,这又是一个另一个比设计还头痛的事,
在确定了我的演示波形正确之后,按照书上的程序下载 *** 作流程,成功的将我的设计内容下载到EPF10K10LC84-3的芯片中,然后根据引脚,逐个连接,在连线的过程中,我尤其注意了时钟信号的连接,最终得到了令人相当满意的彩灯闪烁效果。
2. 改进方法
刚刚开始设计时,计数器的我都采用了CLRN端清零,但在使用中发现这样进位的脉冲过短,影响实验结果。于是全部改为LDN端清零。
module contr(tiaoshi,en,clk,yzflag,t1,t2,q1,q2);
input clk,yzflag,en,tiaoshi; //输入信号,控制位
input[7:0] t1,t2; //输入信号,用于置数
output reg[7:0] q1,q2; //输出信号
always @(posedge clk^tiaoshi or posedge yzflag or
posedge en) //此进程在这些信号的上升沿被触发
begin
if(en) begin
q1=q1;q2=q2; end //若en=‘1’,则q1、q2保持原来的状态
else //以下为en=‘0’的情况
begin
if(yzflag) //若yzflag=‘1’,则q1=t1,q2=t2。t1,t2为输入,q1,q2为输出,
//相当于将输入的数直接输出
begin q1=t1;q2=t2; end
else //以下为yzflag=‘0’的情况
begin
if(q1==0) //若q1等于0,则将99赋给q1。相当于一个99~0循环的减法器。
q1='h99; //若减法器减到0了,则跳到99
else begin q1=q1-1;end //减法器,q1没减到0的时候每次减一
if(q1[3:0]>='ha) //将十六进制转换为十进制,文末“说明1”详细讲解
q1[3:0]=9;
if(q2==0) //若q2等于0,则将99赋给q2。相当于一个99~0循环的减法器。
q2='h99; //若减法器减到0了,则跳到99
else begin q2=q2-1;end //减法器,q2没减到0的时候每次减一
if(q2[3:0]>='ha) //将十六进制转换为十进制
q2[3:0]=9;
end
end
end
endmodule
说明1:
if(q1[3:0]>='ha)
q1[3:0]=9;
q1为十六进制数,从99开始依次减一,一直到90时都正常。再减一次时,应该变为0x8f(十六进制),但我们想要的确却是89,所以判断 if(q1[3:0]>='ha),则q1[3:0]=9,则q1=89了。
那为何q1[7:4]未判断?我们往上看可知道:
if(q1==0) q1='h99;
此语句出现在判断的最开始,若q1减到0了,则将99赋给q1,也就是说q[7:4]只能在9~0之间切换。
字字手打,望楼主采纳!
以上就是关于EDA 16路彩灯设计全部的内容,包括:EDA 16路彩灯设计、EDA语句解释(交通灯控制模块,求全注释,谢谢)、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)