Verilog学习----运算符、结构说明语句
1.运算符
逻辑运算符
&&//逻辑与、||//逻辑或、!//逻辑非;
&&、||为双目运算符,!为单目运算符;
逻辑运算符&&和||的优先级低于关系运算符,!高于算术运算符;
为了提高程序的可读性,明确表达各运算符之间的关系,建议使用括号;
关系运算符 <//小于、>//大于、<=//小于或等于、>=//大于或等于;
进行关系运算时如果声明的关系是假的,则返回0;
所有的关系运算符有相同的优先级别,低于算术运算符的优先级别;
等式运算符
==//等于 逻辑等式运算符
!=//不等于 逻辑等式运算符
===//等于 两操作时必须完全一致时才为1(Z 、X)
!==//不等于
移位运算符
>>//右移运算符
<<//左移运算符
位拼接运算符
{信号1的某几位,信号2的某几位,……,信号N的某几位}
在位拼接表达式中不能存在没有指明位数的信号。
缩减运算符
是单目运算符,也有与、或、非运算。
运算过程第一步先把操作数的第一位与第二位进行或、与、非运算;
第二步把运算结果与第三位进行或、与、非,依次类推,直至最后一位。
运算符的优先级
!、~
*、/、%
+、-
<、<=、>、>=
==、!=、===、!==
&
^、^~
|
&&
||
?:
2.赋值语句和块语句
赋值语句
1.非阻塞(non_blocking)赋值语句方式(<=)
在语句块中所赋的值不能立即就为下面的语句所用;
块语句完成后才能完成此次赋值操作,而所赋的变量值是上一次赋值得到的;
在编写可综合的时序逻辑模块时,这是最常用的赋值方法。
2.阻塞(blocking)赋值方式
赋值语句执行完后,快猜结束;
赋值语句执行后值立刻就发生改变;
在时序逻辑中使用可能会产生意想不到的结果。
块语句
1.顺序块
快内的语句是按顺序执行的,即上一个语句执行完才执行下一个语句;
每条语句的延时时间是相对与前一条语句的仿真时间而言的;
直到最后一条语句执行完,程序流程控制才跳出该语句块。
格式
Begin
语句1;
语句2;
………..
语句N;
End
或
Begin:块名
块内声明语句//可以是参数声明语句、REG型变量、integer型、real型
语句1;
语句2;
………..
语句N;
End
2.并行块
块内语句同时发生,块内的所有语句同时并行执行;
块内每条语句的延时时间是相对于程序流程控制进入到块内的仿真时间的;
延时时间是用来给赋值语句提供执行时序的;
当时间时序排序在最后执行或一个disable语句执行时程序流程控制跳出该块。
格式
fork
语句1;
语句2;
………...
语句N;
Join
或
fork:块名
块内声明语句//参数、REG、integer、real、time、event。
语句1;
语句2;
………..
语句N;
join
3.块名 在关键词begiN或fork后面添加
原因:
可以在块内定义局部变量,只在块内使用的变量。
可以允许块被其他语句调用,如disabl语句。
在Verilog语言里,所用的变量都是静态的,变量都只有唯一的存储地址,因此进入跳出块不影响存储在变量内的值。
4.起始时间结束时间
顺序块
起始时间就是第一条语句开始被执行的时间,结束时间就是最后一条语句执行完的时间。
并行块
起始时间对于块内所有语句都是相同的,即程序流程控制进入该块的时间。结束时间是按时间排序在最后的语句执行的结束时间