综述
看了一段时间小梅哥的视频,在程序验证方面主要学习了testbench的测试方法;在设计方面,学习了计数器和状态机的编写,感觉有了这两个东西…没有什么是设计不出来的了,于是自己动手做一个小项目:用矩阵键盘+7段数码显示管做简易的十进制+,-,*,/计算器,一方面检验下自己的小模块编写能力,另一方面体验下小小小小…项目的开发过程。
不说废话了,下面开始对这个项目做总体的设计,先上一个系统的框图:
矩阵键盘是输入设备,7段显示管是输出设备,ctrl控制器负责将keys的输入解释为计算器可理解的意义并驱动seg7显示。
各模块的接口信号(clk,rst_n都有故直接略去)。
Keys:key[3:0]表明哪个按键被按下;vld为是能时钟信号,有效时ctrl可获取key的值,否则key的值无效。
Seg7:Seg7的接口,data[31:0]以8421BCD码的方式指明要显示的数据;show_bit[3:0]说明显示最后的几位,比如show_bit=0,则不显示show_bit=1显示最后一位,show_bit=2,显示最后两位。这个信号很有必要,否则当你输入2的时候是希望看见2还是希望看见00000002?
这个系统可能的难点是要做乘除法。方法,当然是知己baidu,貌似乘除法都是直接对2进制作的,没有对8421码做的?(我没查到),但seg7显示却需要8421码,所以内部数据可用2进制表示,但显示的时候需要将2进制转换为8421码,这个非常简单,一个clk都可以搞定。。。所以似乎。。。没有什么难点???
接下来考虑如何设计
虽然看上去这玩样很容易,但是还是要充分考虑到自己的实力很弱。把这些东西一下全部鼓捣进来。。。估计debug会搞死我这样缺乏经验的人。所以我要分步骤让这个系统逐渐从一棵小树苗成长为参天大树。
首先,我个人认为任何系统必先做输出部分~~~这样可以看到东西了,所以,第一步是先搞定seg7模块,testbench后直接上板验证。这个太容易了,没有任何挑战,用来给自己增加信心很不错。
接着,搞定keys模块,这个可以搞个非常简易版本的ctrl,能让keys和seg7相连就OK。Testbench和上板也都可以基于这种模型。这个比前面难了一点,要状态机+计数器。
然后,搞ctrl模块,如果时间富裕,可以自己设计乘除法,不行的话,直接上网copy.为了保险,应该让keys和ctrl相连,用signaltap看ctrl是否正常。以这个作为这步的模型来testbench和上板。
最后,全部连上,应该不会出任何问题了。
本篇综述完成!!!
更多回帖