61010119卢旭
猜数字游戏
回头看本次数字系统课程设计,我觉得我设计的比较好的是以下两方面,
1.状态机的编程。由于是用语言写,比起用原理图来搭电路实现状态的顺序和非顺序跳转要方便很多。因此我坚定地使用type语句定义了含十几个状态的状态变量表,看似比较多,但实际上为我的编程带来了极大的方便,因为我只需要写清楚在哪个状态下对哪些信号和变量赋什么值、满足什么条件时跳转到哪一个状态就可以了。为了正确简明地实现状态跳转以及当前状态下赋值,我把这两块写在了两个进程中,让他们能同时进行。另外结构体中我用shared variable类型代替了signal类型,避免信号赋值的延时可能带来的错误。
2.总线思想的使用。一开始设计的时候我发现需要用到14个数码管,2个用来倒计时,4个用来输入数字,4个用来给出提示,四个用来显示答案。这样十分浪费资源,而且必须使用三个个实验箱。后来在学习微机接口原理课程中了解到了总线的思想,我就想到将总线技术用到我的设计中。我选择使用6个数码管,分为AB两组,A组2个,用来显示倒计时B组4个用来输入数字,显示提示和显示答案。将控制机与每组数码管之间分别通过一条总线相连,由控制机发出总线控制信号来控制总线的使用权(详细参见程序清单中相应代码的注释)。这样节省了数码管以及芯片的管脚,而且让我更深一层地体会了总线接口技术的作用。
整个设计过程如下:
学期刚刚开始,数字系统课程设计这门课便引起了我的兴趣。这是我第一次独立地设计出一整套数字系统。虽然设计的很是简单,但还是给我很深的体会。
从刚开始定下题目开始,我便开始着手准备起来,我到图书馆查看了许多书,主要是想宏观地把握设计一个数字系统的步骤和方法。经过第五周整整一周的准备,我对我的题目基本上有了清晰地思路。我的项目最核心的部分在于比较输入的数与答案,我想到了写一个RAM对所有数据进行随机存取。这个方案有了初步眉目后,我先从外围电路开始下手。第七周我顺利地写出了键盘电路以及倒计时电路,并在实验室实际电路上通过。由于之后要期中考试,我便暂时停下了我的设计。第九周期中考试一结束我便重拾任务,当我要编程时我重新审视了我的项目。我发现用RAM实在是小题大做,而且对于RAM时序上的控制也难以准确把握。因此我果断的放弃了RAM,改用简单的赋值。此时我又遇到了新的问题。我一开始的计划中要用到12个数码管,我发现这不合理。好在接下来的微机接口原理课程中学到了总线接口技术,我便将总线技术用到了我的设计中。
一开始我对VHDL语言不甚了解,当时我总是用C语言风格的思想来考虑VHDL编程,于是遇到了不少算法上的矛盾。后来静下心来翻阅了黄正瑾老师编的《计算机结构与逻辑设计》一书附录中的VHDL简明教程以及一些EDA设计实例,我才对VHDL的思想渐渐有了了解。从数据类型、基本运算符、到时序电路、状态机设计,我将从书本中学到的应用到具体代码的设计中。
这次为期一个学期的数字系统设计的实践,让我经历了一个项目从申请到实施、中途经历的学习、解决问题、等等诸多环节,我感觉我解决实际问题的能力得到了训练。总而言之,这次的设计过程让我受益匪浅。