首页 Verilog代码编写风格

Verilog代码编写风格

举报
开通vip

Verilog代码编写风格 Verilog代码编写风格 一. 强调 Verilog代码编写风格的必要性。 强调 Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写 风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和 接受起来就困难一些。 曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在 1万行数量级。代码的 整洁程度,很大程度上影响着代码的维护难度。 遵循代码编写规范书写的代码,...

Verilog代码编写风格
Verilog代码编写风格 一. 强调 Verilog代码编写风格的必要性。 强调 Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写 风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和 接受起来就困难一些。 曾有编程大师 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 说,一个优秀的程序员,能维护的代码长度大约在 1万行数量级。代码的 整洁程度,很大程度上影响着代码的维护难度。 遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相 反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难, 也会给合作者带来很大麻烦。 (实际上英文 Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言 描述,才能将电路描述得更准确,综合以后产生的电路更合理。本文更偏重的是,编写 Verilog 代码时的书写习惯。) 二. 强调编写规范的宗旨。 缩小篇幅 提高整洁度 便于跟踪、分析、调试 增强可读性,帮助阅读者理解 便于整理文档 便于交流合作 三. 变量及信号命名规范。 1. 系统级信号的命名。 系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号 以字符串 Sys开头。 2. 低电平有效的信号后一律加下划线和字母 n。如:SysRst_n;FifoFull_n; 3. 经过锁存器锁存后的信号,后加下划线和字母 r,与锁存前的信号区别。如 CpuRamRd 信号,经锁存后应命名为 CpuRamRd_r。 低电平有效的信号经过锁存器锁存后,其命名应在_n 后加 r。如 CpuRamRd_n 信号,经锁 存后应命名为 CpuRamRd_nr 多级锁存的信号,可多加 r 以标明。如 CpuRamRd 信号,经两级触发器锁存后,应命名为 CpuRamRd_rr。 4. 模块的命名。 在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字 母组合起来,形成 3到 5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前 3 个字母。各模块的命名以 3个字母为宜。例如: Arithmatic Logical Unit模块,命名为 ALU。 Data Memory Interface模块,命名为 DMI。 Decoder模块,命名为 DEC。 5. 模块之间的接口信号的命名。 所有变量命名分为两个部分,第一部分表明数据方向,其中数据发出方在前,数据接收方在 后,第二部分为数据名称。 两部分之间用下划线隔离开。 第一部分全部大写,第二部分所有具有明确意义的英文名全部拼写或缩写的第一个字母大 写,其余部分小写。 举例:CPUMMU_WrReq,下划线左边是第一部分,代表数据方向是从 CPU 模块发向存储 器管理单元模块(MMU)。下划线右边 Wr 为 Write 的缩写,Req 是 Request 的缩写。两个 缩写的第一个字母都大写,便于理解。整个变量连起来的意思就是 CPU发送给 MMU的写 请求信号。 模块上下层次间信号的命名也遵循本规定。 若某个信号从一个模块传递到多个模块,其命名应视信号的主要路径而定。 6. 模块内部信号: 模块内部的信号由几个单词连接而成,缩写要求能基本表明本单词的含义; 单词除常用的缩写方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取该单词的前几 个字母( 如:Frequency->Freq, Variable->Var 等); 每个缩写单词的第一个字母大写; 若遇两个大写字母相邻,中间添加一个下划线(如 DivN_Cntr); 举例:SdramWrEn_n;FlashAddrLatchEn; 四. 编码 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 规范。 1. 分节书写,各节之间加 1 到多行空格。如每个 always,initial 语句都是一节。每节基本上 完成一个特定的功能,即用于描述某几个信号的产生。在每节之前有几行注释对该节代码加 以描述,至少列出本节中描述的信号的含义。 2. 行首不要使用空格来对齐,而是用 Tab键,Tab键的宽度设为 4个字符宽度。行尾不要有 多余的空格。 3. 注释。 使用//进行的注释行以分号结束; 使用/* */进行的注释,/*和*/各占用一行,并且顶头; 例: // Edge detector used to synchronize the input signal; 4. 空格的使用: 不同变量,以及变量与符号、变量与括号之间都应当保留一个空格。 Verilog关键字与其它任何字符串之间都应当保留一个空格。如: Always @ (……) 使用大括号和小括号时,前括号的后边和后括号的前边应当留有一个空格。 逻辑运算符、算术运算符、比较运算符等运算符的两侧各留一个空格,与变量分隔开来;单 操作数运算符例外,直接位于操作数前,不使用空格。 使用//进行的注释,在//后应当有一个空格;注释行的末尾不要有多余的空格。 例: assign SramAddrBus = { AddrBus[31:24], AddrBus[7:0] }; assign DivCntr[3:0] = DivCntr[3:0] + 4’b0001; assign Result = ~Operand; 5. 同一个层次的所有语句左端对齐;Initial、always 等语句块的 begin 关键词跟在本行的末 尾,相应的 end关键词与 Initial、always对齐;这样做的好处是避免因 begin独占一行而造 成行数太多; 例: always @ ( posedge SysClk or negedge SysRst begin if( !SysRst DataOut <= 4'b0000; else if( LdEn begin DataOut <= DataIn; End else DataOut <= DataOut + 4'b0001; end 6. 不同层次之间的语句使用 Tab键进行缩进,每加深一层缩进一个 Tab; 8. 在 endmodule,endtask,endcase 等标记一个代码块结束的关键词后面要加上一行注释说 明这个代码块的名称; 9. 在 task名称前加 tsk以示标记。在 function的名称前加 func以示标记。例如: task tskResetSystem; …… endtask //of tskResetSystem 五.小结: 以上列出的代码编写规范无法覆盖代码编写的方方面面,还有很多细节问题,需要在实际编 写过程中加以考虑。并且有些规定也不是绝对的,需要灵活处理。并不是律条,但是在一个 项目组内部、一个项目的进程中,应该有一套类似的代码编写规范来作为约束。 总的方向是,努力写整洁、可读性好的代码。
本文档为【Verilog代码编写风格】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_610579
暂无简介~
格式:pdf
大小:80KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-01-08
浏览量:17