Board logo

标题: HDL代码书写规范 [打印本页]

作者: pengpengpang    时间: 2014-2-23 23:52     标题: HDL代码书写规范

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

标识符
     包括语法保留的关键词、模块名称、端口名称、信号名称、各种变量或常量名称等。语法保留的关键词是不可以作为后面几种名称使用的,Verilog和VHDL的主要关键字如下:
Verilog关键词
always  endmodule  medium  reg  tranif0  and   end  primitive  module  release
tranif1  assign  endspecify  nand  repeat tri  attribute  endtable  negedge  rnmos  tri0
begin  endtask  nmos  rpmos  tri1  buf  event  nor  rtran triand  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  alias end 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
    除了以上这些保留的关键词不可以作为用户自定义的其他名称,verilog和VHDL还有以下的一些用户自定义命名规则必须遵循:
关于模块名称、端口名称、信号名称、各种变量或常量名称等的命名,有很多推荐的规则可供参考,如下:
格式
    这里的格式主要是指每个代码功能块之间、关键词、名称或操作符之间的间距(行间距、字符间距)规范。得体的代码格式不仅看起来美观大方,而且便于阅读和调试。关于格式,可能不同的公司也都有相关的规范要求,笔者在此建议大家尽量遵循以下一些原则:
         注释
    Verilog的注释有“/* */”以及“//”两种方式。“/*”左侧和“*/”右侧之间的部分为注释内容,此注释可以用在行前、行间、行末或多行中;“//”后面的内容为注释,该注释只可用在行末(当然了,它也可以顶个,那么意味着整行都是注释)。
     VHDL的注释只有“--”一种。类似verilog的“//”,“--”后面的内容为注释,该注释只可用在行末。
     注释的摆放和写法通常也有讲究,几个要点归纳如下:
文字来源:特权同学的博客




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0