verilog语法规则个人总结

verilog语法规则

1.Verilog分以下四个层次:
 
l         低阶交换模型:电路由开关与储存点所组成
 
l         逻辑间层次描述: 用and ,or, buf , not 等
 
l         资料处理模型或暂存器转移层次:用于说明资料如何在暂存器中储存与传送。使用assign(电路所需功能的指定描述)来描述。
 
l         行为模型: 只需要考虑模组的功能,使用always ,for ,while ,case等
 
2.关键字keywords必须使用小写来表示。
 
3.不能用于电路合成的verilog 语法:
 
叙述:Delay, Initial, Repeat, Forever, Wait, Fork, Join, Event, time, Deassign, Force, Release, Primitive, Cese indentity,  not identity operations,Rtuan,tranif0,tranif1,rtranif0,rtranif1
 
运算子:= = =, != =,/,%
 
逻辑间型态:tranif1,tranif0,rtran,trtanif1,rtranif0等逻辑间型态
 
Triand,trior,tri0,tri1,tritrg等接线型
 
Nmos, pmos, coms ,rnmos ,rpmos ,rcmos等元件
 
Pullup,pulldown等讯号改变元件
 
其他不能用于电路合成的构建方式
 
1)        不能在模组内有另一个阶层式的名称: module
 
2)        ifdef,endif,else等条件编译命令
 
verilog的时间控制:主要用途是设定某一个程序在特定的时间被执行。
 
事件 :当一条接线wire,wor,wand或暂存器register的值被改变时就是一个事件
 
       当模组的输入埠介绍到新的值时也是一个事件
 
可用于合成的verilog电路描述的事件基础时间控制,有两种:
 
1)        正规事件控制@当信号产生正缘posedge ,负negedge,转换或者值被改变时,叙述才会被执行。Always @ (posedge clock)
 
2)        当有多个讯号或者事件触发一个叙述或一个内含多个叙述的区块
 
Always@(reset or gate or d)
 
Verilog的资料型态:wire,wand,wor,reg
 
Wire的特性:
 
1)        接线时连接硬体元件之连接线
 
2)        接线必须要被驱动才能改变它的内涵值
 
3)        接线描述的关键字为wire
 
4)        除非有被宣告成一个向量,否则接线是内定为一个位元的值,而且内定值是Z
 
Wand的特性:
 
1)        我们不能将多条讯号输出线同样连接到使用wire的某一条接线
 
2)        可以将多条讯号输出线同样连接到某一条wand,wor
 
Reg 的特性 :
 
1)        可以直接给定一个数值,主要功能在于保持住电路中的某个值,不必像wire才能改变它的内涵值
 
2)        除非有被宣告成一个向量,否则接线是内定为一个位元的值,而且内定值是X
 
选用wire或reg的时机
 
1)        wire必须配合assign来使用,且不能出现在always里
 
2)        reg的使用方法为a=b格式,也就是必须放在always的区块描述里
 
3)        wire,reg皆可定义为向量
 
4)        在verilog中内定的为WIRE,因此若在端与端的宣告中只有告input,output,inout,则为wire,如果需要将讯号的值储存起来就要宣告为reg
 
5)        在verilog中端的内部与外部的连接必须遵守下列规定:
 
Input能被net,或register推动,而一个输入端能够推动net型态的接线
 
output能被net,或register推动,而一个输入端能够推动net型态的接线
 
双向端能被net推动,而一个输入端能够推动net型态的接线
 
可用于电路合成的net,包括三种:wire,wor,wand
 
Verilog常用的叙述:
 
1.  parameter,用于定义一个常数,对于可扩展的模组非常好用
 
parameter width=16;
 
input [width-1:0]a;
 
2.  assign
 
驱动某个值到wire,wand,wor,tri;
 
用于资料处理模型(Data Flow model)的描述
 
用于描述组合逻辑电路
 
3.  case: 叙述为一种多路选择
 
如果没有将“所有可能的”分支判别条件都指定 ,将会被锁住
 
4.  function 的传回值是储存在和函数同样名称的这个变数中 ,并且至少要有一个或者以上的input
 
         c=Sub_inc_Dec(b,a,sub,inc)
 
         …function [3:0] Sub_inc_Dec;
 
         Input [3:0]a,b;
 
         Input Sub,inc;
 
         …..endfunction
 
5.  task (任务)可以拥有零个或更多个input,output,inout
 
6.  task, function的区别:
 
          function可以引其他的function,但不能引用其他的task
 
          task可以引用其他的task和function
 
          function至少要有一个或者以上的input
 
          task (任务)可以拥有零个或更多个input,output,inout
 
7.   相同的地方
 
       都可以拥有本身的区域变数与暂存器,但不能拥有wire型态的变数
 
       只能用于行为模型的叙述中,前额本身不能有always 的叙述,通常是写在always区块中
 
撰写经济使用的HDL程式码原则
 
       使用括弧来描述复杂的电路结构
 
       Out=a+b+c+d+e+f; 需用5层 out=((a+(b+c))+(d+e))+f;只需四层
 
       将“组合指定”叙述和“循序指定”叙述的部分区分开
 
       善于用常数
 
       Parameter 可以减少电路面积可以定义宽度等
 
       可以表示有状态机的内部状态parameter A=2’b00,B=2’b10
 
       Define可表示有限状态机的内部状态和电路中会用到的常数值Define  RED_Light_Time  9
 
这只是个人经验之谈,有什么不足和错误的地方希望大家能指出来。
posted on 2012-12-04 13:13  龙骑士_01  阅读(1247)  评论(0编辑  收藏  举报