《现代数字系统设计》课程总结
2011年秋季学期
实验一 八路LED 的开关控制
1.实验要求
本实验要求用8 个开关分别控制8 个LED 的亮灭。
2.硬件设计思路
用FPGA 的八个引脚做开关控制,八个引脚控制LED 的亮灭。
3.软件程序流图
4.实验体会
通过本实验对VHDL
语言有了初步的了解。
实验二 1.实验要求
以选择。
2.硬件设计思路
4位输入(分别为脉冲选择、顺序选择开关,脉冲信号1,脉冲信号2),8位LED 显示。
3.软件程序流图
4.实验体会 通过此实验对VHDL
运用了一些简单的VHDL 实验三 1.实验要求 本实验要求实现占空比50%,分频系数可以通过拨码开关设定的分频电路。
2.硬件设计思路
,计数选择(LED 灯显示)。
3.软件程序流程 i. ii. 如果是奇数则在负脉冲
与正脉冲。
然后将两次的信号取或操作,以达到占空比为50%。
iii. 如果是偶数则在n/2脉冲前后分别取正脉冲与负脉冲。
iv. 输出脉冲信号。
4.实验体会
通过本次实验掌握了分频的基本思想,最大的难点是对奇分频的操作,若何达到完全的50%占空比使得实验难度加大。
我采取对奇分频的(n+1)/2-1脉冲前后取两次不同的脉冲信号取或操作来实验50%占空比分频。
实验四利用状态机实现多功能循环彩灯控制
1.实验要求
本实验要求实现4 种循环方式,每种循环方式运行5 次后,自动转换为下一种循环方式。
2.硬件设计思路
状态机的操作完全借助于内部电路的计算与转换,外电路只需要将转换状态以LED灯的循环方式显示出来,此试验只需要有8路引脚控制LED。
3.软件设计流程
i.设置四种状态变量。
ii.设置四种状态循环。
iii.在四种状态下分别设置一种循环方式,每种循环方式循环五次。
iv.将循环变化的信号值直接显示。
4.实验体会
此实验中熟悉了状态机的操作机制及工作原理。
对于每种状态下的循环方式的显示是难点,开始在四种状态之下又分别设置几种状态,这样虽然能够显示出需要的效果,但是软件显示的状态特别复杂,不便于掌控。
于是修改为四种状态下使用简单的逻辑循环语句来完成循环显示。
实验五 8 段数码管动态扫描显示控制
1.实验要求
本实验要求实现具有启动,停止,清零功能的秒表,启动,停止,清零由一个按钮开关控制。
2.硬件设计思路
此实验需要有一个控制开关,一个外部时钟输入端。
数码管的七段段码输出端,因为需要动态显示,所以6位数码管需要6个引脚单独控制显示状态。
3.软件程序流程
i.外部时钟选择20M晶振并且分频为100HZ,1000HZ(其中100HZ的信
号用于计数,1000HZ的信号用于显示)。
ii.在100HZ的脉冲信号有效时,对秒表的最低为进行十进制计数操作,溢出时向高位进位。
iii.开关控制一个信号的三种状态,然后这三种状态分频控制计数模块的计数,锁存以及清零。
iv.将计数的整数转换为数码管可以显示的段码操作。
在1000HZ的脉冲下控制数码管循环显示。
4.实验体会
本实验中计数模块的进制数的选择以及进位操作时本实验的难点,通过IF条件判断是否溢出并且在溢出的时候进位。
另一个遇到的问题是:理论上想数码管动态扫描脉冲越快,显示效果越好,但是实际并非如此当我加20M 晶振直接扫描时,显示效果非常差。
不断测试发现在1000HZ下显示比较满意。
经研究得出这是因为数码管的段码变化速度比20M扫描慢太多的原因。
实验六频率计设计
1.实验要求
本实验要求实现一个可测频率范围为1Hz——1MHz 的数字频率计,并用数码管显示测量结果,并对测量精度进行分析说明。
2.硬件设计思路
此实验需要一个外部时钟输入端,一个外部信号输入端。
数码管的七段段码输出端,因为需要动态显示,所以6位数码管需要6个引脚单独控制显示状态。
3.软件程序流程
i.外部时钟选择20M晶振并且分频为100HZ,1000HZ(其中100HZ的信
号用于计数,1000HZ的信号用于显示)。
ii.在外部信号的一个时钟周期内,在100HZ的脉冲信号的控制下对计数值的最低为进行十进制计数操作,溢出时向高位进位。
iii.将计数的整数转换为数码管可以显示的段码操作。
在1000HZ的脉冲下控制数码管循环显示。
4.实验体会
本实验在秒表实验的基础上做起来较为简单,只需要对计数条件加以控制即可。
实验七矩阵式键盘扫描与键码检测
1.实验要求
本实验要求当按下某键时,在LED 上显示该键的键码。
2.硬件设置思路
硬件部分分为键盘扫描模块,需要8个引脚分别对行列进行扫描;数码管显示模块,需要七段数码管段码既需要7个引脚,数码管的公共端接地。
3.软件程序流程
i.通过芯片对矩阵键盘的行健行赋值,在脉冲来的条件下顺次使四行
中的一行处于高电平状态。
ii.在脉冲的有效值的条件下对列进行扫描。
通过对有效信号的判断得出具体按下的键盘。
iii.将键盘的数字转换为数码管段码并输出显示。
4.实验体会
此实验中最大的问题是对仿真硬件的研究不到位,总想对列进行扫描结果总是失败,知道发现行列之间的那个二极管,才知道应该对行扫描。
通过此次实验掌握了矩阵键盘的扫描方法,也提醒自己在以后的实验中要注意硬件仿真模块的研究。
实验八LPM 的使用
1.实验要求
自主选择两个LPM 模块组成一时序系统,实现功能测试,并理解每个LPM 的所有参数含义。
2.硬件设计思路
经研究发现LPM模块下有16进制计数器,所以有想法把16进制转换为10进制计数,并通过7448进行译码数码管显示,需要有一个外部时钟信号输入端,并且有7段段码输出端。
3.软件程序流程
i.设置LPM模块分别为(1)4位输出,向上计数。
(2)2进制数输出,
时钟使能。
(3)同步清零。
ii.将输出四位信号给7448译码并显示。
iii.在计数到9使同步清零。
4.实验体会
此实验中对LPM的参数的理解是一个重点,在实验中需要将总线分开显示遇到了总线下的分线的使用的问题。
课程心得及建议
这门课程让我对电路设计有了新的认识,全智能下的电路设置充满了无穷的魅力,但在课程实验中总是会遇到很多的问题,VHDL这种新的语言虽然与其他语言有相似之处,但是其独有的逻辑语言,以及语法规则让我开始设计时有些棘手,因为总想用C语言的设计理念来书写VHDL语言,结果程序总是报错。
开始时喜欢先用C把思路写好,再翻译成VHDL语言,但发现这样改错很慢。
几次实验之后把VHDL语言重新学习了一遍,感觉还是直接写来的快,掌握了语法特性之后,写起来也没有C语言难。
感觉接触新的语言开始比较慢,当与VHDL达到默契的程度之后,语法规则已经不再是程序出错的主要问题了。
通过实验使我掌握了FPGA的设计方法,并且喜欢这种设计思路。
希望实验中可以多一些自己设计的实验,而不是都由老师设定题目。