zxopenluyutong 发表于 2021-2-2 17:00:36

FPGA的代码书写规范

虽然没有“国际标准”级别的Verilog或VHDL代码书写规范可供参考,但是相信每一个稍微规范点的做FPGA设计的公司都会为自己的团队制定一套供参考的代码书写规范。毕竟一个团队中,大家的代码书写格式达到基本一致的情况下,相互查阅、整合或移植起来才会“游刃有余”。因此,希望初学者从一开始就养成好的习惯,尽量遵从比较规范的书写方式。话说“幸福的家庭都是一样的,不幸的家庭各有各的不幸”,我们也相信,尽管不同的公司为自己的团队制定的Verilog或VHDL代码书写规范可能略有差异,但是真正好的书写规范应该都是大同小异的。所以,对于网络上漫天飞舞的书写规范,笔者本着“取其精华去其糟粕”的精神和大家一同分享。这里也不刻意区分verilog和VHDL书写规范上的不同,只是谈论一些基本的可供遵循的规范。(特权同学,版权所有)
(1)      标识符
         包括语法保留的关键词、模块名称、端口名称、信号名称、各种变量或常量名称等。语法保留的关键词是不可以作为后面几种名称使用的,Verilog和VHDL的主要关键字如下:
Verilog关键词
alwaysendmodulemediumreg tranIF0 and   endprimitivemodulerelease
tranif1assignendspecifynandrepeattriattributeendtablenegedgernmostri0
beginendtasknmosrpmostri1bufeventnorrtrantriandbufif0fornot
rtranif0triorbufif1forcenotif0rtranif1triregcase forevernotif1scalared
unsignedcasexforkor signedvectored casezfunctionoutputsmallwait
cmoshighz0parameterspecifywanddeassign highz1pmosspecparamweak0
defaultifposedgestrengthweak1defparam ifnoneprimitivestrong0while
disableinitialpull0strong1 wire edgeinoutpull1supply0 wor elseinput
pulldownsupply1xnorend integerpulluptable xor endattributejoinremos
taskendcaselargerealtimeendfunction macromodulerealtime tran

VHDL关键词
absdowntolibrarypostponedsubtype accesselselinkageprocedurethen
afterelsifliteralprocesstoaliasend loop pure transportallentitymaprange
typeandexitmodrecordunaffectedarchitecturefilenandregister units
arrayfornewreject until assertfunctionnextremuseattributegenerate
norreportvariable begingenericnotreturnwaitblock groupnullrolwhen
bodyguardedofrorwhilebuffer ifonselect with busimpureopen
severityxnorcaseinorsharedxorcomponentinertialotherssignal
configurationinoutoutslaconstantispackagesradisconnect labelportsrl
          除了以上这些保留的关键词不可以作为用户自定义的其他名称,verilog和VHDL还有以下的一些用户自定义命名规则必须遵循:
●命名中只能够包含字母、数字和下划线“_”(verilog的命名还可以包含符号“$”)。(特权同学,版权所有)
●命名的第一个字符必须是字母(verilog的命名授字符可以是下划线“_”,但一般不推荐这么命名)。(特权同学,版权所有)
●在一个模块中的命名必须是唯一的。(特权同学,版权所有)
●VHDL的命名中不允许连续出现多个下划线“_”,也不允许下划线“_”是命名的最后一个字符。(特权同学,版权所有)
关于模块名称、端口名称、信号名称、各种变量或常量名称等的命名,有很多推荐的规则可供参考,如下:
●尽可能使用能表达名称具体含义的英文单词命名,单词名称过长时可以采用易于识别的缩写形式替代,多个单词之间可以用下划线“_”进行分割。(特权同学,版权所有)
●对于出现频率较高的相同含义的单词,建议统一作为前缀或后缀使用。(特权同学,版权所有)
●对于低电平有效的消耗,通常加后缀“_n”表示。(特权同学,版权所有)
●在同一个设计中,尽可能的统一大小写的书写规范。(很多规范里对命名的大小写书写格式有要求,但是笔者这里不做详细规定,大家可以根据自己的需要设定。)
(2)      格式
         这里的格式主要是指每个代码功能块之间、关键词、名称或操作符之间的间距(行间距、字符间距)规范。得体的代码格式不仅看起来美观大方,而且便于阅读和调试。关于格式,可能不同的公司也都有相关的规范要求,笔者在此建议大家尽量遵循以下一些原则:
●每个功能块(如verilog的always逻辑、VHDL的process逻辑)之间尽量用一行或数行空格进行隔离。(特权同学,版权所有)
●一个语法语句一行,不要在同一行写多个语法语句。(特权同学,版权所有)
●单行代码不宜过长,所有代码行长度尽量控制在一个适当的便于查看的范围。(特权同学,版权所有)
●同层次的语法尽量对齐,使用Tab键(通常一个Tab对应四个字符宽度)进行缩进。(特权同学,版权所有)
●行尾不要有多余的空格。(特权同学,版权所有)
●关键词、各类名称或变量、操作符相互间都尽量保留一个空格以作隔离。(特权同学,版权所有)
(3)      注释
         Verilog的注释有“/* */”以及“//”两种方式。“/*”左侧和“*/”右侧之间的部分为注释内容,此注释可以用在行前、行间、行末或多行中;“//”后面的内容为注释,该注释只可用在行末(当然了,它也可以顶个,那么意味着整行都是注释)。(特权同学,版权所有)
         VHDL的注释只有“--”一种。类似verilog的“//”,“--”后面的内容为注释,该注释只可用在行末。(特权同学,版权所有)
         注释的摆放和写法通常也有讲究,几个要点归纳如下:
●每个独立的功能模块都要有简单的功能描述,对输入输出信号功能进行描述。(特权同学,版权所有)
●无论习惯在代码末注释还是代码上面注释,同一个模块或工程中尽量保持一致。(特权同学,版权所有)

zxopenljx 发表于 2024-8-7 17:40:50

FPGA的代码书写规范

hellokity 发表于 2024-8-9 12:46:10

FPGA的代码书写规范
页: [1]
查看完整版本: FPGA的代码书写规范