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

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

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

請用Verilog分別實現(xiàn)1位半加器和1位全加器

冬至子 ? 來源:FPGA探索者 ? 作者:FPGA探索者 ? 2023-06-26 16:32 ? 次閱讀

1.原理

半加器

圖片

圖片

全加器

當多位數(shù)相加時,半加器可用于最低位求和,并給出進位數(shù)。第二位的相加有兩個待加數(shù)和,還有一個來自前面低位送來的進位數(shù)。這三個數(shù)相加,得出本位和數(shù)(全加和數(shù))和進位數(shù)。這種就是“全加"真值表:

圖片

圖片

2.編程思路

(1)根據(jù)真值表編寫

按照半加器和全加器的真值表寫出輸出端的邏輯表達式,對半加器,輸出的進位端是量輸入的“與”,輸出的計算結(jié)果是量輸入的異或;對全加器,也按照邏輯表達式做。

//半加器模塊
module adder_half(  
inputa,
inputb,
output regsum,
output regcout
);

//這里的always @(*)搭配里面的“=”阻塞賦值符號
//實現(xiàn)的效果和 assign sum = a ^ b; assign cout = a & b;是一樣的
always @(*)
begin
sum = a ^ b;
cout = a & b;
end
endmodule

全加器:

module all_adder(cout,sum,a,b,cin);

input a,b,cin;
output sum,cout;

wire sum,cout;

assign sum=a^b^cin;
assign cout=(a&b)|(a&cin)|(b&cin);
endmodule

3.問題匯總

(1)`timescale 1 ns/1 ps

timescale是verilog中的一種時間尺度預(yù)編譯指令,用來定義仿真時的時間單位和時間精度,左邊是時間單位,右邊是時間精度,時間單位是用于編寫激勵文件,時間精度是顯示時的刻度,比如#100也就是100ns。時間精度不能大于時間單位,比如timescale 1 ns/1 ps是正確的,而timescale 1 ps/1 ns是錯誤的。

(2)#({$random}%100)

首先,#代表延時,這個語句表示延時隨機的一個時間,結(jié)合`timescale 1 ns/1 ns是延時隨機的ns。

$random 是 verilog 中產(chǎn)生隨機數(shù)的系統(tǒng)函數(shù),在調(diào)用時返回一個 32 位的隨機數(shù),是帶符號的整形數(shù)。有幾種用法:

random 和random()意義一樣,都是產(chǎn)生隨機數(shù);

$random%100 在-99 到 99 之間產(chǎn)生隨機數(shù);

{$random}%100 采用位拼接符,在 0 到 100 之間產(chǎn)生隨機數(shù);

如 seed =10, $random(seed) 根據(jù) seed 值產(chǎn)生隨機數(shù),而后 seed 值也會更新。

(3)add t0(.cin(cin), .a(a), .b(b), .sum(sum), .count(count));

例化的格式,先建立一個叫add的模塊(module),有5個引腳,分別是cin/a/b/sum/count,例化的模塊叫做t0,比較簡單的例化方式就是如上所示的,括號外的引腳與括號內(nèi)的引腳名稱完全一致,無需區(qū)分。

實際上,括號外的引腳名稱代表的是模塊定義時的引腳,括號內(nèi)的引腳是目前實際使用的引腳名稱,如可以將@大神袁的測試文件改為:

`timescale 1 ns/1 ns

module top_tb();

reg a1;

reg b1;

wire sum1;

wire count1;

initial

begin

a1 = 0;

b1 = 0;

forever

begin

#({$random}%100)

a1 = ~a1;

#({$random}%100)

b1 = ~b1;

end

end

top t0(.a(a1), .b(b1), .sum(sum1), .count(count1));

endmodule

(4)對于延時,可以采用直接賦值的延時,如#5,使用隨機延時目前暫時不常用。

當仿真到想結(jié)束時,可以在initial塊的最后加$finish(此處可參考@大神李),即調(diào)用系統(tǒng)函數(shù)結(jié)束仿真,否則,仿真在ModelSim中會一直進行下去,不方便觀察(在Vivado中設(shè)置的第一次仿真結(jié)束時間停止,默認1ns)。

此外,這里建議使用stop來代替finish,即停止仿真,在ModelSim中是暫停了仿真,而$finishi則可能會退出,看不到仿真波形。

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

    關(guān)注

    10

    文章

    62

    瀏覽量

    28506
  • 半加器
    +關(guān)注

    關(guān)注

    1

    文章

    29

    瀏覽量

    8793
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66531
  • Verilog語言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8233
收藏 人收藏

    評論

    相關(guān)推薦

    請問Quartus2中的用一全加器實現(xiàn)全加器

    全加器是我自己封裝的,在四全加器中調(diào)用,在編譯過程總是出錯
    發(fā)表于 03-06 15:48

    FPGA入門——1全加器設(shè)計 精選資料分享

    FPGA入門——1全加器設(shè)計一、原理圖輸入1.1 創(chuàng)建工程1.2 原理圖輸入1.3 將設(shè)計項目設(shè)置成可調(diào)用的元件1.4
    發(fā)表于 07-26 07:01

    怎樣去設(shè)計一種基于FPGA的1全加器

    怎樣去設(shè)計一種基于FPGA的1全加器?如何對基于FPGA的1全加器進行仿真?
    發(fā)表于 09-17 07:38

    基于Quartus II軟件完成一個1全加器的設(shè)計

    FPGA 設(shè)計入門(嵌入式系統(tǒng)應(yīng)用開發(fā))一、實驗要求二、實驗步驟1. 新建工程2. 原理圖設(shè)計3. 將設(shè)計項目設(shè)置成可調(diào)用的元件4. 仿真5. 設(shè)計
    發(fā)表于 12-17 06:19

    什么是8全加器和8為帶超前進位的全加器?

    Verilog數(shù)字系統(tǒng)設(shè)計四復(fù)雜組合邏輯實驗2文章目錄Verilog數(shù)字系統(tǒng)設(shè)計四前言一、什么是8全加器和8為帶超前進位的全加器?二、編程
    發(fā)表于 02-09 07:49

    全加器是算術(shù)運算電路中的基本單元,它們
    發(fā)表于 04-07 10:34 ?1.6w次閱讀
    <b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>

    什么是一全加器,其原理是什么?

    什么是一全加器,其原理是什么  是能夠計算低位進位的二進制加法電路 一全加器由2個
    發(fā)表于 03-08 17:13 ?7.6w次閱讀

    加法器仿真波形圖設(shè)計解析

    8全加器可由2個4全加器串聯(lián)組成,因此,先由一個
    發(fā)表于 11-24 10:01 ?3.1w次閱讀
    八<b class='flag-5'>位</b>加法器仿真波形圖設(shè)計解析

    全加器是什么?全加器的區(qū)別?

    是能夠計算低位進位的二進制加法電路。與相比,全加器不只考慮本位計算結(jié)果是否有進位,也考
    發(fā)表于 07-25 11:15 ?7.4w次閱讀
    <b class='flag-5'>全加器</b>是什么?<b class='flag-5'>全加器</b>和<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>的區(qū)別?

    全加器的原理及區(qū)別(結(jié)構(gòu)和功能)

    +加法和全加法是算術(shù)運算電路中的基本單元,它們是完成1二進制相加的一種組合邏輯電路。
    的頭像 發(fā)表于 07-25 11:37 ?33.8w次閱讀
    <b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>和<b class='flag-5'>全加器</b>的原理及區(qū)別(結(jié)構(gòu)和功能)

    全加器真值表和真值表詳細分析

    全加器是組合電路中的基本元器件,也是CPU中處理加法運算的核心,理解、掌握并熟練應(yīng)用是硬件課程的最基本要求。
    的頭像 發(fā)表于 07-25 14:39 ?14w次閱讀
    <b class='flag-5'>全加器</b>真值表和<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>真值表詳細分析

    Verilog數(shù)字系統(tǒng)設(shè)計——復(fù)雜組合邏輯實驗2(8全加器和8為帶超前進位的全加器

    Verilog數(shù)字系統(tǒng)設(shè)計四復(fù)雜組合邏輯實驗2文章目錄Verilog數(shù)字系統(tǒng)設(shè)計四前言一、什么是8全加器和8為帶超前進位的全加器?二、編程
    發(fā)表于 12-05 19:06 ?4次下載
    <b class='flag-5'>Verilog</b>數(shù)字系統(tǒng)設(shè)計——復(fù)雜組合邏輯實驗2(8<b class='flag-5'>位</b><b class='flag-5'>全加器</b>和8為帶超前進位的<b class='flag-5'>全加器</b>)

    基于FPGA的設(shè)計

    加法器用于兩個數(shù)或者多個數(shù)的和,加法器又分為(half adder)和全加器(full adder)。
    的頭像 發(fā)表于 05-12 14:50 ?1073次閱讀
    基于FPGA的<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>設(shè)計

    全加器的功能特點

    全加器是數(shù)字電路中的基本組件,用于執(zhí)行二進制數(shù)的加法運算。它們在計算機、微處理和其他數(shù)字系統(tǒng)中扮演著重要角色。
    的頭像 發(fā)表于 10-18 11:10 ?1357次閱讀

    全加器的區(qū)別是什么

    (Half Adder)和全加器(Full Adder)是數(shù)字電路中的基本組件,用于執(zhí)行二進制加法運算。它們的主要區(qū)別在于功能和輸入輸出的數(shù)量。
    的頭像 發(fā)表于 10-18 11:12 ?3607次閱讀