Verilog语言基础知识Word格式文档下载.docx
- 文档编号:17729613
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:13
- 大小:84.07KB
Verilog语言基础知识Word格式文档下载.docx
《Verilog语言基础知识Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Verilog语言基础知识Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
或0)。
完整的数字表达式为:
<
位宽"
:
进制>
数字>
位宽为对应二迸制数的宽度,如:
8*bnets型变量wire
nets型变量指输出始终根据输入的变化而更新其值的变量,它一般指的是硬件电路中的各种物理连接。
VerilogHDL中提供了多种nets型变量,具体见表。
表常用的nets型变量及说明
类型
功能说明
wire,tri
连线类型(wire和tri功能完全相同)
woctrior
具有线或特性的连线(两者功能一致)
wandztriand
具有线与特性的连线(两者功能一致)
triUriO
分别为上拉电阻和下拉电阻
supplyl^uppIyO
分别为电源(逻辑1)和地(逻辑0)
这里着重介绍wire型变量。
wire是一种常用的nets型变量,wire型数据常用来表示assign语句赋值的组合逻辑信号。
VerilogHDL模块中的输入/输出信号类型缺省时自动定义为wire型。
Wire型信号可以用作任何方程式的输入,也可以用作assign语句和实例元件的输出,其取值为0,l,x,z。
wire型变量格式如下:
(1).定义宽度为1位的变量:
wire数据名1,数据名2,……数据名n;
例如:
wirea,b;
register型变量reg
register型变量对应的是具有状态保持作用的电路元件,如触发器、寄存器等。
register型变量与nets变量的根本区别在于:
register需要被明确地赋值,并在被重新赋值前一直保持原值。
在设计中必须将寄存器型变量放在过程块语句(如initial,always)中,通过过程赋值语句赋值。
另外,在always过程块内被赋值的每一个信号都必须定义成寄存器型。
VerilogHDL中,有4种寄存器型变量,见表
表常用的register型变量及说明
reg
常用的寄存湍型变虽
integer
32位帯符号整数型变虽
real
64位帯符号整数型变虽
time
无符号时间变虽
Integer^reaktime等3种寄存器型变量都是纯数学的抽象描述,不对应任何具体的硬件电路。
reg型变量是最常用的一种寄存器型变量,下面介绍reg型变量。
reg型变量格式如下:
"
g数据名1,数据名2,……数据名n;
rega,b;
数组
若干个相同宽度的向量构成数组,reg型数组变量即为memory型变量,即可定义存储器型数据。
如:
0]mymem[IO23:
O];
上面的语句定义了一个1024个字节、每个字节宽度为8位的存储器。
通常,存储器采用如下方式定义:
parameterwordwidth=8,memsize=1024;
reg[wordwidth-l:
0]mymem[memsize-l:
上面的语句定义了一个宽度为8位、1024个存储单元的存储器,该存储器的名字是mymem,若对该存储器中的某一单元赋值的话,釆用如下方式:
mymem⑻“;
算术运算符
+加
・减
*乘
/除
%求模
算术运算符都是双II运算符。
2.逻辑运算符
&
逻辑与
II逻辑或
!
逻辑非
3.位运算符
位运算是将两个操作数按对应位进行逻辑运算。
位运算符包括
-按位取反
按位与
I按位或
A按位异或
r~入按位同或
当两个不同长度的数据进行位运算时,会自动地将两个操作数按右端对齐,位数少的操作数会在高位用o补齐。
4.关系运算符
小于
=小于或等于
大于
大于或等于
在进行关系运算时,如果声明的关系是假,则返问值是0;
如果声明的关系是真,则返回值是1;
如果某个操作数的值不定,则其结果是模糊的,返回值是不定值。
5.等式运算符
==等于
=不等于
===全等
==不全等
这4种运算符都是双目运算符,得到的结果是1位的逻辑值。
如果得到r说明声明的关系为真;
如得到o,说明声明的关系为假。
相等运算符(==)和全等运算符(===)的区别是参与比较的两个操作数必须逐位相等,其相等比较的结果才为I,如果某些位是不定态或高阻值,其相等比较得到的结果就会是不定值。
而全等比较(二==)是对这些不定态或高阻值的位也进行比较,两个操作数必须完全一致,其结果才为否则结果是0。
如:
设寄存器变量a=5,bll0x01,b=5,llx01/则=得到的结果为不定值x,而=得到的结果为I。
6.缩减运算符(单IJ运算)
与
~&
与非
I或
~|債非
A异或
八~厂八同或
缩减运算符与位运算符的逻辑运算法则一样,但缩减运算是对单个操作数进行与、或、非递推运算的。
reg[3:
0]a:
b二&
a;
»
«
移位运算符
右移
左移
移位运算符用法:
A>
>
n或A«
n
表示把操作数A右移或左移n位,并用0填补移出位。
8•条件运算符(三目运算符)
初式:
信号=条件表达式1:
表达式2;
当条件成立时,信号取表达式1的值,反之取表达式2的值.
9•位拼接运算符
连续赋值语句assign
assign为连续赋值语句,它用来对wire型变量进行赋值。
格式:
assign变量二表达式;
assignc=a&
b;
在上面的赋值中,a和b信号的任何变化,都将随时反映到c上来,因此称为连续赋值方式。
2.过程赋值语句
过程赋值语句用于对寄存器类型(reg)的变量进行赋值。
过程赋值有以下两种方式。
⑴非阻塞(non_blocking)赋值方式
赋值号为<
=»
如b<
=a;
非阻塞赋值在块结束时才完成赋值操作,即b的值并不是立刻就改变的。
(2)阻塞(blocking)赋值方式
赋值号为二,如b=a;
阻塞赋值在该语句结束时就完成赋值操作,即b的值在该赋值语句结束后立刻改变。
如果在一个块语句中,有多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面的语句就不能执行,就像被阻塞(blocking)一样,因此称为阻塞赋值方式
(3)阻塞赋值方式和非阻塞赋值方式的区别
阻塞赋值方式和非阻塞赋值方式的区别常给设计人员带来问题。
问题主要是对“always”模块内的reg型变量得赋值不易把握。
为区分阻塞赋值与非阻塞赋值的不同,可看下面两例。
【例】非阻塞赋值【例】阻塞赋值
modulenon_block(c,b,a,clk);
moduleblock(c,b,a,clk);
begin
b<
c<
=b;
end
endmoduleendmodule
将上面两段代码用MAX+PLUSII进行综合,并进行仿真,可看到二者的区别:
对于非阻塞赋值,c的值落后b的值一个时钟周期,这是因为该"
always"
块每一个时钟周期执行一次,因此信号的值每一个时钟周期更新一次,c的值是上一时钟周期的b值。
对于阻塞赋值,c的值和b的值一样,这是因为b的值是立即更新的。
为避免对这两种赋值语句的应用错误,建议在初学时刻只是用一种,比如采用阻塞赋值,因为它类似C语言的赋值方式。
为避免出错,在同一块内,不要将输岀重新作为输入使用。
而为实现上述非阻塞赋值功能,可采用两个“always”块来实现,代码如下:
outputc,b;
inputclk,a;
regc,b;
always@(posedgeelk)
b=a;
end
always@(posedgeelk)begin
c=b;
endmodule
条件语句
条件语句是顺序语句,应放在“always”块内。
1.if-else语句
使用方法有以下3种
1if(表达式)语句;
2if(表达式1)语句1;
else语句2;
③if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
elseif(表达式n)语句n;
else语句n+1;
这三种方式中,“表达式”一般为逻辑表达式或关系表达式,也可能是一位变量。
若
表达式的值为O,x,z,视为“假”;
若为1,视为“真”。
语句可以是单句,也可以是多句,多句时用“begin-end”括起来。
2.case语句
多用于多条件译码电路,如描述译码器、数据选择器、状态机及微处理器的指令译
码等。
(1).case语句
case(敏感表达式)
值]:
语句1;
值2:
语句2;
值n:
语句n;
default:
语句n+1;
endcase
(2).casez和casex语句
case语句中,敬感表达式与值1〜值n之间的比较是一种全等比较,必须保证两者的
对应位全等。
casez与casex语句是case语句的两种变体,三者的表示形式中唯一的区别是3个关键词case.casez.casex的不同。
在casez语句中,如果分支表达式某些位的值为高阻乙那么对这些位的比较就不予考虑,因此,只需关注其他位的比较结果。
而在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较的双方有一方的某些位的值是x或z,那么这些位的比较就不予考虑。
此外,还有另外一种标识X或Z的方式,即用表示无关值的“"
来表示。
循环语句
VerilogHDL中存在4种类型的循环语句,用来控制语句的执行次数。
这4种语句分别为:
1foreve连续地执行语句,多用在"
initial-块中,以生成周期性输入波形。
2repeat连续执行一条语句n次。
1while执行一条语句,直到循环条件不满足。
2for语句
由于MAX+PLUS软件不支持repeat语句。
forever语句一般用在initial语句块中,而MAX+PLUS软件不支持initial语句块,因此这里只介绍for和while两种语句。
for语句
for(表达式1;
表达式3)语句;
即:
for(循环变量初值;
循环结束条件;
循环变量增值)执行语句;
2.while语句
while(循环执行条件表达式)语句;
while语句执行时,首先判断循环执行表达式是否为真,若为真,执行循环体中语句,
然后,再判断循环执行条件表达式是否为真,……,直至条件表达式不为真为止。
循环体中语句可以是单句,也可以是多句,多句时用“begin-end”括起来。
结构说明语句
VerilogHDL中的任何过程模块都从属于以下4种结构说明语句:
Oinitial
Oalways
Otask
Ofunction
inital说明语句一般用于仿真中的初始化,仅执行一次jalways块内的语句则是不断重复执行的;
task和function语句可以在程序模块中的一处或多处调用。
由于MAX+PLUS软件不支持task,initial语句,因此这里只介绍always和function两种结构说明语句
1.always块语句
always块语句模板如下:
always@(<敏感信号表达式〉)
begin函数function
函数的LI的是返回一个用于表达式的值。
函数的定义格式为:
function<返回值位宽或类型说明>函数名;
端口声明;
局部变量定义;
其他语句;
endfunction
【例】函数举例
function[7:
0]gefun;
0]x;
0]count;
integeri;
count=O;
for(i=0;
i<=7;
i=i+l)
if(x[i]=rbO)count=count+l;
gefun=count;
endfunction
上面的gefun函数循环核对输人的每一位,计算出0的个数,并返回一个适当的值。
<返回值位宽或类型说明〉是一个可选项,如果缺省,则返回值为一位关于寄存器类型的数据。
函数的定义中蕴含了一个与函数同名的、函数内部的寄存器。
在函数定义时,将函数返回值所使用的寄存器设为与函数同名的内部变量,因此函数名被赋予的值就是函数的返回值。
例如在上例中,gefun最终赋予的值即为函数的返回值。
函数的调用是通过将函数作为表达式中的操作数来实现的。
调用格式如下:
V函数名〉,(V表达式><表达式>);
比如使用连续赋值语句调用函数gefun时,可以采用如下语句:
assignout二is_legalgefun(in):
1'
bO;
注意'
在函数中不能包含有任何的时间控制语句,并且定义函数时至少要有一个输人
参量。
语句的顺序执行和并行执行
用Ve川ogHDL模块来设计电路,首先应该清楚哪些操作是同时发生的,哪些是顺序发生的。
在"
模块内,逻辑是按照指定的顺序执行的,“always”块内的语句称为顺序语句因为这些语句完全按照书写的顺序来执行。
“always吟莫块之间,是同时执行的,或者说是并行执行的。
两个或更多个“always”模块、"
assign"
语句、实例元件等都是同时执行的。
通过下面的例子,可以清楚地看到-always"
模块内的语句是顺序执行的,而always"
模块之
【例】顺序执行模块
moduleseria2(q,a,clk)
outputq,a;
inputelk;
regq,a;
always@(posedgeelk);
a=~q;
endmodule
上面的两个例子,其区别只是在-always11模块内,把两个赋值语句的顺序相互颠倒。
分别对上面的两个模块用MAX+PLUSII软件进行模拟仿真,从得到的波形可以看到:
在模块1中q先取反,然后再取反给a,a和q的波形是相反的;
在模块2中,q取反后赋值给q和"
8和q的波形是相同的。
如果将上述两句赋值语句分别放在两个"
always11模块中,如下面例和例两个程序所示,经过仿真可以发现:
这两个nalways-模块放置的顺序对结果并没有影响,因为这两个模块是并行执行的。
【例】并行模块1【例】并行模块2
moduleparalfq,a,elk);
moduleparal2(q,a,elk);
beginbegin
q=~q;
a=~q;
endend
always@(posedgeelk)always@(posedgeelk)
q八q;
endmoduleendmodule
例和例的仿真波形与例的仿真波形是完全相同的。
小结
本章介绍VerilogHDL的语法结构,包括变量、语句、模块和不同抽象级别的电路的
设计和描述。
需要注意的是,所有的VerilogHDL编译软件都只支恃该语言的某一个子集。
所以,在使用VerilogHDL进行编译时,必须弄清楚所用编译软件的功能,用编译软件支持的语句来描述所设计的系统。
七.参考资料
《数字系统设计与VerilogHDL»
电子工业出版社王金明等编著。
《CPLD逻辑电路设计与实习》捷太出版社萧如宣著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 语言 基础知识