FPGA研發(fā)之道(20)-片上系統(tǒng)
從最初的占地170平方的第一代ENIAC計算機開始,計算機開始了不斷集成化、小型化的發(fā)展之旅?,F(xiàn)今在單一芯片內(nèi)部已經(jīng)能夠集處理器,存儲,各型協(xié)處理器等,從而形成的強大的單芯片的片上系統(tǒng)(SOC),而這些片上系統(tǒng)已存在于生活的方方面面。因此FPGA內(nèi)部支持片上系統(tǒng),也算不上是新奇的事情了。ALTERA和XILINX已各自推出了各自應(yīng)用片上系統(tǒng)(FPGA領(lǐng)域稱之為SOPC,因此其片上系統(tǒng)可以根據(jù)業(yè)務(wù)需求來定義)。
本文引用地址:http://m.butianyuan.cn/article/265803.htm只需幾K的資源,就能實現(xiàn)一個SOC的最小系統(tǒng),對于FPGA工程師來說,沒什么比這個更有吸引力了。那么,作為一個片上系統(tǒng)來說,其最小系統(tǒng)應(yīng)該包含哪些:其至少需要三個部件,執(zhí)行部件(處理器),程序執(zhí)行部件(內(nèi)部存儲器),輸出部件(輸入輸出單元)。(其分別相當(dāng)于PC上的CPU、內(nèi)存條,鍵盤鼠標(biāo)顯示器)。下圖所示在ALTERA的QSYS上實現(xiàn)NIOS的最小系統(tǒng)所需部件。
(1) 處理部件:NIOSII為ALTERA器件中所專有的軟核處理器,而xilinx所對應(yīng)的為microblaze的軟核。通過在Qsys的界面工具中提供許多IP,而NIOSII也提供三個版本提供使用,分別是高速型,標(biāo)準(zhǔn)型,以及經(jīng)濟型。如果FPGA內(nèi)部邏輯有限,可選擇的經(jīng)濟型,其占用資源較少。如果需要內(nèi)部資源豐富又需要運行嵌入式操作系統(tǒng)uclinux等復(fù)雜軟件。則建議選擇高速型,而要運行l(wèi)inux等操作系統(tǒng),則在NIOSII高速型中配置MMU則是必須的。如無具體需求,則使用標(biāo)準(zhǔn)型即可。值得一提的是,NIOSII為哈佛型體系結(jié)構(gòu),即數(shù)據(jù)和指令分開,從Qsys可以看出,其接口分為指令接口和數(shù)據(jù)接口。
(2) 存儲部件:對于在FPGA內(nèi)部實現(xiàn)SOC來說,片內(nèi)的塊RAM就是實現(xiàn)SOC內(nèi)部程序與數(shù)據(jù)的存儲空間。也可以使用片外的存儲區(qū),如片外SRAM或者DDR等。也可以作為程序和數(shù)據(jù)的存儲空間。對于NIOSII處理器來說,只有選取了片內(nèi)存儲區(qū)或者片外存儲區(qū),才能設(shè)定程序中斷向量和復(fù)位起始位置的存儲區(qū)。另外,雖然AVALON總線支持?jǐn)?shù)據(jù)總線和地址總線通過片上互聯(lián)同一接口訪問單端口RAM。但建議使用時,例化為雙AVALON接口的雙端口RAM,一則是因為一般存儲區(qū)所需RAM深度夠大,一般支持真雙端口RAM,另一方面,數(shù)據(jù)和指令分開,能夠提升系統(tǒng)的性能。
(3) 輸入輸出部件:通常在嵌入式SOC系統(tǒng)中,最常用的輸入輸出部件就是串口(UART)。常常被應(yīng)用于(打印printf(),scanf())函數(shù)的輸入輸出。如果系統(tǒng)設(shè)計了串口(一般為SOC系統(tǒng)中所必須的),則例化系統(tǒng)中的支持avalon接口的串口即可,如果系統(tǒng)中不幸沒有,那么ALTERA公司提供了JTAG-UART接口提供給用戶輸入輸出交互接口。即通過復(fù)用JTAG下載線來模擬串口的操作。如果系統(tǒng)中有多個輸出輸出設(shè)備,如有多個UART,則在編程時,需在BSP的環(huán)境中設(shè)定,選擇使用哪個UART作為系統(tǒng)的輸出。
使用ALTERA的Qsys工具可以方便的在FPGA上構(gòu)建SOC系統(tǒng)。只需選擇相應(yīng)的IP(可以是系統(tǒng)自帶,也可以使用自己構(gòu)建支持avalon-mm接口的IP)。通過系統(tǒng)的互聯(lián)從而構(gòu)成一個片上系統(tǒng)。圖形化的界面只需通過avalon總線連接信號將NIOSII和外設(shè)連接在一起即可。連接完畢后,還需要下面操作:
(1) 為每個外設(shè)設(shè)定地址,例如上圖中RAM和JTAG-UART,每個外設(shè)都需要一個地址范圍,可以點擊系統(tǒng)中自動地址分配,也可以手動分配一個區(qū)間。只有為每個外設(shè)分配地址后(相當(dāng)于整個系統(tǒng)的門牌號),處理器才能根據(jù)地址來訪問各個外設(shè)。
(2) 如外設(shè)有中斷,則為外設(shè)分配中斷號,也可自動或者手動完成。如不分配中斷的話,那么處理器訪問外設(shè),只有查詢一種交互方式了。中斷方式使用可以減少處理器的負(fù)載。
在ALTERA的QSYS工具中,硬件信息全部存儲在sopcinfo。主要是包括各個外設(shè)的地址信息等,用于產(chǎn)生system.h。也就是說,作為軟件和硬件的交互的渠道是每個外設(shè)的基地址,中斷,和內(nèi)部寄存器等信息。系統(tǒng)構(gòu)建結(jié)束后,剩下的就可以軟件編程了,運行在搭建的SOC系統(tǒng)上的第一個“hello world”的程序。
對于現(xiàn)在FPGA上的SOC設(shè)計,廠商為了其方便易用,做了大量的工作,只需按照其指南一步步,就可以實現(xiàn)相應(yīng)的設(shè)計,但同時,也限制了對其基本原理的深入的理解。什么事情都有其兩面性,作為FPGA工程師,SOC的原理則應(yīng)該能夠重點關(guān)注,這樣不論是ALTERA還是XILINX其基本原理也是一致的。如不使用廠家的處理器核(NIOSII、microblaze),也可以使用其他的軟核(如51等,ARM)在FPGA上實現(xiàn)SOC系統(tǒng)。只不過原來工具做的工作,就需要手動來完成了。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
fpga相關(guān)文章:fpga是什么
評論