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 byte
wire [3:0] vld_byte ;//valid byte in total 8 byte
if( (~mty_in) <= 4’d5 )
data_updata_vld =1
else
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比較,這樣就不會發生溢出截斷比較的情況。
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;
code end-------------------------//
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;
and recommended code end----------------------//
-
IC設計
+關注
關注
38文章
1295瀏覽量
103918 -
VCS
+關注
關注
0文章
79瀏覽量
9600
原文標題:IC設計錯誤案例:信號取反、加法溢出導致的錯誤
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論