FPGA-Verilog代码编写及项目设计总结

FPGA-Verilog代码编写及项目设计总结,作为小白给自己一个反省的机会

项目设计的易错点

编写代码的易错点

因项目需要特地在网上找的开发经验、思想方法等很难得。在网上查到的觉得对于软件思维转硬件思维的易错点进行了非常详细的概括。收藏,转发
项目设计的易错点
1、永远要对你的设计的每一个细节了如指掌。

2、做好版本管理,对你的每一个修改都要有记录,本版本的主要的特点、更改的地方等。

3、认真、仔细、小心的完成你的每一个步骤,只有这样才能减少那些低级错误的发生,很多时候这些低级错误会让你浪费大量的时间。

4、要时刻清楚你的代码的时序,不要用“试"的方法来完成你的设计,华为有句话:时序是设计出来的,不是试出来的。

5、当修改你的代码时,要严格检查是否所有根这块有关的地方你都已经改过了。

6、当玩成一个大点的模块时,要一点一点来,要保证最基本的是模块式正确的之后在进行其他的功能的扩充,不可急功近利,要戒骄戒躁。

7、要将自己的精力都放在你的代码上,只有这样你才能提高你写代码的效率
编写代码的易错点
1.wire与reg之外的数据类型不要在verilog代码中出现。
2. assign(组合逻辑)与always之外的语句不要在verilog代码中出现。
3. 一个module最好一个always,再加若干assign,这样便于控制。
4. verilog中无函数调用及函数传递,都转化成input、output接口。
5. 不建议使用for循环,因为看不到其电路是什么样子。 For可以用状态机控制,状态机可以打圈,定义一个计数器,做为循环的索引。 动态次数的循环,用一个寄存器记录处理的次数,再加一个状态信号判结束。
6. 写代码时防止生成锁存器,那对硬件并不是个好东西。
7. 在项目需求中,如果有时序、资源、速度等方面的要求,就要仔细设计;否则,就省事一点,只需累加逻辑,做出功能则可。
8. 用test bench等工具针对大的工程进行仿真,quarters用来做小的,比如计数器。
9. 站在一定的高度看:FPGA内部的问题都是小问题,而接口往往较难,比如异步时钟问题,可能与内部不一致。
10. 在写代码的时候就不要写不可综合的语句,这样前仿出来之后,后仿就并不是很费事,只是有资源的约束而已。 写代码之前,先找个规范看看,比如华为的,然后规规矩矩的写,后仿真就会快的多。
11. 不同模块的调用以时序来控制,且确保一个模块是以整体的形式进行工作(即并行)。换言之,用状态信号控制不同模块的启用,配合状态机加以控制。
12. 一定要采用同步处理,即在同一时钟下,所有数据要受信号控制。
13. 如何控制时延? 用时钟控制时延,且延迟必须以时钟为单位进行控制,因为硬件系统是基于节拍为单位的,所以在代码中不允许出现具体多少ns的形式。
14. 软件代码向硬件转化的若干指导原则: (1).首先要简化数据结构,比如将链表简化成数组,即用顺序存储的形式来组织数据结构。这个并不难,但却大大方便了硬件的实现与操作。 (2).逻辑电路的特点是呈现阶段性、松耦合性,在设计时用自顶向下的方式,分析整体功能、再逐步抽象成小的模块。 (3).在设计时一定要考虑时序的要求,规划并画出时序逻辑电路,确定第1个时钟做什么、第2个时钟做什么,到最后哪个时钟出结果。 (4).整体、阶段性以及子模块内部等大都用状态机来控制,很多情况下难以解决的问题,一用状态机之后就迎刃而解了。 (5).注意C语言写出的代码只是验证及保证功能及逻辑的正确性,在转化时,写的是硬件不是软件。
15. 不建议把C函数与verilog模块直接对应,一定要考虑时序、数据的依赖关系。越偏向软件写,效率越低;越偏向硬件写,效率越高。
16. 将串行代码改成并行代码的一个方法:考查数据依赖。软件是串行的思想,比如在一个函数中若有两个变量,有操纵的先后之分,如果这两个变量没有先后的依赖,则最好将这个块拆成两个块进行并行。
17. RAM分内外,内部是指FPGA内,外部的是在板子上连接的器件。如果用外部的RAM,在做板子之前可以用数组的方式模拟外部RAM。
18. 处理输入的几种方式: 需要什么,送入什么,用时序和信号进行控制; 一个时钟送入一个,送入的先寄存下来; 也可以将总线放宽,一次传入更多的数据。
19. 寄存器太多了怎么办: 首先,不要超过资源的限制;其次,可以考虑并设计成共享方式使用。
20. 建议路由存放在ram中,不要转化成硬件逻辑。
21. FPGA设计的几个主要思路(可能不完全,未加以考证): 并行流水线,缓冲,FIFO,乒乓(读A写B,读B写A,用这两组存储器)。
22. 调专用的IP core往往比直接写效率高,比如乘法器。
23. 如何考查资源是否可用:先虚构一个,将评估的数据都加进去,然后用ISE(比如quatuers)检测是否够用。 
24. 得有一个人做整体规划,制定方案,需开好几次会才能确定下来。提前要尽可能的设计框架、画框图、以及相关的细节。在实现时,负责模块的,要经常输出文档,并注重团队合作,接口很重要。
25. 在纸上先画时序,至少画大的时序,再写代码,不要代码写成什么时序就是什么。找找画时序图的样例(不嫌费事也可以用viso画)。对数据流、控制流的设计最重要

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值