0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

IC设计错误案例分析

我快闭嘴 来源:CSDN技术社区 作者:IC小鸽 2022-09-26 14:20 次阅读
IC设计错误案例:信号取反导致的错误

1、取反操作

如下所示,信号a取反赋值给信号b,底层逻辑是,如果a位宽少于b位宽,则a先高位补0,再进行取反,最后赋值给b。

wire [4:0] a;wire [5:0] b;assign b=~a ; 等价于 assign b= ~{1’b0,a[4:0]}; wire [4:0] a;wire [6:0] b;assign b=~a ; 等价于 assign b= ~{1’b0,1’b0,a[4:0]};

2、取反位宽不匹配错误案例

如果赋值语句或者条件判断中用到了取反操作,一定需要先将取反值赋值相同的位宽 或者 与取反值做运算的信号一定要与原值位宽相同。

wire [2:0] mty_in  ;//invalid byte  in total 8 bytewire [3:0] vld_byte ;//valid byte in total 8 byte if( (~mty_in) <= 4’d5 )        data_updata_vld =1else        data_updata_vld =0;

在上面的代码中,data_updata_vld永远为0,因为(~mty_in) <= 4’d5比较时,会默认(~mty_in) 是4bit信号,因此(~mty_in)本质上是~{1’b0,a[2:0]},[3]bit为1 永远大于4’d5.

3、如何检查

此类问题

采用vcs仿真可以看出仿真结果不符合预期

采用是spyglass,会报warning/err,说明运算符作为位宽不匹配

IC设计错误案例:加法溢出导致的错误

1、加法溢出导致的功能错误

如下图所示错误代码中,当byte_add+byte_save等于256的时候,我们期望的的信号more_than_64应该为1,而实际上在错误代码中(byte_add+byte_save)与8’d64比较,(byte_add+byte_save)可能会被理解为8’d0,即被理解成8bit信号,more_than_64等于0,功能错误。在芯片设计中,有可能因为EDA工具之间差异导致对(byte_add+byte_save)>8’d64的理解不一样,导致VCS等工具RTL级仿真正确,而DC综合后功能错误。例如:VCS将(byte_add+byte_save)理解为9bit的位宽,而综合理解为8bit位宽。一旦综合理解为8bit位宽,则会导致网表与我们预期功能不一致,而且网表仿真比较慢,一般很慢遍历所有RTL级仿真用例,因此此类问题不容易发现。

2、如何避免加法溢出导致的功能错误

如下图所示正确代码中,将赋值给9bit的add_byte_total,并且将add_byte_total与9’d64比较,而不是8’d64比较,这样就不会发生溢出截断比较的情况。

//----------------------Error code begin-------------------------//wire         more_than_64 ;reg  [7:0]   byte_add  ;reg  [7:0]   byte_save ;reg  [7:0]  byte_update; assign more_than_64 = ( (byte_add+byte_save)  > 8'd64); always@(*)  if(more_than_64)    byte_update = (byte_add + byte_save ) - 8'd64 ;  else     byte_update = 8'd0;    //----------------------Error code end-------------------------//    //----------------------right and recommended code begin----------------------//wire         more_than_64 ;reg  [7:0]   byte_add  ;reg  [7:0]   byte_save ;reg  [7:0]   byte_update; wire [8:0]   add_byte_total ; assign     add_byte_total=(byte_add+byte_save); assign more_than_64 = ( add_byte_total  > 9'd64); always@(*)  if(more_than_64)    byte_update = (byte_add + byte_save ) - 8'd64 ;  else     byte_update = 8'd0;     //----------------------right and recommended code end----------------------//

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IC设计
    +关注

    关注

    38

    文章

    1297

    浏览量

    104094
  • VCS
    VCS
    +关注

    关注

    0

    文章

    80

    浏览量

    9625

原文标题:IC设计错误案例:信号取反、加法溢出导致的错误

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    模拟IC与数字IC对比分析

    模拟IC与数字IC对比分析     处理连续性的光、声音、速度、温度等自然模拟信号的IC被称为模拟IC
    发表于 11-27 09:27 1402次阅读

    IC分析工具

    本内容提供了 IC卡 的分析工具,现简单演示如下
    发表于 07-11 15:31 316次下载
    <b class='flag-5'>IC</b>卡<b class='flag-5'>分析</b>工具

    硬件设计中的30个错误想法和原因分析

    硬件设计中的30个错误想法和原因分析
    发表于 12-15 18:25 97次下载

    iOS之友盟错误分析及解决办法

    修复.jpg 前提 应用集成了友盟的bug收集功能。 友盟的错误分析错误列表里面有数据。 正题 错误详情.png 错误列表 点击进去基本上
    发表于 09-25 09:58 0次下载
    iOS之友盟<b class='flag-5'>错误</b><b class='flag-5'>分析</b>及解决办法

    实测案例分析CAN总线局部错误及全局通知

    局部错误,全局通知是CAN总线错误类型中较为典型的一种,如何通过错误报文及波形快速定位错误原因呢?本文结合现场实测案例简要分析。 一、CAN
    发表于 11-08 10:48 3次下载
    实测案例<b class='flag-5'>分析</b>CAN总线局部<b class='flag-5'>错误</b>及全局通知

    CAN总线局部错误及全局通知分析

    局部错误,全局通知是CAN总线错误类型中较为典型的一种,如何通过错误报文及波形快速定位错误原因呢?本文结合现场实测案例简要分析
    的头像 发表于 02-16 07:57 7265次阅读
    CAN总线局部<b class='flag-5'>错误</b>及全局通知<b class='flag-5'>分析</b>

    西门子SETP7常见错误分析

    西门子STEP7编程常见错误分析解答。
    发表于 04-30 11:15 56次下载

    华秋PCB专业分析工具-独家BOM错误分析

    华秋DFM-专业PCB设计分析软件,20万+工程师都在使用 1. 一键导入,自动出报价 2.一键分析23+项常见设计问题,解决设计隐患 3.智能拼版,节约单板采购成本 4.智能阻抗计算和反算 5. BOM智能分析,不再
    发表于 07-30 16:49 0次下载

    PCB专业分析工具-独家BOM错误分析

    华秋DFM-专业PCB设计分析软件,20万+工程师都在使用 1. 一键导入,自动出报价 2.一键分析23+项常见设计问题,解决设计隐患 3.智能拼版,节约单板采购成本 4.智能阻抗计算和反算 5. BOM智能分析,不再
    发表于 08-09 16:52 0次下载

    Bash编程常见错误范例及原因分析

    Bash Pitfalls[1] 文章介绍了 40 多条日常 Bash 编程中,老手和新手都容易忽略的错误编程习惯。每条作者在给出错误的范例上,详细分析与解释错误的原因,同时给出正确
    的头像 发表于 06-12 16:48 1676次阅读

    使用静态分析查找并发错误

      多线程为嵌入式开发人员必须考虑的潜在错误添加了全新的类别,使得查找各种错误变得更加困难。最新一代的静态分析工具可以帮助解决这两个问题。
    的头像 发表于 06-19 10:00 1092次阅读
    使用静态<b class='flag-5'>分析</b>查找并发<b class='flag-5'>错误</b>

    使用静态分析查找并发错误

      多线程为嵌入式开发人员必须考虑的潜在错误添加了全新的类别,使得查找各种错误变得更加困难。最新一代的静态分析工具可以帮助解决这两个问题。
    的头像 发表于 07-09 07:10 905次阅读
    使用静态<b class='flag-5'>分析</b>查找并发<b class='flag-5'>错误</b>

    基于IC741构建的简单有线间谍错误电路

    间谍虫电路是当我们需要在不被注意的情况下收听对话或简单地监视一个人时使用的东西。通常,间谍错误电路是使用麦克风,放大器和扬声器构建的。介质可以是有线的,也可以是无线的,具体取决于我们将要使用的应用。本文解释了围绕运算放大器IC741构建的简单有线间谍
    的头像 发表于 06-29 15:52 573次阅读
    基于<b class='flag-5'>IC</b>741构建的简单有线间谍<b class='flag-5'>错误</b>电路

    你一定要懂的CDC错误

    本文描述的跨时钟错误在特定场景下,有些是允许的,甚至有些是正常设计。因此IC设计者想要确认跨时钟错误需要分析应用场景。
    的头像 发表于 07-24 17:00 3618次阅读
    你一定要懂的CDC<b class='flag-5'>错误</b>

    电桥电路的常见错误分析

    电桥电路的常见错误分析主要包括以下几个方面: 一、电阻值不准确 电阻值不准确是电桥电路常见的错误之一。这可能是由于电阻本身的误差,如电阻的标称值与实际值存在偏差,或者电阻老化、温度变化等因素导致
    的头像 发表于 01-09 10:08 74次阅读