0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

assign和signed的聯(lián)合背刺事件

冬至子 ? 來源:芯時代青年 ? 作者:尼德蘭的喵 ? 2023-12-04 11:33 ? 次閱讀

沒想到啊沒想到啊,有一天會被濃眉大眼的assign背刺!想當年在always消失術里,在X態(tài)分析里,在xprop平替策略里,把assign捧的這么高,優(yōu)點說了800多項,然后今天一仿真出bug了?!

還有有符號數(shù)和無符號數(shù),我都吹出去了已經(jīng)大成大成了,這還能出錯?!

萬事皆有可能,于是就出現(xiàn)了這個事。

事情的根源簡化完就是下面這個語法,當sel為0時輸出i_a高位補零的右移結果(相當于視i_a為無符號數(shù)),sel為1時輸出i_a高位補符號位的輸出結果相當于視i_a為有符號數(shù)):

//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;

問題出在哪呢?前面咱們總結過:有符號數(shù)和無符號數(shù)運算,結果為無符號數(shù)。這句話不太嚴謹,應該完善為:有符號數(shù)和無符號數(shù)運算,所有的運算數(shù)會被視為無符號數(shù),結果為無符號數(shù)。

因為en0運算公式中,有符號數(shù)和無符號數(shù)混合運算了,有符號數(shù)和無符號數(shù)混合時會自動將所有的變量視為無符號數(shù)進行運算,而這個混合運算很難發(fā)現(xiàn):

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

對,i_a >>> 8是個無符號數(shù)的運算!/(ㄒoㄒ)/~~所以帶著signed(i_a) >>> 8也變成了無符號數(shù)的運算。所以說如果把signed(i_a) >>> 8單提出來先算好,再參與選擇邏輯就是預期的結果了。

那么最后一個小問題,選擇邏輯參與不參與這個有符號數(shù)和無符號數(shù)的爭端呢?不參與,比如代碼改成這樣:

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

我把前面的運算結果通過$signed擴了一下,然后再仿真:

圖片

這說明了兩個問題:

1.選擇邏輯沒有參與到有符號數(shù)和無符號數(shù)的判定中;

2.判定時signed(i_a) >>> 8,看的是同一級別的其他運算項的符號屬性,比如此時他看的是signed(...);

再改一下就又回去了:

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

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 仿真器
    +關注

    關注

    14

    文章

    1018

    瀏覽量

    83746
收藏 人收藏

    評論

    相關推薦

    ALLEGRO畫銅皮時可否自動ASSIGN NET

    在ALLEGRO中畫SHAPE時需要再ASSIGN給它NET,這樣感覺不太方便,而且ASSIGN NET需要在右鍵選項很下面,感覺效率很低。不知ALLEGRO中可否做到象PROTEL 那樣,畫銅皮到器件上時,能自動附上網(wǎng)絡屬性呢?這樣我就可以省很多時間了咯。
    發(fā)表于 03-31 06:52

    typedef volatile signed short什么意思

    typedef volatile signed short什么意思,求求
    發(fā)表于 07-18 11:58

    wire 和 assign的 區(qū)別 ---求助

    regrst_nr2;wirelocked; (1)wire sysrst_nr0= rst_nr2 & locked; (2)assign sysrst_nr0= rst_nr2 & locked;上面 兩個賦值 一樣嗎,有區(qū)別嗎
    發(fā)表于 02-20 10:59

    資料下載:HDL中的unsigned與signed

    unsigned與signed:想必大家在C語言是經(jīng)常用到,可不知HDL語言中的unsigned與signed是否常用羅!其含義與C語言中的意思無異,區(qū)別主要是取值范圍。unsigned
    發(fā)表于 07-02 07:59

    HDL語言中的unsigned與signed的主要區(qū)別是什么

    unsigned是什么意思?signed是什么意思?HDL語言中的unsigned與signed的主要區(qū)別是什么?
    發(fā)表于 09-24 07:02

    -靠-巴倫測試電路圖

    -靠-巴倫測試電路圖 用背靠背的方法來得到巴倫插入損耗的特性值圖7 是
    發(fā)表于 07-23 11:43 ?2901次閱讀
    <b class='flag-5'>背</b>-靠-<b class='flag-5'>背</b>巴倫測試電路圖

    什么是DLP投?和液晶投有何區(qū)別?

    什么是DLP投?和液晶投有何區(qū)別? 相信曾在一段時間里,你耳邊經(jīng)常聽到、媒體上經(jīng)常看到"投電視"一詞,或許你正在每天都在使用它。
    發(fā)表于 02-06 11:48 ?3208次閱讀

    投電視,投電視工作原理是什么?

    投電視,投電視工作原理是什么? 一、何為投電視  顧名思義,"投"就是背后投影的電視機。一種假借投影和反射原理,
    發(fā)表于 03-24 11:59 ?1.6w次閱讀

    舌診圖像點和瘀點的識別與提取

    計算機舌診系統(tǒng)中,點和瘀血點是重要的舌象?;诎唿c檢測、支持向量機( SVM)和K均值聚類算法,提出了對舌診圖像中點和瘀點的識別及提取方法。首先利用SimpleBlobDetector斑點
    發(fā)表于 11-20 11:34 ?4次下載
    舌診圖像點<b class='flag-5'>刺</b>和瘀點的識別與提取

    投電視歷史_投電視的應用領域

    本文首先闡述了投電視的歷史。其次介紹了投電視的優(yōu)勢,最后介紹了投電視的應用領域。
    發(fā)表于 09-14 16:55 ?3187次閱讀

    投電視的安裝方法_投電視的保養(yǎng)維護

    本文主要闡述了投電視的安裝方法及投電視的保養(yǎng)維護。
    發(fā)表于 09-15 16:49 ?2971次閱讀

    專業(yè)游戲手機”iQOO Neo5開始首次發(fā)售

    iQOO正式推出了搭載“雙芯”的“新生代性能旗艦”iQOO Neo5手機,堪稱“專業(yè)游戲手機”。這款手機已開始首次發(fā)售。
    的頭像 發(fā)表于 03-22 10:19 ?2241次閱讀

    miniLED芯片晶工藝對錫膏需要什么條件?

    miniLED顯示器的制造,今天錫膏廠家來聊一聊miniLED芯片晶工藝對錫膏需要什么條件?如何理解晶工藝?晶工藝是在miniLED制造過程中所用到的其中一種工藝,
    的頭像 發(fā)表于 03-03 16:50 ?906次閱讀
    miniLED芯片<b class='flag-5'>刺</b>晶工藝對錫膏需要什么條件?

    Grok即將上線!馬斯克據(jù)此成為“數(shù)據(jù)封建王”?

    馬斯克Open AI,即將成為“數(shù)據(jù)封建主”?
    的頭像 發(fā)表于 12-12 10:18 ?623次閱讀
    Grok即將上線!馬斯克據(jù)此成為“數(shù)據(jù)封建王”?

    assign語句和always語句的用法

    Assign語句和Always語句是在硬件描述語言(HDL)中常用的兩種語句,用于對數(shù)字電路建模和設計。Assign語句用于連續(xù)賦值,而Always語句用于時序邏輯建模。本文將詳細探討這兩種語句
    的頭像 發(fā)表于 02-22 16:24 ?2564次閱讀