Verilog初级教程(9)Verilog的运算符
博文目录
- 写在前面
- 正文
- Verilog算术运算符
- Verilog关系运算符
- Verilog等价运算符
- Verilog逻辑运算符
- Verilog位元运算符
- Verilog移位运算符
- 参考资料
- 交个朋友
写在前面
本系列相关博文链接:
Verilog初级教程(8)Verilog中的assign语句
Verilog初级教程(7)Verilog模块例化以及悬空端口的处理
Verilog初级教程(6)Verilog模块与端口
Verilog初级教程(5)Verilog中的多维数组和存储器
Verilog初级教程(4)Verilog中的标量与向量
Verilog初级教程(3)Verilog 数据类型
Verilog初级教程(2)Verilog HDL的初级语法
Verilog初级教程(1)认识 Verilog HDL
芯片设计抽象层及其设计风格
Verilog以及VHDL所倡导的的代码准则
FPGA/ASIC初学者应该学习Verilog还是VHDL?
个人微信公众号: FPGA LAB
个人博客首页
注:学习交流使用!
正文
不能处理的数据是没有用的,在数字电路和计算机系统中总是需要一些形式的计算,让我们来看看Verilog中的一些运算符,这些运算符可以使综合工具实现相应的硬件元素。
Verilog算术运算符
Operator | Description |
---|---|
a + b | a plus b |
a - b | a minus b |
a * b | a multiplied by b |
a / b | a divided by b |
a % | b a modulo b |
a ** b | a to the power of b |
仿真文件
module des;reg [7:0] data1;reg [7:0] data2;initial begindata1 = 45;data2 = 9;$display ("Add + = %d", data1 + data2);$display ("Sub - = %d", data1 - data2);$display ("Mul * = %d", data1 * data2);$display ("Div / = %d", data1 / data2);$display ("Mod %% = %d", data1 % data2);$display ("Pow ** = %d", data2 ** 2);end
endmodule
仿真结果:
ncsim> run
Add + = 54
Sub - = 36
Mul * = 149
Div / = 5
Mod % = 0
Pow ** = 81
ncsim: *W,RNQUIE: Simulation is complete.
Verilog关系运算符
Operator | Description |
---|---|
a < b | a less than b |
a > b | a greater than b |
a <= b | a less than or equal to b |
a >= b | a greater than or equal to b |
仿真文件
module des;reg [7:0] data1;reg [7:0] data2;initial begindata1 = 45;data2 = 9;$display ("Result for data1 >= data2 : %0d", data1 >= data2);data1 = 45;data2 = 45;$display ("Result for data1 <= data2 : %0d", data1 <= data2);data1 = 9;data2 = 8;$display ("Result for data1 > data2 : %0d", data1 > data2);data1 = 22;data2 = 22;$display ("Result for data1 < data2 : %0d", data1 < data2);end
endmodule
仿真结果:
ncsim> run
Result for data1 >= data2 : 1
Result for data1 <= data2 : 1 Result for data1 > data2 : 1
Result for data1 < data2 : 0
ncsim: *W,RNQUIE: Simulation is complete.
Verilog等价运算符
Operator | Description |
---|---|
a === b | a equal to b, including x and z |
a !== b | a not equal to b, including x and z |
a == b | a equal to b, result can be unknown |
a != b | a not equal to b, result can be unknown |
仿真文件
module des;reg [7:0] data1;reg [7:0] data2;initial begindata1 = 45; data2 = 9; $display ("Result for data1(%0d) === data2(%0d) : %0d", data1, data2, data1 === data2);data1 = 'b101x; data2 = 'b1011; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);data1 = 'b101x; data2 = 'b101x; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);data1 = 'b101z; data2 = 'b1z00; $display ("Result for data1(%0b) !== data2(%0b) : %0d", data1, data2, data1 !== data2);data1 = 39; data2 = 39; $display ("Result for data1(%0d) == data2(%0d) : %0d", data1, data2, data1 == data2);data1 = 14; data2 = 14; $display ("Result for data1(%0d) != data2(%0d) : %0d", data1, data2, data1 != data2); end
endmodule
仿真结果
ncsim> run
Result for data1(45) === data2(9) : 0
Result for data1(101x) === data2(1011) : 0
Result for data1(101x) === data2(101x) : 1
Result for data1(101z) !== data2(1z00) : 1
Result for data1(39) == data2(39) : 1
Result for data1(14) != data2(14) : 0
ncsim: *W,RNQUIE: Simulation is complete.
Verilog逻辑运算符
Operator | Description |
---|---|
a && b | evaluates to true if a and b are true |
a || b
|
evaluates to true if a or b are true |
!a | Converts non-zero value to zero, and vice versa |
仿真文件
module des;reg [7:0] data1;reg [7:0] data2;initial begindata1 = 45; data2 = 9; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);data1 = 0; data2 = 4; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);data1 = 'dx; data2 = 3; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);data1 = 45; data2 = 9; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);data1 = 0; data2 = 4; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);data1 = 'dx; data2 = 3; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);data1 = 4; $display ("Result of !data1(%0d) : %0d", data1, !data1);data1 = 0; $display ("Result of !data1(%0d) : %0d", data1, !data1); end
endmodule
仿真结果:
ncsim> run
Result of data1(45) && data2(9) : 1
Result of data1(0) && data2(4) : 0
Result of data1(x) && data2(3) : x
Result of data1(Z) && data2(5) : 1
Result of data1(45) || data2(9) : 1
Result of data1(0) || data2(4) : 1
Result of data1(x) || data2(3) : 1
Result of data1(Z) || data2(5) : 1
Result of !data1(4) : 0
Result of !data1(0) : 1
ncsim: *W,RNQUIE: Simulation is complete.
Verilog位元运算符
& | 0 | 1 | x | z |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | x | x |
x | 0 | x | x | x |
z | 0 | x | x | x |
|
|
0 | 1 | x | z |
---|---|---|---|---|
0 | 0 | 1 | x | x |
1 | 1 | 1 | 1 | 1 |
x | x | 1 | x | x |
z | x | 1 | x | x |
value | 0 | 1 | x | z |
---|---|---|---|---|
~ | 1 | 0 | x | x |
仿真文件
module des;reg data1 [4] ;reg data2 [4] ;int i, j;initial begindata1[0] = 0; data2[0] = 0;data1[1] = 1; data2[1] = 1;data1[2] = 'x; data2[2] = 'x;data1[3] = 'z; data2[3] = 'z;for (i = 0; i < 4; i += 1) beginfor (j = 0; j < 4; j += 1) begin$display ("data1(%0d) & data2(%0d) = %0d", data1[i], data2[j], data1[i] & data2[j]);endendend
endmodule
仿真结果:
ncsim> run
data1(0) & data2(0) = 0
data1(0) & data2(1) = 0
data1(0) & data2(x) = 0
data1(0) & data2(z) = 0
data1(1) & data2(0) = 0
data1(1) & data2(1) = 1
data1(1) & data2(x) = x
data1(1) & data2(z) = x
data1(x) & data2(0) = 0
data1(x) & data2(1) = x
data1(x) & data2(x) = x
data1(x) & data2(z) = x
data1(z) & data2(0) = 0
data1(z) & data2(1) = x
data1(z) & data2(x) = x
data1(z) & data2(z) = x
ncsim: *W,RNQUIE: Simulation is complete.
Verilog移位运算符
- 逻辑移位: << and >>
- 算术移位 :<<< and >>>
仿真文件:
module des;reg [7:0] data;int i;initial begindata = 8'h1;$display ("Original data = 'd%0d or 'b%0b", data, data);for (i = 0; i < 8; i +=1 ) begin$display ("data << %0d = 'b%b", i, data << i);enddata = 8'h80;$display ("Original data = 'd%0d or 'b%0b", data, data);for (i = 0; i < 8; i +=1 ) begin$display ("data >> %0d = 'b%b", i, data >> i);enddata = 8'h1;$display ("
data >> 1 = 'b%b", data >> 1);end
endmodule
仿真结果:
ncsim> run
Original data = 'd1 or 'b00000001
data << 0 = 'b00000001
data << 1 = 'b00000010
data << 2 = 'b00000100
data << 3 = 'b00001000
data << 4 = 'b00010000
data << 5 = 'b00100000
data << 6 = 'b01000000
data << 7 = 'b10000000
Original data = 'd128 or 'b10000000
data >> 0 = 'b10000000
data >> 1 = 'b01000000
data >> 2 = 'b00100000
data >> 3 = 'b00010000
data >> 4 = 'b00001000
data >> 5 = 'b00000100
data >> 6 = 'b00000010
data >> 7 = 'b00000001data >> 1 = 'b00000000
ncsim: *W,RNQUIE: Simulation is complete.
参考资料
- 参考资料1
- 参考资料2
交个朋友
个人微信公众号:FPGA LAB
知乎:李锐博恩
FPGA/IC技术交流2020
Verilog初级教程(9)Verilog的运算符相关推荐
- Verilog初级教程(23)Verilog仿真中的显示任务
文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...
- Verilog初级教程(21)Verilog中的延迟控制语句
文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...
- Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...
- Verilog初级教程(15)Verilog中的阻塞与非阻塞语句
文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...
- Verilog初级教程(14)Verilog中的赋值语句
文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...
- Verilog初级教程(12)Verilog中的generate块
文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...
- Verilog初级教程(11)Verilog中的initial块
文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...
- Verilog初级教程(2)Verilog HDL的初级语法
文章目录 前言 正文 注释 空格 操作符 数字格式 字符串 标识符 关键字 verilog修订 写在最后 前言 学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎 ...
- Verilog初级教程(19)Verilog中的参数
文章目录 前言 正文 模块参数 覆盖参数 例子说明 递增计数器 递减计数器 Specify参数 模块参数与Specify参数的区别 往期回顾 参考资料及推荐关注 前言 Verilog中的参数是使得设计 ...
最新文章
- ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
- 【Docker】网络模式
- HP刀片机远程https安装RedHat 5.4
- 做女程序员是一种什么样的体验?
- 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
- 设计模式-Builder模式详解
- 一人有限责任公司章程范本
- 读取pdf文字和excel写入操作
- BPF-JIT中bug归类
- iOS 屏幕录制 (可选录入麦克风的声音)
- Windows卸载与清除工具 “ Geek 与 CCleaner ”
- Mybatis——增删改查CLUD
- C#开发WINCE系统的PDA程序,GetSystemMetrics获取屏幕长宽以达到自适应分辨率
- 自然人税收管理系统扣缴客户端Sqlite数据库有密码的,如何破解读取呢
- 如何最大程度地利用制造ERP软件
- springboot整合dubbox+zookeeper
- HiBlock区块链社区:链接全球区块链开发者
- 交巡警求全市距离MATLAB程序,交巡警服务平台的设置与调度数学建模论文_
- 商业世界的革新,数字化转型的“顶层设计”
- Spring Security(十一):授权认证(OAuth2)-授权码模式(authorization_code)
热门文章
- Lync Server 2010移动功能部署PART B:外部篇
- 给jqGrid数据行添加修改和删除操作链接
- 3745路由器配置简单的dhcp server
- linq to sql初步
- pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程
- 速卖通关键词挖掘工具_网站优化必备的关键词挖掘工具
- java对象的初始化顺序_Java对象初始化顺序
- 黑苹果闪屏解决方法_脖子黑可以用什么方法解决,专家讲解
- clob存base64文件存不进去_Kafka 和 RocketMQ 底层存储之那些你不知道的事
- 金华杭州计算机学校录取分数线,2017年浙江金华各地中考录取分数线