乘法器——booth編碼

来源:https://www.cnblogs.com/wangkai2019/archive/2019/07/06/11144367.html
-Advertisement-
Play Games

博主最近在學習加法器、乘法器、IEEE的浮點數標準,作為數字IC的基礎。當看到booth編碼的乘法器時,對booth編碼不是很理解,然後在網上找各種理解,終於豁然開朗。現將一個很好的解釋分享給大家,希望能對大家有所幫助。 首先,看看這幾個公式: 可以證明的是,這三個公式是相等的,一個有符號的二進位數 ...


    博主最近在學習加法器、乘法器、IEEE的浮點數標準,作為數字IC的基礎。當看到booth編碼的乘法器時,對booth編碼不是很理解,然後在網上找各種理解,終於豁然開朗。現將一個很好的解釋分享給大家,希望能對大家有所幫助。

    首先,看看這幾個公式:

    可以證明的是,這三個公式是相等的,一個有符號的二進位數的補碼用公式1來表示,可以等價地寫成公式2和公式3。

    布斯編碼可以減少部分積的數目(即減少乘數中1的個數),用來計算有符號乘法,提高乘法運算的速度。

    

    如上圖所示為二進位乘法的過程,也是符合我們正常計算時的邏輯,我們假設有一個8位乘數(Multiplier),它的二進位值為0111_1110,它將產生6行非零的部分積,因為它有6個非零值(即1)。如果我們利用公式2將這個二進位值改為1000_00-10,其中低四位中的-1表示負1,可以證明兩個值是相等的。可以這樣簡單理解,那就是現在原值得末尾加輔助位0,變為0111_1110_0,然後利用低位減去高位,即得到1000_00-10。這樣一變換可以減少0的數目,從而減少加的次數,我們只需相加兩個部分積,但是終的加法器必須也能執行減法。這種形式的變換稱為booth encoding(即booth編碼),它保證了在每兩個連續位中最多只有一個是1或-1。部分積數目的減少意味著相加次數的減少,從而加快了運算速度(並減少了面積)。從形式上來說,這一變換相當於把乘數變換成一個四進位形式。

    最經常使用的是改進的booth編碼。乘數按三位一組進行劃分,相互重疊一位。其實就是把公式1重寫為公式3。每一組按下表編碼,並形成一個部分積。

    再考慮前面提及的8位二進位數0111_1110。從msb到lsb,可以把它分為三位一組首尾重疊的四組:01(1),11(1),11(1),10(0),末尾補了一個輔助位0。根據上表編碼得到:10(2),00(0),00(0),-10(-2),或者表示為1000_000-10,這與前面得到結果是一樣的。這時,乘2就是移位。所以布斯演算法僅涉及加法,減法和移位操作。     這樣一來就很容易理解了。       
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Struts2 配置文件result元素 作用:為動作指定結果視圖 name屬性:邏輯視圖的名稱,對應著動作方法的返回值。預設值是success type屬性:結果類型,指的就是用什麼方式轉到定義的頁面,預設是dispatcher result中type的取值有四種類型 | | | | | : | ...
  • >>,>>>,<<的用法: * <<:左移 左邊最高位丟棄,右邊補齊0 * >>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1 * >>>:無符號右移 無論最高位是0還是1,左邊補齊0 代碼: 結果: ...
  • 源文件的字元編碼 預設情況下,Python 源碼文件以 UTF 8 編碼方式處理。如果不使用預設編碼,要聲明文件所使用的編碼,源碼文件的 第一行要寫成特殊的註釋。語法如下所示: 其中 encoding 可以是 Python 支持的任意一種 codecs。比如,要聲明使用 Windows gbk 編碼 ...
  • 記錄 2019-07-06: Python是一門解釋型語言,擁有許多強大的標準庫,是完全面向對象語言 如果需要一段關鍵代碼運行得更快或者希望某些演算法不公開,可以把部分程式用c或c++編寫,然後在python程式中使用它們 缺點: 運行速度慢 國內市場較小 中文資料匱乏 中文資料匱乏 可以使用任意文本 ...
  • 一、 偏函數 二、 1.定義:參數固定的函數,相當於一個有特定參數的函數體。 2.格式:functools.partial(函數,固定參數) 3.返回值:把一個函數某些參數固定,返回一個新的函數。 二、zip函數 1.定義:把兩個可迭代的內容生成一個可以迭代的tuple元素組成的內容 2.格式:zi ...
  • 9-7 管理員: 管理員是一種特殊的用戶。編寫一個名為Admin的類,並讓它繼承練習9-3或者9-5的User類。添加一個名為privileges的屬性,用於存儲一個由字元串(如"can add post"、"can delete post"、"can ban user"等)組成的列表。編寫一個名為 ...
  • 開發環境: Windows操作系統開發工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 資料庫項目截圖: 獲取源碼請聯繫博主-Q:782827013 ...
  • 世界是物質的,物質是運動的,運動是有規律的,規律是可以被認識的 二項式反演 $$ g_n=\sum_{i=0}^n \binom{n}if_i\Rightarrow f_n=\sum_{i=0}^n( 1)^{n i}\binom{n}ig_i $$ 證明如下 $$ \begin{aligned} ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...