数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

今天继续介绍数字系统设计技术的内容,本次要介绍的内容是verilog语言中的运算符和语句结构说明,比如赋值语句和结构语句等。

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

逻辑运算符

逻辑运算符和C语言一样,用于逻辑判断,其中包括逻辑与、逻辑或和逻辑非运算符。他们的运算符标识如下所示:

逻辑与:&& 逻辑或:|| 逻辑非:!

其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符。简单举几个逻辑运算的例子:

c=a&&b; c=a||b; c=!b;

其中a、b和c都为单bit数据,如果是多bit数据运算,应该使用按位运算符。逻辑与运算中,只有两个操作数同时为1,逻辑与之后的结果才为1。逻辑或运算中,只要其中一个操作数为1,逻辑或之后的结果就为1。逻辑非运算中,当操作数为0时,逻辑非之后的结果为1。逻辑运算的真值表如下图所示:

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

关系运算符

关系运算符就是用来比较两个操作数之间的大小关系的运算符,包括四种:大于>,小于=,和小于等于<=。关系运算符也是双目运算符,需要运算符的左右两边都有操作数,返回的值是真(true)或者假(false)。例如:a=3,b=4,c=a

等式运算符

等式运算符的作用是比较两个操作数是否相等,也是双目运算符。verilog中的等式运算符同样有4种,分别是等于(==),不等于(!=),等于(===)和不等于(!==)。这里需要注意的是:等于运算符==和===以及不等于!=和!==之间的区别,其中,==和!=是对两个操作数做逻辑判断,如果操作数中有不定态x或者高阻态z,那运算结果也是x或者z。而===和!==会对操作数的x和z态也做比较,加入两个操作数都为x或者都为z的时候,运算结果也为1。

移位运算符

移位运算符比较简单,就两个符号,左移(<>)。

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

如上图所示就是移位运算符的简单例子,可见无论是左移还是右移运算,总是在末端补0。

位拼接运算符

位拼接运算是把不同的信号拼接成一个信号的运算操作,它的运算符号是{}.下面举个例子。比如:a={b[3:0],c[1],d[4:2]};那么信号a就是用信号b、c、d的不同位拼接而成的信号。

缩减运算符

缩减运算符有三种:与、或和非,它是单目运算符,缩减运算符的意思是对一个n比特的信号的每一位一次进行逻辑运算,到最后得到1比特的运算结果。举个例子:

reg [3:0]a;

reg c;

c= &a;

那么相当于c=((a[0]&a[1])&a[2])&a[3];

所以最后c的结果是1比特的数据,在设计中适当运用缩减运算符可以简化程序。

算术运算符

算术运算符包括:+、-、*、/、%,和c语言中的含义一直,因此这里不再解释,但是需要注意的是,在数字电路设计中我们不会直接使用除法和求余运算,而是通过一定的转化变成乘法运算,或者调用封装好的库单元代替直接用运算符号。

运算符的优先级别

上面基本上已经把verilog中所有的运算符介绍完毕,那么假如一条语句中有多个运算符,它们的优先级顺序又是怎么样的呢?请参考下图:

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

verilog中的关键字

每一种语言都有设定的关键字,关键字的意思就是事先已经由系统定义好的,不能用来做变量或者常量名字。verilog中的设定的关键字非常多,比如module、reg、wire、initial、case、force、if、else等等。这里就不全部罗列出来了,感兴趣的可以自己查阅书籍。

赋值语句说明

verilog中的赋值语句有两种:非阻塞赋值和阻塞赋值。其中非阻塞赋值是可综合时序逻辑设计中的赋值方法,它的赋值符号是<=,例如:a<=b;阻塞赋值则是在组合逻辑中使用,它的运算符是等于号=,例如a=b;那么两者之间有什么区别呢?

非阻塞赋值总是在always里面执行:

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

如上图中,always里面两条赋值语句都是非阻塞赋值,这种赋值方式的特点是b和c的赋值动作在clk的上升沿同时执行,比如初始值a=1,b=2,c=3;那么执行完上面的非阻塞赋值后,b=1,c=2; 如果是阻塞赋值:

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

则结果不一样,它是按顺序执行的,赋值结果是:b=1;c=1;

块语句说明

verilog中允许使用两种块语句:begin_end和fork_join,其中begin_end的特点是begin和end之间的语句是顺序执行的,而fork_join里面的语句是同时并行执行的。两种块语句的格式如下所示:

数字系统设计技术精讲:verilog运算符和语句结构介绍(第二课)

今天先给大家分享这么多,看完的伙伴点赞转发一下吧!谢谢!


分享到:


相關文章: