verilog运算符的优先级

描述

先给大家出一个题目:当x为5时,y=x << 6 + x <<3 + x << 2 + x的结果为多少,即y的值是多少?

我先不给出答案,先贴上正确的运算符优先级顺序,如下图所示:

运算符

俗话说温故而知新,今天回顾一下verilog的运算符的优先级。

说一下回顾这个原因:今天打算用verilog实现一个乘法器,即:y=77*x。为了加快运算时间,将77转换为二级制(1001101),然后使用了移位寄存器来实现乘法运算,具体代码如下:y=x << 6 + x <<3 + x << 2 + x。但是仿真结果不对,仿真结果为0的概率比较大。之前还以为是x的位宽太小导致的,但是修改位宽之后还是不行,所以又重新审视了一下这段代码,怀疑是运行操作符的优先级有问题导致的,查阅书籍发现确实是这样的:加法的优先级高于左移运算,导致先进行加法运算再进行移位运算,所以结果和预期不一致。

实际上,要实现y=77*x运算,正确的verilog代码如下:y=(x << 6)+(x <<3)+(x << 2)+ x。

所以说,刚开始给出题目的答案不是我不给出,实际上按照正确优先级计算的结果没有太多的意义。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分