在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Verilog編碼中位寬不匹配的危害是什么?

ruikundianzi ? 來源:IP與SoC設計 ? 2023-09-19 10:14 ? 次閱讀

1、位寬不匹配

Verilog編碼中,常見的位寬不匹配錯誤,有賦值左右位寬不匹配(<=,=),比較位寬(>,<,>=,<=)不匹配,計算位寬(+,-)不匹配

位寬不匹配會導致綜合產生的網表與個人預期差異較大,導致功能不正確。VCS仿真能及時發現問題,但VCS仿真存在部分場景沒有覆蓋的問題,因此僅僅通過VCS仿真不容易發現問題。通過spyglass lint檢測可以發現所有位寬不匹配的情況。

2、位寬不匹配的危害

下文以比較位寬不匹配為例,講解位寬不匹配的危害。

注意:

1)在條件判斷中(if語句),不建議使用加減后結果直接進行比較,禁止進行加減運算后與位寬不匹配的數據/變量進行比較。

2)拼接符號中“{}”,不允許使用加減乘除等運算,綜合類軟件無法正確判斷數據運算結果位寬。數字運算必須先通過wire指定位寬,然后通過assign得到運算結果

錯誤案例1

如下代碼,代碼本意是:當cnt0與cnt1之和大于8的時候,count加1。

錯誤代碼中:

比較數據是4’h8,此時綜合完成后的網表中,會將cnt0與cnt1之和截位成4bit,再與4’h8比較,如果cnt0與cnt1之和為5’h10000,在此會截位為4’h0000,反而小于4’h8,與預期功能不符

正確代碼&推薦代碼中:

先定義:wire [4:0] cnt_add ; 指定cnt_add位寬為5bit,然后assign cnt_add = (cnt0+cnt1) ;最后與5’h8比較,因為通過wire指定了位寬,所以對于各類綜合軟件而言都不會發生截位,不會發生錯誤。

正確代碼&不推薦中

直接將4’h8修改為5’h8,也避免了cnt0+cnt1累加截位,但是spyglass lint會報warning,

不推薦。

reg  [3:0]   cnt0  ;
reg  [3:0]   cnt1  ;
reg  [4:0]   count ;
reg          ov_nc ;


//-------------case 1-----------------
//wrongcode錯誤代碼
always @ (posedge clk or negedge rst_n) 
    if(!rst_n)begin
    count     <= 5'b0 ;
    end 
    else if((cnt0+cnt1)>4'h8) //should be 5'h8
    begin
       {ov_nc, count} <= count +1'b1;
    end 
    
//right  ,but not recommended
always @ (posedge clk or negedge rst_n) 
    if(!rst_n)begin
    count     <= 5'b0 ;
    end 
    else if((cnt0+cnt1)>5'h8) //should be 5'h8
    begin
       {ov_nc, count} <= count +1'b1;


//right code and recommended  正確且推薦
wire [4:0] cnt_add ;
assign  cnt_add  = (cnt0+cnt1) ;


always @ (posedge clk or negedge rst_n) 
    if(!rst_n)begin
    count     <= 5'b0 ;
    end 
    else if(cnt_add >5'h8) // (cnt0+cnt1) is 5 bits
    begin
         {ov_nc, count} <= count +1'b1;
    end 
    
?錯誤案例2

NOTE: 拼接符號中“{}”,不允許使用加減乘除等運算,綜合類軟件無法正確判斷數據運算結果位寬。數字運算必須先通過wire指定位寬,然后通過assign得到運算結果。

錯誤代碼中:

{1'b0,(cnt0+cnt1)} ,在if語句()拼接符號中,綜合軟件無法識別 (cnt0+cnt1)應該是多少bit,(cnt0+cnt1)可能會是5bit,也可能是4bit。

正確代碼&推薦代碼中

通過 wire [4:0] cnt_add ; assign cnt_add = (cnt0+cnt1) ; 指定了(cnt0+cnt1)之和為5bit,利用拼接符指定{1'b0,cnt_add}為6bit,然后與6bit的cnt2比較。

正確代碼&不推薦中

通過 wire [4:0] cnt_add ; assign cnt_add = (cnt0+cnt1) ; 指定了(cnt0+cnt1)之和為5bit,但是直接與6bit的cnt2比較,各類綜合軟件也會正確識別位寬,不會發生截位,但是spyglass lint會報warning,雖然功能正確,但是不推薦。

//-------------case 2-----------------//
 reg  [3:0]   cnt0  ;
 reg  [3:0]   cnt1  ;
 reg  [5:0]   cnt2  ;
 
 //wrong code
 always @ (posedge clk or negedge rst_n) 
    if(!rst_n)begin
    count     <= 5'b0 ;
    end 
    else if({1'b0,(cnt0+cnt1)}

編輯:黃飛

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

    關注

    28

    文章

    1351

    瀏覽量

    110135
  • VCS
    VCS
    +關注

    關注

    0

    文章

    79

    瀏覽量

    9624

原文標題:錯誤案例:位寬不匹配錯誤

文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FIR compiler 7.2 數據輸入問題

    AD采集為14,但是在FIR IP核中將輸入設置為14,IP核數據輸入端依然為16。在之后的仿真階段會報
    發表于 09-07 10:32

    從設備讀取的idcode與bsdl文件的idcode匹配該怎么辦?

    我遇到了這個問題。信息:iMPACT:583 - '1':從設備讀取的idcode與bsdl的idcode匹配File.INFO:iMPACT:1578 - '1':設備IDCODE
    發表于 08-08 08:58

    帶字庫LCD12864寫數據時類型匹配

    現有帶字庫LCD12864(控制器ST7920)一塊,暫時只需實現往DDRAM寫數據來顯示漢字。根據技術手冊,對DDRAM的發數據操作是一次發一個字型(兩個字節)的,但是12864數據口是8
    發表于 11-11 09:00

    怎么實現RocketIOTM GTP在串行高速接口中的設計?

    本文在對Virtex-5 RocketIOTM GTP進行了解的基礎上,針對串行高速接口開發匹配的問題,提出了一種
    發表于 05-28 06:21

    Verilog 變量的數值類型

    Verilog 變量的數值類型Verilog變量每個位(bit)的數值類型有四種,分別為1,0,Z,X。其中1,0比較明確就是高、低電
    發表于 08-04 09:42

    在SpinalHDL里有沒有什么好的方式實現一個接口轉換呢

    整數倍時進行數據填充(默認為false,但如果位不能整除則要設置為true)。其內部設計實現思路并不難,匹配時輸入輸出直接相連,
    發表于 07-27 14:52

    嵌入式的計算

    ,然后將在擴大1即可。 有符號數的表示為最高位為符號表示數值大小,所以計算完絕對值
    發表于 03-02 19:52

    JPEG2000平面編碼的存儲優化方案設計

    本文通過對JPEG2000平面編碼器的存儲方案進行了分析,設計了一個高效的存儲結構以及相應的控制電路,設計采用verilog[4]語言描述。
    發表于 08-16 11:28 ?1529次閱讀
    JPEG2000<b class='flag-5'>中</b><b class='flag-5'>位</b>平面<b class='flag-5'>編碼</b>的存儲優化方案設計

    verilog實現的RS204—188編碼

    這是verilog實現的RS204—188編碼,附帶測試文件
    發表于 01-20 18:24 ?28次下載

    華為的verilog編碼規范

    華為的verilog編碼規范
    發表于 11-01 08:41 ?41次下載
    華為的<b class='flag-5'>verilog</b><b class='flag-5'>編碼</b>規范

    Verilog設計如何匹配變量的

      在FPGA設計,我們經常需要用寄存器來寄存某些“數量類”的變量,比如FIFO的深度啦、或者計數器的最大值啦;又或者輸入輸出信號也需要將用parameter參數化以便更好的調用等。
    的頭像 發表于 02-16 16:21 ?6872次閱讀
    <b class='flag-5'>Verilog</b>設計<b class='flag-5'>中</b>如何<b class='flag-5'>匹配</b>變量的<b class='flag-5'>位</b><b class='flag-5'>寬</b>

    淺談IC設計匹配危害

    在IC設計,硬復位用于配置寄存器和配置信號的跨時鐘模塊。即一個配置信號cfg_mac_mode是由硬復位驅動的,如果要同步到其他時鐘域,跨時鐘模塊需要使用硬復位,而不能使用軟復位。
    發表于 07-15 11:53 ?2564次閱讀

    Verilog編碼風格的建議

    良好的編碼風格,有助于代碼的閱讀、調試和修改。雖然 Verilog 代碼可以在保證語法正確的前提下任意編寫,但是潦草的編碼風格往往是一錘子買賣。
    的頭像 發表于 06-01 16:27 ?727次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>編碼</b>風格的建議

    二十進制編碼器及Verilog HDL描述 Verilog HDL程序的基本結構及特點

    節通過硬件描述語言Verilog HDL對二十進制編碼器的描述,介紹Verilog HDL程序的基本結構及特點。
    的頭像 發表于 08-28 09:54 ?2992次閱讀
    二十進制<b class='flag-5'>編碼</b>器及<b class='flag-5'>Verilog</b> HDL描述 <b class='flag-5'>Verilog</b> HDL程序的基本結構及特點

    Verilog表達式的確定規則

    很多時候,Verilog中表達式的都是被隱式確定的,即使你自己設計了,它也是根據規則先確定位
    的頭像 發表于 10-22 15:41 ?518次閱讀
    <b class='flag-5'>Verilog</b>表達式的<b class='flag-5'>位</b><b class='flag-5'>寬</b>確定規則
    主站蜘蛛池模板: 天天做天天爱天天爽综合网 | 91华人在线视频| 色你懂的| 深夜偷偷看视频在线观看| 色图综合网| 欧美日韩高清一本大道免费| 在线a免费观看最新网站| 在线a网站| 色网站免费在线观看| 欧美成人福利| 国模吧新入口| 午夜影视在线观看| 成年人网站黄色| 国产精品伦理久久久久| cijilu刺激 国产| 色网综合| 手机看片1024手机在线观看| 久热精品在线视频| 毛片在线播放网址| 窝窝午夜在线观看免费观看| 同性男男肉交短文| 亚洲成人高清在线观看| 一区二区三区四区国产精品| www色在线| 在线免费黄| 色佬网| 黄色美女网址| 天天做.天天爱.天天综合网| 国产小视频在线观看免费| 国产午夜精品福利| 中文字幕一区二区三区在线播放 | 中文免费观看视频网站| 成人拍拍视频| 9色网站| 国产亚洲欧美成人久久片| 亚洲欧美视频一区二区| 性视频网址| 四虎影院视频在线观看| 色噜噜狠狠成人网| 国模吧在线视频| 免费高清视频在线观看|