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
这只是个人经验之谈,有什么不足和错误的地方希望大家能指出来。