- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
verilog编写规范_.ppt
本规范的目的是提高书写代码的可读性,可修改性,可重用性优化代码综合和仿真的结。果指导设计工程师使用VerilogHDL规范代码和优化电路。 逻辑功能正确 可快速仿真 综合结果最优 可读性较好 范围涉及Verilog HDL编码风格,编码中应注意的问题,Testbench的编码等。 1、选择有意义的信号和变量名 用有意义而有效的名字有效的命名有时并不是要求将功能描述出来如 For ( I = 0; I 1024; I = I + 1 ) Mem[I] = #1 32’b0; For 语句中的循环指针I 就没必要用loop_index作为指针名 2、用连贯的缩写 长的名字对书写和记忆会带来不便甚至带来错误采用缩写时应注意同一信号在模块中的一致性缩写的例子如下 Addr address Pntr pointer Clk clock Rst reset 3、用最右边的字符下划线表示低电平有效高电平有效的信号不得以下划线表示短暂的引擎信号建议采用高有效 如 Rst_ Trdy_, Irdy_ Idsel. 4、大小写原则 名字一般首字符大写其余小写但parameter, integer 定义的数值名可全部用大写 两个词之间要用下划线连接 如 Packet_addr, Data_in, Mem_wr Mem_ce_ 5、全局信号名字中应包含信号来源的一些信息 如D_addr[7:2] 这里的D 指明了地址是解码模块(Decoder module)中的地址 6、 同一信号在不同层次应保持一致性 7、 自己定义的常数类型等用大写标识 如parameter CYCLE=100 8、 避免使用保留字 如in out x z等不能够做为变量端口或模块名 Modules 顶层模块应只是内部模块间的互连 尽量避免再做逻辑,如不能再出现对reg变量赋值等 这样做的目的是为了更有效的综合 /* ==============================*\ Filename ﹕ xxxxx.v Author ﹕ Description ﹕ Called by ﹕Top module Revision History ﹕ Revision 1.0 Email ﹕ Company ﹕ Copyright(c) reserved \*================================== */ . 不要对Inpu t进行驱动, 在module 内不要存在没有驱动的信号,更不能在模块端口中出现没有驱动的输出信号,避免在仿真或综合时产生warning 干扰错误定位。 . 每行应限制在80个字符以内以保持代码的清晰美观和层次感,一条语句占用一行如果较长超出80个字符则要换行。 . 电路中调用的 module 名用Uxx 标示,向量大小表示要清晰,采用基于名字 的调用而非基于顺序 用一个时钟的上沿或下沿采样。 信号不能一会儿用上沿一会儿用下沿。如果既要用上沿又要用下沿,则应分成两个模块设计。 建议在顶层模块中对Clock做一非门,在层次模块中如果要用时钟下沿就可以用非门产生的Posedge Clk_ 这样的好处是在整个设计中采用同一种时钟沿触发有利于综合。 或将时钟倍频 在模块中增加注释 对信号参量、引脚、模块、函数及进程等加以说明便于阅读与维护 Module 名要用大写标示且应与文件名保持一致 如Module DFF_ASYNC_RST( Reset, Clk, Data, Qout ); 模块输出寄存器化 对所有模块的输出加以寄存如图1 使得输出的驱动强度和输入的延迟可以预 测从而使得模块的综合过程更简单 将关键路径逻辑和非关键路径逻辑放在不同模块 保证可以对关键路径模块实现速度优化,而对非关键路径模块实施面积优化。在同一模块无法实现不同的综合策略 将相关的组合逻辑放在同一模块 Net and Register . 一个reg变量只能在一个always语句中赋值 . 向量有效位顺序的定义一般是从大数到小数 . 对net和register类型的输出要做声明 如果一个信号名没做声明Verilog将假定它为一位宽的wire变量 尽管操作符本身有优先顺序但用括号来表示优先级对读者更清晰 If ((alpha beta) (gamma = delta)).... 比下面的表达更合意 If (alpha beta gamma = delta)... 组合逻辑和时序逻辑分开用不同的进程 组合逻辑包括状态译码和输出 时序逻辑则是状态寄存器的切换 必须包括对所有状态都处理不能出现无法处理的状态使状态机失控(进入死循环 Mealy机的状态和输入有关,而Moore机的状态转换和输入无关 在for-loop中
文档评论(0)