通过这几天的培训,感觉收获挺多,在学校时学习司老师教授的Verilog hdl
数字系统教程课程,希望进一步的学习,便来参加培训,收获颇多。
刚开始的几天,刘老师给我们讲解Verilog
hdl的基本语法,规范代码的格式,深入理解相关语法知识点的含义并且讲解quartusii的基本用法和使用的技巧,以及modelsim的使用方法,通过在quartusii中调用modelsim进行仿真和单独在modelsim中编写程序以及仿真,通过仿真观察相关的现象,掌握了不少仿真的技巧,基本上可以熟练编写相关代码的测试文件,紧接着另一个主讲vhdl语言的老师给我上了两天的vhdl语法课,因为之前学了Verilog
hdl语言,对vhdl语言的接受相对来说会好一点,vhdl语言是在军工以及航天上运用颇广泛,尽管只有两天的时间,通过老师的讲解,初步掌握vhdl语言的基本语法,对整个代码框架有所了解,相比Verilog
hdl来说vhdl语言相对难些语法也相对严谨一些,第一天老师带着编写流水灯的程序,尽管是个小程序,但是依然具备程序的整体框架,初次写还是有点费劲,好在跟着老师的程序理解着走一遍最终在开发板上实现流水灯效果,第二天,老师带着我在开发板上编写一个时钟,实现简单的计时功能,相对于流水灯时钟相对来说就难得多了,加上了数码管显示模块,并且在两个数码管上加上了小数点的功能,并使得小数点的亮灭的频率和数字计时的频率相同。最终实现时钟功能。
这些做完后紧接着开始了真正意义上的第一个小的项目—计算器,刚开始时觉得挺简单的,但是这几天下来,觉得计算机在硬件上实现也是有一定的难度的,这一部分共讲解了5天的时间,在fpga上实现一个简单的计算器功能,即使如此简易的计算器也包含了(1)键盘扫描程序。(2)键盘扫描程序的基础上添加键盘消抖(3)带BCD转换的数码管显示程序。(4)自由亮灭的数码管显示程序(5)计算器模块。最终实现简易计算器。其实第一天的按键扫描程序相对来说还是简单些,通过老师的讲解理解按键扫描的原理,根据开发板上的原理图,列为输出,行为输入分别用四位二进制数表示,通过控制列某一位为低电平,用位拼接实现低电平循环,进而达到列循环,控制某一列为低电平,当某一按键按下时,此时该按键所在的行为低电平,其他行的均为高电平,将列和行位拼接起来,通过判断相应的8位二进制数,判断是哪一位按键按下,编写相应的测试文件进行仿真。最终实现预期目标,第二天是键盘消抖实验,按键消抖实验总共学了两种方法进行消抖,第一种是当检测到下降沿时,先延迟20ms后再判断是否有按键按下,如果仍检测到低电平证明不是抖动产生的毛刺,确实有按键按下来了,然后到再次检测到高电平时,以同样的方法延迟20ms后如果再次检测到有高电平,证明按键松开了这种去抖的方法可以加上两个flag信号,使得按键分为短按和长按,进而控制不同的功能,这是第一种方法。第二种方法是上电后不停地连续检测六个周期内是否有电平高低的变化,如果六个均为高电平证明此时有按键按下,检测到连续六个低电平,证明此时按键松开了,六个电平中出现不同电平,即可视为有抖动出现,自动忽视。第三天是讲解BCD转码实验,BCD转码实验就是讲二进制数,转换成直接在数码管上显示的24位二进制数,用于每个数码管进行数字显示,其实就是算法的问题,左移加三,刚开始会有点难理解,不过只要自己通过在本子上把算法写一遍后就会理解明白,只是算法,不必深究,会使用即可。紧接着就是自由亮灭的数码管显示程序,实现自由亮灭也就是把数字前面不必要的数字0消去使得输入数字和显示的结果都清晰明了,对将要显示的6个数码管上的数字位或,非零则有数字,为零则证明该位为零,从最高位开始检测,只要检测到非零位就显示多少位数的数字,之前的数码管全部熄灭,通过一个7位的变量dip来控制六个数码管小数点的亮灭,以及通过dip的最高位来判断显示的是十进制数还是十六进制数,通过7位变量seg_dat控制每个数码管的亮灭以及显示十进制数还是十六进制数,完成自由亮灭的数码管显示程序。最后是加上计算模块,完事后再将所有的模块进行综合,最后实现简易计算器的设计,计算模块就是将输入的两个数进行加减乘除操作,通过状态机的跳转实现,最后将各个模块综合起来,因为之前写的模块相对比较分散,综合有两层模块,最后有一个顶层文件,输入输出接口的链接,还有调试程序的运行,最终实现简易的计算器,初步实现最初设定的目标。不过还有不是特别完美的地方,还需要改进。
设计过程中出错太多,有的是因为粗心,有的则是逻辑出现错误,老师讲的未有及时消化,对整个程序框架还不是太熟悉掌握,还得需要勤加练习,不断提高自己能力。还有就是得改掉粗心的毛病,代码风格太过豪放,还不是太规范,发现问题,逐个解决,不断改进,才能取得好的收获。感谢学习过程中帮助我的老师和同学,在他们的帮助下我才完成任务。只有不断地努力,才会有收获!
至芯科技西安分公司:
微信号:zhi2793725733;
联系电话:18149059503(支老师)QQ:2793725733;
通讯地址:西安市高新区唐延南路11号逸翠园i都会1栋1门403;
加载中,请稍候......