FPGA设计Verilog基础之Verilog的运算符

这篇具有很好参考价值的文章主要介绍了FPGA设计Verilog基础之Verilog的运算符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

verilog 不等于,FPGA进阶,fpga开发,Verilog的运算符,Verilog的运算符优先级

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus

verilog 不等于,FPGA进阶,fpga开发,Verilog的运算符,Verilog的运算符优先级

FPGA设计Verilog基础之Verilog的运算符Verilog是一种硬件描述语言,支持多种运算符,包括算术运算符、比较(关系)运算符、逻辑运算符、条件运算符https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247485152&idx=1&sn=28ca47f6cae79f6db708086d6f7c3bad&chksm=e81c25e6df6bacf0cd2d04315c716e870add24c8e1c11be0840a1c7e710bdba157a4a545d427#rd

Verilog是一种硬件描述语言,支持多种运算符,包括算术运算符、比较(关系)运算符、逻辑运算符、条件运算符、位运算符、移位运算符、拼接运算符和其他一些运算符。在进行Verilog开发时,需要熟悉各种运算符的作用和使用方法,以及运算符的优先级。

在前面的文章中已经介绍了一百多个Verilog关键字的特性和使用的总结,详情请参考文末的推荐阅读。

FPGA专栏:https://blog.csdn.net/zhouruifu2015/category_5690253

例如:

module comparator(input a, input b, output eq);

  assign eq = (a == b);

endmodule

上述代码定义了一个比较器模块,它有两个输入端口a和b,一个输出端口eq。内部逻辑使用比较运算符实现。

1. 算术运算符

在Verilog HDL语言中,算术运算符又称为二进制运算符。

Verilog支持加、减、乘、除和取模等算术运算符,算术运算符,简单来说,就是数学运算里面的加减乘除,数字逻辑处理有时候也需要进行数字运算,所以需要算术运算符。这些运算符的作用和使用方法如下:

加法运算符(+):将两个数相加。或称为正值运算符。

减法运算符(-):将两个数相减。或称为负值运算符。

乘法运算符(*):将两个数相乘。

除法运算符(/):将两个数相除。

取模运算符(%):求两个数相除的余数。或称为求余运算符。

例如,下面是一个使用算术运算符的示例:

reg [7:0] a, b, c;

assign c = a + b;

assign c = a - b;

assign c = a * b;

assign c = a / b;

assign c = a % b;

Verilog实现乘除比较浪费组合逻辑资源,尤其是除法。一般2的指数次幂的乘除法使用移位运算来完成运算,详情可以看移位运算符部分的内容。非2的指数次幂的乘除法一般是调用现成的IP,QUARTUS/ISE等工具软件会有提供,不过这些工具软件提供的IP也是由最底层的组合逻辑(与或非门等)搭建而成的。

注意:  在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x

2. 比较(关系)运算符

Verilog支持等于、不等于、小于、小于等于、大于和大于等于等比较运算符,关系运算符主要是用来做一些条件判断用的,在进行关系运算符时,如果声明的关系是假的,则返回值是0,如果声明的关系是真的,则返回值是1;所有的关系运算符有着相同的优先级别,关系运算符的优先级别低于算术运算符的优先级别。这些运算符的作用和使用方法如下:

等于运算符(==):判断两个数是否相等。

不等于运算符(!=):判断两个数是否不相等。

小于运算符(<):判断第一个数是否小于第二个数。

小于等于运算符(<=):判断第一个数是否小于等于第二个数。

大于运算符(>):判断第一个数是否大于第二个数。

大于等于运算符(>=):判断第一个数是否大于等于第二个数。

例如,下面是一个使用比较运算符的示例:

reg [7:0] a, b;

wire result;

assign result = (a == b);

assign result = (a != b);

assign result = (a < b);

assign result = (a <= b);

assign result = (a > b);

assign result = (a >= b);

3. 逻辑运算符

Verilog支持与、或、非、异或等逻辑运算符,逻辑运算符是连接多个关系表达式用的,可实现更加复杂的判断,一般不单独使用,都需要配合具体语句来实现完整的逻辑。这些运算符的作用和使用方法如下:

逻辑与运算符(&&):当两个条件都为真时,返回真。

逻辑或运算符(||):当两个条件中至少有一个为真时,返回真。

逻辑非运算符(!):将一个条件取反。

例如,下面是一个使用逻辑运算符的示例:

reg [7:0] a, b;

wire result;

assign result = (a && b);

assign result = (a || b);

assign result = !a;

4. 位(移位)运算符

Verilog支持按位与、按位或、按位异或、按位取反、左移和右移等位运算符,位运算符是一类最基本的运算符,可以认为它们直接对应数字逻辑中的与、或、非门等逻辑门。

位运算符的与、或、非与逻辑运算符逻辑与、逻辑或、逻辑非使用时候容易混淆,逻辑运算符一般用在条件判断上,位运算符一般用在信号赋值上。

移位运算符包括左移位运算符和右移位运算符,这两种移位运算符都用0来填补移出的空位。这些运算符的作用和使用方法如下:

按位与运算符(&):将两个数的二进制位进行与运算。

按位或运算符(|):将两个数的二进制位进行或运算。

按位异或运算符(^):将两个数的二进制位进行异或运算。

按位取反运算符(~):将一个数的二进制位进行取反运算(每个位进行取反)。

左移运算符(<<):将一个数的二进制位向左移动。

右移运算符(>>):将一个数的二进制位向右移动。

例如,下面是一个使用位运算符的示例:

reg [7:0] a, b;

wire result;

assign result = (a & b);   // 将 a 的每个位与 b 相同的位进行相与

assign result = (a | b);    // 将 a 的每个位与 b 相同的位进行相或

assign result = (a ^ b);   // 将 a 的每个位与 b 相同的位进行异或

assign result = ~a;      // 将 a 的每个位进行取反

assign result = (a << 2);  将 a 左移 2 位

assign result = (a >> 2);  将 a 右移 2 位

假设a有8bit数据位宽,那么a<<2,表示a左移2bit,a还是8bit数据位宽,a的最高2bit数据被移位丢弃了,最低2bit数据固定补0。如果a是3(二进制:00000011),那么3左移2bit,3<<2,就是12(二进制:00001100)。一般使用左移位运算代替乘法,右移位运算代替除法,但是这种也只能表示2的指数次幂的乘除法。

5. 条件运算符

条件操作符一般来构建从两个输入中选择一个作为输出的条件选择结构(在其他语言中也叫三目运算符),功能等同于always中的if-else语句。

符号

使用方法

说明

? :

a ? b : c

如果 a 为真,就选择 b,否则选择 c

代码示例:

assign out = (sel == 1) ? in1 : in2;

上述代码中,sel为选择信号,in1和in2为两个输入信号,out为输出信号。当sel等于1时,将in1赋值给out,否则将in2赋值给out。

6. 拼接运算符(Concatation)

Verilog中有一个特殊的运算符是C语言中没有的,就是位拼接运算符。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。

符号

使用方法

说明

{}

{a, b}

将 a 和 b 拼接起来,作为一个新信号

代码示例:

wire [7:0] a, b, c;

assign d = {a, b, c};

上述代码中,a、b、c为三个8位输入信号,d为24位输出信号。使用拼接运算符{}将a、b、c拼接成一个24位的信号d。

7. 其他运算符

Verilog还支持其他一些运算符,包括条件运算符(?:)、括号运算符(())、逗号运算符(,)等。这些运算符的作用和使用方法如下:

条件运算符(?:):根据一个条件的真假返回两个不同的值。

括号运算符(()):用于改变运算符的优先级。

逗号运算符(,):用于将多个表达式连接起来。

例如,下面是一个使用其他运算符的示例:

reg [7:0] a, b;

wire result;

assign result = (a > b) ? a : b;

assign result = (a + b) * c;

assign result = (a, b, c);

wire out;

assign out = (a == 1) ? b : c, d;

上述代码中,a为输入信号,b、c、d为三个输出信号,使用逗号运算符将b和c、d连接起来,当a等于1时,将b赋值给out,否则将c和d赋值给out。

8. 运算符的优先级

在Verilog中,不同运算符的优先级不同,需要注意运算顺序,可以使用括号运算符改变运算符的优先级。

下面是Verilog运算符的优先级,从高到低依次排列:

1. 括号运算符(())

2. 取反运算符(!、~)

3. 乘法运算符(*)、除法运算符(/)、取模运算符(%)

4. 加法运算符(+)、减法运算符(-)

5. 左移运算符(<<)、右移运算符(>>)

6. 比较运算符(<、<=、>、>=、==、!=、===、!==)

6. 按位与运算符(&)

7. 按位异或运算符(^、^~)

8. 按位或运算符(|)

8. 与运算符(&&)

9. 或运算符(||)

10. 条件运算符(?:)

11. 逗号运算符(,)

SteveRocket的博客_CSDN博客-Python进阶,Django进阶,C进阶领域博主SteveRocket擅长Python进阶,Django进阶,C进阶,等方面的知识https://blog.csdn.net/zhouruifu2015/


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


verilog 不等于,FPGA进阶,fpga开发,Verilog的运算符,Verilog的运算符优先级

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

推荐阅读:

  • FPGA在工业缺陷检测上的应用实践

  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

  • FPGA设计Verilog基础之Verilog中clk为什么要用posedge,而不用negedge

  • 初学者必须弄懂的一些基本FPGA设计概念(1)

  • 工作总结之全网最全的103个Verilog关键字总结(上)

  • 工作总结之全网最全的103个Verilog关键字总结(下)​

  • 5G时代的FPGA发展趋势和应用分析

  • FPGA结合chatgpt的应用开发实践

  • FPGA | FPGA设计流程指南 v2.0

  • 设计规范 | 总结开发过程中DDR3和FPGA部分的设计规范

  • 术语一览 | 总结开发过程中关于FPGA的专业术语

  • 用AI帮我写一篇关于FPGA的文章,并推荐最热门的FPGA开源项目文章来源地址https://www.toymoban.com/news/detail-771460.html

到了这里,关于FPGA设计Verilog基础之Verilog的运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog语法(二)——运算符

    Verilog HDL 中支持多种运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符等等。以下是一些常用的运算符及其用法。 Verilog 中的算术运算符包括加法、减法、乘法、除法、取模等。它们的用法与常见的编程语言类似,如: 加法:+ 减法:- 乘法:* 除法:/ 取模:

    2024年02月01日
    浏览(48)
  • Verilog运算符优先级

    0 ! ~ 1 * / % 2 + 1 3 4 = = 5 == != === !== 6 ~ 7 ^ ^~ 8 | ~| 9 10 || 11 ?: 从上至下优先级依次降低

    2024年02月16日
    浏览(36)
  • Verilog基本语法之运算符(三)

    运算符按功能分为9类: 算术运算符 逻辑运算符 关系运算符 等式运算符 缩减运算符 条件运算符 位运算符 移位运算符 位拼接运算符 运算符按操作数的个数分为3类: 单目运算符:带一个操作数 逻辑非!,按位取反~,缩减运算符,移位运算符 双目运算符:带两个操作数 算

    2023年04月09日
    浏览(39)
  • Verilog语法——2.模块例化、运算符

    参考资料 【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】 2.1.1 什么是模块例化 例化,即将项目不断拆分成次级功能模块,然后从最简单的模块开始实现,进而完成整个复杂项目 2.1.2 模块例化的方法 针对已经抽象好的模块,需要

    2024年01月16日
    浏览(40)
  • Verilog常用运算符及表达式

    本文详细介绍了Verilog常用的运算符和表达式,特别是分享了处理“计算位宽溢出”和“负数”的可行方式,帮助读者更加轻松地理解和掌握Verilog语言的运算符。 算数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%) 赋值运算符:非阻塞赋值(=)、阻塞赋值(=);

    2024年02月08日
    浏览(53)
  • Verilog学习记录3——三目运算符

    进阶示例: 以牛客网 VL1 四选一多路器 为例 使用三目运算符写法:

    2024年02月11日
    浏览(58)
  • 【JavaScript】JavaScript 运算符 ⑤ ( 赋值运算符 | 基础赋值运算符 与 复合赋值运算符 )

    JavaScript 赋值运算符种类 : 基础赋值运算符 : 等于 : = ; 复合赋值运算符 : 加等 : += 减等 : -= 乘等 : *= 除等 : /= 取模等 : %= 有符号左移等 : = 有符号右移等 : = 无符号左移等 : = 无符号右移等 : = 在 JavaScript 语言中 , \\\" 赋值运算符 \\\" 的 作用是 为 变量 分配值 ; 最基础的 \\\" 赋值运算

    2024年03月25日
    浏览(51)
  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   在Verilog中,变量可以分为全局变量和局部变量两种类型。全局变量在整个模块中都可以使用,而局部变量只能在某个特定的代码块中使用。

    2024年02月15日
    浏览(37)
  • FPGA四选一的多路选择器(用三元运算符?:解决)

           ?:符号通常用于条件运算符,表示条件判断。它类似于C语言中的三元运算符,用于根据条件选择不同的操作或值。         例如,在Verilog中,条件运算符?:可以用于if-else语句的简写形式。它的一般语法格式如下:         如果表达式为真,则结果为结果1;否

    2024年01月21日
    浏览(49)
  • Java基础(运算符)

    运算符和表达式 运算符:对字面量或者变量进行操作的 符号 表达式:用 运算符 把字面量或者变量连接起来, 符合java语法的式子 就可以称为表达式;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符(加、减、乘、除、取模、取余)(字符串只有加) 一、

    2024年04月26日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包