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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DSP HPI口與PC104總線接口的FPGA設(shè)計(jì)

          DSP HPI口與PC104總線接口的FPGA設(shè)計(jì)

          作者: 時(shí)間:2006-07-19 來(lái)源:網(wǎng)絡(luò) 收藏
          摘 要 通過(guò)對(duì)TI公司TMS320C5000系列 時(shí)序的分析,以VHDL語(yǔ)言為工具,使用Altera的芯片EP1K50,完成PCI04 總線之間的通信,并在一款以TMS320VC5409為數(shù)據(jù)采集處理器、研華嵌入式工控主板PCM-5825為系統(tǒng)主板組成的嵌入式數(shù)據(jù)采集系統(tǒng)申得到了運(yùn)用;給出與整個(gè)相關(guān)的VHDL源代碼和在PCM-5825上驗(yàn)證的X86匯編語(yǔ)言程序。
          關(guān)鍵詞 DSP 總線 VHDL源代碼

          在一款嵌入式數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)中,采用TMS320VC5409 DSP作為對(duì)多路信號(hào)的采集與預(yù)處理,處理后的數(shù)據(jù)送至12.7 Cm(5in)的工控計(jì)算機(jī)中進(jìn)行分析與保存。因?yàn)楣た貦C(jī)的總線為,因此需要設(shè)計(jì)PC104與DSP之間的通信接口。系統(tǒng)中以Altera公司的一片芯片EPlK50來(lái)對(duì)該接口和數(shù)據(jù)采集過(guò)程中的邏輯控制與FIFO進(jìn)行設(shè)計(jì)。下面主要闡述該通信接口的設(shè)計(jì)。

          1 DSP的HP0接口
          TMS320VC5409 DSP的HPI是一個(gè)8位的并行接口,主要用來(lái)與主設(shè)備或主處理器接口。DSP內(nèi)部有一定數(shù)量的雙訪問(wèn)RAM,除了DSP本身可以訪問(wèn)該RAM區(qū)域外,主機(jī)也可以通過(guò)HPI口實(shí)現(xiàn)對(duì)雙訪問(wèn)RAM的訪問(wèn),從而實(shí)現(xiàn)主機(jī)與DSP的通信。

          HPI接口通過(guò)HPI控制寄存器HPIC、地址寄存器HPIA、數(shù)據(jù)寄存器HPID等3個(gè)HPI寄存器進(jìn)行控制和實(shí)現(xiàn)數(shù)據(jù)傳輸。這3個(gè)寄存器都是16位的,因此主機(jī)訪問(wèn)這些寄存器時(shí)需要分兩次操作才能完成。

          HPIC只有4位用于控制HPI的操作,這4位分別位于高字節(jié)和低字節(jié)的低4位,并規(guī)定HPIC的高低字節(jié)必須相同:
          Bit0/8(BOB)一一用于字節(jié)順序控制,BOB=1表示第1個(gè)字節(jié)為低字節(jié),否則第1個(gè)字節(jié)為高字節(jié);
          Bitl/9(SMOD)一一訪問(wèn)模式控制,SMOD=l表示共享訪問(wèn)模式(SAM),否則為主機(jī)訪問(wèn)模式(HOM);
          Bit2/10(DSPINT)一一主機(jī)通過(guò)將該位寫l來(lái)向DSP發(fā)送1次HPI中斷;
          Bit3/11(H1NT)一一DSP通過(guò)向該位置l,使外部引腳HINT產(chǎn)生一個(gè)低電子作為給主機(jī)的中斷,中斷的清除必須由主機(jī)向該位寫l來(lái)清除。

          HPID是數(shù)據(jù)寄存器,主機(jī)通過(guò)讀寫該寄存器來(lái)實(shí)現(xiàn)對(duì)共享RAM的讀寫,RAM的地址則由HPIA地址寄存器的內(nèi)容來(lái)決定。因此,主機(jī)對(duì)DSP的訪問(wèn)過(guò)程是,先往HPI地址寄存器HPIA寫入欲訪問(wèn)的地址,然后再對(duì)數(shù)據(jù)寄存器HPID進(jìn)行讀或?qū)懺L問(wèn)。

          HPI接口信號(hào)包括:
          HAS一一輸入,地址鎖存信號(hào),可連接到高電平;
          HBIL一一輸入,字節(jié)識(shí)別信號(hào),用來(lái)識(shí)別傳輸?shù)氖歉唠娖竭€是低電平;
          HCNTL[1..0]一一輸入,HPI寄存器的訪問(wèn)地址信號(hào),主機(jī)用來(lái)選擇訪問(wèn)的HPI寄存器。如表l所列;

          HCS一一輸入,HPI片選信號(hào),低電平有效;
          HD[7..0]一一雙向三態(tài)數(shù)據(jù)總線;
          HDS1/HDS2一一數(shù)據(jù)輸入選通信號(hào),可將其中一個(gè)接低電平,另一個(gè)接邏輯控制;
          HINT一一輸出,給主機(jī)的中斷信號(hào),由HPIC寄存器的HINT位控制;
          HRDY一一輸出,HPI準(zhǔn)備好,高電子有效;
          HR/W一一輸入,讀寫控制信號(hào),高電子表示主機(jī)進(jìn)行讀操作,低電子表示主機(jī)進(jìn)行寫操作。
          HPI的訪問(wèn)時(shí)序如圖l所示。如前所述,訪問(wèn)寄存器時(shí)需要分兩次操作才能完成。


          2 PC104總線
          PC104總線是從ISA總線衍生而來(lái)的,主要是為了適應(yīng)嵌入式系統(tǒng)的需要。在8.89 cm(3.5 in)和12.7cm(5in)工控主板中,大多使用PC104總線作為標(biāo)準(zhǔn)接口總線。PC104總線共有104根引腳,其中絕大多數(shù)與ISA總線信號(hào)特性完全一致,只有極個(gè)別的信號(hào)有區(qū)別,因此在應(yīng)用中完全可以按ISA總線使用。PC104總線與ISA總線一樣,是一個(gè)16位和8位同時(shí)兼容的總線。在本系統(tǒng)中,使用的是8位的方式,將DSP的HPI口作為PC104總線的8位I/O設(shè)備。PC104總線的I/O訪問(wèn)時(shí)序如圖2和圖3所示。

          根據(jù)PC104總線的I/O訪問(wèn)時(shí)序,只需使用以下的總線信號(hào),即可完成8位總線的通信設(shè)計(jì):
          SD[7..0]一一PC104數(shù)據(jù)總線;
          SA[9..0]一一PC104地址總線;
          IOW一一PC104端口寫控制,低電平有效,表示對(duì)I/0口寫操作,由OUT指令執(zhí)行;
          IOR一PC104端口讀控制,低電子有效,表示對(duì)I/O口讀操作,由IN指令執(zhí)行;
          SYSCLK一一PC104總線時(shí)鐘;
          ALE一一地址鎖存信號(hào),在此不用作地址鎖存,而是用作總線周期的開始同步,它的下降沿表示總線周期開始;
          IOCHRDY一一I/0設(shè)備就緒信號(hào),當(dāng)將該電平為低(無(wú)效狀態(tài))時(shí),表示I/0設(shè)備要延長(zhǎng)總線周期,信號(hào)由三態(tài)門或集電極開路門驅(qū)動(dòng);
          IRQ一一中斷請(qǐng)求信號(hào),當(dāng)I/O設(shè)備需要向PC機(jī)通信或是采集的信號(hào)已經(jīng)準(zhǔn)備好后,向PC發(fā)起中斷,申請(qǐng)通信,PC將數(shù)據(jù)讀走。

          3 接口設(shè)計(jì)
          根據(jù)前面的分析,得出接口原理如圖4所示。

          圖4中,F(xiàn)PGA為EPlK50。EPlK50內(nèi)部擁有2880個(gè)邏輯單元,40 960位的RAM。在本系統(tǒng)中,不僅作為HPI和PC104的接口邏輯,還有其他功能,如FIFO、A/D控制等。

          EP1K50的內(nèi)核供電電壓為2.5 V,I/O供電電壓為3.3 V,可以直接與I/O供電電壓也是3.3 V的TMS320VC5409 DSP相連.另外,EPIK50能承受-0.7~5.75V的輸入電子,輸出則與TTL電平兼容,因此EP1K50也可以直接與5 VTTL電平的PC104總線相連,從而在DSP和PC104總線之間起電平轉(zhuǎn)換的作用,不需再使用其他的電子轉(zhuǎn)換器件,簡(jiǎn)化了電路設(shè)計(jì)。

          對(duì)于接口設(shè)計(jì)來(lái)說(shuō),最主要的就是時(shí)序設(shè)計(jì)。時(shí)序設(shè)計(jì)正確了,系統(tǒng)就能正確地工作。在綜合了HPI的訪問(wèn)時(shí)序與PC104總線的讀寫時(shí)序后,得出以下設(shè)計(jì)方法:
          ①對(duì)于HPI寄存器的訪問(wèn)可以通過(guò)地址編碼實(shí)現(xiàn),偶地址對(duì)應(yīng)寄存器的低字節(jié),奇地址對(duì)應(yīng)寄存器的高字節(jié),如表2所列。

          于是相應(yīng)信號(hào)關(guān)系為:
          HCNTL[1..0]=SA[2..1]
          HBIL=SA[0]
          當(dāng)SA[9..0]=0x350~0x357時(shí),HCS=0,SA[9..0]
          為其他值時(shí),HCS=1。
          ②HD[7..O]和SD[7..0]設(shè)計(jì)成雙向總線。
          ③HR/W的產(chǎn)生:當(dāng)PCI04進(jìn)行讀操作時(shí),HR/W=1;當(dāng)PC104進(jìn)行寫操作時(shí),HR/W=0。于是:
          HR/W=0,當(dāng)IOR=1且IOW=0時(shí);
          HR/W=1,當(dāng)IOR=0且IOW=1時(shí)。
          ④在DSP上將HDS2直接接低電子,HDSl在HBIL為0和HBIL為1時(shí),分別產(chǎn)生一個(gè)變化沿,用以選通數(shù)據(jù)。該信號(hào)的產(chǎn)生是接口設(shè)計(jì)成功的關(guān)鍵。在此使用PCI04總線的系統(tǒng)時(shí)鐘信號(hào)SYSCLK來(lái)計(jì)數(shù)產(chǎn)生。詳細(xì)過(guò)程可參見VHDL代碼。
          ⑤PCI04總線的中斷請(qǐng)求信號(hào)IRQ=HINT取非。因?yàn)镻C104設(shè)置為上升沿中斷。
          ⑥PC104總線的外部I/0準(zhǔn)備好信號(hào)IORDY在地址選通有效過(guò)程中接HPI口的HRDY信號(hào),地址選通無(wú)效時(shí)置為高阻態(tài)。

          4 代碼設(shè)計(jì)
          代碼包括接口設(shè)計(jì)的VHDL源碼和驗(yàn)證的X86匯編語(yǔ)言代碼,代碼內(nèi)容見本刊網(wǎng)站(WWW.dpj.com.cn)。VHDL代碼在Altera公司的開發(fā)工具QuartusII下編譯,經(jīng)下載電纜下載到FPGA后,可在Debug中用匯編語(yǔ)言對(duì)DSP進(jìn)行讀寫驗(yàn)證。

          結(jié) 語(yǔ)
          本文使用VHDL語(yǔ)言和FPGA,設(shè)計(jì)了PC104總線與DSP之間的接口。之所以使用FPGA,是因?yàn)樵谙到y(tǒng)中FPGA還包含有其他的功能設(shè)計(jì)。如果只有PC104總線與DSP之間的接口設(shè)計(jì),使用CPLD即可完成,而不必浪費(fèi)FPGA的資源。



          評(píng)論


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