2013年学生心得体会

发布者:系统管理员发布时间:2013-10-12浏览次数:7

基于摄像头的自动识别系统         学号:61011118          姓名:李臻
7、课程设计总结
n       预期的目标与当前实现功能的差异详细注释
本次课程设计基本完成了项目申请中的全部功能,性能良好。由于硬件条件有限,所以终端的外设,例如报警灯和日光灯均用开发板上的LED灯来模拟了。
n       可以进一步发挥提高的部分
下一步可以做更加详细的识别。例如不仅仅是识别有没有人,而是识别这个人是谁,即通常所说的人脸识别,这样的好处是报警灯可以根据识别结果有选择的报警,而不是遇到人就报警,这样可以扩大产品的应用范围。
n       课程设计体会
可以说,此次的课程设计进行的是有些艰难的。困难重重,所以收获也颇丰,主要有以下几点体会:
1.      对于硬件部分的体会
此次课程设计中我使用了摄像头这一外设。由于在开学初的课题申报时,知识储备还不够全面,也没有来得及做很多的调研,知识天马行空地想到了做摄像头识别方面的内容,盲目地报了这个题目。报完题目之后,我一仔细考虑项目的实现方法就傻眼了:摄像头是怎样用的?如何采集信号的?输出的信号时什么?是什么格式?如何将摄像头输出的数据输入开发板?输入的方式是什么?等等这些问题我都一无所知。摄像头的使用是我的课程设计的关键部分,所以必须搞清楚摄像头的使用。首先要选择合适的摄像头。市场上的摄像头可谓种类繁多,各式各样,要选择适合这次课程设计使用的摄像头着实不易。最终,在多方比较下,在以前做过智能车竞赛的同学的指导下,选择了OV7620摄像头。接下来就是苦苦地钻研摄像头使用方法的过程了。OV7620的数据手册非常的长,还十分难懂,各种各样的同步信号的时序让人眼花缭乱。其他的介绍资料也是非常稀少。本来这学期的课程就非常繁多,任务非常重,所以学习摄像头的过程可以说是非常辛苦。不过,最终我还是完全搞清了摄像头的使用,真的很有成就感。这也锻炼了我的自学能力和自我探究能力。
2.      软件部分的体会
其实这次软件部分并没有遇到很多困难,我想,这主要归功于其中编写大系统的过程中以及完全掌握了Verilog-HDL这门语言。软件部分的编写完成的比较快,出错也很少,比较顺利。
3.      对于课程的建议
我觉得,数字系统这门课是非常好的,可以很好的锻炼学生的自我学习和自主探究的能力。就我自己的感受来说,我觉得我对于我这学期的数字系统这门的课所完成的事情很有成就感,感觉学到了很多,也培养了自己面对困难不屈不挠的精神。但是,一个学期做下来,我也对这门课程有着一些建议。对于吴健雄学院的学生来说,大二下的课程繁多,任务极重,可以说超出一般院系很多。在这样的情况下去完成数字系统设计这样的任务,而且是从一无所知开始自主完成,真的是太不容易。由于不肯能把所有时间都分配给数字系统设计,所以最终设计出的作品多多少少不能完全反应自身的真实水平。所以我建议把这门课放在其他学期,或者短学期,这样我们就有了更充裕的时间,自然也就可以做出更加完美的作品。
 
 
四层电梯控制器         学号:61011207          姓名:姜蘅育
8、课程设计总结
n       预期的目标与当前实现功能的差异详细注释
预期要做VGA显示器显示电梯上行、下行、静止,但是由于时间上分配不好,最终没能成功。对于VGA还不是很熟悉,相应程序编写出错。
由于是验收的最后才仿真成功,时间上紧张,就没有下到板子里运行,但是仿真结果是正确的。
比预期的目标增加了键盘输入。当初设计时,没有考虑到输入按键的多少,所以在程序设计过程中加入键盘来解决这个问题。
可以进一步发挥提高的部分
可以设计成电梯层数n可有键盘输入控制的电梯;并使其状态在液晶屏上显示。
 
n       课程设计体会
1.首先是编译不通过的问题,这个问题几乎存在于整个系统设计的过程中,其中大都由于编程不细心造成,比如用了中文输入方式,分号忘了写了,if 和 end if 不对应,信号和变量赋值运算符用错了,以及一些输入方面的错误等等等。这些小的错误往往会报出一代堆错误出来,这是由于编译的原理决定的,编译器只会按照固有的规则进行语法检查,它不像人脑那样会灵活的思维,所以前面的一个错会多米诺效应般的推倒后面,从而弄出一大堆错,这是编程中常见的事,从第一个错开始检查。问题就会解决的。
另一方面,我们也要养成良好的编程习惯,书写要工整,结构要有层次感,if else end if对应好。
2.稍复杂的程序不可能一次就能考虑的十分全面的。在调试的过程中,我遇到以下问题:
(1)报过一次警以后,alarming就一直亮着了!后来发现程序中只有alarm为高电平时将alarming置1,反之就没有了,所以当alarm不为高时就清alarming,这个放在了每个时钟上升沿开始来处理的,解决了问题。
(2)新的问题来了,当电梯开门时,如果overweight报警时,门的确一直开着,貌似是有反应了,但是报警灯就是不闪烁!奇怪了,后来发现就是在时钟上升沿时清了alarming,要知道程序中故障报警和overweight我都用的是alarming来显示的,所以就不能仅仅只根据alarm为低就清了alarming。后来我就加了一个mark_ alarm来标记超载的报警,成功解决了问题。详见开门状态的编写部分。
反思:其实这个问题是由于设计不好造成的,我完全可以用两个信号来分别表示故障报警和超载报警,想要使用一个LED来显示报警也很简单,只要二者有一个为有效时就闪烁报警就可以了。所以初始设计的时候还是很难做到周到。
(3)调试时发现电梯的优先权不对。这就奇怪了,明明程序中是严格的按照优先权控制规则来编写的啊。仔细观察发现有的请求根本就没有被响应。比如在一楼时按下2楼下和三楼上,电梯现在2楼听开门了,然后到3楼把3楼的送到了4楼,完了,电梯不下来载2楼的乘客了!后来发现原来在关门时我没有根据运行模式直接把当前层所有请求都清掉了!这就是问题了,比如在刚才上行时在2楼就把2楼的那个下行请求也给清掉了。所以后来电梯没有下来载2楼的乘客。
反思:当然这个问题是由于编程时考虑问题没有严谨的逻辑思维所致。而这在编程中十分重要。我开始用了一大堆辅助变量来记忆各个请求信号。这样做显然逻辑思路不清晰,事实上只要我们锁存了所有有效的请求信号,并在信号被响应的时候清掉相应的信号不就行了吗?根本不需要那么多允余的变量。上行时清掉当前层的上行请求,下行时同样,这又是多么简单的逻辑啊,但我却犯了这个低级错误。所以说在设计时就要细心的考虑,逻辑上一定要严谨。
(4)实际上调试的时候遇到了很多小的问题,让我很郁闷着急,甚至抱怨板子有问题,自己真倒霉。其实,硬件的问题绝对属于少数,几乎没有,问题来源于程序!出现问题时我们要冷静,问题一定对应着程序中的相应语句,只要这样冷静的分析,问题都会被很快的解决的,实际上我发现的重大问题都是这么解决的,可是说我收获了很多。
另外要想使程序完善人性化,很多问题都需要加一系列的标记变量,而这些标记信号的设置就带了何时清除它们的问题,我的程序就遇到了很多这样的问题。详见解析部分。
 
 
基于 Mips ISA 32 RISC CPU 设计  学号 61011220 姓名陈鑫
7、设计总结
? 预期的目标与当前实现功能的差异详细注释
预期实现的 59 条指令经仿真全都实现,并且能够流畅并连续的跑一段程序
然后得到一个结果。
? 可以进一步发挥提高的部分
人机交互做的不好(可是我这是 cpu 啊,要什么人机交互),可以考虑用数
码管显示最后结果。
? 课程设计体会
通过这次课程设计,我感觉我充分领悟了“数字系统设计”这门课的精髓,完
成了整个数字系统的设计,没有偏离这门课的初衷,所做的系统有一定的复
杂度,花费了大量的时间去钻研去研究。无论老师的评价是什么,我给自己
的评价是优秀。然而,对于这门课,我还有些建议想提。是否这门课太过于
重视那些外设看重外表的绚丽而忽视了所谓数字系统的复杂度和逻辑?是
否会因为有着比较漂亮的外观或者比较新奇的想法然而代码却寥寥几行,状
态逻辑转换不多却也能够得到比较好的评价?甚至会不会有的难度较大的
功能模块,一人写出,大家共享,最后只是改一些参数,却也能坐享其成,
蒙混过关,甚至评价较高?
多功能音乐盒        学号61011313          姓名于超凡
8、         课程设计总结
1.       与原计划差异:原计划通过算法,达到能在触摸屏上识别出1到8八个数字来分别代表八个音符,但经过几天的尝试觉得确实难度较大:
在网上查找资料后,我尝试了两种方法。
第一种是计算手写输入的曲线斜率,通过快速的扫描计算,将斜率变化与提前建立的数据进行比对分析,从而识别输入的数字。我首先试验的是1和7,效果还可以,在较为清晰的手写笔迹下可以识别出来,不过当我再加入2后,我的算法就经常出现问题,不能很好的识别三个数字。
    第二种方法是大量存储数字在触摸屏上显示的点的坐标,通过函数比对,将原数据库与手写输入进行比较识别。这种方法首先要用函数仿真笔迹,预先存储在ROM中。然后进行比较,我尝试了三天,很遗憾没有写出全部八个数字的轨迹函数(通过matlab),所以最后也只能放弃。。。。。!!!!!
迫于时间压力只能更改了方案:在触摸屏的相关区域划分出八个小区域,分别代表八个音符,通过修改触摸屏的例程来识别触摸点的坐标,当在制定区域时便能识别出想要记录的音符,这样做降低了很多的难度,但从另一个方面上却也提高了触摸屏识别的准确度。
n       可以进一步发挥提高的部分
手写输入识别部分:在我尝试的两种方法中,我觉得第一种更好一些,但可能由于我的算法问题,没能达到很好的识别效果(另一名同学也遇到了相同的问题,她也改变了自己的课题方案),但我坚信这种方法在理论上时没有问题的,在实用上也是可以实现的,暑假我会利用电设培训的时间再次尝试一下,争取能有所突破。
n       课程设计体会
    这一次的数字系统课程设计,我感觉是我大二下学期众多实验课程里面的一次宝贵的体验。上学期的大系统设计,因为准备不充分,时间安排不合理等问题,最终只是把原理图设计出来了,实际程序调试成果一点都不好,这次的数字系统设计准备时间更充分,而且因为每个人都是不同的题目,所以更有挑战性。
在刚刚开始的一段时间里,首先做的是自学并熟悉硬件描述语言。尽管很多人推荐使用Verilog语言,写起来简洁方便,但我还是选择了VHDL语言。我感觉VHDL语言比verilog语言更有调理性,结构清晰,和C++语言很相似,相对简单易懂。虽然可能编程的时候比较啰嗦,但是随着后来进一步的了解两种语言,我发现VHDL的“啰嗦”还是有好处的,因为它比较严谨,很小的错都能指出来,这样就不容易出错,很多时候往往能够一遍编译仿真通过。
然后是选题,万事开头难嘛,我觉得选题这一块,我是费了很大力气的。想要做出来的东西有很好的感官效果,我基本打消了做管理系统之类的想法。这类题目比较泛滥,而且难度在状态控制方面,整体做出来的效果不是很明显。然后,要体现好的视觉效果,必须对点阵、VGA有很好的应用,而这两样应用还是比较麻烦的,如果不投入较多精力,做出的显示效果就会很粗陋,这就没有意义了。除了视觉,还可以从听觉方面着手。我想到利用FPGA的硬件条件做一个音乐盒。硬件方面没有太多要求,只要一个扬声器就可以了,这样我就可以把重点放到编写代码上。查找了很多书籍资料,发现电子琴这类的资料还是挺多的。但如果仅仅做一个普通的电子琴,则显得简单而没有新意了。所以我想加入触摸屏模块,这样项目变得很有挑战性,做出来的成品也会更加有趣。
基础部分进行较顺利,在中期检查时已经完成弹奏和播放音乐的功能。完成后面部分,显然要比前面部分费力的多。录音需要用到RAM, 以前从没用过,需要自己一步步摸索着学习去用。在编写VHDL代码方面,我最大的体会就是基础必须扎实,对常用语句的用法特性要足够熟悉。很多时候,自己认为逻辑完全没有错,可是仿真出来结果就是不正确,原因就是不够细致严谨,程序中常常存在细微的漏洞,容易使程序陷入死循环。比如说,在VHDL中常用的信号定义与变量定义是我最常出错的地方。信号总是在进程结束后才赋值的,所以在进程中间信号是一个不确定值或上一次进程结束时的值,而变量是在进程中间立即赋值的,但有效范围只在进程之内。我一开始不注意这些细小差别,结果出现了很多差错。
触摸屏模块是我遇到最多问题,耗时最多的一个部分,尝试了两种方法,感觉都还算可行,但具体操作起来确实很有难度,最后由于时间问题不得不放弃,改变了方案,用一种简单的方式完成既定的功能,这也是我这次课程中最大的遗憾,暑假我会花时间重新研究一下这方面的内容,争取有所突破。
经历了完整的设计调试过程,我感觉我的收获还是挺多的。只要认真对待,就一定能够得到有价值的体验,这是最值得高兴的。
 
智能婴儿摇篮 61011322 彭志刚
7、课程设计总结
预期目标基本完成,但仍有很多地方可以改进。
1) 可以减少一些模拟部分,用数字处理进行代替;
2) 可以增加一些诸如音乐播放之类的娱乐功能。
3) 本装置是婴儿哭,摇篮就动,婴儿不哭摇篮就不动,而事实上,婴儿不哭的时候,摇篮最好再继续摇晃一段时间,这样更符合实际。
 
课程设计体会:
通过本次课程设计,我学到了很多,不仅将之前学过的知识进行了综合应用,而且还查阅学习了很多之前所不知道的知识,这对自己自学能力的培养和对综合应用能力的提升都是很有好处的。
首先是方案设计,对于首次独立完成项目的我们而言,这无疑是第一道坎。我之前拿到这个项目的时候就觉得很迷茫,不知从哪下手,更不知道如何操作。于是,我便花了很长时间上网查找资料、向老师和学长寻求帮助,渐渐地对如何实行自己的项目有了清晰的思路。所以说,向他人学习是自我研究的第一步,要学会站在巨人的肩膀上去开拓。
然后就是在具体操作过程中的发现问题和解决问题的能力。对于一个综合系统而言,很多时候理论的设计与实际的表现并不完全一致(设计经验不足),因此在实际操作过程中还会遇到各种各样的问题。对于这些问题,我们首先要找到问题的来源,在不断探索找到问题的来源之后,我们就需要想办法解决这样一个问题,对症下药很关键。有些问题是可以通过改变某些东西而彻底消除的,这多半是系统方案设计的问题,有的则只能尽量的减小这个问题所带来的影响。
最后给我体会,也是我很受益的地方——模数结合,生活中很多情况下只用模拟或只用数字是做不好的,这个时候就需要我们综合考虑两者的优势和劣势,然后结合起来应用,让整个系统更加稳定,更加高效。系统的前端有时通过模拟部分处理之后,会使问题变得更加容易处理,稳定性也会有所提高,数字处理起来更加方便;而整个系统的控制中心用数字部分完成,则会使整个系统运转的更准确、更稳定。
 
 
模拟城市交通系统61011217朱庆明
8、课程设计总结
1.发挥部分:加入车流,模拟更真实的城市环境;设置更多的交通规则并完成等。
2.收获与体会:
1)         经过这学期数字系统的学习和实践,使我对FPGA、对ISE、对VHDL有了更加深刻的了解,对如何驾驭VHDL,如何进行硬件调试、如何解决时序问题、如何设计出一个更加稳定可靠的系统有了更深的了解与更多的经验。可以将这看成是数字电路学习的一个良好开端。
2)         通过这次的数字系统学习再次证明了我的创新能力,不过原则上来说创造算法还是与软件关联比较密切,实际上用硬件来实现指针算法是一项耗时耗力耗资源且难以发挥最佳效果的做法,从实用性来说没有任何意义,只能当成是强化数字电路的学习。
3)         之所以能够完成这次的数字系统训练,其实很大程序上是因为我制作了相应的软件来进行助攻,所有rom的编写、原始数据的初步分析、指针算法的调试与成熟,全都是由软件来完成,硬件只是利用了软件数据分析的结果,仿照软件实现指针算法的方法重新实现了一遍,在功能上远远无法与软件实现的功能相比。这也说明今后的很多系统设计不应该用纯硬件来实现,应该遵循软件是主体,硬件是提高性能的关键这一原则来进行系统设计。
3. ISE硬件系统设计经验
1. 能用组合逻辑实现的功能坚决不用时序逻辑来实现;
2. 只能用时序逻辑来实现的功能通常可以拆分组合逻辑和简单的时序逻辑来实现,最简单的时序逻辑就是触发器,当然计数器也是经常要用的;
3. 综合前两点,我认为任何一个复杂的系统设计最后都可以归结为一堆复杂的组合逻辑和一些很简单的时序逻辑,只要系统的设计者愿意去花心思,这样系统才会足够稳定,调试也会变得非常简单,系统才能做得更大更复杂,实现更多更强的功能;
4. 组合逻辑设计:之所以要用组合逻辑来实现复杂功能就是因为组合逻辑不会带来时序问题,但这个前提是正确使用了组合逻辑,如果写了这样的组合逻辑语句:
A <= ‘1’ when B = ‘1’ else A;
看似这是组合逻辑,而且可以通过编译,但实际上一看warning就知道生成了latch锁存器,一定带来了时序问题。我们应该有一个基本常识,组合逻辑一定不能存储信号。
5. 时序逻辑设计:前面提到了,我们需要而且可以将复杂的时序逻辑变成复杂的组合逻辑和简单的时序逻辑,就是用触发器和计数器来实现,但是,即使只用了触发器和计数器来实现,依然可能会出问题。我们可以将时序逻辑再划分为同步和异步两种逻辑,我的建议是,可以用同步逻辑实现的地方不要用异步逻辑来实现,显然,异步逻辑更有可能带来竞争与冒险。
6. 时序逻辑设计:即使上面说到的都做好了,还是可能会出现时序问题,因为前面所说的都是一些良好习惯,竞争与冒险需要根据实际的具体情况来解决。这就需要设计者对自己设计的时序足够了解。只要找到了竞争与冒险的根源,就很好解决了,我的习惯通常都是用时钟延时来解决。
7. 一个近似是万能的系统设计方法,在ISE的第一步语法分析完成后就可以看到所有的warning,如果其中提到了生成了latch或者有可能生成latch,则一定会有时序问题,而且这些时序问题很可能有部分是隐藏的,这就是为什么上学期和这学期困扰了大家ISE设计的一个主要原因,大家都觉得出来的结果和设计的预想不一样,而且略做改动结果就变化了很多,甚至是与改动毫无关联的地方,我们可以认为所有的地方都有latch,都有问题,只是latch有时候隐藏自己,所以我们以为某个功能做好了,但是略做无关的改动又错了,这是latch又露面了(我的猜想~)。因此,只要我们可以使得warning中没有latch,甚至没有waring,那么时序问题就会减少很多很多。但也不是完全没有,如果设计者原有的设计中就存在着竞争与冒险,是设计者自己没发现,那就不能怪ISE不稳定了,只能说如果没有latchISE不会误解设计者的意图。如何消除所有的latch,方法是:养成良好的编程习惯,严格遵循标准语法的要求,使用更加简单的时序逻辑。
8.针对第7点做一个补充,latch本身也是一个器件,所以如果大家很清楚latch的时序,并且有一定的使用经验,完全可以忽略第7点,用latch和触发器共同进行时序逻辑的设计,latch不是害群之马,只是需要正确地使用。