chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

ruikundianzi ? 來源:IP與SoC設計 ? 2023-09-19 10:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、位寬不匹配

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

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

2、位寬不匹配的危害

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

注意:

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

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

錯誤案例1

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

錯誤代碼中:

比較數(shù)據(jù)是4’h8,此時綜合完成后的網(wǎng)表中,會將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指定了位寬,所以對于各類綜合軟件而言都不會發(fā)生截位,不會發(fā)生錯誤。

正確代碼&不推薦中

直接將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: 拼接符號中“{}”,不允許使用加減乘除等運算,綜合類軟件無法正確判斷數(shù)據(jù)運算結果位寬。數(shù)字運算必須先通過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比較,各類綜合軟件也會正確識別位寬,不會發(fā)生截位,但是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)}

編輯:黃飛

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

    關注

    30

    文章

    1368

    瀏覽量

    113529
  • VCS
    VCS
    +關注

    關注

    0

    文章

    80

    瀏覽量

    10184

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FIR compiler 7.2 數(shù)據(jù)輸入問題

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

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

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

    怎么實現(xiàn)RocketIOTM GTP在串行高速接口中的設計?

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

    Verilog 變量的數(shù)值類型

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

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

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

    嵌入式的計算

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

    JPEG2000平面編碼的存儲優(yōu)化方案設計

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

    verilog實現(xiàn)的RS204—188編碼

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

    華為的verilog編碼規(guī)范

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

    Verilog設計如何匹配變量的

      在FPGA設計,我們經(jīng)常需要用寄存器來寄存某些“數(shù)量類”的變量,比如FIFO的深度啦、或者計數(shù)器的最大值啦;又或者輸入輸出信號也需要將用parameter參數(shù)化以便更好的調用等。
    的頭像 發(fā)表于 02-16 16:21 ?7708次閱讀
    <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是由硬復位驅動的,如果要同步到其他時鐘域,跨時鐘模塊需要使用硬復位,而不能使用軟復位。
    發(fā)表于 07-15 11:53 ?3091次閱讀

    Verilog編碼風格的建議

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

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

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

    Verilog表達式的確定規(guī)則

    很多時候,Verilog中表達式的都是被隱式確定的,即使你自己設計了,它也是根據(jù)規(guī)則先確定位
    的頭像 發(fā)表于 10-22 15:41 ?1901次閱讀
    <b class='flag-5'>Verilog</b>表達式的<b class='flag-5'>位</b><b class='flag-5'>寬</b>確定規(guī)則

    Verilogsigned和$signed()的用法

    嗎?其實不是的,因為有符號數(shù)和無符號數(shù)據(jù)的加法強結果和乘法器結構是一樣的,signed的真正作用是決定如何對操作數(shù)擴的問題。 2、verilog的加法和乘法操作前,會先對操作數(shù)據(jù)擴
    的頭像 發(fā)表于 02-17 17:47 ?990次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>中</b>signed和$signed()的用法