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) 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----------------------//
大朋VR更具沉浸式的真4K影音游戏体验
能自己发电的圆形发电机原理分析
基于3GPP的标准将会成为全球统一的5G标准
数据库编程大赛:一条SQL计算扑克牌24点
以旧换新 华为P20或者华为Mate 10都有可能
IC设计错误案例分析
过去一周消费者最关注的五款手机,华为P10第一、vivox9进入前三、三星S8落到第四
iPhone12销量的增加对苹果业绩影响存在不确定性
最大短路电流和最大输入电流有什么区别
AI应用成未来热点 高通建立多应用平台 苹果、三星、华为纷纷试水
润和软件发布面向云边端全场景下分布式协同行业解决方案
浅谈变频器与外部联系的信号接口
浅析2018后,液晶面板主流趋势
废旧电源箱改特斯拉线圈教程
中芯国际与一线阵营代差巨大 如何摆脱“空芯”之痛?
雷卯推荐汽车空调面板方案及防护器件
电力机车辅助电机介绍与牵引通风机、变压器通风机的控制选择策略
Qualcomm计划在2021年初将5G移动平台产品组合扩展至Qualcomm骁龙4系
技术普及篇│网线为什么只能传输一百米?
到底什么是SRAM