文章作者:公眾號 FPGA之旅 (電擊小子) ; 歡迎大家關(guān)注作者公眾號FPGA之旅 ;在此特別鳴謝!
一. 簡介
在本篇文章開始之前,先對上篇文章中的一個錯誤進(jìn)行指正一下。在部分積生成的時候,需要計算-2A和2A的值,我的做法就是直接左移了一位,這樣就會有一個問題,符號位被移掉了,為什么我的計算結(jié)果還是對的呢 ? 因為仿真的A比較小,15位的值和符號位是一樣的,沒有影響,所以當(dāng)時沒有發(fā)現(xiàn)。需要對符號位擴展一位,變成17位的數(shù)之后,再進(jìn)行計算2A和-2A。如下圖這樣,擴展一下最高位。
本次的優(yōu)化在上次的基礎(chǔ)上,進(jìn)行了一定程度的優(yōu)化,下面就一一介紹一下。
二. 計算-A,-2A,2A部分
先來看一下之前的代碼,可以看到取反模塊,這里使用了兩次,其實是沒有必要的,
先移位再取反,和先取反再移位是完全等價的,但是在門電路的消耗上卻節(jié)約了17個非門和17bit加法器。
三. 部分積部分
在之前的代碼中,生成的8個部分積的位寬全部是32bit,在進(jìn)行部分積壓縮的時候,使用了3個32bit的4:2壓縮器。
但是將按照下列方式分組,將8個部分積分成兩部分,每部分、每個部分積均為24bit,這樣在使用前兩個4:2壓縮器可以選擇24bit的;然后第三個4:2壓縮器選擇32bit的,將第一部分進(jìn)行符號位擴展,第二部分末尾進(jìn)行補0,將其擴展為32bit即可。
這樣就將3個32bit的,優(yōu)化到了 2個24bit和1個32bit的4:2壓縮器了。
這里的三目運算符,替換為用搭建的選擇器了。
四. 取反加一操作
在求A的負(fù)數(shù)的時候,需要有個加一的操作,可以將這個操作添加到部分積壓上面去,如下圖所示,第一個部分積的加一,添加到了第二個部分積的對應(yīng)的位置,依次類推,第八個部分積的加一,會添加到第九個,但是,部分積的個數(shù)只用8個,所以這里就會多出一個部分積出來,在壓縮的時候,會額外使用一個3:2壓縮器。測試知道這樣的操作是可取的。
在進(jìn)行booth編碼的時候,添加一個變量,可以認(rèn)為是這里的S,看看該部分積是否需要加一操作。只要set0為0,inv為1,即有取放操作。
然后在部分積生成的時候,將第一個部分積的加一標(biāo)志,添加到第二個部分積對應(yīng)的位置。
其中需要注意一點,由于我們對部分積進(jìn)行了分組,第一組的最后一個部分積,是加不到第二組的第一個部分積的,需要在部分積壓縮的時候添加上去,為什么可以看完整代碼的位寬。
五. 小結(jié)
本次在上篇文章的基礎(chǔ)上,進(jìn)行了初步的優(yōu)化,門的使用和延時有了初步的提升,在Vivado中延時從16ns下降到了15ns,DC中從6ns下降到了5ns。
審核編輯:劉清
-
加法器
+關(guān)注
關(guān)注
6文章
183瀏覽量
30774 -
門電路
+關(guān)注
關(guān)注
7文章
201瀏覽量
40752 -
乘法器
+關(guān)注
關(guān)注
9文章
212瀏覽量
37977 -
選擇器
+關(guān)注
關(guān)注
0文章
110瀏覽量
14831
原文標(biāo)題:定點乘法器設(shè)計(4)(華為杯)---優(yōu)化V1
文章出處:【微信號:FPGA之旅,微信公眾號:FPGA之旅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
fpga中定點乘法器設(shè)計(中文)
分享--fpga中定點乘法器設(shè)計(中文)
怎么設(shè)計基于FPGA的WALLACETREE乘法器?
乘法器的基本概念

1/4平方乘法器

脈沖-寬度-高度調(diào)制乘法器

變跨導(dǎo)乘法器的基本原理

變跨導(dǎo)乘法器
基于IP核的乘法器設(shè)計

基于FPGA的WALLACE TREE乘法器設(shè)計

定點乘法器設(shè)計(中文)
使用verilogHDL實現(xiàn)乘法器

乘法器原理_乘法器的作用

評論