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ù)驛站 ? 來源: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語言。有兩點(diǎn)值得注意:一是兩個(gè)N位數(shù)相加,無論是有符號(hào)數(shù)還是無符號(hào)數(shù),其結(jié)果都有可能是N+1位,故輸出比輸入位寬多1位,這樣才能保證不會(huì)發(fā)生溢出(Overflow)。二是默認(rèn)情況下,代碼中的logic表示的都是無符號(hào)數(shù),但是對(duì)于下面這段代碼,無符號(hào)數(shù)和有符號(hào)數(shù)均適用,這是因?yàn)橛蟹?hào)數(shù)是以二進(jìn)制補(bǔ)碼表示的。

為了進(jìn)一步說明,我們看如下例子。數(shù)據(jù)a二進(jìn)制形式位1001,既可以看作無符號(hào)數(shù)9(十進(jìn)制),也可以看作有符號(hào)數(shù)-7(十進(jìn)制);數(shù)據(jù)b二進(jìn)制形式為1010,既可以看作無符號(hào)數(shù)10(十進(jìn)制),也可以看作有符號(hào)數(shù)-6(十進(jìn)制)。最終結(jié)果的二進(jìn)制形式為10011,既可以看作無符號(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ù)和無符號(hào)數(shù)的結(jié)果是否一致呢?對(duì)于無符號(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)或無符號(hào)),此時(shí)是將N位數(shù)據(jù)做符號(hào)位擴(kuò)展為M位再賦值給b。因此,對(duì)于兩個(gè)N位數(shù)據(jù)相加,如果輸出位寬選擇大于N+1,那么上述代碼只適合于無符號(hào)數(shù),對(duì)于有符號(hào)數(shù)需要在logic后加關(guān)鍵字signed,如下圖所示。

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

總體而言,在描述加法運(yùn)算時(shí),如果兩個(gè)數(shù)據(jù)均為N位,那么和要設(shè)置為N+1位,此時(shí)無符號(hào)數(shù)的描述方式也適合于有符號(hào)數(shù)。如果兩個(gè)數(shù)一個(gè)是N位,一個(gè)是M位,且M>N,那么和要設(shè)置為M+1位,此時(shí)要明確指出是有符號(hào)數(shù)還是無符號(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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電路圖
    +關(guān)注

    關(guān)注

    10344

    文章

    10721

    瀏覽量

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

    關(guān)注

    8

    文章

    327

    瀏覽量

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

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68625

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    邏輯異或運(yùn)算符在Python中的用法

    在Python編程語言中,邏輯異或運(yùn)算符并不直接作為一個(gè)內(nèi)置的操作符存在,因?yàn)镻ython更側(cè)重于高級(jí)編程和可讀性,并沒有直接提供異或運(yùn)算符的簡(jiǎn)寫形式用于邏輯運(yùn)算(真/假值的異或)。然
    的頭像 發(fā)表于 11-19 09:46 ?187次閱讀

    C語言指針運(yùn)算符詳解

    在C語言中,當(dāng)你有一個(gè)指向數(shù)組中某個(gè)元素的指針時(shí),你可以對(duì)該指針執(zhí)行某些算術(shù)運(yùn)算,例如加法或減法。這些運(yùn)算可以用來遍歷數(shù)組中的元素,如ptr[i]等價(jià)于*(ptr + i)。然而,如果你的操作
    的頭像 發(fā)表于 10-30 11:16 ?255次閱讀

    Verilog語法中運(yùn)算符的用法

    verilog語法中使用以下兩個(gè)運(yùn)算符可以簡(jiǎn)化我們的位選擇代碼
    的頭像 發(fā)表于 10-25 15:17 ?759次閱讀
    Verilog語法中<b class='flag-5'>運(yùn)算符</b>的用法

    技術(shù)干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析運(yùn)算符與優(yōu)先級(jí)

    在C語言的學(xué)習(xí)過程中,運(yùn)算符的使用是不可忽視的重要環(huán)節(jié)。本文將繼續(xù)深入探討C語言中的運(yùn)算符,重點(diǎn)介紹位運(yùn)算符、賦值運(yùn)算符及其優(yōu)先級(jí)。掌握這些運(yùn)算符
    的頭像 發(fā)表于 10-13 08:09 ?255次閱讀
    技術(shù)干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析<b class='flag-5'>運(yùn)算符</b>與優(yōu)先級(jí)

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

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

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉(cāng)頡基礎(chǔ)數(shù)據(jù)類型整數(shù)類型

    :一元負(fù)號(hào)(-)、加法(+)、減法(-)、乘法(*)、除法(/)、取模(%)、冪運(yùn)算( )。 除了一元負(fù)號(hào)(-)和冪運(yùn)算( ),其他操作符要求左右
    發(fā)表于 09-13 14:55

    c語言中從左到右結(jié)合怎么看

    在C語言中,操作符的結(jié)合性(Associativity)是指當(dāng)操作符在表達(dá)式中連續(xù)出現(xiàn)時(shí),它們?nèi)绾闻c操作數(shù)結(jié)合的順序。對(duì)于大多數(shù)二元操作符(即需要兩個(gè)
    的頭像 發(fā)表于 08-20 11:42 ?895次閱讀

    c語言從右到左的運(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 ?965次閱讀

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

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

    二維PDMA可以使用描述符鏈嗎?

    我正在嘗試使用二維描述符連鎖。 編寫了一些二維描述符鏈的代碼。 但我有一些疑問,比如 1.二維 PDMA 可以使用描述符鏈嗎? 2.如果 1 是,請(qǐng)附上一些
    發(fā)表于 05-31 08:16

    Golang為何舍棄三元運(yùn)算符

    golang中不存在?:運(yùn)算符的原因是因?yàn)檎Z言設(shè)計(jì)者已經(jīng)預(yù)見到三元運(yùn)算符經(jīng)常被用來構(gòu)建一些極其復(fù)雜的表達(dá)式。雖然使用if進(jìn)行替代會(huì)讓代碼顯得更長(zhǎng),但這毫無疑問可讀性更強(qiáng)。
    的頭像 發(fā)表于 04-03 15:13 ?703次閱讀

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

    運(yùn)算符用于執(zhí)行程序代碼運(yùn)算,會(huì)針對(duì)一個(gè)以上操作數(shù)項(xiàng)目來進(jìn)行運(yùn)算
    的頭像 發(fā)表于 04-01 16:18 ?490次閱讀
    鴻蒙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 ?7409次閱讀
    <b class='flag-5'>加法</b><b class='flag-5'>運(yùn)算</b>電路和減法<b class='flag-5'>運(yùn)算</b>電路的區(qū)別

    什么是反相加法運(yùn)算電路?反相加法運(yùn)算電路與減法運(yùn)算電路

    在電子技術(shù)的海洋中,有一種電路如同數(shù)學(xué)中的加法器一樣,能夠?qū)⒉煌男盘?hào)進(jìn)行相加處理。這就是被廣泛應(yīng)用于信號(hào)處理領(lǐng)域的反相加法運(yùn)算電路。
    的頭像 發(fā)表于 02-17 15:34 ?4674次閱讀
    什么是反相<b class='flag-5'>加法</b><b class='flag-5'>運(yùn)算</b>電路?反相<b class='flag-5'>加法</b><b class='flag-5'>運(yùn)算</b>電路與減法<b class='flag-5'>運(yùn)算</b>電路

    反相加法運(yùn)算電路原理介紹

    反相加法運(yùn)算電路利用運(yùn)算放大器(通常簡(jiǎn)稱為Op-Amp)的特性來實(shí)現(xiàn)多個(gè)輸入信號(hào)的加法運(yùn)算。每個(gè)輸入信號(hào)都通過一個(gè)電阻連接到
    的頭像 發(fā)表于 01-31 15:53 ?3967次閱讀
    反相<b class='flag-5'>加法</b><b class='flag-5'>運(yùn)算</b>電路原理介紹