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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于FPGA的可變長度移位寄存器優(yōu)化設計

          基于FPGA的可變長度移位寄存器優(yōu)化設計

          作者: 時間:2011-07-24 來源:網(wǎng)絡 收藏

          本文以最大為N、寬度為1bit的為模型,討論如何從結(jié)構(gòu)上和有效的實現(xiàn)。至于寬度不為1bit的情況,可以此類推。

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

            1 的常用結(jié)構(gòu)

            通??勺冮L度移位寄存器的結(jié)構(gòu)可分為兩種:一種是輸入分支型(結(jié)構(gòu)A),如圖1所示;另一種是輸出分支型(結(jié)構(gòu)B),如圖2所示。

            

          可變長度移位寄存器的結(jié)構(gòu)

            結(jié)構(gòu)A與結(jié)構(gòu)B有兩個共同點:第一,都是由觸發(fā)器鏈路加數(shù)據(jù)流向控制邏輯組成;第二,每級觸發(fā)器的輸入輸出都是信號節(jié)點,因而各級都需要對本級節(jié)點的信號流向進行控制。結(jié)構(gòu)A用n-to-2n譯碼器來控制信號流向,結(jié)構(gòu)B則用2n:1多路復用器控制信號流向。對于基本邏輯單元為查找表(LUT)+觸發(fā)器(FF)+多路復用器(MUX)結(jié)構(gòu)的來說,直接采用結(jié)構(gòu)A與結(jié)構(gòu)B構(gòu)造較長的移位寄存器時,觸發(fā)器鏈和復雜的組合邏輯會消耗很多資源,即這兩種結(jié)構(gòu)不宜用于較長的可變長度移位寄存器。

            2 解決方案

            為解決上述問題,可以采用如下兩個方法:

            (1)功能結(jié)構(gòu)與硬件結(jié)構(gòu)的搭配。根據(jù)移位寄存器結(jié)構(gòu)類型,選擇適宜的芯片以提高資源利用率,降低資源消耗。

            (2)移位寄存器結(jié)構(gòu)。采用FPGA片內(nèi)RAM來實現(xiàn)移位寄存器,利用片內(nèi)RAM速度快、數(shù)量大的優(yōu)點,直接減少基本邏輯單元的消耗,提高資源利用率。

            2.1 優(yōu)化功能結(jié)構(gòu)與硬件結(jié)構(gòu)的搭配

            通過調(diào)整FPGA芯片類型與移位寄存器結(jié)構(gòu)類型的搭配,可以提高資源利用率,降低資源消耗。下面以結(jié)構(gòu)B為例,闡述如何應用Xilinx公司的Spartan-3系列芯片高效地實現(xiàn)N=128的可變長度移位寄存器。

            2.1.1 實現(xiàn)原理

            Spartan-3系列芯片的每個可配置邏輯塊CLB[1]如圖3所示,包含8個LUT、8個DFF和8個2:1多路復用器(4個F5MUX,2個F6MUX,1個F7MUX,1個F8MUX),而每個LUT都能配置成移位寄存器模式(SRL),相當于一個16級的可逐級尋址的移位寄存器。如圖4所示,一個LUT就包含了構(gòu)成結(jié)構(gòu)B所需的全部要素,從而有效地實現(xiàn)N=16的可變長度移位寄存器[2].Q15是用于多級級聯(lián)實現(xiàn)N>16的移位寄存器的進位輸出。

            

          Spartan-3系列芯片的每個可配置邏輯塊CLB

            

          LUT配置成可尋址的移位寄存器


          上一頁 1 2 下一頁

          評論


          相關(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); })();