王怡
(電子科技大學成都學院微電子技術(shù)系,四川 成都611731)
本文將介紹三種基于verilog 的加法器設(shè)計,分別是:級聯(lián)加法器、并行加法器和流水線加法器。在介紹每種設(shè)計方法的同時,對每種方法的優(yōu)缺點、適合使用的場合以及改進方法都會進行詳細的闡述。
級聯(lián)加法器的核心設(shè)計思想來源于加法運算法則本身。在多位數(shù)的加法運算中,運算順序是從低位到高位依次進行加法運算,每次運算一位。除最低位外,其他位都是用本位的數(shù)據(jù)與來自低位的進位相加。本質(zhì)上講,每一位的運算都是一個一位全加器,只是不同位的輸入數(shù)據(jù)不同,運算的時機不同而已。所以,我們可以設(shè)計一個一位全加器,然后按照運算的順序,將多個一位全加器串聯(lián)起來就可以了。這也是級聯(lián)加法器中“級聯(lián)”的含義。設(shè)計方法可以采用全結(jié)構(gòu)設(shè)計的方法,也可以采用結(jié)構(gòu)設(shè)計和行為描述結(jié)合的方法,本文采用第二種方法。一位全加器的設(shè)計代碼如下:
將以上代碼在開發(fā)工具中生成圖形符號,再利用繪圖功能依次互聯(lián)即可,電路結(jié)構(gòu)如圖1 所示。
圖1
這種設(shè)計方法的優(yōu)點是設(shè)計簡單,但主要應用于一些對運算速度要求不高的場合,要求高則無法使用。因為這種加法器每一位的運算都要等待前一位運算完成,輸出進位之后才能完成。所以運算的位數(shù)越多,延時就越長。
并行加法器的設(shè)計方法,是直接利用verilog 的加法運算符直接進行行為描述。這種設(shè)計方法的好處是,設(shè)計人員無需了解加法器的底層硬件結(jié)構(gòu),只需要描述功能即可。并行加法器的優(yōu)點是運行速度快,而缺點也很明顯:a.并行加法器完全依賴門電路來搭建,所以對系統(tǒng)資源的耗費是很大的。特別是隨著加法器寬度的增加,資源的耗費也會迅速增大。b.并行加法器是一個純組合邏輯電路,因為輸入信號時間上的不一致以及電路本身延時等原因,會造成競爭冒險現(xiàn)象,從而在電路的輸出端產(chǎn)生中間態(tài)輸出,形成毛刺,影響系統(tǒng)的穩(wěn)定性。
針對這一問題,我們可以在加法器設(shè)計中引入時鐘,通過在輸入端和輸出端加觸發(fā)器來改善毛刺。輸入端的觸發(fā)器由主時鐘統(tǒng)一控制,可以最大程度的將輸入信號的輸入時序同步,降低毛刺形成的可能性。輸出端的觸發(fā)器每一個主時鐘周期輸出一次加法器的運算結(jié)果,不輸出中間態(tài),也就隔離了毛刺的輸出。當然,主時鐘頻率的選擇是有要求的:它的周期必須大于加法器組合邏輯電路的運算時間,否則無法隔離毛刺的輸出。具體代碼如下:
流水線加法器是一種基于時鐘的同步邏輯電路,設(shè)計方法相對復雜,但運算速度,對系統(tǒng)頻率的適應性,都是非常優(yōu)越的。流水線加法器也是這篇文章重點介紹的加法器設(shè)計方法。流水線加法器可以解決系統(tǒng)主頻很高,而加法運算由于位寬大,運算速度低,而拖慢整個系統(tǒng)運行頻率的問題。例如:某系統(tǒng)是一個全同步系統(tǒng),同時又運行在25MHz 的頻率上,那么任何信號從輸出端寄存器反饋到信號輸入端之間的最大延時必須小于40ns。如果反饋時通過的邏輯電路較復雜,延時路徑比較長,系統(tǒng)時鐘的速度就很難維持。在加法器這個問題上,如果沿用上文提到的同步并行加法器的設(shè)計,當加法器的運算速度大于系統(tǒng)時鐘周期40ns 時,加法器將會輸出運算的中間值,產(chǎn)生輸出錯誤。如果不改進加法器設(shè)計,就只能降低整個系統(tǒng)運行的頻率。流水線電路設(shè)計的基本思路是:將原來的組合邏輯電路分成若干個規(guī)模更小的電路來實現(xiàn)。并且在這些小規(guī)模邏輯電路中加入若干寄存器來存儲中間運算結(jié)果。中間結(jié)果在下一拍時鐘進入下級電路進行運算。這樣一級級的傳遞和運算,直到最后一級電路算出最終結(jié)果。這樣,用多個時鐘周期來完成電路的運算。雖然多用了一些寄存器資源,但是減少了每一級組合電路的時延,可以提高整個電路的運行頻率。同時,由于流水線電路的每一級都處于同一個系統(tǒng)時鐘的控制下,因此,多級電路是并行工作的。這就意味著,最后一級流水線在處理第一條指令的最后一步時,前幾級的流水線電路可以同時處理后續(xù)多條指令的不同步驟。以四級流水線深度的32 位加法器為例:32 位加法運算被分解成4 步,每一步完成一個字節(jié)的加法運算,對應一級流水線的硬件,由系統(tǒng)時鐘統(tǒng)一控制。前四拍時鐘,電路的工作內(nèi)容如下:
表1
從上表可以看出,在四個時鐘周期中,電路完成了第一組32位數(shù)的加法運算。同時還分別完成了第二、第三、第四組數(shù)的前三、前二、前一步的運算。所以,盡管一組32 位數(shù)據(jù)需要4 個時鐘周期才能算完,但由于電路運行的并行性,實際最終平均一個時鐘周期就能輸出一組運算結(jié)果。這樣,不但沒有拖慢系統(tǒng)運行的主頻,還提高了加法運算的速度。流水線電路設(shè)計的核心在于每級電路運算結(jié)果的緩存,這個設(shè)計如果不正確,將無法得到正確的結(jié)果。分析如下:a.輸入數(shù)據(jù): 因為多個周期才能完成一次運算。因此如果在運算完成前輸入數(shù)據(jù)就變化的話,將得不到正確的運算結(jié)果;b.前一級流水線的運算結(jié)果,分兩種情況:如果在下一級流水線中馬上就用的,如進位信息,就不用緩存。如果在下一級流水線中不用,到最后才用或輸出的值,則在運算結(jié)果出來之后的每一級流水線中都需要緩存。因此,每一級流水線中應完成如下數(shù)據(jù)緩沖任務:a. 后級流水線需要用到的輸入數(shù)據(jù);b.前級流水線的運算結(jié)果。以四級流水線深度的32 位加法器為例,其每級需緩存數(shù)據(jù)的定義如以下代碼所示:
本文介紹了三種基于verilog 的加法器設(shè)計,分別是:級聯(lián)加法器、并行加法器和流水線加法器。其中級聯(lián)加法器設(shè)計簡單,但運算速度受限,只能應用于對運算速度要求不高的場合。并行加法器速度快,但是資源占用較大。隨著運算位數(shù)的增加,運算速度也將越來越慢。同時,并行加法器是組合邏輯路,存在競爭冒險現(xiàn)象,影響結(jié)果輸出。本文就此也提出了解決方案。流水線加法器設(shè)計復雜,但性能十分優(yōu)越。在不同的應用場合,可根據(jù)需求的不同選擇不同的加法器設(shè)計方法。