欢迎来到天天文库
浏览记录
ID:13377084
大小:213.00 KB
页数:35页
时间:2018-07-22
《高通的绝密verilog_编码规范(中文版)verilog coding style》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Verilog编码规范软IP重用标准(草案2011-1-10)(仅供高通内部使用)1.宗旨本规范为公司内部强制实施的VerilogHDL编码规范。每个IP设计人员必须严格遵守,以避免不必要的重复劳动,从而提高设计效率。本规范适用于下列三种Verilog代码文件的编写:1)可综合逻辑部件;2)虚拟部件(VirtualComponent--VC);3)测试模块(testbenches)。规范还对模块文件的命名习惯、代码文件的储存、代码文件的编写风格做了强制性的规定。公司内的每个设计人员必须严格遵照本规范
2、来编写代码,以提高代码的可读性。这不仅能提高IP设计人员的工作效率,也能及时帮助系统或者软件设计人员在调试复杂系统时发现和分析IP代码或者自己编写的代码所存在的问题。遵照本规范编写的代码,不但容易理解,也容易修改,而且设计者之间可以互相利用各自拥有的IP设计资源,有的可以直接利用,有的只需要对现成模块的部分参数或接口稍做修改就可以使用,以便于实现IP重用的目标。严格按照本规范编写的代码,可以显著地提高公司整体的设计效率。这种可读性更强的代码,不但能帮助我们达到IP重用的目标,节省人力资源,提高工作质
3、量,而且还能确保编写的代码能被绝大多数仿真和综合工具所接受,大大减少代码在不同设计、综合和仿真平台之间移植的工作量。在IP设计的阶段验收过程中,一旦发现任何不符合本规范的代码,每个负责IP验收的人员有义务向设计者指出不符合规范的地方,令其及时做出修正,然后再进入下一个验收程序。否则即使代码已经通过测试,也没有任何发现问题,验收人员仍有权因为设计者的代码注释不完整或不符合规范拒绝验收,并作出设计工作尚未完成的评价和结论,命令其返工。本规范的目的是:1)保证VerilogRTL模块经综合所产生的门级结构
4、与Verilog仿真器所理解寄存器传输级的HDL代码的行为是一致的;2)利用参数传递可修改代码中的常数,使可综合模块、虚拟部件或者测试模块的输入/输出信号位宽扩展变得非常容易;3)使模块分割(PARTITIONING)尽量优化,使每个模块都具有可重用的构造,便于以后的扩展。本规范在模块化一节着重阐述了在综合开发环境中难以表达清楚的典型结构,以及如何确保前仿真和后仿真行为一致的代码风格。本规范将可综合代码和行为级代码的编写要点分成两部分,分别予以阐述,而对两者均合适的部分放在规范的后面予以阐述。因而本
5、规范也适用于测试模块、VC模块和监视模块代码的编写。本规范的宗旨是:便于软IP模块、虚拟器件和测试模块的扩展和重复使用,方便非原作者对代码进行维护,为各种SOC的快速建模和仿真创造条件;降低系统芯片的设计风险,从而降低设计成本。需要注意的是:原则上本规范是普遍适用的,但在很多场合可能会出现个别意外的情况,例如某工具的局限性,这可能会给本规范中个别条款的实施造成一定的困难。352.编写可综合的RTL级Verilog模块代码时必须遵守的要点:2.1不允许在代码中出现的语句要点:l任何变量不能赋初始值X,
6、对任何寄存器所赋的初始值必须是确定的。l代码语句中不能加时间延迟,不允许出现如下语句:#4out=cin;l不允许使用门控时钟和门控复位。l不允许使用锁存器。(商用综合器可帮助执行这项规范,如使用了锁存器,综合结果会出现Latchinferred)。l不允许在可综合的设计代码中使用`Define来定义参数,应该使用参数Parameter来定义。`Define只用于编写不可综合的仿真测试模块。l不允许在可综合代码中使用initial、wait、fork-join、while。l不允许使用UDP(用户定
7、义的原语元件)l不允许在可综合代码中出现逻辑反馈环路,否则会生成不可预知的逻辑电路。l不允许在可综合模块中使用casex,casez语句,只允许使用case和if-else语句作条件分支语句。l在时序逻辑的设计中不允许用阻塞赋值=,只允许用非阻塞赋值<=。l在组合逻辑的设计中而不允许使用非阻塞赋值<=,只允许用阻塞赋值=。l只允许用Verilog2001中的always(*)来生成组合逻辑,其他Verilog2001语法在可综合模块中目前都不建议采用。2.2建议尽量采用的要点l用高电平有效的硬件异步
8、复位reset。l用高电平有效的同步软件复位reset。l尽可能使用高电平有效信号,不使用低电平有效信号(除某些总线、器件有特殊要求外)。只有复位信号reset在特定情况下可以设置为低电平有效信号。l尽可能使用assign语句设计组合逻辑。l模块之间数据交换总线应该尽量用多路器实现。尽量不使用三态总线。三态总线只用于对外接口或者顶层内部总线。l模块中的每个输出信号原则上必须通过寄存器输出。任何不通过寄存器输出的信号必须加以注释,注意防止出现反馈回路。l尽量合并源代码,
此文档下载收益归作者所有