在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3857|回复: 6

[原创] 勇敢的芯伴你玩转Altera FPGA连载34:Verilog代码书写规范

[复制链接]
发表于 2017-12-27 09:38:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
勇敢的芯伴你玩转Altera FPGA连载34verilog代码书写规范

特权同学,版权所有

配套例程和更多资料下载链接:

http://pan.baidu.com/s/1i5LMUUD

1.jpg



虽然没有“国际标准”级别的VerilogVhdl代码书写规范可供参考,但是相信每一个稍微规范点的做FPGA设计的公司都会为自己的团队制定一套供参考的代码书写规范。毕竟一个团队中,大家的代码书写格式达到基本一致的情况下,相互查阅、整合或移植起来才会“游刃有余”。因此,希望初学者从一开始就养成好的习惯,尽量遵从比较规范的书写方式。话说“幸福的家庭都是一样的,不幸的家庭各有各的不幸”,我们也相信,尽管不同的公司为自己的团队制定的VerilogVHDL代码书写规范可能略有差异,但是真正好的书写规范应该都是大同小异的。所以,对于网络上漫天飞舞的书写规范,笔者本着“取其精华去其糟粕”的精神和大家一同分享。这里也不刻意区分verilogVHDL书写规范上的不同,只是谈论一些基本的可供遵循的规范。


标识符


包括语法保留的关键词、模块名称、端口名称、信号名称、各种变量或常量名称等。语法保留的关键词是不可以作为后面几种名称使用的,VerilogVHDL的主要关键字如下:

Verilog关键词

always  endmodule  medium  reg tranif0 and   end  primitive  module  release

tranif1  assign  endspecify  nand  repeattri  attribute  endtable  negedge  rnmos  tri0

begin  endtask  nmos  rpmos  tri1  buf  event  nor  rtrantriand  bufif0  for  not

rtranif0  trior  bufif1 force  notif0  rtranif1  trireg  case forever  notif1  scalared

unsigned  casex  fork  or signed  vectored casez  function  output  small  wait

cmos  highz0  parameter  specify  wand  deassign highz1  pmos  specparam  weak0

default  if  posedge  strength  weak1  defparam ifnone  primitive  strong0  while

disable  initial  pull0  strong1 wire edge  inout  pull1  supply0 wor else  input

pulldown  supply1  xnor  end integer  pullup  table xor endattribute  join  remos

task  endcase  large  real  time  endfunction macromodule  realtime tran


VHDL关键词

abs  downto  library postponed  subtype access  else  linkage  procedure  then  

after  elsif  literal  process  to  aliasend loop pure transport  all  entity  map  range

type  and  exit  mod  record  unaffected  architecture  file  nand  register units

array  for  new reject  until  assert function  next  rem  use  attribute  generate

nor  report  variable begin  generic  not  return  wait  block group  null  rol  when

body  guarded  of  ror  while  buffer if  on  select with bus  impure  open

severity  xnor  case in  or  shared  xor  component  inertial  others  signal

configuration  inout  out sla constant  is  package  sra  disconnect label  port  srl


除了以上这些保留的关键词不可以作为用户自定义的其他名称,verilogVHDL还有以下的一些用户自定义命名规则必须遵循:


命名中只能够包含字母、数字和下划线“_”(verilog的命名还可以包含符号“$”)。


命名的第一个字符必须是字母(verilog的命名授字符可以是下划线“_”,但一般不推荐这么命名)。


在一个模块中的命名必须是唯一的。


VHDL的命名中不允许连续出现多个下划线“_”,也不允许下划线“_”是命名的最后一个字符。

关于模块名称、端口名称、信号名称、各种变量或常量名称等的命名,有很多推荐的规则可供参考,如下:


尽可能使用能表达名称具体含义的英文单词命名,单词名称过长时可以采用易于识别的缩写形式替代,多个单词之间可以用下划线“_”进行分割。


对于出现频率较高的相同含义的单词,建议统一作为前缀或后缀使用。


对于低电平有效的消耗,通常加后缀“_n”表示。


在同一个设计中,尽可能的统一大小写的书写规范。(很多规范里对命名的大小写书写格式有要求,但是笔者这里不做详细规定,大家可以根据自己的需要设定。)


格式


这里的格式主要是指每个代码功能块之间、关键词、名称或操作符之间的间距(行间距、字符间距)规范。得体的代码格式不仅看起来美观大方,而且便于阅读和调试。关于格式,可能不同的公司也都有相关的规范要求,笔者在此建议大家尽量遵循以下一些原则:


每个功能块(如verilogalways逻辑、VHDLprocess逻辑)之间尽量用一行或数行空格进行隔离。


一个语法语句一行,不要在同一行写多个语法语句。


单行代码不宜过长,所有代码行长度尽量控制在一个适当的便于查看的范围。


同层次的语法尽量对齐,使用Tab键(通常一个Tab对应四个字符宽度)进行缩进。


行尾不要有多余的空格。


关键词、各类名称或变量、操作符相互间都尽量保留一个空格以作隔离。


注释

         Verilog的注释有“/* */”以及“//”两种方式。“/*”左侧和“*/”右侧之间的部分为注释内容,此注释可以用在行前、行间、行末或多行中;“//”后面的内容为注释,该注释只可用在行末(当然了,它也可以顶个,那么意味着整行都是注释)。

         VHDL的注释只有“--”一种。类似verilog的“//”,“--后面的内容为注释,该注释只可用在行末。


注释的摆放和写法通常也有讲究,几个要点归纳如下:


每个独立的功能模块都要有简单的功能描述,对输入输出信号功能进行描述。


无论习惯在代码末注释还是代码上面注释,同一个模块或工程中尽量保持一致。


注释内容简明扼要,不要过于冗长或写废话(例如:add = add+1;      //add自增)。







发表于 2020-1-1 16:59:48 | 显示全部楼层
coding style
发表于 2020-1-7 13:44:18 | 显示全部楼层
这个还得多看前辈写的,多看看就知道自己要注意什么了
发表于 2020-1-23 15:17:33 | 显示全部楼层
不能下载了
发表于 2021-4-19 19:15:38 | 显示全部楼层
不能下载了
发表于 2021-5-17 18:02:42 | 显示全部楼层
Thanks
发表于 2021-8-23 10:52:35 | 显示全部楼层
great
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-27 12:13 , Processed in 0.027006 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表