Verilog HDL——运算符
1.1 逻辑运算符
在Verilog HDL语言中有三种逻辑运算符:
1)&&逻辑与;
2)|| 逻辑或;
3)! 逻辑非。
“&&”和“||”是双目运算符,它要求要有两个操作数,如(a>b)&&(b<c),(a<b)||(b<c)。“!”是单目运算符,只要求一个操作数,如!(a>b)。表1.1为逻辑运算表,他表示a和b的值为不同的组合时,各种逻辑运算所得到的值。
a | b | !a | !b | a&&b | a||b |
真 | 真 | 假 | 假 | 真 | 真 |
真 | 假 | 假 | 真 | 假 | 真 |
假 | 真 | 真 | 假 | 假 | 真 |
假 | 假 | 真 | 真 | 假 | 假 |
逻辑运算符中“&&”和“||”的优先级低于关系运算符,“!”高于算术运算符。见下例子中
(a<b)&&(x<y),可以直接写成:a<b && x<y;
(a==b) || (x==y),可直接写成:a==b || x==y
(!a) || (a>b),可写成:!a || a>b
为了提高程序的可读性,明确表达各运算符间的优先级关系,建议使用括号。
1.2 关系运算符
关系运算符共有以下四种:
1) a<b,读作a小于b
2)a>b ,读作a大于b
3) a<=b,读作a小于等于b
4)a>=b,读作a大于等于b
在进行关系运算时,声明的关系是假的,则返回值是0,如果声明的关系是真的,则返回值是1;如果某个操作数的值不定,则关系是模糊的,返回值是不定值。
所有的关系运算符有着相同的优先级别,关系运算符的优先级别低于算术运算符的优先级。见下例:
a<size-1 //这种表达方式等同于下面这种表达方式
a<(size-1)
size-(1<a) //这种表达方式等同于下面这种表达方式
size-1<a
从上面的例子可以看出,这种两种不同的运算符的优先级别,当表达式size-(1<a)进行运算时,关系表达式先进行运算,然后返回值为0或者1被size 减去,而当表达式size-1<a进行运算时,size先被减去1,然后再进行同a的比较。
1.3 等式运算符
在Verilog HDL语言中存在4种等式运算符:
1)== (等于)
2)!= (不等于)
3)=== (等于)
4)!== (不等于)
这四个运算符都是双目运算符,它要求有两个操作数“==”和”!=”又称为逻辑等式运算符,其结果由两个操作数的值决定。由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。而“===”和“!==”运算符则不同,它在对操作数进行比较时对某些位的不定值x和高阻值z也进行比较,两个操作数完全一致,其结果才是1,否则为0.“===“和”!==“运算符常用于case表达式的判别,所以又称为”case等式运算符“。这4种等式运算符的优先级别是相同的。表1.2列出”==“和”===“的真值表,帮助理解二者之间的区别。
下面举一个例子说明”==”和“===“的区别:
if(A==1'BX) $display(“Aisx”); (当A等于x时,这个语句不执行)
if(A===1'bx) $display("Aisx"); (当A等于x时,这个语句执行)
=== | 0 | 1 | x | z | == | 0 | 1 | x | z |
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | x | x |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | x | x |
x | 0 | 0 | 1 | 0 | x | x | x | x | x |
z | 0 | 0 | 0 | 1 | z | x | x | x | x |
1.4 移位运算符
在Verilog HDL语言中有两种移位运算符:“<<”(左移位运算符)和“>>”*(右移位运算符)。其使用方法如下:
a>>n 或a<<n
a代表要进行移位的操作数,n代表要移动几位。这两种移位运算都用0来填补移出的空位。下面举例说明:
module shift;
reg [3:0] start,result;initial;beginstart =1;result = (start<<2);end
endmodule
从这一例子中可以看出来,start在移位过两位后,用0填补空出来的位。
进行移位运算时应注意移位前后变量的位数。下面将给出一个例子:
4'b1001<<1 = 5'b10010; 4'b1001<<2 = 6'b100100
1<<6 = 32'b1000000 4'b1001>>1 = 4'b0100
4'b1001 >>4 = 4'b0000 //这里详细的说明了前后移位的位数,所以是0000
1.5 位拼接运算符
在Verilog HDL语言中有一个特殊的运算符,位拼接运算符(Concatation){}。这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:
{信号1的某几位,信号2的某几位,信号3的某几位,...,...信号n的某几位}
即把某些信号的某些详细位详细的列出来,中间用逗号隔开,最后用大括号括起来表示个整体信号。见下例子:
{a,b[3:0],w,3'b101}
也可以写成{a,b[3]],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}
在位拼接表达式中不允许存在没有指明位数的信号,这是因为在计算机中拼接信号位宽的大小时必须知道其中每个信号的位宽。
位拼接可以用重复法来简化表达式。见下例:
{4{w}} //这等同于{w,w,w,w}
位拼接还可以用嵌套的方式来表达。见下例:
{b,3{a,b}} /这等同于{b,a,b,a,b,a,b}
用于表示重复的表达式,如上例中的4和3,必须是常数表达式。
1.6 缩减运算符
缩减运算符(reduction operator)是单目运算符,也有与、或、非运算。其与、或、非运算规则类似于位运算符的与、或、非运算规则,但其运算过程不同。位运算是对操作数的相应位进行与、或、非运算,操作数是几位数,其运算结果也是几位数。而缩减运算符则不同,缩减运算是对单个操作数进行与、或、非递推运算,最后的运算结果是1位的二进制数。缩减运算的具体运算过程是这样的:第一步先将操作数的第一位与第二位进行与、或、非运算;第二步将运算结果与第三位进行与、或、非运算,依此类推,直至最后一位。例如:
reg [3:0] B;
reg C;
C=&B
相当于C=((B[0]&B[1])&B[2])&B[3])
由于缩减运算的与、或、非运算规则类似于位运算的与、或、非运算规则,这里不再详细的讲述。
1.7 优先级别
下面对各种运算符的优先级别关系做一总结,如表1.3所列
优先级别 | |
---|---|
! ~ * / % + - << >> == != === !== & ^ ^~ | && || ?: |
最高优先级 | | | | | | | 最低优先级 |
1.8 关键字
在Verilog HDL中,所有的关键字是事先定义好的,用来组织语言结构。关键字使用小写字母定义的,因此在编写源程序中要注意关键字的书写,以避免出错,下面是Verilog HDL中是使用的关键字。
always,and,assign,begin,buf,bufif0,case,casex,casez,cmos.deassign,default,defparam,disable,edge,end,endcase,endmodule,endfunction,endprimitive,endspecify,endtable,endtask,event,else,for,forever,fork.function,highz0,highz1,if,initial,inout等,详情可参照网上详细资料。
Verilog HDL——运算符相关推荐
- 【 Verilog HDL 】Verilog 迭代连接运算符
Verilog HDL中有一个特殊的连接符号--"{}",(上次看华为面试题也有这个简单的选择题),称为迭代连接运算符,顾名思义,它兼具迭代和连接的双重功效,如下: (1)连接功能 ...
- Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别
文章目录 前言 一.单目运算符.双目运算符和三目运算符 二.位运算符 三.逻辑运算符 四.缩减运算符 五.总结 前言 我们在学习和理解Verilog HDL中的一些运算符的意义时,可能会对一些运算符的 ...
- (57)Verilog HDL选择运算符:?
(57)Verilog HDL选择运算符:? 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL选择运算符:? 5)结语 1.2 FPGA简介 FPG ...
- 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...
- Verilog初级教程(9)Verilog的运算符
博文目录 写在前面 正文 Verilog算术运算符 Verilog关系运算符 Verilog等价运算符 Verilog逻辑运算符 Verilog位元运算符 Verilog移位运算符 参考资料 交个朋友 ...
- verilog 移位运算符 说明_FPGA、数字IC系列(2)——电子科大与北航部分Verilog题目与解析...
1. 在不影响逻辑功能的情况下, CMOS与非门的多余输入端可 ______. A.接高电平 B.接低电平 C.悬空 D.通过电阻接地 答案 :A 解析 :CMOS与非门,只要有一个输入端为低电平,与 ...
- verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...
Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符+,-,*,/,% 优先顺序 !~ * / % + - << >& ...
- FPGA学习笔记---Verilog HDL 可综合语句和不可综合语句汇总
作为HDL语言,有两种基本的用途:系统仿真和设计实现.所有的HDL描述都可用于仿真,但并非所有的HDL描述都可综合. 一般综合工具支持的Verilog HDL结构 Verilog HDL结构 可综合性 ...
- 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介
本文首发于微信公众号"花蚂蚁",想要学习FPGA及Verilog的同学可以关注一下. 众所周知,学习FPGA必须首先掌握一门硬件描述语言,所以我为初学者小白们将Verilog语法进 ...
最新文章
- mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...
- 每次新版本build时,让软件的版本号自增
- 服务器功率一般多少_单机柜供电能力提升后,选择1U服务器还是2U服务器?
- 人生时间计算器_工具拯救效率,高效拯救人生!70个全国工程人实用小工具+算量表格...
- 4个Keynote、12篇论文分享、40个Poster,CVPR 2021论文分享会全日程公布
- Kettle使用_30 作业里使用参数
- 百度地图API禁用点击景点弹出详细信息的方法
- flux java_Java反应式框架Reactor中的Mono和Flux
- WebStorm 代码文字发虚模糊 - 解决篇
- 电脑内录软件哪个好,你一直都在如何录制电脑内部声音?
- Jersey入门教程
- 怎么制作合法有效的电子签名?
- 如何区分前后端 BUG
- 五个拿来就能用的炫酷登录页面
- 如何去除图片雾化?给你推荐图片去雾怎么去除的方法
- python 过滤掉字符串中的回车符与换行符(\t\n)
- 关于openpyxl里“合并单元格和插入新行”与“冻结窗格”的坑
- 链式法则(chain rule)
- QT调用opencv的videowrite类输出生成视频打不开(已解决)
- Lenovo GTX960M 配置CUDA
热门文章
- 中国线缆产业电商的拓荒者 专访缆360 CEO胡德良
- 电脑CPU使用率过高怎么办
- linux搭建个人网盘,Linux下使用nextcloud搭建个人网盘
- 一文搞懂什么是前端渲染和后端渲染以及两者的区别
- (1)英特尔工业边缘洞见平台(EII)安装指南
- Java是如何实现平台无关性(跨平台)的?
- [纯理论] FPN (Feature Pyramid Network)
- python最佳编程语言_前十大编程语言你会几种?
- Wootrade 评级报告:B,展望稳定 | TokenInsight
- 好听的歌曲单片机c语言程序,用c语言在单片机AT89C51编写音乐程序,求程序,求求你们了...