首页 软硬件开发技术 高档设备维修及配件仿制 样机制作/SMT加工及功能测试 PCB抄板/改板 PCB设计/Layout IC芯片解密 技术支持
  服务导航
   软硬件 OEM/ODM 开发 
   电子产品设备维修及配件仿制 
   SMT加工生产 
   PCB电路板设计
   PCB电路板改板 
  PCB电路板抄板
   PCB制板/FPC制板
  PCB电路板反向原图制作
   PCB标准BOM单制作
   IC芯片解密 
  软件狗破解
 PCB

· 印刷电路板的设计方法和原则
· 浅谈PCB飞针测试
· PCB行业入门基础知识大全
· 线路板调试方法
· 控制阻抗简介
· PCB和电子产品设计
· 射频电路PCB设计
· 印制电路板设计原则和抗干扰措施


SMT

· SMT基本名词解释
· SMT常用知识
· SMT环境中的最新复杂技术
· SMT生产质量控制的方法和措施
· 论SMT装配工艺检查方法
· 助焊剂常见状况与分析
· 粘片机中芯片丢失的光敏检测方法及其分析
· 通过工艺优化消除PCB沉银层缺陷


 FPC

· 软板基础知识
· 构成FPC柔性印制板的材料
· 柔性电路FPC的功能
· 设计与成本影响下的软板生产
· 双面FPC制造工艺全解(一)
· 双面FPC制造工艺全解(二)
· 双面FPC制造工艺全解(三)
· FPC表面电镀知识

首 页技术支持EDA技术

Verilog代码编写规范

关键字: EDA EDA技术 EDA工艺 EDA软件 EDA设计 PCB线路板 电磁干扰 主板维修 PCB生产 PCB加工 PCB设计 ATE电路板设计 手机PCB板 PCB抄板 PCB改板 电路板抄板 PCB制板 单面板 双层板 样机制作 设计软

 

一. 强调Verilog代码编写风格的必要性。

强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。
每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。
曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在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;

四. 编码格式规范。

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

五.小结:
以上列出的代码编写规范无法覆盖代码编写的方方面面,还有很多细节问题,需要在实际编写过程中加以考虑。并且有些规定也不是绝对的,需要灵活处理。并不是律条,但是在一个项目组内部、一个项目的进程中,应该有一套类似的代码编写规范来作为约束。
总的方向是,努力写整洁、可读性好的代码。


录入时间:2007-09-28  来源:电子开发网

 

相关文章:

· 射频EDA仿真软件介绍
· 蓝牙HCI-UART与并口的FPGA控制接口设计
· 用EDA设计LED汉字滚动显示器
· 中、小尺寸TFT-LCD系统时序控制模块的设计
· 基于CPLD的多波形信号发生器设计
· 基于FPGA自适应数字频率计的设计
· 用CPLD实现单片机与ISA总线并行通信
· 电子系统EDA集成开发环境框架结构
· 基于多种EDA工具的FPGA设计
· FPGA系统的仿真和测试

   粤ICP备08012900号 
   Copyright © PCB-IC.com 2008.all Right Reserved
  关于我们  |  联系我们  | 网站导航  | 友情链接  | 设为首页  | 加入收藏
  地址:广东省深圳市福田区福虹路世界贸易广场B座12F/13F  电话:+86-0755-83000991,83690619; 83676393,83676396