精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

verilog的signed類型有哪些?

汽車玩家 ? 來源:博客園 ? 作者:lianjiehere ? 2020-01-30 09:52 ? 次閱讀

數字電路中,出于應用的需要,我們可以使用無符號數,即包括0及整數的集合;也可以使用有符號數,即包括0和正負數的集合。在更加復雜的系統中,也許這兩種類型的數,我們都會用到。

有符號數通常以2的補碼形式來表示。圖1列出了4位二進制表示法所對應正負數。進一步觀察,我們發現兩種類型數的加減法是一樣的,做加法和減法就是 在數輪上按正時鐘轉轉或按反時鐘轉。比方說,1001+0100,意味著從1001按照順時鐘方向移動4個位置,其結果為1101。在無符號數類型中,它 代表(+9)+(+4)=+13;而在有符號數類型中,它則代表(-7)+(+4)=-3。從數輪上看,若是加法所得的結果溢出了,那么也就是穿越了數輪 的臨界點。注意這個臨界點對于無符號數和有符號數來說,是不一樣的:無符號數,是介于1111和0000之間;有符號數,則是介于0111和1000之 間。

物理加減法的行為正好和數輪的移動類似。只要所有的運算子和結果具有相同的位寬,那么有符號數或無符號數的形式就可用于相同的電路。比方說,設a、b和sum都是8位信號,表達式

sum = a+ b;

無論這些信號被轉譯成有符號數或無符號數,它都會引用相同的硬件且使用相同的二進制表示法。這種現象在其他算術運算中也是正確的(但是它不可用于非算術運算中,比方說有理數運算或溢出標志位的生成)。

verilog的signed類型有哪些

圖1 4位二進制數輪

此外,當運算子或其結果的位寬不同時,我們需要區分它究竟使用哪一種符號類型。因為不同的符號類型需要不同的擴展位。對于無符號數,前置一個0,即 所謂的零擴展位;對于有符號數來說,需要前置n個所謂的符號擴展位。比方說4位二進制表示的-5為1011;當其擴展成8位時,應該變為 1111_1011,而不是0000_1011。

舉個例子,設a和sum為8位信號,b為4位信號即b3b2b1b0。

表達式:sum = a + b

需要將b擴展為8位。如果是無符號數形式,那么b擴展為0000_b3b2b1b0;如果是有符號數形式,那么b擴展為 b3b3b3b3_b3b2b1b0。上述表達式所引用的硬件包括位寬擴展電路和加法器。因為對于有符號數和無符號數來說,擴展電路是不同的;所以上面那 個表達式,對應有符號數和無符號數形式,要使用不同的硬件實現。

Verilog-1995中的有符號數

在Verilog-1995中,只有integer數據類型被轉移成有符號數,而reg和wire數據類型則被轉移成無符號數。由于integer 類型有固定的32位寬,因此它不太靈活。我們通常使用手動加上擴展位來實現有符號數運算。

下面的代碼片段將描述有符號數和無符號數的運算:

01 reg [7:0] a, b;

02 reg [3:0] c,

03 reg [7:0] sum1, sum2, sum3, sum4;

04 。 . 。

05 // same width. can be applied to signed and unsigned

06 sum1 = a + b;

07 // automatica 0 extension

08 sum2 = a + c;

09 // manual 0 extension

10 sum3 = a + {4{ 1‘b0 }, c};

11 // manual sign extension

12 sum4 = a + {4{c[3]}, c};

在第一條語句中,a、b和sum1有相同的位寬,因此無論是轉譯成有符號數還是無符號數,它都將引用相同的加法器電路。

在第二條語句中,c的位寬僅為4,在加法運算中,它的位寬會被調整。因為reg類型被作為無符號數看待,所以c的前面會被自動置入0擴展位。

在第三條語句中,我們給c手動前置4個0,以實現和第二個表達式一樣的效果。

在第四條語句中,我們需要把變量轉譯成有符號數。為了實現所需的行為,c必須擴展符號位到8位。沒有其他的辦法,只好手動擴展。在代碼中,我們重復復制c的最高位4次(4{c[3]})來創建具有擴展符號位的8位數。

Verilog-2001中的有符號數

在Verilog-2001中,有符號形式也被擴展到reg和wire數據類型中。哈哈,新加一個關鍵字,signed,可以按照下面的方式定義:

reg signed [7:0] a, b;

使用有符號數據類型, 第2節所述代碼可以被改寫為:

1 reg signed [7:0] a, b;

2 reg signed [3:0] c;

3 reg signed [7:0] sum1, sum4;

4 。 . 。

5 // same width. can be applied to signed and unsigned

6 sum1 = a + b;

7 // automatic sign extension

8 sum4 = a + c;

第一條語句將引用一個常規的加法器,因為a、b和sum1具有相同的位寬。

第二條語句,所有的右手邊變量都具有signed數據類型,c被自動擴展符號位到8位。因此,無需再手動添加符號位。

在小型的數字系統中,我們通常可以選用有符號數或者無符號數。然而,在一些大型的系統中,會包括不同形式的子系統。Verilog是一種弱類型語 言,無符合變量和有符號變量可以在同一表達式中混用。根據Verilof的標準,只有當所有右手邊的變量具有signed數據類型屬性的時候,擴展符號位 才被執行。否則,所有的變量都只擴展0。

考慮下面的代碼片段:

1 reg signed [7:0] a, sum;

2 reg signed [3:0] b;

3 reg [3:0] c;

4 。 . 。

5 sum = a + b + c;

由于c不具有signed數據類型屬性,因此右手邊的變量b和c的擴展位為0。

Verilog有兩個系統函數,$signed和$unsigned(),用以將括號內的表達式轉換為signed和unsigned數據類型。比方說,我們可以轉換c的數據類型,

sum = a + b + $signed(c);

現在,右手邊的所有變量都具有signed數據類型屬性,因此b和c將擴展符號位。

在復雜的表達式中,混用signed和unsigned數據類型將引入一些微妙的錯誤,因此應當避免混用。如果真的很有必要,那么表達式需要保持簡單,同時通用轉換函數,以確保數據類型的一致性。

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

    關注

    28

    文章

    1345

    瀏覽量

    109996
  • 數字電路
    +關注

    關注

    193

    文章

    1601

    瀏覽量

    80513
收藏 人收藏

    評論

    相關推薦

    Verilog的版本哪些

    電子發燒友網站提供《Verilog的版本哪些.docx》資料免費下載
    發表于 05-31 11:29 ?0次下載

    什么好用的verilog HDL編輯工具可用?

    什么好用的verilog HDL編輯工具可用?最好能集成實時的verilog HDL語法檢測、自定義模塊識別觸發等功能,最好能夠免費;
    發表于 04-28 11:00

    倉儲管理系統(WMS)的主要類型哪些?

    倉儲管理系統軟件不同的類型和實施方法。企業選擇 WMS 類型和實施方式的原因各不相同,因此了解不同類型以及根據企業需求、預算和 IT 基礎設施選擇最適合企業的
    的頭像 發表于 04-02 13:52 ?476次閱讀
    倉儲管理系統(WMS)的主要<b class='flag-5'>類型</b><b class='flag-5'>有</b>哪些?

    char是符號類型還是無符號類型

    看一個C語言的筆試題,題目很簡單,問char是符號類型還是無符號類型
    的頭像 發表于 03-17 10:15 ?1209次閱讀

    verilog中端口類型哪三種

    Verilog 中,端口類型三種:輸入端口(input)、輸出端口(output)和雙向端口(inout)。 輸入端口(input)用于接收來自其他模塊的信號。在一個模塊中,輸入端口是被調用
    的頭像 發表于 02-23 10:28 ?1959次閱讀

    verilog與其他編程語言的接口機制

    語言的接口機制,并深入探討其原理和應用。 Verilog語言概述 Verilog是由美國專業電子設計自動化公司Cadence設計系統有限公司(前身是Gateway Design Automation公司)開發的一種硬件描述語言。它是一種結構化,靜態和
    的頭像 發表于 02-23 10:22 ?633次閱讀

    verilog調用模塊端口對應方式

    Verilog中的模塊端口對應方式,并提供示例代碼和詳細解釋,以幫助讀者更好地理解和應用。 首先,我們來了解一下Verilog中的模塊和模塊端口。一個Verilog模塊被定義為包含一組聲明和語句的代碼塊,類似于C語言中的函數。模
    的頭像 發表于 02-23 10:20 ?1667次閱讀

    verilog inout用法與仿真

    Verilog語言是一種硬件描述語言(HDL),用于描述數字邏輯電路和系統。它是一種非常強大且廣泛使用的語言,在數字電路設計中扮演著重要的角色。其中, inout 是Verilog中的一種信號類型
    的頭像 發表于 02-23 10:15 ?2791次閱讀

    verilog中for循環是串行執行還是并行執行

    的for循環也是并行執行的。 Verilog中的for循環可以用來實現重復的操作,例如在一個時鐘周期中對多個電路進行操作。在循環內部,多個語句可以同時執行,而不受循環次數的限制。這種并行執行的機制使得Verilog在硬件設計中非常高效和靈活。 在
    的頭像 發表于 02-22 16:06 ?2748次閱讀

    verilog function函數的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數字電子電路的行為和結構。在 Verilog 中,函數 (Function) 是一種用于執行特定任務并返回一個值的可重用代碼塊。函數在
    的頭像 發表于 02-22 15:49 ?5148次閱讀

    濾波電路哪些類型 如何判斷濾波電路的類型

    濾波電路哪些類型 如何判斷濾波電路的類型? 濾波電路是電子電路中常用的一種電路,它可以用來削弱或者消除電子信號中的特定頻率范圍內的干擾或噪聲,從而得到干凈的信號。濾波電路的類型多種多
    的頭像 發表于 02-19 10:00 ?2894次閱讀

    verilog中函數和任務對比

    對比,方便學習理解。 比較 函數 任務 輸入 函數至少需要包含一個輸入,端口類型不能包含inout類型 任務可以沒有或者多個輸入,且端口聲明可以為inout類型 輸出 函數無輸出 任
    的頭像 發表于 02-12 18:43 ?864次閱讀

    淺談嵌入式C語言各種數據類型的內存映像

    如果一個表達式同時包含signed和unsigned整型,signed會提升為unsgined,可能會隱藏一些意想不到的錯誤,特別是用在比較運算時
    的頭像 發表于 12-28 18:21 ?765次閱讀
    淺談嵌入式C語言各種數據<b class='flag-5'>類型</b>的內存映像

    smt貼片元件哪些類型

    smt貼片元件哪些類型
    的頭像 發表于 12-11 15:37 ?1759次閱讀

    verilog中數據的符號屬性(符號數和無符號數)探究根源

    為了省流,還是先甩結論。符號數和無符號數的最本質區別就是:符號位的識別和高位拓展。除此之外,另一個區別就是從人的角度如何如何讀這個數,或者說$display(%d)打印時打印的值是什么(而從機器的角度它壓根就不區分signed和unsigned)。
    的頭像 發表于 12-10 10:50 ?1471次閱讀
    <b class='flag-5'>verilog</b>中數據的符號屬性(<b class='flag-5'>有</b>符號數和無符號數)探究根源