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

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

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

使用Verilog硬件描述語言練習(xí)加法器設(shè)計

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2022-10-26 08:58 ? 次閱讀

從今天開始新的一章-Circuits,包括基本邏輯電路、時序電路、組合電路等。

今天更新整個算術(shù)電路-加法器一小節(jié)題目,包括半加器,全加器等各種加法器。

半加器和全加器的區(qū)別

半加器

半加器是由一個異或門和一個與門連接而成的組合邏輯電路。半加器電路有兩個輸入:A 和 B,它們將兩個輸入數(shù)字相加并產(chǎn)生一個進(jìn)位和一個和。

poYBAGNYhoiAAEdfAABe64Ig858591.jpg


異或門的輸出是兩個數(shù)的和,而與門的輸出是進(jìn)位。進(jìn)位加法不會轉(zhuǎn)發(fā),因為沒有邏輯門來處理它。因此,這被稱為半加器電路。

邏輯表達(dá)式:

Sum=AXORB
Carry=AANDB

真值表:

pYYBAGNYhpuASa5cAACZFReVYzU488.jpg

全加器

全加器是由兩個異或門、兩個與門和一個或門組成的電路。全加器是將三個輸入相加并產(chǎn)生兩個輸出的加法器,前兩個輸入是 A 和 B,第三個輸入是進(jìn)位C-IN 的輸入。輸出進(jìn)位指定為 C-OUT,正常輸出指定為 S,即 SUM。

poYBAGNYhq-AUqvRAACA6KkBHdo524.jpg

異或門得到的方程是二進(jìn)制數(shù)字的和。而AND門得到的輸出是加法得到的進(jìn)位。

真值表:

poYBAGNYhr6AKE_SAADK4RzPR3E259.jpg

邏輯表達(dá)式:

SUM=(AXORB)XORCin=(A⊕B)⊕Cin
CARRY-OUT=AANDBORCin(AXORB)=A.B+Cin(A⊕B)

半加器和全加器的區(qū)別:

姓名 參數(shù) 半加器 全加器
1 描述 半加法器是一個組合邏輯電路,將兩個 1 位數(shù)字相加。半加器產(chǎn)生兩個輸入的和。 全加器是一種組合邏輯電路,它對三個一位二進(jìn)制數(shù)執(zhí)行加法運算。全加器產(chǎn)生三個輸入和進(jìn)位值的總和。
2 上一次進(jìn)位 不使用前一個進(jìn)位。 使用前一個進(jìn)位。
3 輸入 在半加器中,有兩個輸入位(A,B)。 在全加器中,有三個輸入位(A、B、C-in)。
4 輸出 輸出是兩位和 和Carry 。 輸出是 2 位的和和 3 位輸入的Carry。
5 用作 半加器電路不能以與全加器電路相同的方式使用。 可以使用全加器電路代替半加器電路。
6 特征 它簡單易行 全加器的設(shè)計并不像半加器那么簡單。
7 邏輯表達(dá)式 半加器的邏輯表達(dá)式為: S=a⊕b ; C=a*b。 全加器的邏輯表達(dá)式為:S=a⊕b⊕Cin;Cout=(ab)+(Cin(a⊕b))。
8 邏輯門 由一個異或門和一個與門組成。 由兩個異或門、兩個 AND 門和一個 OR 門組成。
9 應(yīng)用 用于計算器,計算機,數(shù)字測量設(shè)備等。 用于多位加法,數(shù)字處理器等。

下面開始我們的題目,對于加法器有個更深刻的認(rèn)識~

Problem 65-Hadd

題目說明

創(chuàng)建一個半加法器。半加器將兩位相加(沒有進(jìn)位)并產(chǎn)生和和進(jìn)位(sum and carry-out)。

模塊端口聲明

moduletop_module(
inputa,b,
outputcout,sum);

題目解析

根據(jù)半加器的邏輯表達(dá)式處理即可。

moduletop_module(
inputlogica,b,
outputlogiccout,sum
);
assigncout=a&b;
assignsum=a^b;
endmodule

pYYBAGNYhtOAS1UGAACM_82lcWs549.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

pYYBAGNYhuKAReJSAAB9M3Y3C70956.jpg

注意圖中無參考波形。

這一題就結(jié)束了。

Problem 66-Fadd

題目說明

創(chuàng)建一個全加器。全加器將三位相加(包括進(jìn)位)并產(chǎn)生和和進(jìn)位。

模塊端口聲明

moduletop_module(
inputa,b,cin,
outputcout,sum);

題目解析

根據(jù)全加器的邏輯表達(dá)式處理即可。

簡單解答

moduletop_module(
inputlogica,b,cin,
outputlogiccout,sum);

assignsum=a^b^cin;
assigncout=a&b|cin&(a^b);
endmodule

pYYBAGNYhv-AEByDAACRJ8ms-Iw358.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYhweANqhTAAFOpwYKImA254.jpg

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 67-Adder3

題目說明

現(xiàn)在已經(jīng)知道如何構(gòu)建一個全加器,例化 3 個實例來創(chuàng)建一個 3 位二進(jìn)制波紋進(jìn)位加法器(ripple-carry adder)。加法器將兩個 3 位數(shù)字和一個進(jìn)位相加產(chǎn)生一個 3 位和和進(jìn)位。為了鼓勵例化全加器,還要輸出紋波進(jìn)位加法器中每個全加器的進(jìn)位。cout[2] 是最后一個全加器的最終進(jìn)位,也是通??吹降倪M(jìn)位。

模塊端口聲明

moduletop_module(
input[2:0]a,b,
inputcin,
output[2:0]cout,
output[2:0]sum);

題目解析

例化正常的全加器,然后處理好進(jìn)位關(guān)系即可,這種波紋進(jìn)位加法器的特點需要理解,最后注意我們要把上一題寫的全加器附在后面。

moduletop_module(
inputlogic[2:0]a,b,
inputlogiccin,
outputlogic[2:0]cout,
outputlogic[2:0]sum
);

full_adderf_adder_u1(.a(a[0]),
.b(b[0]),
.cin(cin),
.cout(cout[0]),
.sum(sum[0])
);

full_adderf_adder_u2(.a(a[1]),
.b(b[1]),
.cin(cout[0]),
.cout(cout[1]),
.sum(sum[1])
);

full_adderf_adder_u3(.a(a[2]),
.b(b[2]),
.cin(cout[1]),
.cout(cout[2]),
.sum(sum[2])
);


endmodule
modulefull_adder(inputlogica,
inputlogicb,
inputlogiccin,
outputlogiccout,
outputlogicsum
);
assignsum=a^b^cin;
assigncout=a&b|cin&(a^b);
endmodule

poYBAGNYhymAO9BtAAEEoBxRh9o316.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYhzGADo9rAAExg6fGaQo788.jpg

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 68-Exams/m2014 q4j

題目說明

實現(xiàn)下面電路:

poYBAGNYh0eAfofwAACDS5ogSXs013.jpg

FA代表全加器。

模塊端口聲明

moduletop_module(
input[3:0]x,
input[3:0]y,
output[4:0]sum);

題目解析

這一題和上一題類似,看懂圖片即可,將X[0]+Y[0]結(jié)果作為SUM[0],進(jìn)位輸入到下一級,以此類推。

moduletop_module(
inputlogic[3:0]x,
inputlogic[3:0]y,
outputlogic[4:0]sum
);

wirelogic[3:0]cout;
full_adderf_adder_u1(.a(x[0]),
.b(y[0]),
.cin(1'd0),
.cout(cout[0]),
.sum(sum[0])
);

full_adderf_adder_u2(.a(x[1]),
.b(y[1]),
.cin(cout[0]),
.cout(cout[1]),
.sum(sum[1])
);

full_adderf_adder_u3(.a(x[2]),
.b(y[2]),
.cin(cout[1]),
.cout(cout[2]),
.sum(sum[2])
);

full_adderf_adder_u4(.a(x[3]),
.b(y[3]),
.cin(cout[2]),
.cout(cout[3]),
.sum(sum[3])
);

assignsum[4]=cout[3];
endmodule

modulefull_adder(inputa,inputb,inputcin,outputcout,outputsum);
assignsum=a^b^cin;
assigncout=a&b|cin&(a^b);
endmodule

poYBAGNYh2OAfmbXAAENMStxyQ4727.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYh2uAIngVAACGcQxQnGk340.jpg

注意圖中無波形。

這一題就結(jié)束了。

Problem 69-Exams/ece241 2014 q1c

題目說明

假設(shè)有兩個 2 進(jìn)制 8bit 有符號數(shù)-a[7:0] 和 b[7:0]。這些數(shù)字相加產(chǎn)生 s[7:0]。還要計算是否發(fā)生了(有符號的)溢出。

模塊端口聲明

moduletop_module(
input[7:0]a,
input[7:0]b,
output[7:0]s,
outputoverflow
);

題目解析

當(dāng)兩個正數(shù)相加產(chǎn)生負(fù)結(jié)果或兩個負(fù)數(shù)相加產(chǎn)生正結(jié)果時,會發(fā)生有符號溢出。有幾種檢測溢出的方法:可以通過比較輸入和輸出數(shù)的符號來計算,或者從位 n 和 n-1 的進(jìn)位推導(dǎo)出。簡單說就是一是正正相加,產(chǎn)生正溢出;另一種情況是負(fù)負(fù)相減,產(chǎn)生負(fù)溢出。所以在代碼中需要分別考慮這兩種情況,將這兩種情況取或判斷溢出。

moduletop_module(
inputlogic[7:0]a,
inputlogic[7:0]b,
outputlogic[7:0]s,
outputlogicoverflow
);

assigns=a+b;
assignoverflow=a[7]&b[7]&~s[7]|~a[7]&~b[7]&s[7];

endmodule

poYBAGNYh4aAQr_7AACkjRKVwbU954.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYh42APoH4AAFqBamcqaE437.jpg

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 70-Adder100

題目說明

題目要求我們創(chuàng)建一個100bit的二進(jìn)制的加法器,該電路共包含兩個100bit的輸入和一個cin, 輸出產(chǎn)生sum和cout。

模塊端口聲明

moduletop_module(
input[99:0]a,b,
inputcin,
outputcout,
output[99:0]sum);

題目解析

沒什么難度,就是位數(shù)多一點,其他沒區(qū)別。

moduletop_module(
inputlogic[99:0]a,b,
inputlogiccin,
outputlogiccout,
outputlogic[99:0]sum
);

assign{cout,sum}=a+b+cin;
endmodule

poYBAGNYh5-AeLIjAACZ9Zs_s8A170.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYh7CARngWAACLNGWH0Sk932.jpg

注意圖中無波形。

這一題就結(jié)束了。

Problem 71-Bcdadd4

題目說明

題目給我們提供了一個BCD加法器名字為bcd_fadd, 輸入為兩個4bitBCD碼,一個cin,產(chǎn)生輸出為sum和cout。

modulebcd_fadd{
input[3:0]a,
input[3:0]b,
inputcin,
outputcout,
output[3:0]sum);

且題目也說明需要我們例化4次bcd_fadd來得到一個16-bit的BCD加法器(共16bit), 同樣產(chǎn)生sum和cout。

模塊端口聲明

moduletop_module(
input[15:0]a,b,
inputcin,
outputcout,
output[15:0]sum);

題目解析

這個題目難度不大,主要考察例化語法,但是我們需要看下BCD加法器結(jié)構(gòu)。

moduletop_module(
inputlogic[15:0]a,b,
inputlogiccin,
outputlogiccout,
outputlogic[15:0]sum);

wirelogic[2:0]cout_temp;

bcd_faddu1_bcd_fadd(
.a(a[3:0]),
.b(b[3:0]),
.cin(cin),
.cout(cout_temp[0]),
.sum(sum[3:0])
);
bcd_faddu2_bcd_fadd(
.a(a[7:4]),
.b(b[7:4]),
.cin(cout_temp[0]),
.cout(cout_temp[1]),
.sum(sum[7:4])
);
bcd_faddu3_bcd_fadd(
.a(a[11:8]),
.b(b[11:8]),
.cin(cout_temp[1]),
.cout(cout_temp[2]),
.sum(sum[11:8])
);
bcd_faddu4_bcd_fadd(
.a(a[15:12]),
.b(b[15:12]),
.cin(cout_temp[2]),
.cout(cout),
.sum(sum[15:12])
);


endmodule

poYBAGNYh8eAaDMaAAEJ-xuQ_gU870.jpg

點擊Submit,等待一會就能看到下圖結(jié)果:

poYBAGNYh9qAEe22AAF_t3wutT8682.jpg

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

總結(jié)

今天的幾道題就結(jié)束了,整體比較簡單,沒有復(fù)雜的代碼,沒有復(fù)雜的設(shè)計思路,主要在于加法器的設(shè)計。

最后我這邊做題的代碼也是個人理解使用,有錯誤歡迎大家批評指正,祝大家學(xué)習(xí)愉快~






審核編輯:劉清

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

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    8

    文章

    327

    瀏覽量

    47416
  • 加法器
    +關(guān)注

    關(guān)注

    6

    文章

    183

    瀏覽量

    30164

原文標(biāo)題:HDLBits: 在線學(xué)習(xí) SystemVerilog(十二)-Problem 65-71(加法器)

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    加法器

    請問下大家,,進(jìn)位選擇加法器和進(jìn)位跳躍加法器的區(qū)別是啥???我用Verilog實現(xiàn)16位他們的加法器有什么樣的不同啊?還請知道的大神告訴我一下。。
    發(fā)表于 10-20 20:23

    什么是加法器加法器的原理是什么 ?

    什么是加法器加法器的原理是什么 反相加法器等效原理圖解析
    發(fā)表于 03-11 06:30

    Verilog硬件描述語言描述.

    本書簡要介紹了Verilog硬件描述語言的基礎(chǔ)知識,包括語言的基本內(nèi)容和基本結(jié)構(gòu) ,以及利用該語言在各種層次上對數(shù)字系統(tǒng)的建模方法
    發(fā)表于 03-27 23:44 ?101次下載

    加法器,加法器是什么意思

    加法器,加法器是什么意思 加法器 :  加法器是為了實現(xiàn)加法的?! 〖词钱a(chǎn)生數(shù)的和的裝置。加數(shù)和被加數(shù)為輸入,和數(shù)與
    發(fā)表于 03-08 16:48 ?5581次閱讀

    verilog硬件描述語言課程講義

    verilog硬件描述語言課程講義
    發(fā)表于 05-21 15:01 ?33次下載
    <b class='flag-5'>verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述語言</b>課程講義

    Verilog硬件描述語言參考手冊

    Verilog硬件描述語言參考手冊,Verilog語法內(nèi)容介紹
    發(fā)表于 11-12 17:20 ?0次下載

    Verilog HDL硬件描述語言

    Verilog HDL硬件描述語言 有需要的下來看看
    發(fā)表于 12-29 15:31 ?0次下載

    Verilog硬件描述語言

    VHDL語言編程學(xué)習(xí)Verilog硬件描述語言
    發(fā)表于 09-01 15:27 ?0次下載

    Verilog HDL硬件描述語言

    Verilog HDL硬件描述語言,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-11 11:20 ?11次下載

    基于Verilog硬件描述語言的IEEE標(biāo)準(zhǔn)硬件描述語言資料合集免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于Verilog硬件描述語言的IEEE標(biāo)準(zhǔn)硬件描述語言資料合集免費下載:1995、2001、2005;Syst
    發(fā)表于 06-18 08:00 ?10次下載

    加法器是如何實現(xiàn)的

     verilog實現(xiàn)加法器,從底層的門級電路級到行為級,本文對其做出了相應(yīng)的闡述。
    發(fā)表于 02-18 14:53 ?6286次閱讀
    <b class='flag-5'>加法器</b>是如何實現(xiàn)的

    加法器設(shè)計代碼參考

    介紹各種加法器Verilog代碼和testbench。
    發(fā)表于 05-31 09:23 ?19次下載

    使用Verilog/SystemVerilog硬件描述語言練習(xí)數(shù)字硬件設(shè)計

    HDLBits 是一組小型電路設(shè)計習(xí)題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習(xí)數(shù)字硬件設(shè)計~
    的頭像 發(fā)表于 08-31 09:06 ?1738次閱讀

    加法器的原理及采用加法器的原因

    有關(guān)加法器的知識,加法器是用來做什么的,故名思義,加法器是為了實現(xiàn)加法的,它是一種產(chǎn)生數(shù)的和的裝置,那么加法器的工作原理是什么,為什么要采用
    的頭像 發(fā)表于 06-09 18:04 ?5228次閱讀

    串行加法器和并行加法器的區(qū)別?

    串行加法器和并行加法器是兩種基本的數(shù)字電路設(shè)計,用于執(zhí)行二進(jìn)制數(shù)的加法運算。它們在設(shè)計哲學(xué)、性能特點以及應(yīng)用場景上有著明顯的區(qū)別。
    的頭像 發(fā)表于 05-23 15:06 ?2808次閱讀