HHIC verification coding stylev013.docx

上传人:b****3 文档编号:6237514 上传时间:2023-05-09 格式:DOCX 页数:22 大小:32.97KB
下载 相关 举报
HHIC verification coding stylev013.docx_第1页
第1页 / 共22页
HHIC verification coding stylev013.docx_第2页
第2页 / 共22页
HHIC verification coding stylev013.docx_第3页
第3页 / 共22页
HHIC verification coding stylev013.docx_第4页
第4页 / 共22页
HHIC verification coding stylev013.docx_第5页
第5页 / 共22页
HHIC verification coding stylev013.docx_第6页
第6页 / 共22页
HHIC verification coding stylev013.docx_第7页
第7页 / 共22页
HHIC verification coding stylev013.docx_第8页
第8页 / 共22页
HHIC verification coding stylev013.docx_第9页
第9页 / 共22页
HHIC verification coding stylev013.docx_第10页
第10页 / 共22页
HHIC verification coding stylev013.docx_第11页
第11页 / 共22页
HHIC verification coding stylev013.docx_第12页
第12页 / 共22页
HHIC verification coding stylev013.docx_第13页
第13页 / 共22页
HHIC verification coding stylev013.docx_第14页
第14页 / 共22页
HHIC verification coding stylev013.docx_第15页
第15页 / 共22页
HHIC verification coding stylev013.docx_第16页
第16页 / 共22页
HHIC verification coding stylev013.docx_第17页
第17页 / 共22页
HHIC verification coding stylev013.docx_第18页
第18页 / 共22页
HHIC verification coding stylev013.docx_第19页
第19页 / 共22页
HHIC verification coding stylev013.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

HHIC verification coding stylev013.docx

《HHIC verification coding stylev013.docx》由会员分享,可在线阅读,更多相关《HHIC verification coding stylev013.docx(22页珍藏版)》请在冰点文库上搜索。

HHIC verification coding stylev013.docx

HHICverificationcodingstylev013

 

 

HHICVERIFICATIONCONDINGSTYLE

 

Version:

0.1

 

RevisionHistory

Version

EditingNote

Owner/Date

Confirm/Date

Approved/Date

ImplementDate

V0.1

初稿

赵治心

10-07-20

Contents

1.Typeset6

1.1【规则】代码块要采用缩进风格编写,缩进的空格数为4个。

6

1.2【建议】相对独立的代码块之间必须加空行。

6

1.3【规则】较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

6

1.4【建议】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

7

1.5【建议】若函数或过程中的参数较长,则要进行适当的划分。

7

1.6【规则】不允许把多个短语句写在一行中,即一行只写一条语句。

7

1.7【规则】if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加beginend。

8

1.8【规则】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。

8

1.9【规则】程序块的分界符(beginend)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、任务体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

8

1.10【规则】在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。

9

1.11【规则】变量的定义一行定义一个,不建议一行定义多个变量(成员)。

10

1.12【建议】函数体或者任务体定义时,一个参数对应一行,如果只有一个参数则与()同一行即可。

10

1.13【建议】class的task或者function,在class实体内做声明,定义则在class实体外。

11

2.Remark12

2.1【规则】一般情况下,源程序有效注释量必须在20%以上。

12

2.2【规则】每个文件必须有头文件。

12

2.3【建议】任务(函数)头部应进行注释,描述任务(函数)的主要功能。

13

2.4【规则】注释的内容要清楚、明了,含义准确,防止注释二义性。

13

2.5【规则】注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面。

13

2.6【规则】对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。

变量、常量、宏的注释应放在其上方相邻位置或右方。

13

2.7【规则】类声明(包括数组、结构、枚举等),如果其命名不是充分自注释的,必须加以注释。

对类的注释应放在其上方相邻位置,不可放在下面;对类中的每个成员的注释放在此类的右方。

13

2.8【规则】注释与所描述内容进行同样的缩排。

14

2.9【建议】将注释与其上面的代码用空行隔开。

15

2.10【规则】对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

15

2.11【规则】对于switch语句下的case语句,必须用begin…end包含该case语句的处理代码。

15

2.12【规则】避免在一行代码或表达式的中间插入注释。

16

2.13【建议】通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

16

2.14【建议】在代码的功能、意图层次上进行注释,提供有用、额外的信息。

16

2.15【建议】注释格式尽量统一,建议使用“//”。

16

3.Identifier16

3.1【规则】标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。

16

3.2【规则】命名中若使用特殊约定或缩写,则要有注释说明。

17

3.3【规则】对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。

17

3.4【规则】命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式。

17

3.5【规则】除非必要,不要用数字或较奇怪的字符来定义标识符。

17

3.6【规则】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

18

3.7【规则】除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。

18

4.Readability18

4.1【规则】注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。

18

4.2【建议】避免使用不易理解的数字,用有意义的标识来替代。

涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。

19

4.3【建议】源程序中关系较为紧密的代码应尽可能相邻。

19

4.4【建议】不要使用难懂的技巧性很高的语句,除非很有必要时。

20

5.Task&Function20

5.1【规则】对所调用任务/函数的错误返回码要仔细、全面地处理。

20

5.2【规则】明确任务/函数功能,精确(而不是近似)地实现函数设计。

20

5.3【规则】一个函数仅完成一件功能。

20

5.4【建议】为简单功能编写函数。

20

5.5【建议】不要设计多用途面面俱到的任务/函数。

21

5.6【建议】任务/函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。

21

5.7【规则】避免设计多参数任务/函数,不使用的参数从接口中去掉。

21

5.8【建议】检查任务/函数所有参数输入的有效性。

21

5.9【建议】使用动宾词组为执行某操作的任务/函数命名。

21

5.10【建议】让任务/函数在调用点显得易懂、容易理解。

21

5.11【建议】避免任务/函数中不必要语句,防止程序中的垃圾代码。

21

5.12【规则】防止把没有关联的语句放到一个任务/函数中。

22

5.13【建议】如果多段代码重复做同一件事情,那么在任务/函数的划分上可能存在问题。

23

5.14【建议】功能不明确较小的任务/函数,特别是仅有一个上级任务/函数调用它时,应考虑把它合并到上级任务/函数中,而不必单独存在。

23

5.15【建议】设计高扇入、合理扇出(小于7)的任务/函数。

23

5.16【建议】减少任务/函数本身或任务/函数间的递归调用。

23

6.CodeQuality24

6.1【规则】系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。

24

6.2【规则】编程时,要防止差1错误。

24

6.3【规则】要时刻注意易混淆的操作符。

当编完程序后,应从头至尾检查一遍这些操作符,以防止拼写错误。

24

6.4【建议】有可能的话,if语句尽量加上else分支,对没有else分支的语句要小心对待;switch语句必须有default分支。

24

6.5【规则】时刻注意表达式是否会上溢、下溢。

24

6.6【规则】使用变量时要注意其边界值的情况。

25

 

1.

Typeset

1.1【规则】代码块要采用缩进风格编写,缩进的空格数为4个。

说明:

对于由开发工具自动生成的代码可以有不一致。

采用空格缩进的好处是不同编辑器打开文件时缩进都一致,使用TAB则会存在默认空格数不一致的问题,编辑代码时可以将编辑器的TAB键扩展设置为用4个空格代替,这样就可以使用TAB键来做缩进。

1.2【建议】相对独立的代码块之间必须加空行。

示例:

如下例子不符合规范。

if(!

valid_ni(ni))

begin

...//programcode

end

repssn_ind=ssn_data.repssn_index;

repssn_ni=ssn_data.ni;

应如下书写

if(!

valid_ni(ni))

begin

...//programcode

end

repssn_ind=ssn_data.repssn_index;

repssn_ni=ssn_data.ni;

1.3【规则】较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:

report_or_not_flag=((taskno

&&(n7stat_stat_item_valid(stat_item))

&&(act_task_table[taskno].result_data!

=0));

1.4【建议】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

示例:

if((taskno

&&(n7stat_stat_item_valid(stat_item)))

begin

...//programcode

end

for(i=0,j=0;(i

&&(j

begin

...//programcode

end

1.5【建议】若函数或过程中的参数较长,则要进行适当的划分。

示例:

n7stat_flash_act_duration(stat_item,frame_id*STAT_TASK_CHECK_NUMBER

+index,stat_object);

1.6【规则】不允许把多个短语句写在一行中,即一行只写一条语句。

示例:

如下例子不符合规范。

intlength=0;width=0;

应如下书写

intlength=0;

intwidth=0;

1.7【规则】if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加beginend。

示例:

如下例子不符合规范。

if(user_cr==NULL)return;

应如下书写:

if(user_cr==NULL)

begin

return;

end

1.8【规则】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。

1.9【规则】程序块的分界符(beginend)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、任务体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:

如下例子不符合规范。

for(...)begin

...//programcode

end

if(...)

begin

...//programcode

end

voidfunctionexample_fun(void)

begin

...//programcode

end

应如下书写:

for(...)

begin

...//programcode

end

if(...)

begin

...//programcode

end

voidfunctionexample_fun(void)

begin

...//programcode

end

注意:

使用fork…join时不使用begin…end做分界,VCS会将fork之后的begin…end作为一个线程来解释。

1.10【规则】在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。

说明:

采用这种松散方式编写代码的目的是使代码更加清晰。

由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,括号内侧建议加空格,多重括号间不必加空格。

在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。

给操作符留空格时不要连续留两个以上空格。

示例:

(1)逗号、分号只在后面加空格。

$display(“%h,%h,%h”,a,b,c);

(2)比较操作符,赋值操作符"="、"+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。

if(current_time>=MAX_TIME_VALUE)

a=b+c;

a*=2;

a=b^2;

(3)"!

"、"~"、"++"、"--"等单目操作符前后不加空格。

p='a';//内容操作"*"与内容之间

flag=!

isEmpty;//非操作"!

"与内容之间

i++;//"++","--"与内容之间

(4)"."前后不加空格。

this.id=pid;//"."前后不加空格

(5)括号内侧建议加空格,多重括号间不加空格。

if(a>=b&&c>d)

if((a>=b)&&(c>d))

1.11【规则】变量的定义一行定义一个,不建议一行定义多个变量(成员)。

示例:

如下例子不符合规范。

single_packetpkt_send,pkt_rev,send_temp;

应如下书写:

single_packetpkt_send;

single_packetpkt_rev;

single_packetsend_temp;

1.12【建议】函数体或者任务体定义时,一个参数对应一行,如果只有一个参数则与()同一行即可。

示例:

如下例子不符合规范。

functionnew(stringinstance=“class”,swp_subenv_cfgcfg,

packet_swp_channelin_swp_chan,packet_swp_channelin_apb_chan,single_packet_channelout_dut_chan,single_packet_channelin_dut_chan,scoreboardsb,vmm_ral_accessral,vmm_notifynotify);

应如下书写:

functionnew(

stringinstance=“class”,

swp_subenv_cfgcfg,

packet_swp_channelin_swp_chan,

packet_swp_channelin_apb_chan,

single_packet_channelout_dut_chan,

single_packet_channelin_dut_chan,

scoreboardsb,

vmm_ral_accessral,

vmm_notifynotify

);

functionnew(stringinstance);

1.13【建议】class的task或者function,在class实体内做声明,定义则在class实体外。

说明:

采用extern方式声明task/function使class更清晰。

classscoreboardextendsvmm_xactor;

……

externfunctionnew(stringinstance,swp_subenv_cfgcfg);

externvirtualprotectedtaskmain();

externvirtualfunctionvoidswpmansendpkt(single_packetpkt);

externvirtualfunctionvoidAPBmanreceivepkt(single_packetpkt);

externvirtualfunctionvoidswpmanreceivepkt(single_packetpkt);

externvirtualfunctionvoidAPBmansendpkt(single_packetpkt);

endclass:

scoreboard

2.Remark

2.1【规则】一般情况下,源程序有效注释量必须在20%以上。

说明:

注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

2.2【规则】每个文件必须有头文件。

/*************************************************************/

/*copyright2008,HHIC*/

/*allrightreserved*/

/**/

/*projectname:

HD_SIM*/

/*filename:

cpu_gen.sv*/

/*author:

zhaozhixin*/

/*data:

2008/12/29*/

/*version:

1.0*/

/*abstract:

realizationgenmoudleofcpu*/

/**/

/*modificationhistory*/

/*-----------------------------------------------------------*/

/*|name|modify|data|version|*/

/*-----------------------------------------------------------*/

/*|zhaozhixin|init|2008/12/29|v1.0|*/

/*-----------------------------------------------------------*/

/*|||||*/

/*---------------------------------------------------------*/

/*|||||*/

/*-----------------------------------------------------------*/

/**************************************************************/

//$log:

cpu_gen.sv

2.3【建议】任务(函数)头部应进行注释,描述任务(函数)的主要功能。

2.4【规则】注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:

错误的注释不但无益反而有害。

2.5【规则】注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面。

//getreplicatesubsystemindexandnetindicator

repssn_ind=ssn_data[index].repssn_index;

repssn_ni=ssn_data[index].ni;

2.6【规则】对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。

变量、常量、宏的注释应放在其上方相邻位置或右方。

示例:

//activestatistictasknumber

#defineMAX_ACT_TASK_NUMBER1000

#defineMAX_ACT_TASK_NUMBER1000//activestatistictasknumber

2.7【规则】类声明(包括数组、结构、枚举等),如果其命名不是充分自注释的,必须加以注释。

对类的注释应放在其上方相邻位置,不可放在下面;对类中的每个成员的注释放在此类的右方。

示例:

可按如下形式说明枚举、类结构。

//sccpinterfacewithsccpuserprimitivemessagename*/

enumSCCP_USER_PRIMITIVE

{

N_UNITDATA_IND,//sccpnotifysccpuserunitdatacome

N_NOTICE_IND,//sccpnotifyusertheNo.7networkcan//nottransmissionthismessage

N_UNITDATA_REQ,//sccpuser'sunitdatatransmission

//request

};

2.8【规则】注释与所描述内容进行同样的缩排。

说明:

可使程序排版整齐,并方便注释的阅读与理解。

示例:

如下例子,排版不整齐,阅读稍感不方便。

voidexample_fun(void)

begin

//codeonecomments

CodeBlockOne

//codetwocomments

CodeBlockTwo

end

应改为如下布局。

voidexample_fun(void)

begin

//codeonecomments

CodeBlockOne

//codetwocomments

CodeBlockTwo

end

2.9【建议】将注释与其上面的代码用空行隔开。

示例:

如下例子,显得代码过于紧

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2