8

fpga实操训练(小功能到模块开发)

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/128379764
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

fpga实操训练(小功能到模块开发)

嵌入式-老费 已于 2022-12-20 10:52:46 修改 128

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        有过c、java编程语言经验的朋友,是否还记得曾经自己是如何学习编程语言的?一开始的时候,为了学习语法,我们练习的代码可能都比较少。主要是一些简单的逻辑判断、循环和小算法之类的内容。等到这一切都ok之后,就开始慢慢编写一些复杂的功能了。这个时候,如果再将所有的代码集中在同一个源文件当中,就会显得非常臃肿了。我至今还记得,当初硕士论文中设计的代码,就是全部放在一个文件中的,前前后后大约有5000行左右。

        回到今天的主题,其实编写verilog也是一样的。一方面,曾经的小功能可以变成独立的模块,方便我们将来调用;另外一方面,对于相似的逻辑内容,也可以抽象成单独的一个模块来处理;最后,也是很重要的一点,我们要学会利用别人开发好的模块,这样可以快速拓展自己的能力边界,这点有点类似于使用第三方SDK。只是,纯软件模块和verilog不一样的地方,就是每一次模块实例化都是实实在在的电路,这和函数调用几乎不花成本是完全不一样的。

        为了说明如何做一个基于模块开发的项目,我们可以写一个简单的计时工具。即,上电后,数码管开始计时,每1s计时一次,一共可以累计到99999秒,再重新恢复为0。

1、准备进位代码



newCodeMoreWhite.png

        所谓进位代码,就是看有没有进位传上来,有没有进位送出去,当前应该显示的数据是什么。有了这么一个进位,其实就构成了基本的6位数显示方法。

6edc801ac43c41d6bc52db0b158f17bc.png

2、数码管的显示

        前面的章节,我们说过。一个6节的数码管,会有6个sel信号,8个数据信号。但是,6个数码管每一个都有自己的数字,这应该如何处理?想来想去,唯一可行的办法就是通过快速刷新,利用人的视觉残留效应,误以为数码管的显示是连贯的。



newCodeMoreWhite.png

3、数码管的解码

        相比较而言,数码管的解码就很简单的。主要是根据需要显示的数字,点亮数码管上面不同部分的led灯。



newCodeMoreWhite.png

4、模块的整合

        有了上面3个模块的编写,下面就可以开始他们的整合了,一起构建一个完整的功能模块。整个过程并不复杂,大家看一下代码就了解相关的流程了。

        模块中的调用顺序是这样的,

742a996fda11431cb0e25fb6c8db28e1.png

        代码的组成是这样的,



newCodeMoreWhite.png

5、RTL显示

        综合完毕后,如果大家有兴趣需要看下RTL综合后的效果,可以选择“RTL Viewer”,

00ab5cad294140a191c10f0141c8cc01.png

        如图所示,上图中绿色的部分就是子模块。如果需要了解里面的细节,点击模块左上方的田字格即可,类似于这样,

3db66837e3e84b0c996fb2fc0d8ca35e.png

6、pin脚bind

527bd9382f2b4d00b705865f8defc692.jpeg

7、所有这些都完成值之后,就可以开始实验了

cda45b3429e042d08417c62c204b4812.png

        很多时候,模块的拆解整合是需要反复进行的,并不意味着马上就可以做对。来来去去、反反复复都是常有的事情。不过还是要相信自己,每一次的思考、每一次的修正都会让自己有所改进的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK