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