基于FPGA的可逆數制轉碼器設計
摘要:針對二-十進(jìn)制(BCD)數據相互轉換的FPGA實(shí)現目標,基于模塊層次化的設計思想,提出了一種高效、易于重構的可逆轉碼器設計方案。并在FPGA(Altera DE2)開(kāi)發(fā)板上成功進(jìn)行了12 b可逆轉碼器的設計驗證,實(shí)驗結果表明該轉碼器通過(guò)端口參數配置就可以完全實(shí)現不同位數的二-十進(jìn)制(BCD)數據間的相互轉換。
關(guān)鍵詞:二-十進(jìn)制(BCD);可逆轉碼器;FPGA;邏輯單元;TPD
0 引言
在數字系統的數據輸入、運算、輸出過(guò)程中,輸入和輸出常用十進(jìn)制形式表達;而在系統內部采用二進(jìn)制表示和處理數據則更為方便,因此在二進(jìn)制和十進(jìn)制數據間的轉換就是非常必要的。此外,數控機床、智能儀表、電子秤和數碼管等顯示設備也會(huì )頻繁地用到十進(jìn)制(BCD)碼與二進(jìn)制(BIN)碼的相互轉換。目前,數字系統中BCD碼和BIN碼的相互轉換有3類(lèi)實(shí)現方法,首先是采用軟件算法的實(shí)現方式,傳統的是用DAA調節指令實(shí)現,但效率較低,不能滿(mǎn)足一些實(shí)時(shí)應用的要求。其次是純硬件運算實(shí)現方式,這種實(shí)現方式是數據轉換運算到硬件的直接映射,常采用邏輯運算和數據移位來(lái)實(shí)現數據轉換,轉換效率較高,可以根據輸入數據位寬進(jìn)行轉換器的位數擴展和重構。但是在轉換數據位數較多時(shí),運算量會(huì )顯著(zhù)增加、硬件實(shí)現代價(jià)也較大、路徑延遲也會(huì )增大、整個(gè)轉換器的時(shí)序控制也會(huì )變的比較復雜,也很難做到可逆轉碼運算。最后是基于數據查找表(Look Up Tabie,LUT)的實(shí)現方式,也就是先把全部或部分轉換數據列表存儲在存儲器中,然后再根據轉碼器的輸入數據(地址碼)直接或間接地從存儲器中取出所需的輸出數據,這種以查找表為核心的轉換器運算速度快、算法直接簡(jiǎn)單;但是會(huì )需要大量的存儲器;并且這種實(shí)現方法往往是針對具體的轉換數據位寬和單一轉換方向來(lái)定制存儲器(ROM)容量和存儲器初始化數據;一旦需要轉換的數據位數和方向發(fā)生變化,就根本無(wú)法實(shí)現轉換器的數據位數擴展和結構重構,所有的設計就必須重新開(kāi)始。
基于FPGA的可逆數制轉碼器設計,充分利用FPGA的結構特點(diǎn)和硬件描述語(yǔ)言(Veilog HDL)的抽象和靈活性;二-十進(jìn)制(BCD)轉碼器不但具有可配置雙向轉換數據的功能,而且還要求轉碼器簡(jiǎn)單、高效和易于位數擴展(模塊化重構)。因此,文中就提出了一個(gè)高效、易于重構的二-十進(jìn)制(BCD)可逆轉碼器設計方案,通過(guò)端口參數配置和模塊重構就能實(shí)現不同位數的數據在二進(jìn)制和十進(jìn)制(BCD)之間相互轉換,最后
在FPGA(DE2)開(kāi)發(fā)板上成功地進(jìn)行了設計驗證。
1 數制的轉換算法
假設X=(xn-1,xn-2,…,x0)p表示n位p進(jìn)制數據,Y=(ym-1,ym-2,…,y0)q表示m位q進(jìn)制數據,二者之間等值變換的條件為:
這里,X,Y所表示的數值范圍分別是[0,pn-1]和[0,qm-1]。而在二進(jìn)制編碼體系下,要把一個(gè)n位p進(jìn)制數據轉換為m位的q進(jìn)制數據就要求輸入輸出的數據位寬必須滿(mǎn)足m=Ceil[n·logqp]=[n·logqp],這里用“∏”表示整數上確界Ceil運算,輸入輸出數據位寬關(guān)系如圖1所示。
圖1中的din=Ceil[log2 p]=[log2 p];dout=Ceil[log2 q]=[log2 q]分別表示1位輸入輸出數據的二進(jìn)制位寬,例如1位的八進(jìn)制數據需要3 b二進(jìn)制數表示;而1位的十進(jìn)制數據需要4 b二進(jìn)制數表示,所以X→Y轉化的輸入、輸出數據位寬(單位:b)分別為:
n·din=n·[log2 p] (2)
m·dout=[n·logq p]·[log2 q] (3)
8421BCD碼是使用4 b二進(jìn)制數表示1位10進(jìn)制數(0~9)。如果把n位二進(jìn)制數據轉換成m位BCD碼(4m位)就要求m位BCD碼所能表示的最大數不小于n位二進(jìn)制碼所表示最大數,即10m-1≥2n-1,m≥Ceil[lg 2n]=『n·lg 2]。如果12位的二進(jìn)制數轉換成十進(jìn)制(BCD),根據式(3)算出輸出m位的十進(jìn)制數據m=[n·logq p]=[12·lg2]=4;輸出數據位寬m·dout=m·[log2 q]=16 b。
2 二-十進(jìn)制可逆轉碼器設計
2.1 可逆轉碼器的層次化設計
在片上數字系統(SOPC)中實(shí)現二-十進(jìn)制(BCD)碼轉換器,就要求設計者充分利用硬件(FPGA)的結構特點(diǎn)和硬件描述語(yǔ)言(HDL)所提供的設計靈活性;更好地實(shí)現轉碼器的簡(jiǎn)單、高效和結構易于擴展。為此,針對FPGA的結構特點(diǎn)提出了以下設計思路:以4 b數據轉換作為基本的可逆轉換單元來(lái)適應FPGA結構特點(diǎn),而提高邏輯單元利用率、達到降低硬件代價(jià)的目的;利用Verilog HDL進(jìn)行層次化設計描述,以4 b數據轉換單元為最底層模塊,構造出更大的5 b和6 b可逆轉換單元(模塊),這樣會(huì )在不增加實(shí)現代價(jià)的前提下,實(shí)現使用大的轉碼單元模塊來(lái)簡(jiǎn)化轉碼器的結構、方便轉碼器的位數擴展;這種設計方法就為二-十進(jìn)制(BCD)可逆轉碼器的構建提供了4 b,5 b和6 b三種不同大小的單元模塊,這會(huì )讓每一個(gè)轉換單元模塊都使用到恰到好處(需要小模塊的地方就不會(huì )使用大模塊);有效避免了單元模塊利用率不高的問(wèn)題。
評論