首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Verilog代码标准(3)

Verilog代码标准(3)

4. 一致的信号命名风格
简洁,清晰,有效是基本的信号命名规则,详见命名规范。


全称

缩写

中文含义

acknowledge

ack

应答

adress

addr(ad)

地址

arbiter

arb

仲裁

check

chk

校验,如CRC校验

clock

clk

时钟

config

cfg

Configuration,装置

control

ctrl

控制

count

cnt

计数

data in

din(di)

数据输入

data out

dout(do)

数据输出

decode

de

译码

decrease

dec

减一

delay

dly


disable

dis

不使能

error

err

错误(指示)

enable

en

使能

frame

frm

generate

gen

生成,如CRC生成

grant

gnt

申请通过

increase

inc

加一

input

in(i)


length

len

(帧、包)长

nmport

nm

网管相关

output

out(o)


packet不推荐packet

pkt

与帧相同

priority

pri

优先级

pointer

ptr

指针

rd enable

ren

读使能

read

rd

读(操作)

ready

rdy

应答信号或准备好

receive

rx

(帧数据)接收

request

req

(服务、仲裁)请求

reset

rst


segment

seg


souce

scr

源(端口)

ststistics

stat

统计

timer

tmr

定时器

switcher

sf

Switch fabric

temporary

tmp

临时

transmit

tx

发送(帧数据)相关

Valid

vld(v)

有效、校验正确

wr enable

wen

写使能

write

wr

写操作

a.       端口、信号、变量名的所有字母小写:函数名、宏定义、参数定义用大写
b.       使用简称、缩略词(加上列表)
c.       基于含义命名(避免以数字命名的简单做法),含义可分段(最多分三段),每一小段之间加下划线”_”,如tx_data_val;命名长度一般限制在20个字符以内。
d.       低电平有效信号,加后缀”_n”,如 rst_n
e.       无条件寄存的寄存信号在原信号上加ff1、ff2… 如原信号 data_in, 寄存一拍data_in_ff1,寄存两拍data_in_ff2
f.       不能用 ”reg”,作为最后的后缀名,因为综合工具会给寄存器自动加上_reg, 如果命名里就用_reg作为后缀名则扰乱了网表的可读性。

5.统一的表达式书写
A. 括号的使用
如果一个表达式的分组情况不是很明显时,加上括号有助于理解。
例如下面的代码加上括号就清晰很多。
    if (&a==1’b1&&!flag==1’b1 || b==1’b1)               //
改为:
    if ((&a==1’b1)&&(!flag==1’b1)||( b==1’b1))     //
B.适当的使用空格
一般表达式在运算符的两侧要各留出一个空格,但定义比较长的表达式,去掉预先级高的运算符前的空格,使其与运算对象紧连在一起,可以更清晰的显示表达式结构。

还是上面的例子:
if ((&a==1’b1)&&(!flag==1’b1)||( b==1’b1))     //
改为:
if ((&a == 1’b1)&&(!flag == 1’b1)||( b == 1’b1))     //
”<=”, ”==”前后都要加空格。

C.           赋值要指明比特宽度   
赋值或者条件判断时要注明比特宽度,注意表达式的位宽匹配。如:
        reg [4:0] signal_a;
错误:   1 signal_a <= 5;
2        if(signal_a == 5)
3        signal_a <= signal_b[3:0]+4;
正确:   1 signal_a <= 5d5
2        if(signal_a == 5d5)
3        signal_a <= {1’b0,signal_b[3:0]+5d4
因为工具默认是32位宽,如果不注明位宽,工具检查会报warning,而且这样增加了设计的严谨性。

6.统一的语句书写――条件判断结构书写方式
A. 条件的完整性
   Ifelse搭配使用,对于缺省的条件要写”else;”;
   Ifelsed 条件判别式要全面,比如if(a == 1’b0);
   Case中的缺省条件要写”default”;
B.”if  else”结构:适用于复杂条件判断的语句
    但对于复杂的条件判断,使用?:如果不仔细分析条件的每一条路径,就让读代码搞不清它是到底要做什么。例如:
  C =(!Ic&&!rc)?0(Ic?rc:Ic)  //                          (?
    改为:
always @(Ic or rc)       //                          if else
begin
   if((Ic==0)&&(rc==0))
      c = 0;
   else if(Ic==1)
      c = rc;
   else
      c = Ic;
end
即使是简单的条件判断,我们也必须使用IF-ELSE,当涉及复杂的条件判断,使用IF-ELSE结构以获得清晰的结构便于理解和维护。因此必须使用IF-ELSE。
C.”IFELSE”结构VS”CASE”结构
IF ELSE结构综合的结构可能是与或非门构成的,也可能是一组多路选择器,而case结构综合结果一般会是多路选择器,但对于可以优化的case综合工具会综合出更简单的结构。
所有对于可以写出平行结构的条件,优先写成case结构,例如地址译码等,条件之间有重复和嵌套的情况则是写成if else结构。
继承事业,薪火相传
返回列表