FPGA设计中coding之前的五条铁律.doc
《FPGA设计中coding之前的五条铁律.doc》由会员分享,可在线阅读,更多相关《FPGA设计中coding之前的五条铁律.doc(4页珍藏版)》请在三一文库上搜索。
1、FPGA设计中coding之前的五条铁律(1)注释: 好的代码首先必须要有注释,注释至少包括文件注释,端口注释,功能语句注释。文件注释:文件注释就是一个说明文:这通常在文件的头部注释,用于描述代码为那个工程中,由谁写的,日期是多少,功能描述,有哪些子功能,及版本修改的标示。这样不论是谁,一目了然。即使不写文档,也能知道大概。接口描述:module的接口信号中,接口注释描述模块外部接口,例如AHB接口,和SRAM接口等等。这样读代码的人即可能够判断即模块将AHB接口信号线转换成SRAM接口信号。功能语句注释: 内部关键逻辑,状态机某状态,读过程、写过程。注释的重要性,毋庸置疑,好的注释,能够提高
2、代码的可读性,可维护性等等。总之,养成注释的好习惯,代价不大,但是收益很大。(2)语句:开始写代码是,在FPGA设计中,特别是在可综合的模块实现中,verilog的语句是很固定的。在FPGA的设计中,不外乎时序逻辑和组合逻辑,除此之外,别无他法。对于开始功能编码来说,只需知道组合逻辑信号即可生效,时序逻辑在时钟的下一拍起效就够了。下面是编码的实例。组合逻辑:两种组合逻辑的描述,其功能是一致的。assign A = B ? 1 : D ? 2 :3;always(*)if(B)A = 1else if(D)A = 2;elseA = 3;组合逻辑 如果是异步复位的话,描述如下always(pos
3、edge sys_clk or negedge rst_n)if(!rst_n)a = 0;elsea = b;也就是说,在verilog的可综合电路的编码中,只需要三种语句,分别是assign, always(*) 及时序的always(CLOCK_EDGE clk ) 。 CLOCK_EDGE 可以是上升沿或者下降沿。为什么用always(*) 而不是always(敏感信号列表)。“*”包含所有敏感信号列表,如果在coding过程中,漏掉了某个敏感信号,则会导致仿真不正确,例如本例中,敏感变量列表中,需要B or C 但是如果漏掉一个,仿真就会在B或C有变化时,输出没有变化。导致仿真和功能
4、不一致,但是对于综合工具来说,功能还是能够正常工作的,不会因为敏感变量列表中的值未列全而不综合某条语句。某些情况下,敏感列表的值可能有十几个甚至更多,遗漏是可能发生的事情,但是为了避免这种问题,最好采用always(*)而不用敏感变量列表的方式,来避免仿真结果不一致的情况发生。(3)赋值:老话重提,阻塞与非阻塞很多同志喜欢钻研阻塞赋值和非阻塞赋值,这两种赋值,分别在always块里面用于的阻塞“=”给组合逻辑赋值,非阻塞”=”给时序逻辑赋值。这应该是铁律,应该在编码过程中被严格的遵守下来。“为什么?,不这么用程序也能跑”。这句话部分是正确的,疑问永远是工程师最好的老师。诚然,某些情况下,不严格
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 设计 coding 之前 五条铁律
链接地址:https://www.31doc.com/p-3251991.html