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

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于PEX8311 PCIE總線的高速圖像采集系統(tǒng)設(shè)計(jì)

          基于PEX8311 PCIE總線的高速圖像采集系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2011-05-09 來(lái)源:網(wǎng)絡(luò) 收藏

          提供完備的PCI—Express從設(shè)備支持,PCI-Express接口部分的信號(hào)線可以直接與PCI—Express連接器(俗稱(chēng)金手指)連接。其中,REFCLK±是一組差分時(shí)鐘,它由系統(tǒng)主板提供。2個(gè)參考時(shí)鐘都要求保持在正常工作頻率100MHz的±300ppm之內(nèi)。PRSNT1/PRSNT2信號(hào)線用于檢查附加卡是否插入連接器。此次設(shè)計(jì)中將PRSNT1和PRSNT2相連,這樣當(dāng)接口板插入到PCI—Express連接器時(shí)就能進(jìn)行存在檢測(cè)。PCI-Express接口部分原理圖,如圖2所示。

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

          b.JPG



          3 系統(tǒng)軟件設(shè)計(jì)
          3.1 FPGA邏輯程序
          使用Verilog編寫(xiě)FPGA邏輯控制程序,共有5個(gè)底層模塊和1個(gè)頂層模塊。每個(gè)模塊負(fù)責(zé)不同的功能。頂層模塊為_CAMLINK模塊,它通過(guò)調(diào)用其他模塊的功能來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)的功能;CAMLINK模塊用來(lái)控制Camera Link接口的讀寫(xiě);DoubleSdcon模塊用來(lái)控制SDRAM芯片的使能和讀寫(xiě),實(shí)現(xiàn)圖像的乒乓操作;FIFO模塊用來(lái)緩沖數(shù)據(jù)和匹配各芯片的工作速度;C_16450模塊進(jìn)行串行到并行的轉(zhuǎn)換,完成對(duì)CamLink相機(jī)的控制;-LOCAL模塊用來(lái)控制PCI—Express接口部分的讀寫(xiě),也就是對(duì)芯片進(jìn)行控制,對(duì)PEX8311的控制是實(shí)現(xiàn)PCI—Exp-ress的關(guān)鍵。
          設(shè)計(jì)中是通過(guò)編寫(xiě)狀態(tài)機(jī)(FSM,F(xiàn)inite State Machine)來(lái)對(duì)PEX8311的讀寫(xiě)進(jìn)行控制的。圖3為PEX8311的單周期讀寫(xiě)的Verilog HDL語(yǔ)言時(shí)序控制狀態(tài)機(jī)設(shè)計(jì)。狀態(tài)0為空閑狀態(tài),如本地請(qǐng)求信號(hào)LHOLD被置為1,則轉(zhuǎn)到狀態(tài)1,否則停留在狀態(tài)0。狀態(tài)1為保持狀態(tài),在此狀態(tài)下應(yīng)將本地總線響應(yīng)信號(hào)LHOLDA置為1。如ADS信號(hào)為0且LW/R為1轉(zhuǎn)到狀態(tài)2;如ADS信號(hào)為0且LW/R和BLAST都為1轉(zhuǎn)到狀態(tài)3,為單周期讀狀態(tài)。狀態(tài)2為單周期寫(xiě)狀態(tài),在此狀態(tài)下要置READY信號(hào)0,以表示寫(xiě)數(shù)據(jù)有效,在BLAST為0時(shí)轉(zhuǎn)到狀態(tài)3。狀態(tài)3為讀寫(xiě)完成操作狀態(tài),當(dāng)LHOLD被置為0時(shí),表明PEX8311不再請(qǐng)求本地總線,轉(zhuǎn)到狀態(tài)0,當(dāng)BLAST為0且LHOLD為1時(shí),表明PEX8311還要進(jìn)行讀寫(xiě)數(shù)據(jù),則轉(zhuǎn)到狀態(tài)1繼續(xù)。

          c.JPG


          3.2 驅(qū)動(dòng)程序
          PCI—E總線與PCI總線在軟件層是完全兼容的,因此PCI—E總線驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程與PCI設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程是一樣的。本設(shè)計(jì)使用VC++6.0和開(kāi)發(fā)工具包Driver Studio(DS)進(jìn)行驅(qū)動(dòng)程序的開(kāi)發(fā)。DS可以集成到Visual C++環(huán)境中,針對(duì)特定的應(yīng)用生成相應(yīng)的驅(qū)動(dòng)程序框架,在編程中采用面向?qū)ο蟮木幊谭椒?,極大地提高了編程效率。
          驅(qū)動(dòng)程序主要完成的功能:1)設(shè)備的初始化,找到所要控制的硬件,在驅(qū)動(dòng)程序?qū)ο笾性O(shè)置驅(qū)動(dòng)程序分發(fā)例程的程序入口點(diǎn),建立所有驅(qū)動(dòng)程序?qū)ο蠡蚱渌到y(tǒng)資源;2)創(chuàng)建設(shè)備對(duì)象,利用AddDevice函數(shù)創(chuàng)建了一個(gè)設(shè)備對(duì)象,并將其連接到以PD0為底的設(shè)備堆棧中;3)中斷的響應(yīng)與處理,完成對(duì)外部硬件中斷的響應(yīng)并將中斷信息傳遞給應(yīng)用程序;4)DMA操作,完成DMA的讀寫(xiě)操作并在DMA傳輸結(jié)束后產(chǎn)生DMA中斷,通過(guò)響應(yīng)的DMA中斷,將傳輸?shù)臄?shù)據(jù)發(fā)送到外部總線或應(yīng)用程序。

          4 實(shí)驗(yàn)結(jié)果
          通過(guò)編寫(xiě)上位機(jī)程序?qū)ο到y(tǒng)的傳輸性能進(jìn)行測(cè)試,測(cè)試的基本原理是上位機(jī)生成一批數(shù)據(jù)然后從計(jì)算機(jī)的PCI-Express接口寫(xiě)到PEX8311再寫(xiě)到FIFO,最后寫(xiě)到SDBAM中,然后上位機(jī)再?gòu)腟DRAM中讀回剛才寫(xiě)入的數(shù)據(jù),比較讀和寫(xiě)入的數(shù)據(jù)是否一致就能判斷系統(tǒng)的讀寫(xiě)是否正確,并且測(cè)試數(shù)據(jù)的傳輸速率。經(jīng)過(guò)一段時(shí)間的測(cè)試,系統(tǒng)最大傳輸速度達(dá)到180 MB/s,滿足了本系統(tǒng)高速數(shù)據(jù)的傳輸要求。

          5 結(jié)論
          本文設(shè)計(jì)了基于PCI Express總線的CamLink接口的高速圖像采集系統(tǒng),在完成系統(tǒng)的硬件設(shè)計(jì)后,編寫(xiě)了FPGA的邏輯控制程序,并開(kāi)發(fā)了驅(qū)動(dòng)程序和上位機(jī)應(yīng)用程序。系統(tǒng)采用PCI Express總線實(shí)現(xiàn)硬件電路與計(jì)算機(jī)之間的高速數(shù)據(jù)傳輸。接口芯片采用PLX公司推出的第一款PCI Express橋接芯片PEX8311。實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)的硬件系統(tǒng)滿足高速圖像傳輸?shù)囊螅⑶倚阅芊€(wěn)定。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 8311 PCIE PEX 總線

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();