Skip to content

Verilog 运算符

Verilog Operators

  • Verilog HDL

运算符按功能分类

逻辑运算符

算术运算用于数值计算,逻辑运算用于逻辑判断和控制

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

位运算符:

位运算符
~	//按位取反      
&	//按位与
|	//按位或(bitwise OR)操作符,它对两个数的所有位执行逻辑或操作
||    //逻辑或(logical OR)操作符,它对两个表达式执行逻辑或操作
^	//按位异或
^~,~^	//按位同或
  • 注意区分&&和&(按位与)的区别

关系运算符

<  //小于
<=
>
>=

运算结果为真,则结果为1,否则为0。若某操作数为不定值x,则返回值x

缩减运算符

单目运算符

&	//与
~&	//与非
|	//或
~|	//或非
^	//异或
~^,^~	//同或

注意:缩减运算符写在操作数左边,结果是一位的

例:

reg[3:0] a: b= | a 
			// b=(a[0] | a[1] | a[2] | a[3])

移位运算符

>>	//右移  缩小;右移一位的操作是将每一位数字向右移动一个位置。这个过程中,最右边的位(最低位)被丢弃,然后左边填充0

<<	//左移  放大,左移几位在后面添几个零,左移会扩充位数

用法:A>>n // 将操作数右移n位,同时用n个0填补移出的空位。

例: 4’b1001>>3 = 4b’0001; 4’b1001>>4 = 4b’0000 4’b10111>>1 = 4’b01011

4‘b1001<<1= 5’b10010 4’b1001<<2 = 6’b100100;

位拼接运算符(重点)

image1

还有一些简化写法:如

  • {4{w}}
  • {b,{3{a,b}}}

注意:在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则默认为32位的二进制数!

  • 如{1,0}=64’h00000001_00000000(32位的1和32位的0作拼接),注意{1.0}不等于2‘b10

等式运算符

== 	//等于——
		两个操作数逐位相等,结果才是1,若某些位有x,则结果为x
= 	//不等于
=== 	//全等
		完全相等,如两个xx,则结果也是1
== 	//不全等

注意:=====的区别

条件运算符

  • 属于三目运算符

信号=a?表达式1 : 表达式2

如果a为真,则选表达式1,否则表达式2

运算符的优先级

  • 不用单独记忆,括号里面先运算

延迟四个单位,对ain取值,%取余

例化 (名随便取)

逗号后面打一个空格,来连接信号,提高可读性

表示0-15的数,ain和bin能取到的最大值

没有finish的话仿真会一直执行下去,看不到波形

  1. 声明

  2. 赋初值

  3. 时钟信号规律

  4. 波形“输入”的变化取值

  5. 开始是时候结束

  6. 例化