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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

用HDL代碼描述加法運(yùn)算要用操作符“+” 看似很簡(jiǎn)單實(shí)則不然

FPGA技術(shù)驛站 ? 來(lái)源:Lauren的FPGA ? 作者:Lauren的FPGA ? 2020-09-24 14:31 ? 次閱讀

采用HDL代碼描述加法運(yùn)算只需要用操作符“+”即可,這看似很簡(jiǎn)單,這里我們以兩個(gè)4-bit數(shù)相加為例,對(duì)輸入/輸出數(shù)據(jù)均寄存,從而形成如下圖所示電路。

此電路對(duì)應(yīng)的HDL代碼如下圖所示。這里采用了SystemVerilog語(yǔ)言。有兩點(diǎn)值得注意:一是兩個(gè)N位數(shù)相加,無(wú)論是有符號(hào)數(shù)還是無(wú)符號(hào)數(shù),其結(jié)果都有可能是N+1位,故輸出比輸入位寬多1位,這樣才能保證不會(huì)發(fā)生溢出(Overflow)。二是默認(rèn)情況下,代碼中的logic表示的都是無(wú)符號(hào)數(shù),但是對(duì)于下面這段代碼,無(wú)符號(hào)數(shù)和有符號(hào)數(shù)均適用,這是因?yàn)橛蟹?hào)數(shù)是以二進(jìn)制補(bǔ)碼表示的。

為了進(jìn)一步說(shuō)明,我們看如下例子。數(shù)據(jù)a二進(jìn)制形式位1001,既可以看作無(wú)符號(hào)數(shù)9(十進(jìn)制),也可以看作有符號(hào)數(shù)-7(十進(jìn)制);數(shù)據(jù)b二進(jìn)制形式為1010,既可以看作無(wú)符號(hào)數(shù)10(十進(jìn)制),也可以看作有符號(hào)數(shù)-6(十進(jìn)制)。最終結(jié)果的二進(jìn)制形式為10011,既可以看作無(wú)符號(hào)數(shù)19(十進(jìn)制),也可以看作有符號(hào)數(shù)-13(十進(jìn)制)。

這里兩個(gè)4-bit數(shù)相加和設(shè)置為5-bit,如果和設(shè)置為6-bit,有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的結(jié)果是否一致呢?對(duì)于無(wú)符號(hào)數(shù),sum[5]補(bǔ)0,如圖中紅色方框所示。

對(duì)于有符號(hào)數(shù),sum[5]則是sum[4]的復(fù)制版本,實(shí)質(zhì)上是符號(hào)位擴(kuò)展。

本質(zhì)上,在賦值時(shí),如果把一個(gè)N位數(shù)據(jù)a賦值給一個(gè)位寬M的數(shù)據(jù)b(這里M>N),且兩個(gè)數(shù)據(jù)均為同一類型(都是有符號(hào)或無(wú)符號(hào)),此時(shí)是將N位數(shù)據(jù)做符號(hào)位擴(kuò)展為M位再賦值給b。因此,對(duì)于兩個(gè)N位數(shù)據(jù)相加,如果輸出位寬選擇大于N+1,那么上述代碼只適合于無(wú)符號(hào)數(shù),對(duì)于有符號(hào)數(shù)需要在logic后加關(guān)鍵字signed,如下圖所示。

如果兩個(gè)位寬不等的數(shù)相加,同樣需要指明是有符號(hào)數(shù)還是無(wú)符號(hào)數(shù)。例如,一個(gè)4-bit數(shù)和一個(gè)3-bit數(shù)相加,如下圖所示。如果a二進(jìn)制為1001,對(duì)應(yīng)無(wú)符號(hào)數(shù)9(十進(jìn)制),b二進(jìn)制形式為101,對(duì)應(yīng)無(wú)符號(hào)數(shù)5(十進(jìn)制),兩個(gè)無(wú)符號(hào)數(shù)相加,先將b高位補(bǔ)0,最終和為01110;如果將a和b看作有符號(hào)數(shù),則要將b符號(hào)位擴(kuò)展為1101,最終和為10110。符號(hào)位擴(kuò)展是工具完成的,無(wú)需人工干預(yù)。

總體而言,在描述加法運(yùn)算時(shí),如果兩個(gè)數(shù)據(jù)均為N位,那么和要設(shè)置為N+1位,此時(shí)無(wú)符號(hào)數(shù)的描述方式也適合于有符號(hào)數(shù)。如果兩個(gè)數(shù)一個(gè)是N位,一個(gè)是M位,且M>N,那么和要設(shè)置為M+1位,此時(shí)要明確指出是有符號(hào)數(shù)還是無(wú)符號(hào)數(shù)。

原文標(biāo)題:加法運(yùn)算很簡(jiǎn)單?

文章出處:【微信公眾號(hào):Lauren的FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    10288

    文章

    10707

    瀏覽量

    523864
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    324

    瀏覽量

    47230
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765

原文標(biāo)題:加法運(yùn)算很簡(jiǎn)單?

文章出處:【微信號(hào):Lauren_FPGA,微信公眾號(hào):FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:編程高手必備,全方位解析運(yùn)算符的核心技能!

    在C語(yǔ)言的編程領(lǐng)域中,運(yùn)算符是實(shí)現(xiàn)數(shù)據(jù)處理與邏輯操作的關(guān)鍵工具。無(wú)論是在處理簡(jiǎn)單的數(shù)值計(jì)算,還是在構(gòu)建復(fù)雜的邏輯結(jié)構(gòu)時(shí),運(yùn)算符的使用貫穿始終。作為編程語(yǔ)言的基礎(chǔ)組成部分之一,
    的頭像 發(fā)表于 09-18 15:56 ?87次閱讀
    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:編程高手必備,全方位解析<b class='flag-5'>運(yùn)算符</b>的核心技能!

    c語(yǔ)言從右到左的運(yùn)算符有哪些

    用在變量之后時(shí),它們會(huì)先返回變量的原始值,然后再進(jìn)行遞增或遞減。 三元條件運(yùn)算符 ( ?: ):這個(gè)運(yùn)算符的求值順序是從右到左。首先計(jì)算第三個(gè)表達(dá)式,然后根據(jù)第一個(gè)表達(dá)式的結(jié)果選擇第二個(gè)或第三個(gè)表達(dá)式。 賦值運(yùn)算符 ( = ):
    的頭像 發(fā)表于 08-20 11:39 ?272次閱讀

    FPGA學(xué)習(xí)筆記---基本語(yǔ)法

    3、信號(hào)類型:wire, reg, tri等 4、參數(shù)定義:parameter 5、運(yùn)算操作符:各種邏輯操作符、移位操作符、算數(shù)操作符
    發(fā)表于 06-23 14:58

    鴻蒙TypeScript入門學(xué)習(xí)第5天:【TypeScript 運(yùn)算符

    運(yùn)算符用于執(zhí)行程序代碼運(yùn)算,會(huì)針對(duì)一個(gè)以上操作數(shù)項(xiàng)目來(lái)進(jìn)行運(yùn)算
    的頭像 發(fā)表于 04-01 16:18 ?298次閱讀
    鴻蒙TypeScript入門學(xué)習(xí)第5天:【TypeScript <b class='flag-5'>運(yùn)算符</b>】

    加法運(yùn)算電路和減法運(yùn)算電路的區(qū)別

    加法運(yùn)算的電路如下圖所示,輸出電壓為若干個(gè)輸入電壓的比例和
    的頭像 發(fā)表于 02-19 09:52 ?5807次閱讀
    <b class='flag-5'>加法</b><b class='flag-5'>運(yùn)算</b>電路和減法<b class='flag-5'>運(yùn)算</b>電路的區(qū)別

    “+”操作符的使用技巧

    這篇寫個(gè)平時(shí)易被忽略的小知識(shí)點(diǎn),一元 + 操作符的使用技巧。
    的頭像 發(fā)表于 12-28 13:27 ?404次閱讀

    python中運(yùn)算符的優(yōu)先級(jí)大小

    Python中運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中各個(gè)運(yùn)算符的計(jì)算順序。了解運(yùn)算符的優(yōu)先級(jí)對(duì)于正確理解和編寫復(fù)雜的表達(dá)式非常重要。本文將詳細(xì)介紹Python中運(yùn)算符的優(yōu)先級(jí),并給出一些示例來(lái)幫
    的頭像 發(fā)表于 11-29 16:21 ?1852次閱讀

    python關(guān)系運(yùn)算符有哪些

    Python中的關(guān)系運(yùn)算符主要包括以下幾種: 等于(==):用于判斷兩個(gè)操作數(shù)是否相等。如果相等,則返回True;否則返回False。 不等于(!=):用于判斷兩個(gè)操作數(shù)是否不相等。如果不相等,則
    的頭像 發(fā)表于 11-22 14:36 ?2042次閱讀

    python運(yùn)算符優(yōu)先級(jí)順序口訣

    Python是一種非常流行的編程語(yǔ)言,具有廣泛的應(yīng)用領(lǐng)域。在Python中,運(yùn)算符是進(jìn)行各種數(shù)學(xué)和邏輯運(yùn)算的關(guān)鍵部分。了解運(yùn)算符的優(yōu)先級(jí)順序?qū)τ谡_理解和書寫Python代碼至關(guān)重要。
    的頭像 發(fā)表于 11-22 14:34 ?1646次閱讀

    Verilog基礎(chǔ):介紹幾個(gè)常用的按位操作符

    操作符是對(duì)二進(jìn)制位進(jìn)行操作運(yùn)算符。以下是一些常用的位操作符
    的頭像 發(fā)表于 11-09 10:59 ?1287次閱讀

    Verilog基礎(chǔ):幾個(gè)常用的按位操作符

    操作符是對(duì)二進(jìn)制位進(jìn)行操作運(yùn)算符。
    的頭像 發(fā)表于 11-09 10:57 ?1131次閱讀

    請(qǐng)問(wèn)C語(yǔ)言文件中的預(yù)處理操作符#和##各有什么作用?

    C語(yǔ)言文件中的預(yù)處理操作符#和##各有什么作用?
    發(fā)表于 11-06 08:09

    C語(yǔ)言運(yùn)算符的使用方法

    詳細(xì)介紹了C語(yǔ)言表達(dá)式、算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、條件結(jié)構(gòu)、邏輯運(yùn)算符、位運(yùn)算符的語(yǔ)法和使用方法,并討論了
    發(fā)表于 11-02 11:30 ?938次閱讀
    C語(yǔ)言<b class='flag-5'>運(yùn)算符</b>的使用方法

    Python的優(yōu)雅之處:Descriptor(描述符

    學(xué)習(xí) Python 這么久了,說(shuō)起 Python 的優(yōu)雅之處,能讓我脫口而出的, Descriptor(描述符)特性可以排得上號(hào)。 描述符 是Python 語(yǔ)言獨(dú)有的特性,它不僅在應(yīng)用層使用,在語(yǔ)言
    的頭像 發(fā)表于 11-02 10:52 ?891次閱讀
    Python的優(yōu)雅之處:Descriptor(<b class='flag-5'>描述符</b>)

    如何使用位操作符實(shí)現(xiàn)低級(jí)別的位掩碼

    在本文中,我們來(lái)看看如何使用位操作符實(shí)現(xiàn)低級(jí)別的位掩碼。我們將看到我們?nèi)绾螌⒁粋€(gè)單一的 int 變量作為一個(gè)單獨(dú)的數(shù)據(jù)容器。 位掩碼 位掩碼允許我們?cè)谝粋€(gè)數(shù)字變量中存儲(chǔ)多個(gè)值。我們不再把這個(gè)變量看作
    的頭像 發(fā)表于 10-07 16:52 ?340次閱讀