<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于FPGA的可逆數(shù)制轉(zhuǎn)碼器設(shè)計

          基于FPGA的可逆數(shù)制轉(zhuǎn)碼器設(shè)計

          作者: 時間:2013-03-05 來源:網(wǎng)絡(luò) 收藏

          摘要:針對二-十進制(BCD)數(shù)據(jù)相互轉(zhuǎn)換的實現(xiàn)目標,基于模塊層次化的設(shè)計思想,提出了一種高效、易于重構(gòu)的可逆器設(shè)計方案。并在(Altera DE2)開發(fā)板上成功進行了12 b可逆器的設(shè)計驗證,實驗結(jié)果表明該器通過端口參數(shù)配置就可以完全實現(xiàn)不同位數(shù)的二-十進制(BCD)數(shù)據(jù)間的相互轉(zhuǎn)換。
          關(guān)鍵詞:二-十進制(BCD);可逆轉(zhuǎn)碼器;;邏輯單元;TPD

          0 引言
          在數(shù)字系統(tǒng)的數(shù)據(jù)輸入、運算、輸出過程中,輸入和輸出常用十進制形式表達;而在系統(tǒng)內(nèi)部采用二進制表示和處理數(shù)據(jù)則更為方便,因此在二進制和十進制數(shù)據(jù)間的轉(zhuǎn)換就是非常必要的。此外,數(shù)控機床、智能儀表、電子秤和數(shù)碼管等顯示設(shè)備也會頻繁地用到十進制(BCD)碼與二進制(BIN)碼的相互轉(zhuǎn)換。目前,數(shù)字系統(tǒng)中BCD碼和BIN碼的相互轉(zhuǎn)換有3類實現(xiàn)方法,首先是采用軟件算法的實現(xiàn)方式,傳統(tǒng)的是用DAA調(diào)節(jié)指令實現(xiàn),但效率較低,不能滿足一些實時應(yīng)用的要求。其次是純硬件運算實現(xiàn)方式,這種實現(xiàn)方式是數(shù)據(jù)轉(zhuǎn)換運算到硬件的直接映射,常采用邏輯運算和數(shù)據(jù)移位來實現(xiàn)數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換效率較高,可以根據(jù)輸入數(shù)據(jù)位寬進行轉(zhuǎn)換器的位數(shù)擴展和重構(gòu)。但是在轉(zhuǎn)換數(shù)據(jù)位數(shù)較多時,運算量會顯著增加、硬件實現(xiàn)代價也較大、路徑延遲也會增大、整個轉(zhuǎn)換器的時序控制也會變的比較復(fù)雜,也很難做到可逆轉(zhuǎn)碼運算。最后是基于數(shù)據(jù)查找表(Look Up Tabie,LUT)的實現(xiàn)方式,也就是先把全部或部分轉(zhuǎn)換數(shù)據(jù)列表存儲在存儲器中,然后再根據(jù)轉(zhuǎn)碼器的輸入數(shù)據(jù)(地址碼)直接或間接地從存儲器中取出所需的輸出數(shù)據(jù),這種以查找表為核心的轉(zhuǎn)換器運算速度快、算法直接簡單;但是會需要大量的存儲器;并且這種實現(xiàn)方法往往是針對具體的轉(zhuǎn)換數(shù)據(jù)位寬和單一轉(zhuǎn)換方向來定制存儲器(ROM)容量和存儲器初始化數(shù)據(jù);一旦需要轉(zhuǎn)換的數(shù)據(jù)位數(shù)和方向發(fā)生變化,就根本無法實現(xiàn)轉(zhuǎn)換器的數(shù)據(jù)位數(shù)擴展和結(jié)構(gòu)重構(gòu),所有的設(shè)計就必須重新開始。
          基于FPGA的可逆轉(zhuǎn)碼器設(shè)計,充分利用FPGA的結(jié)構(gòu)特點和硬件描述語言(Veilog HDL)的抽象和靈活性;二-十進制(BCD)轉(zhuǎn)碼器不但具有可配置雙向轉(zhuǎn)換數(shù)據(jù)的功能,而且還要求轉(zhuǎn)碼器簡單、高效和易于位數(shù)擴展(模塊化重構(gòu))。因此,文中就提出了一個高效、易于重構(gòu)的二-十進制(BCD)可逆轉(zhuǎn)碼器設(shè)計方案,通過端口參數(shù)配置和模塊重構(gòu)就能實現(xiàn)不同位數(shù)的數(shù)據(jù)在二進制和十進制(BCD)之間相互轉(zhuǎn)換,最后
          在FPGA(DE2)開發(fā)板上成功地進行了設(shè)計驗證。

          1 的轉(zhuǎn)換算法
          假設(shè)X=(xn-1,xn-2,…,x0)p表示n位p進制數(shù)據(jù),Y=(ym-1,ym-2,…,y0)q表示m位q進制數(shù)據(jù),二者之間等值變換的條件為:
          a.JPG
          這里,X,Y所表示的數(shù)值范圍分別是[0,pn-1]和[0,qm-1]。而在二進制編碼體系下,要把一個n位p進制數(shù)據(jù)轉(zhuǎn)換為m位的q進制數(shù)據(jù)就要求輸入輸出的數(shù)據(jù)位寬必須滿足m=Ceil[n·logqp]=[n·logqp],這里用“∏”表示整數(shù)上確界Ceil運算,輸入輸出數(shù)據(jù)位寬關(guān)系如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/189669.htm

          b.JPG


          圖1中的din=Ceil[log2 p]=[log2 p];dout=Ceil[log2 q]=[log2 q]分別表示1位輸入輸出數(shù)據(jù)的二進制位寬,例如1位的八進制數(shù)據(jù)需要3 b二進制數(shù)表示;而1位的十進制數(shù)據(jù)需要4 b二進制數(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二進制數(shù)表示1位10進制數(shù)(0~9)。如果把n位二進制數(shù)據(jù)轉(zhuǎn)換成m位BCD碼(4m位)就要求m位BCD碼所能表示的最大數(shù)不小于n位二進制碼所表示最大數(shù),即10m-1≥2n-1,m≥Ceil[lg 2n]=『n·lg 2]。如果12位的二進制數(shù)轉(zhuǎn)換成十進制(BCD),根據(jù)式(3)算出輸出m位的十進制數(shù)據(jù)m=[n·logq p]=[12·lg2]=4;輸出數(shù)據(jù)位寬m·dout=m·[log2 q]=16 b。

          2 二-十進制可逆轉(zhuǎn)碼器設(shè)計
          2.1 可逆轉(zhuǎn)碼器的層次化設(shè)計
          在片上數(shù)字系統(tǒng)(SOPC)中實現(xiàn)二-十進制(BCD)碼轉(zhuǎn)換器,就要求設(shè)計者充分利用硬件(FPGA)的結(jié)構(gòu)特點和硬件描述語言(HDL)所提供的設(shè)計靈活性;更好地實現(xiàn)轉(zhuǎn)碼器的簡單、高效和結(jié)構(gòu)易于擴展。為此,針對FPGA的結(jié)構(gòu)特點提出了以下設(shè)計思路:以4 b數(shù)據(jù)轉(zhuǎn)換作為基本的可逆轉(zhuǎn)換單元來適應(yīng)FPGA結(jié)構(gòu)特點,而提高邏輯單元利用率、達到降低硬件代價的目的;利用Verilog HDL進行層次化設(shè)計描述,以4 b數(shù)據(jù)轉(zhuǎn)換單元為最底層模塊,構(gòu)造出更大的5 b和6 b可逆轉(zhuǎn)換單元(模塊),這樣會在不增加實現(xiàn)代價的前提下,實現(xiàn)使用大的轉(zhuǎn)碼單元模塊來簡化轉(zhuǎn)碼器的結(jié)構(gòu)、方便轉(zhuǎn)碼器的位數(shù)擴展;這種設(shè)計方法就為二-十進制(BCD)可逆轉(zhuǎn)碼器的構(gòu)建提供了4 b,5 b和6 b三種不同大小的單元模塊,這會讓每一個轉(zhuǎn)換單元模塊都使用到恰到好處(需要小模塊的地方就不會使用大模塊);有效避免了單元模塊利用率不高的問題。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: FPGA 數(shù)制 轉(zhuǎn)碼

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();