1 assign和signed的联合背刺事件-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

assign和signed的联合背刺事件

冬至子 来源:芯时代青年 作者:尼德兰的喵 2023-12-04 11:33 次阅读

没想到啊没想到啊,有一天会被浓眉大眼的assign背刺!想当年在always消失术里,在X态分析里,在xprop平替策略里,把assign捧的这么高,优点说了800多项,然后今天一仿真出bug了?!

还有有符号数和无符号数,我都吹出去了已经大成大成了,这还能出错?!

万事皆有可能,于是就出现了这个事。

事情的根源简化完就是下面这个语法,当sel为0时输出i_a高位补零的右移结果(相当于视i_a为无符号数),sel为1时输出i_a高位补符号位的输出结果相当于视i_a为有符号数):

//test
wire [31:0]i_a = 32'hff00_0000;
wire       sel = 1'b1;


wire [31:0]en0     = (sel == 1'b0) ? i_a > >> 8 : 
                                     $signed(i_a) > >> 8;

wire [31:0]en1_mid = $signed(i_a) > >> 8;
wire [31:0]en1     = (sel == 1'b0) ? i_a > >> 8 : en1_mid;

好,大家先看着这en0和en1的值。

en0和en1的值分别是啥呢?

图片

en0 = 32'h00ff_0000;

en1 = 32'hffff_0000;

问题出在哪呢?前面咱们总结过:有符号数和无符号数运算,结果为无符号数。这句话不太严谨,应该完善为:有符号数和无符号数运算,所有的运算数会被视为无符号数,结果为无符号数。

因为en0运算公式中,有符号数和无符号数混合运算了,有符号数和无符号数混合时会自动将所有的变量视为无符号数进行运算,而这个混合运算很难发现:

wire [31:0]en0     = (sel == 1'b0) ? i_a > >> 8 : $signed(i_a) > >> 8;

对,i_a >>> 8是个无符号数的运算!/(ㄒoㄒ)/~~所以带着signed(i_a) >>> 8也变成了无符号数的运算。所以说如果把signed(i_a) >>> 8单提出来先算好,再参与选择逻辑就是预期的结果了。

那么最后一个小问题,选择逻辑参与不参与这个有符号数和无符号数的争端呢?不参与,比如代码改成这样:

wire [31:0]en0     = (sel == 1'b0) ? $signed(i_a > >> 8) : $signed(i_a) > >> 8;

我把前面的运算结果通过$signed扩了一下,然后再仿真:

图片

这说明了两个问题:

1.选择逻辑没有参与到有符号数和无符号数的判定中;

2.判定时signed(i_a) >>> 8,看的是同一级别的其他运算项的符号属性,比如此时他看的是signed(...);

再改一下就又回去了:

wire [31:0]en0     = (sel == 1'b0) ? $signed(i_a > >> 8) + 1'b1 : $signed(i_a) > >> 8;

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    1017

    浏览量

    83719
收藏 人收藏

    评论

    相关推荐

    ALLEGRO画铜皮时可否自动ASSIGN NET

    在ALLEGRO中画SHAPE时需要再ASSIGN给它NET,这样感觉不太方便,而且ASSIGN NET需要在右键选项很下面,感觉效率很低。不知ALLEGRO中可否做到象PROTEL 那样,画铜皮到器件上时,能自动附上网络属性呢?这样我就可以省很多时间了咯。
    发表于 03-31 06:52

    typedef volatile signed short什么意思

    typedef volatile signed short什么意思,求求
    发表于 07-18 11:58

    wire 和 assign的 区别 ---求助

    regrst_nr2;wirelocked; (1)wire sysrst_nr0= rst_nr2 & locked; (2)assign sysrst_nr0= rst_nr2 & locked;上面 两个赋值 一样吗,有区别吗
    发表于 02-20 10:59

    资料下载:HDL中的unsigned与signed

    unsigned与signed:想必大家在C语言是经常用到,可不知HDL语言中的unsigned与signed是否常用罗!其含义与C语言中的意思无异,区别主要是取值范围。unsigned
    发表于 07-02 07:59

    HDL语言中的unsigned与signed的主要区别是什么

    unsigned是什么意思?signed是什么意思?HDL语言中的unsigned与signed的主要区别是什么?
    发表于 09-24 07:02

    -靠-巴伦测试电路图

    -靠-巴伦测试电路图 用背靠背的方法来得到巴伦插入损耗的特性值图7 是
    发表于 07-23 11:43 2896次阅读
    <b class='flag-5'>背</b>-靠-<b class='flag-5'>背</b>巴伦测试电路图

    什么是DLP投?和液晶投有何区别?

    什么是DLP投?和液晶投有何区别? 相信曾在一段时间里,你耳边经常听到、媒体上经常看到"投电视"一词,或许你正在每天都在使用它。
    发表于 02-06 11:48 3207次阅读

    投电视,投电视工作原理是什么?

    投电视,投电视工作原理是什么? 一、何为投电视  顾名思义,"投"就是背后投影的电视机。一种假借投影和反射原理,
    发表于 03-24 11:59 1.6w次阅读

    舌诊图像点和瘀点的识别与提取

    计算机舌诊系统中,点和瘀血点是重要的舌象。基于斑点检测、支持向量机( SVM)和K均值聚类算法,提出了对舌诊图像中点和瘀点的识别及提取方法。首先利用SimpleBlobDetector斑点
    发表于 11-20 11:34 4次下载
    舌诊图像点<b class='flag-5'>刺</b>和瘀点的识别与提取

    投电视历史_投电视的应用领域

    本文首先阐述了投电视的历史。其次介绍了投电视的优势,最后介绍了投电视的应用领域。
    发表于 09-14 16:55 3168次阅读

    投电视的安装方法_投电视的保养维护

    本文主要阐述了投电视的安装方法及投电视的保养维护。
    发表于 09-15 16:49 2960次阅读

    专业游戏手机”iQOO Neo5开始首次发售

    iQOO正式推出了搭载“双芯”的“新生代性能旗舰”iQOO Neo5手机,堪称“专业游戏手机”。这款手机已开始首次发售。
    的头像 发表于 03-22 10:19 2220次阅读

    miniLED芯片晶工艺对锡膏需要什么条件?

    miniLED显示器的制造,今天锡膏厂家来聊一聊miniLED芯片晶工艺对锡膏需要什么条件?如何理解晶工艺?晶工艺是在miniLED制造过程中所用到的其中一种工艺,
    的头像 发表于 03-03 16:50 885次阅读
    miniLED芯片<b class='flag-5'>刺</b>晶工艺对锡膏需要什么条件?

    Grok即将上线!马斯克据此成为“数据封建王”?

    马斯克Open AI,即将成为“数据封建主”?
    的头像 发表于 12-12 10:18 609次阅读
    Grok即将上线!马斯克据此成为“数据封建王”?

    assign语句和always语句的用法

    Assign语句和Always语句是在硬件描述语言(HDL)中常用的两种语句,用于对数字电路建模和设计。Assign语句用于连续赋值,而Always语句用于时序逻辑建模。本文将详细探讨这两种语句
    的头像 发表于 02-22 16:24 2528次阅读