博文目录

  • 写在前面
  • 正文
    • 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的运算符相关推荐

  1. Verilog初级教程(23)Verilog仿真中的显示任务

    文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...

  2. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  3. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  4. Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

    文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...

  5. Verilog初级教程(14)Verilog中的赋值语句

    文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...

  6. Verilog初级教程(12)Verilog中的generate块

    文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...

  7. Verilog初级教程(11)Verilog中的initial块

    文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...

  8. Verilog初级教程(2)Verilog HDL的初级语法

    文章目录 前言 正文 注释 空格 操作符 数字格式 字符串 标识符 关键字 verilog修订 写在最后 前言 学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎 ...

  9. Verilog初级教程(19)Verilog中的参数

    文章目录 前言 正文 模块参数 覆盖参数 例子说明 递增计数器 递减计数器 Specify参数 模块参数与Specify参数的区别 往期回顾 参考资料及推荐关注 前言 Verilog中的参数是使得设计 ...

最新文章

  1. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
  2. 【Docker】网络模式
  3. HP刀片机远程https安装RedHat 5.4
  4. 做女程序员是一种什么样的体验?
  5. 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
  6. 设计模式-Builder模式详解
  7. 一人有限责任公司章程范本
  8. 读取pdf文字和excel写入操作
  9. BPF-JIT中bug归类
  10. iOS 屏幕录制 (可选录入麦克风的声音)
  11. Windows卸载与清除工具 “ Geek 与 CCleaner ”
  12. Mybatis——增删改查CLUD
  13. C#开发WINCE系统的PDA程序,GetSystemMetrics获取屏幕长宽以达到自适应分辨率
  14. 自然人税收管理系统扣缴客户端Sqlite数据库有密码的,如何破解读取呢
  15. 如何最大程度地利用制造ERP软件
  16. springboot整合dubbox+zookeeper
  17. HiBlock区块链社区:链接全球区块链开发者
  18. 交巡警求全市距离MATLAB程序,交巡警服务平台的设置与调度数学建模论文_
  19. 商业世界的革新,数字化转型的“顶层设计”
  20. Spring Security(十一):授权认证(OAuth2)-授权码模式(authorization_code)

热门文章

  1. Lync Server 2010移动功能部署PART B:外部篇
  2. 给jqGrid数据行添加修改和删除操作链接
  3. 3745路由器配置简单的dhcp server
  4. linq to sql初步
  5. pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程
  6. 速卖通关键词挖掘工具_网站优化必备的关键词挖掘工具
  7. java对象的初始化顺序_Java对象初始化顺序
  8. 黑苹果闪屏解决方法_脖子黑可以用什么方法解决,专家讲解
  9. clob存base64文件存不进去_Kafka 和 RocketMQ 底层存储之那些你不知道的事
  10. 金华杭州计算机学校录取分数线,2017年浙江金华各地中考录取分数线