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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話(huà) > FPGA研發(fā)之道(20)-片上系統(tǒng)

          FPGA研發(fā)之道(20)-片上系統(tǒng)

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

            從最初的占地170平方的第一代ENIAC計(jì)算機(jī)開(kāi)始,計(jì)算機(jī)開(kāi)始了不斷集成化、小型化的發(fā)展之旅?,F(xiàn)今在單一芯片內(nèi)部已經(jīng)能夠集處理器,存儲(chǔ),各型協(xié)處理器等,從而形成的強(qiáng)大的單芯片的片上系統(tǒng)(),而這些片上系統(tǒng)已存在于生活的方方面面。因此內(nèi)部支持片上系統(tǒng),也算不上是新奇的事情了。ALTERA和XILINX已各自推出了各自應(yīng)用片上系統(tǒng)(領(lǐng)域稱(chēng)之為SOPC,因此其片上系統(tǒng)可以根據(jù)業(yè)務(wù)需求來(lái)定義)。

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

            只需幾K的資源,就能實(shí)現(xiàn)一個(gè)的最小系統(tǒng),對(duì)于工程師來(lái)說(shuō),沒(méi)什么比這個(gè)更有吸引力了。那么,作為一個(gè)片上系統(tǒng)來(lái)說(shuō),其最小系統(tǒng)應(yīng)該包含哪些:其至少需要三個(gè)部件,執(zhí)行部件(處理器),程序執(zhí)行部件(內(nèi)部存儲(chǔ)器),輸出部件(輸入輸出單元)。(其分別相當(dāng)于PC上的CPU、內(nèi)存條,鍵盤(pán)鼠標(biāo)顯示器)。下圖所示在ALTERA的QSYS上實(shí)現(xiàn)NIOS的最小系統(tǒng)所需部件。



            (1) 處理部件:為ALTERA器件中所專(zhuān)有的軟核處理器,而xilinx所對(duì)應(yīng)的為microblaze的軟核。通過(guò)在Qsys的界面工具中提供許多IP,而也提供三個(gè)版本提供使用,分別是高速型,標(biāo)準(zhǔn)型,以及經(jīng)濟(jì)型。如果FPGA內(nèi)部邏輯有限,可選擇的經(jīng)濟(jì)型,其占用資源較少。如果需要內(nèi)部資源豐富又需要運(yùn)行嵌入式操作系統(tǒng)uclinux等復(fù)雜軟件。則建議選擇高速型,而要運(yùn)行l(wèi)inux等操作系統(tǒng),則在高速型中配置MMU則是必須的。如無(wú)具體需求,則使用標(biāo)準(zhǔn)型即可。值得一提的是,NIOSII為哈佛型體系結(jié)構(gòu),即數(shù)據(jù)和指令分開(kāi),從Qsys可以看出,其接口分為指令接口和數(shù)據(jù)接口。

            (2) 存儲(chǔ)部件:對(duì)于在FPGA內(nèi)部實(shí)現(xiàn)來(lái)說(shuō),片內(nèi)的塊RAM就是實(shí)現(xiàn)SOC內(nèi)部程序與數(shù)據(jù)的存儲(chǔ)空間。也可以使用片外的存儲(chǔ)區(qū),如片外SRAM或者DDR等。也可以作為程序和數(shù)據(jù)的存儲(chǔ)空間。對(duì)于NIOSII處理器來(lái)說(shuō),只有選取了片內(nèi)存儲(chǔ)區(qū)或者片外存儲(chǔ)區(qū),才能設(shè)定程序中斷向量和復(fù)位起始位置的存儲(chǔ)區(qū)。另外,雖然AVALON總線(xiàn)支持?jǐn)?shù)據(jù)總線(xiàn)和地址總線(xiàn)通過(guò)片上互聯(lián)同一接口訪(fǎng)問(wèn)單端口RAM。但建議使用時(shí),例化為雙AVALON接口的雙端口RAM,一則是因?yàn)橐话愦鎯?chǔ)區(qū)所需RAM深度夠大,一般支持真雙端口RAM,另一方面,數(shù)據(jù)和指令分開(kāi),能夠提升系統(tǒng)的性能。

            (3) 輸入輸出部件:通常在嵌入式SOC系統(tǒng)中,最常用的輸入輸出部件就是串口(UART)。常常被應(yīng)用于(打印printf(),scanf())函數(shù)的輸入輸出。如果系統(tǒng)設(shè)計(jì)了串口(一般為SOC系統(tǒng)中所必須的),則例化系統(tǒng)中的支持avalon接口的串口即可,如果系統(tǒng)中不幸沒(méi)有,那么ALTERA公司提供了JTAG-UART接口提供給用戶(hù)輸入輸出交互接口。即通過(guò)復(fù)用JTAG下載線(xiàn)來(lái)模擬串口的操作。如果系統(tǒng)中有多個(gè)輸出輸出設(shè)備,如有多個(gè)UART,則在編程時(shí),需在BSP的環(huán)境中設(shè)定,選擇使用哪個(gè)UART作為系統(tǒng)的輸出。

            使用ALTERA的Qsys工具可以方便的在FPGA上構(gòu)建SOC系統(tǒng)。只需選擇相應(yīng)的IP(可以是系統(tǒng)自帶,也可以使用自己構(gòu)建支持avalon-mm接口的IP)。通過(guò)系統(tǒng)的互聯(lián)從而構(gòu)成一個(gè)片上系統(tǒng)。圖形化的界面只需通過(guò)avalon總線(xiàn)連接信號(hào)將NIOSII和外設(shè)連接在一起即可。連接完畢后,還需要下面操作:

            (1) 為每個(gè)外設(shè)設(shè)定地址,例如上圖中RAM和JTAG-UART,每個(gè)外設(shè)都需要一個(gè)地址范圍,可以點(diǎn)擊系統(tǒng)中自動(dòng)地址分配,也可以手動(dòng)分配一個(gè)區(qū)間。只有為每個(gè)外設(shè)分配地址后(相當(dāng)于整個(gè)系統(tǒng)的門(mén)牌號(hào)),處理器才能根據(jù)地址來(lái)訪(fǎng)問(wèn)各個(gè)外設(shè)。

            (2) 如外設(shè)有中斷,則為外設(shè)分配中斷號(hào),也可自動(dòng)或者手動(dòng)完成。如不分配中斷的話(huà),那么處理器訪(fǎng)問(wèn)外設(shè),只有查詢(xún)一種交互方式了。中斷方式使用可以減少處理器的負(fù)載。

            在ALTERA的QSYS工具中,硬件信息全部存儲(chǔ)在sopcinfo。主要是包括各個(gè)外設(shè)的地址信息等,用于產(chǎn)生system.h。也就是說(shuō),作為軟件和硬件的交互的渠道是每個(gè)外設(shè)的基地址,中斷,和內(nèi)部寄存器等信息。系統(tǒng)構(gòu)建結(jié)束后,剩下的就可以軟件編程了,運(yùn)行在搭建的SOC系統(tǒng)上的第一個(gè)“hello world”的程序。

            對(duì)于現(xiàn)在FPGA上的SOC設(shè)計(jì),廠(chǎng)商為了其方便易用,做了大量的工作,只需按照其指南一步步,就可以實(shí)現(xiàn)相應(yīng)的設(shè)計(jì),但同時(shí),也限制了對(duì)其基本原理的深入的理解。什么事情都有其兩面性,作為FPGA工程師,SOC的原理則應(yīng)該能夠重點(diǎn)關(guān)注,這樣不論是ALTERA還是XILINX其基本原理也是一致的。如不使用廠(chǎng)家的處理器核(NIOSII、microblaze),也可以使用其他的軟核(如51等,ARM)在FPGA上實(shí)現(xiàn)SOC系統(tǒng)。只不過(guò)原來(lái)工具做的工作,就需要手動(dòng)來(lái)完成了。

          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          fpga相關(guān)文章:fpga是什么




          關(guān)鍵詞: FPGA SOC NIOSII

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