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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 利用SOPC Builder解決嵌入式處理器外設(shè)設(shè)計(jì)挑戰(zhàn)

          利用SOPC Builder解決嵌入式處理器外設(shè)設(shè)計(jì)挑戰(zhàn)

          ——
          作者: 時(shí)間:2006-03-21 來(lái)源: 收藏
            新產(chǎn)品開(kāi)發(fā)成本的不斷提高要求用新方法來(lái)采用標(biāo)準(zhǔn)產(chǎn)品以滿足確切的產(chǎn)品需求。本文介紹的SOPC Builder工具充分利用當(dāng)今CPLD及FPGA的密度、特性及性能來(lái)擴(kuò)展標(biāo)準(zhǔn)處理器的外設(shè),通過(guò)實(shí)現(xiàn)新型交換網(wǎng)互連,該工具為提高系統(tǒng)性能以及增加系統(tǒng)其他功能創(chuàng)造了機(jī)會(huì)。 

            隨著新產(chǎn)品開(kāi)發(fā)成本的不斷提高,新型嵌入式處理器開(kāi)發(fā)將主要瞄準(zhǔn)各種通用解決方案或特定大批量應(yīng)用。要采用通用解決方案,處理器很可能需要有80%的外設(shè),而特定大批量應(yīng)用則可能需要采用100%的外設(shè)。為能在有些略微不同的應(yīng)用中采用這些方案,很可能需要有額外的外設(shè)。這兩種解決方案都不會(huì)用獨(dú)特的定制外設(shè)來(lái)區(qū)分這些產(chǎn)品。FPGA及FPGA開(kāi)發(fā)工具目前都能提供多種途徑來(lái)用這些標(biāo)準(zhǔn)產(chǎn)品迅速、并以很少(或完全不用)硬件描述語(yǔ)言(HDL)設(shè)計(jì)來(lái)滿足外設(shè)要求。 

            今天的低成本FPGA及CPLD,如Altera公司的Cyclone及MAX II系列芯片等,都能提供滿足各種外設(shè)所需的性能、密度及多輸入/輸出(I/O)標(biāo)準(zhǔn)。利用Altera公司的SOPC(可編程系統(tǒng)級(jí)芯片)Builder工具,系統(tǒng)設(shè)計(jì)工程師無(wú)需編寫(xiě)HDL即能定義并集成外設(shè)子系統(tǒng),并能以傳統(tǒng)的系統(tǒng)級(jí)芯片(SOC)設(shè)計(jì)方法在很短的時(shí)間內(nèi)做到這一點(diǎn)。 

            嵌入式處理器接口 

            今天的嵌入式處理器一般都配備有簡(jiǎn)單或復(fù)雜的接口。復(fù)雜接口包括PCI、PCI-X、PCI-Express、RapidIO及Hypertransport等,對(duì)于簡(jiǎn)單的外設(shè)擴(kuò)展而言,這些接口內(nèi)核增加了不必要的復(fù)雜性。簡(jiǎn)單接口包括由地址、數(shù)據(jù)及控制信號(hào)所組成的外部存儲(chǔ)器接口等,這類(lèi)接口適合簡(jiǎn)單外設(shè)擴(kuò)展,并且?guī)缀醪辉黾訌?fù)雜度,這類(lèi)接口適用于絕大多數(shù)標(biāo)準(zhǔn)產(chǎn)品。在與外設(shè)接口時(shí)所遇到的最大挑戰(zhàn)是如何處理各類(lèi)接口標(biāo)準(zhǔn)、不同數(shù)據(jù)通道寬度,以及由外設(shè)所引起的每個(gè)傳輸總線周期數(shù)變化等。而SOPC Builder工具可有效解決以上問(wèn)題。 

            包含在Quartus II開(kāi)發(fā)工具中的SOPC Builder工具提供了一種基于表格的錄入系統(tǒng),該系統(tǒng)可以列出定義系統(tǒng)的處理器及外設(shè)。系統(tǒng)組件庫(kù)中所列出的每一個(gè)SOPC Builder組件,都提供一個(gè)以一些表格來(lái)描述該組件的文件,以及另一個(gè)用來(lái)描述接口信號(hào)及數(shù)據(jù)傳輸要求的文件。根據(jù)這些信息,SOPC Builder生成一個(gè)包含所有譯碼邏輯、仲裁邏輯、中斷控制、等待狀態(tài)控制以及用于連接處理器與外設(shè)的數(shù)據(jù)通道匹配邏輯的交換網(wǎng)(switch fabric)。SOPC Builder庫(kù)組件可以是非常簡(jiǎn)單的模塊子系統(tǒng)。對(duì)于定制外設(shè),SOPC Builder提供一個(gè)重要的向?qū)?lái)導(dǎo)入上述設(shè)計(jì)文件,并將其映射到SOPC Builder組件中。 

            Avalon規(guī)范 

            SOPC Builder并不強(qiáng)制要求所有外設(shè)類(lèi)型都滿足同樣的總線標(biāo)準(zhǔn),而是根據(jù)Avalon規(guī)范來(lái)創(chuàng)建一個(gè)交換網(wǎng),并針對(duì)特定系統(tǒng)中所采用的外設(shè)進(jìn)行優(yōu)化。Avalon規(guī)范可從Altera網(wǎng)站上免費(fèi)下載,是專(zhuān)為適應(yīng)SOPC環(huán)境中的外設(shè)開(kāi)發(fā)而設(shè)計(jì)的。該規(guī)范為外設(shè)設(shè)計(jì)工程師提供了一個(gè)用來(lái)描述Avalon主器件(如微處理器等)和從器件(存儲(chǔ)器、UART及定時(shí)器等)內(nèi)基于地址的讀/寫(xiě)端口的基礎(chǔ)。該規(guī)范將傳輸描述為發(fā)生在外設(shè)與交換網(wǎng)之間的互連,此互連策略可以使任何Avalon主器件與任何Avalon從器件動(dòng)態(tài)連接。  

            SOPC Builder工具可實(shí)現(xiàn)這種交換網(wǎng)互連策略。在實(shí)施該策略的過(guò)程中,生成適當(dāng)邏輯以連接各種器件的任務(wù)從設(shè)計(jì)工程師轉(zhuǎn)移到了開(kāi)發(fā)工具。因此,該方法使得設(shè)計(jì)工程師能將精力集中在優(yōu)化外設(shè)及其應(yīng)用上,并能大大減少解決集成問(wèn)題的時(shí)間。 

            外部存儲(chǔ)器接口與Avalon接口 

            通過(guò)處理器上的各種外部存儲(chǔ)器接口,Avalon接口所具有的靈活性使其非常適合于將標(biāo)準(zhǔn)處理器與FPGA內(nèi)、或經(jīng)過(guò)FPGA的外設(shè)相連,Avalon接口還支持高有效或低有效控制信號(hào)邏輯電平,支持地址和數(shù)據(jù)通道高達(dá)128位的主器件。在FPGA內(nèi)部,讀/寫(xiě)數(shù)據(jù)通道是分離的非三態(tài)高性能數(shù)據(jù)通道。 

            對(duì)于大多數(shù)處理器接口而言,只需通過(guò)將處理器信號(hào)類(lèi)型與Avalon對(duì)等信號(hào)類(lèi)型匹配,外部存儲(chǔ)器接口即可以簡(jiǎn)單連線形式與FPGA及Avalon交換網(wǎng)連接。接口上所要求的邏輯僅為用來(lái)將處理器的雙向數(shù)據(jù)總線轉(zhuǎn)換為Avalon所采用的單獨(dú)讀/寫(xiě)數(shù)據(jù)通道的控制邏輯,并且可以少至一個(gè)邏輯單元。FPGA I/O元件很容易支持高達(dá)133MHz的數(shù)據(jù)速率,高于絕大多數(shù)處理器外部存儲(chǔ)器接口的數(shù)據(jù)速率。 

            對(duì)于FPGA邏輯而言,由SOPC Builder生成的Avalon交換網(wǎng)可以最低的邏輯電平來(lái)提供最佳的譯碼邏輯。FPGA邏輯的性能取決于FPGA的系列、外設(shè)器件類(lèi)型以及與Avalon交換網(wǎng)相連的外設(shè)數(shù)量,今天的FPGA高性能很容易實(shí)現(xiàn)外設(shè)子系統(tǒng)。 

            可變等待時(shí)間I/O接口 

            Intel PXA2xx芯片上的可變等待時(shí)間接口(VLIO)可直接映射到Avalon信號(hào)類(lèi)型(圖1)。VLIO允許與FPGA相連的外設(shè)采用像SRAM存取允許外設(shè)通過(guò)使用RDY信號(hào)來(lái)插入等待周期一樣的方式工作。RDY信號(hào)的產(chǎn)生可由SOPC Builder及Avalon交換網(wǎng)來(lái)自動(dòng)處理,而控制信號(hào)nPWE和nOE則可直接映射到Avalon write_n及read_n信號(hào)類(lèi)型上。同樣,地址(MA[25:0])映射到地址([n:2])上。nOE也與CS(片選)信號(hào)一起用來(lái)使寫(xiě)處理中的讀操作能控制方向數(shù)據(jù)(MD[31:0]) 映射到Avalon讀/寫(xiě)數(shù)據(jù)通道上。如果需要支持尋址單個(gè)字節(jié),則可將DQM[3:0]信號(hào)映射到支持Avalon字節(jié)的信號(hào)上。圖2顯示接口的簡(jiǎn)單Verilog描述,其中不包括端口及信號(hào)聲明。 

            對(duì)于工程師的定制外設(shè),硬件設(shè)計(jì)團(tuán)隊(duì)可以獨(dú)立于所選處理器來(lái)設(shè)計(jì)這些專(zhuān)用器件。SOPC Builder通過(guò)其“接口至用戶邏輯向?qū)А蓖耆С钟脩糇远x組件,該向?qū)?dǎo)入用戶的設(shè)計(jì)文件來(lái)讀取端口列表。用戶只需將模塊信號(hào)名映射到對(duì)等的Avalon信號(hào)類(lèi)型上。完成映射后,設(shè)計(jì)工程師即可選擇時(shí)序頁(yè)(timing page)來(lái)定義時(shí)鐘數(shù)或任何設(shè)置、讀/寫(xiě)處理所需保持時(shí)間的數(shù)值。通過(guò)這些信息,SOPC Builder可創(chuàng)建一個(gè)適當(dāng)?shù)慕粨Q網(wǎng)來(lái)使任何主外設(shè)與該定制外設(shè)交換數(shù)據(jù)。將該組件發(fā)布到組件庫(kù)中,不需要對(duì)外設(shè)進(jìn)行任何改動(dòng),該組件就可以在同一系統(tǒng)或其他新系統(tǒng)中再次使用。 

            簡(jiǎn)化多主處理器設(shè)計(jì) 

            SOPC Builder方法也使得通過(guò)增加軟件內(nèi)核處理器(如Nios II處理器等)來(lái)卸載主處理器,或通過(guò)增加DMA控制器來(lái)在FPGA內(nèi)移動(dòng)數(shù)據(jù)變得更加簡(jiǎn)單。SOPC Builder為設(shè)計(jì)工程師提供一張顯示系統(tǒng)內(nèi)所有處理器、外設(shè)以及哪些處理器訪問(wèn)哪些外設(shè)的表格。外設(shè)共享控制簡(jiǎn)單得只需輕按按鈕。當(dāng)需要進(jìn)行調(diào)整時(shí),設(shè)計(jì)工程師只需重新訪問(wèn)該表格,進(jìn)行相應(yīng)的改變,然后再按一下按鈕,即可生成一個(gè)新的解決方案。 

            嵌入式應(yīng)用軟件 

            集成完組件后,即可進(jìn)行軟件開(kāi)發(fā)。許多SOPC Builder組件都含有用來(lái)訓(xùn)練外設(shè)的軟件驅(qū)動(dòng)器及采樣應(yīng)用程序。SOPC Builder將這些軟件復(fù)制到目錄中以便使用。SOPC Builder還為提供有存儲(chǔ)器映射及寄存器聲明的系統(tǒng)中的每一個(gè)處理器生成一個(gè)標(biāo)準(zhǔn)的C頭文件。SOPC Builder每生成一個(gè)系統(tǒng),這些文件都被更新一次,并能自動(dòng)地將最新參數(shù)以及每個(gè)新硬件映像聲明遞交給軟件開(kāi)發(fā)團(tuán)隊(duì),通過(guò)保持軟硬件的一致性來(lái)加速系統(tǒng)開(kāi)發(fā)。 



          評(píng)論


          技術(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); })();