欢迎来到天天文库
浏览记录
ID:11723405
大小:244.00 KB
页数:26页
时间:2018-07-13
《fpga编码规范(verilog版)1.0》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、FPGA编码规范(verilog版)修订记录:修订日期修订者修订内容1.02009-7-9曹艳平安丰军产生此文件1.目的FPGA设计更多的是一种工程,而不是一种个人艺术。由于大型产品的开发通常由很多的人协同作战,如果不统一编程规范,最终合到一起的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。为了加强项目管理,方便设计人员之间的协同工作,帮助后续人员顺利地理解项目,减少错误以及优化代码质量,有必要制定一种比较统一的FPGA设计规范。本文的目的就在于初步尝试在公司内部建立一种FPGA的编码规范,文
2、中的许多细节需要大家在工作中实践并讨论确定。由于公司目前所用到的FPGA器件以Xilinx的产品为主,所用硬件描述语言以Verilog为主,所以本文主要针对Xilinx的产品和Verilog语言编写。在使用其他厂家的FPGA芯片,使用其他的硬件描述语言(如VHDL等),本文也可作为参考。1.指导方针本文从命名规范、注释和文本规范、编码原则、状态机设计规范、目录划分和工具设定五个方面阐述了FPGA编码规范。规范分为规则、建议、经验三类:规则表示强制执行项目,除非出现特别特殊的情况,否则要严格遵守,违反的情况必须出具书面说明并得到主管批准;建议表示推荐,非强制,在
3、大多数的情况下要遵循,在特殊情况下可以突破这一规则;经验表示这是好的经验,是设计人员的项目经历,可作为设计参考。1.命名规范规则3.1:区分大小写所有的信号(signal),变量(variable)以及模块(module)的名字都用小写字母,常量名(参数(parameter)和宏(macro))用大写字母。不要依赖大小写给标识符增加语义。说明:这样做是为了和业界的习惯保持一致,避免了在大小写敏感的工具中可能会遇到的问题(verilog语言是大小写敏感),同时也可以很容易地从代码中辨认出参数(parameter)。示例:不好的好的parameterwidth=1
4、6;parameterWIDTH=16;input[width-1:0]DataIn;input[WIDTH-1:0]data_in;规则3.2:模块命名1.在系统设计阶段应该为顶层文件和每个一级模块进行命名。2.顶层文件命名方法是:芯片名称缩写+_top;3.一级模块命名的方法是:将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。一级模块定义:在顶层文件中例化的模块。4.对于二级以下模块(含二级模块),命名方法是:一级模块名字_+模块功能缩写;示例:FPGA芯片rf_fpgav5的顶层文件命名
5、为rf_fpgav5_top;一级模块ArithmaticLogicalUnit命名为alu;一级模块DataMemoryInterface命名为dmi;一级模块Decoder命名为dec;一级模块CPU里面的二级模块,功能是完成flash的控制功能,命名为:cpu_flash_ctl;规则3.3:信号命名1.信号的命名由几个单词连接而成,用下划线(’_’)来分隔名字中的不同部分;2.尽量使用缩写,缩写要求能基本表明本单词的含义;单词除常用的缩写方法外(如:clock->clk,write->wr,read->rd等),一律取该单词的前3-4个字母(如:fre
6、quency->freq,variable->var等);3.信号名长度不要太长,原则上不超过28个字符;4.不能用”reg”作为最后的后缀名,因为综合工具会给寄存器加上reg,如果命名里就用reg作为后缀,则扰乱了网表的可读性。常用单词的缩写方法见附录1。说明:这样可以增强程序的可读性,并能避免标示符过于冗长。示例:不好的好的wire[9:0]addresscontrolenable;wire[9:0]addr_ctl_enreg[15:0]i,q;reg[15:0]fir_out_datai;reg[15:0]fir_out_dataq;规则3.4:避免关
7、键字在RTL源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog和VHDL语言的关键字。规则3.5:文件名命名文件名要和模块名相同,在一个文件中只用一个模块,在不同的层级上尽量使用统一的信号名;这样容易跟踪信号,网表调试也容易。规则3.6:时钟和复位信号命名对于时钟信号使用前缀clk_*,并使用有含义的缩写构成时钟信号,对于同一个时钟信号,在所有的模块中名字保持一致。对于复位信号使用前缀rst_*,并使用有含义的缩写构成复位信号,对于同一个复位信号,在所有的模块中名字保持一致。示例:clk_lbus_33m,clk_base
8、_92m16,rst_lbus_n;规
此文档下载收益归作者所有