【FPGA】Verilog:BCD 加法器的實現


0x00 XOR 運算在 2 的補碼加減法中的應用

2 的補碼加減法的特點是,當從某個數中減去負數時,將其轉換為正數的加法來計算,并將減去正數的情況轉換為負數的加法來計算,從而將所有減法運算轉換為加法運算。在這種情況下,兩個數的加法運算中產生進位的情況是在加法位的所有位都為 1 時。

換句話說,可以使用 AND 門來檢測產生進位的情況。在兩個數的加法運算中,進位傳播的情況是在加法位的兩個位中只有一個被設置為 1 時。這是因為從較低位傳遞上來的進位位會再次傳遞到下一個位,因此可以使用 XOR 門來檢測進位傳播的情況。

  • carry-generate funciton:\color{}g_i=x_iy_i
  • carry-propagate function:\color{}p_i=x_i\oplus y_i

0x01 BCD 運算

在 BCD 中,使用4位值作為操作數,但由于只表示 0 到 9 的數字,因此只使用 0000 到 1001 的二進制數,而不使用 1010 到 1111 的二進制數(don't care)。

因此,不能使用常規的 2'complement 運算來計算,需要額外的處理:如果 4 位二進制數的運算結果在 1010 到 1111 的范圍內,需要將 6 (即 0110),添加到運算結果中。

BCD 運算例子

0x02 BCD 加法器的實現

關于 BCD 加法器的結果和模擬過程進行說明(Verilog源代碼,輸出示例,詳細描述過程)。

💬 Design source:

module BCD2(input Cin,input a1,input a2,input a3,input a4,input b1,input b2,input b3,input b4,output sum1,output sum2,output sum3,output sum4,output cout);
wire s1,s2,s3,s4;
wire c1,c2,c3,c4;
wire C1,C2,C3,C4;assign s1 = (a1^b1)^Cin;
assign c1 = (Cin && (a1^b1)) || (a1 && b1);assign s2 = (a2^b2)^c1;
assign c2 = (c1 && (a2^b2)) || (a2 && b2);assign s3 = (a3^b3)^c2;
assign c3 = (c2 && (a3^b3)) || (a3 && b3);assign s4 = (a4^b4)^c3;
assign c4 = (c3 && (a4^b4)) || (a4 && b4);///
assign cout = (c4 || (s3 && s4) || (s2 && s4));assign sum1 = s1;
assign C1 = (0 && (s1^0)) || (s1 && 0);assign sum2 = (s2^cout)^C1;
assign C2 = (C1 && (s2^cout)) || (s2 && cout);assign sum3 = (s3^cout)^C2;
assign C3 = (C2 && (s3^cout)) || (s3 && cout);assign sum4 = (s4^0)^C3;
assign C4 = (C3 && (s4^0)) || (s4 && 0);endmodule

💬 Testbench:

`timescale 1ns / 1psmodule BCD2_tb;
reg Cin,a1,a2,a3,a4,b1,b2,b3,b4;
wire sum1,sum2,sum3,sum4,cout;BCD2 u_BCD2 (.Cin(Cin ),.a1(a1 ),.a2(a2 ),.a3(a3 ),.a4(a4 ),.b1(b1 ),.b2(b2 ),.b3(b3 ),.b4(b4 ),.sum1(sum1 ),.sum2(sum2 ),.sum3(sum3 ),.sum4(sum4 ),.cout(cout )
);initial beginCin = 1'b0;a1 = 1'b0;a2 = 1'b0;a3 = 1'b0;a4 = 1'b0;b1 = 1'b0;b2 = 1'b0;b3 = 1'b0;b4 = 1'b0;
endalways@(Cin or a1 or a2 or a3 or a4 or b1 or b2 or b3 or b4) beginCin <=#10 ~Cin;a1 <= #20 ~a1;a2 <= #40 ~a2;a3 <= #80 ~a3;a4 <= #160 ~a4;b1 <= #320 ~b1;b2 <= #640 ~b2;b3 <= #1280 ~b3;b4 <= #2560 ~b4;
endinitial begin#5120$finish;
endendmodule

🚩 運行結果如下:

📜 Schematic:

實現的 BCD 加法器是一種將 4 位加法器運算結果轉換為 BCD 表示的設備。如果運算結果是一個大于 9 的數字,我們只需加上 6 (0110)。為了實現這一點,該裝置由兩個加法器電路組成:一個用于執行 4 位加法器運算,另一個電路用于在第一個運算結果大于 9 時加上 0110(補償電路)。

0x03 補充:Single-level 16 bit 超前進位加法器

四個 4 位超前進位加法器可以合并成一個 16 位超前進位加法器。它是四個并行結構的串行連接,是并行和串行結構的混合體。

0x04 補充:2-level 16-bit 超前進位加法器

2 級 16 位超前進位加法器是一種通過使用雙 CLA 發生器,比單級 16 位超前進位加法器更能減少通過柵極所需的延遲的結構。

2-level 16-bit Carry Look-ahead Adder

📌 [ 筆者 ]?  ???(韓)
📃 [ 更新 ]? ?2022.9.20
? [ 勘誤 ]?? /* 暫無 */
📜 [ 聲明 ]? ?由于作者水平有限,本文有錯誤和不準確之處在所難免,本人也很想知道這些錯誤,懇望讀者批評指正!

📜 參考資料?

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207262.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電商使用在線客服系統有什么好處?

互聯網發展越來越快&#xff0c;電商這個板塊也越加成熟&#xff0c;消費者選擇在線購物時會對比平臺&#xff0c;貨比三家&#xff0c;這個時候電商提供高效便捷且貼心的消費者服務就顯得尤為重要了&#xff0c;在線客服系統作為電商企業與消費者溝通的重要工具&#xff0c;其…

SpringAMQP 快速入門

SpringAMQP 快速入門 1. 創建項目2. 快速入門2.2.1 消息發送2.2.2 消息接收 3. 交換機3.1 Fanout Exchange&#xff08;扇出交換機&#xff09;3.1.1 創建隊列與交換機3.1.2 消息接收3.1.3 消息發送 3.2 Direct Exchange&#xff08;直連交換機&#xff09;3.2.1 創建交換機與隊…

Validate 驗證規則詳解

前言: 以前小編發過一篇Validate 驗證規則 如何使用的&#xff0c;沒有去將Validate 驗證規則的原理應用場景&#xff0c;這篇文章來完善一下。 不知道如何使用的朋友可以點擊下面傳送門 傳送門 講解: Validate 驗證規則通常指的是在 Web 開發中&#xff0c;使用驗證器&…

【開源】基于Vue.js的智慧社區業務綜合平臺

文末獲取源碼&#xff0c;項目編號&#xff1a; S 077 。 \color{red}{文末獲取源碼&#xff0c;項目編號&#xff1a;S077。} 文末獲取源碼&#xff0c;項目編號&#xff1a;S077。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 業務類型模塊2.2 基礎業務模塊2.3 預…

python使用conda管理多個環境

一、Anaconda簡介 Anaconda 是專門為了方便使用 Python 進行數據科學研究而建立的一組軟件包&#xff0c;涵蓋了數據科學領域常見的 Python 庫&#xff0c;并且自帶了專門用來解決軟件環境依賴問題的 conda 包管理系統。主要是提供了包管理與環境管理的功能&#xff0c;可以很方…

精選Axure原型設計模板,RP原型組件庫(PC端移動端元件庫及Axure函數及運算符說明)

好的原型組件會大大的提高產品經理的工作效率&#xff0c;現精選了一批Axure 8的原型設計模板&#xff0c;包含了原型設計的常用元素和AxureRP 8函數及運算符的說明文檔&#xff0c;及各種設備模板框架。 分享給大家可以共同學習&#xff0c;文末可下載完整原型組件包~&#x…

蘋果手機ios系統安裝了一個免簽應用書簽webclip描述文件該如何卸載?

隨著移動應用的普及&#xff0c;越來越多的用戶開始關注到蘋果免簽的應用。相比于需要通過 App Store 審核和簽名的應用&#xff0c;免簽應用無需經過蘋果的審核過程&#xff0c;可以直接安裝和使用。那么&#xff0c;蘋果免簽應用是如何制作的呢&#xff1f;本文將介紹制作蘋果…

K3cloud-計算成本分析DEmo

業務背景 用于分析各月計劃與實際物料及費用偏差。費用根據成本計算表分攤邏輯需要計算后按產線、車間、公司等費用掛的成本中心&#xff0c;按價值法進行均攤。此含稅價取最近一次采購價格&#xff0c;按月會發生變化。 代碼示例 –建立臨時表 CREATE TABLE #KD_CB ( [公司…

SQL進階 | CASE表達式

本文所有案例基于《SQL進階教程》實現。 概述 SQL中的CASE表達式是一種通用的條件表達式&#xff0c;類似于其他語言中的if/else語句。它用于在SQL語句中實現條件邏輯。CASE表達式以WHEN子句開始&#xff0c;后面跟著一個或多個WHEN條件&#xff0c;每個WHEN條件后面跟著一個TH…

C++相關閑碎記錄(3)

1、reference wrapper 例如聲明如下的模板&#xff1a; template <typename T> void foo(T val); 如果調用使用&#xff1a; int x; foo(std::ref(x)); T變成int&&#xff0c;而使用調用 int x; foo(std::cref(x)); T變成const int&。 這個特性被C標準庫用…

fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封裝&#xff0c; 是一款支持 android 和 iOS 的 Flutter 媒體播放器插件&#xff0c; 由 ijkplayer 底層驅動。 通過紋理&#xff08;Texture&#xff09;接入播放器視頻渲染到 Flutter 中。 前言 目前使用…

設置單擊右鍵可以選擇用VS Code打開文件

設置單擊右鍵可以選擇用VS Code打開文件_通過code打開-CSDN博客

PostgreSQL 技術內幕(十二) CloudberryDB 并行化查詢之路

隨著數據驅動的應用日益增多&#xff0c;數據查詢和分析的量級和時效性要求也在不斷提升&#xff0c;對數據庫的查詢性能提出了更高的要求。為了滿足這一需求&#xff0c;數據庫引擎不斷經歷創新&#xff0c;其中并行執行引擎是性能提升的重要手段之一&#xff0c;逐漸成為數據…

sh腳本移動文件

內容&#xff1a;兩臺服務器&#xff0c;one 和 two ,在one的指定目錄下&#xff0c;找到指定結尾的文件&#xff0c;將這個文件移到two服務器的指定路徑下&#xff0c;同時將one的源文件 移到 其他目錄下。 #!/bin/bash# 指定源路徑 source_path"/u01/isi/75_files_te…

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記 Abstract 一對一&#xff08;o2o&#xff09;標簽分配對基于變換器的端到端檢測起著關鍵作用&#xff0c;最近已經被引入到全卷積檢測器中&#xff0c;用于端到端密集檢測。然而&#xff0c;o2o可能因為…

[動態規劃及遞歸記憶搜索法]1.鋼條切割問題

摘要 本系列從6道經典的動態規劃題入手&#xff0c;去理解動態規劃的基本思路和想法&#xff0c;以及動態規劃和遞歸記憶搜索法存在的某些聯系&#xff0c;對于每道題目&#xff0c;我們將用兩種方法去實現&#xff0c;這里講解第一道題目&#xff0c;作個開頭。 前言 我們知…

elasticsearch 內網下如何以離線的方式上傳任意的huggingFace上的NLP模型(國內避坑指南)

es自2020年的8.x版本以來&#xff0c;就提供了機器學習的能力。我們可以使用es官方提供的工具eland&#xff0c;將hugging face上的NLP模型&#xff0c;上傳到es集群中。利用es的機器學習模塊&#xff0c;來運維部署管理模型。配合es的管道處理&#xff0c;來更加便捷的處理數據…

吳恩達《機器學習》12-1:優化目標

在機器學習的旅程中&#xff0c;我們已經接觸了多種學習算法。在監督學習中&#xff0c;選擇使用算法 A 還是算法 B 的重要性逐漸減弱&#xff0c;而更關鍵的是如何在應用這些算法時優化目標。這包括設計特征、選擇正則化參數等因素&#xff0c;這些在不同水平的實踐者之間可能…

UG NX二次開發(C#)-求曲線在某一點處的法矢和切矢

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 1、前言2、在UG NX中創建一個曲線3、直接放代碼4、測試案例1、前言 最近確實有點忙了,好久沒更新博客了。今天恰好有時間,就更新下,還請家人們見諒。 今天我們講一下如何獲取一條曲線上某一條曲…