FPGA研發之道(20)-片上系統
從最初的占地170平方的第一代ENIAC計算機開始,計算機開始了不斷集成化、小型化的發展之旅。現今在單一芯片內部已經能夠集處理器,存儲,各型協處理器等,從而形成的強大的單芯片的片上系統(SOC),而這些片上系統已存在于生活的方方面面。因此FPGA內部支持片上系統,也算不上是新奇的事情了。ALTERA和XILINX已各自推出了各自應用片上系統(FPGA領域稱之為SOPC,因此其片上系統可以根據業務需求來定義)。
本文引用地址:http://www.j9360.com/article/265803.htm只需幾K的資源,就能實現一個SOC的最小系統,對于FPGA工程師來說,沒什么比這個更有吸引力了。那么,作為一個片上系統來說,其最小系統應該包含哪些:其至少需要三個部件,執行部件(處理器),程序執行部件(內部存儲器),輸出部件(輸入輸出單元)。(其分別相當于PC上的CPU、內存條,鍵盤鼠標顯示器)。下圖所示在ALTERA的QSYS上實現NIOS的最小系統所需部件。

(1) 處理部件:NIOSII為ALTERA器件中所專有的軟核處理器,而xilinx所對應的為microblaze的軟核。通過在Qsys的界面工具中提供許多IP,而NIOSII也提供三個版本提供使用,分別是高速型,標準型,以及經濟型。如果FPGA內部邏輯有限,可選擇的經濟型,其占用資源較少。如果需要內部資源豐富又需要運行嵌入式操作系統uclinux等復雜軟件。則建議選擇高速型,而要運行linux等操作系統,則在NIOSII高速型中配置MMU則是必須的。如無具體需求,則使用標準型即可。值得一提的是,NIOSII為哈佛型體系結構,即數據和指令分開,從Qsys可以看出,其接口分為指令接口和數據接口。
(2) 存儲部件:對于在FPGA內部實現SOC來說,片內的塊RAM就是實現SOC內部程序與數據的存儲空間。也可以使用片外的存儲區,如片外SRAM或者DDR等。也可以作為程序和數據的存儲空間。對于NIOSII處理器來說,只有選取了片內存儲區或者片外存儲區,才能設定程序中斷向量和復位起始位置的存儲區。另外,雖然AVALON總線支持數據總線和地址總線通過片上互聯同一接口訪問單端口RAM。但建議使用時,例化為雙AVALON接口的雙端口RAM,一則是因為一般存儲區所需RAM深度夠大,一般支持真雙端口RAM,另一方面,數據和指令分開,能夠提升系統的性能。
(3) 輸入輸出部件:通常在嵌入式SOC系統中,最常用的輸入輸出部件就是串口(UART)。常常被應用于(打印printf(),scanf())函數的輸入輸出。如果系統設計了串口(一般為SOC系統中所必須的),則例化系統中的支持avalon接口的串口即可,如果系統中不幸沒有,那么ALTERA公司提供了JTAG-UART接口提供給用戶輸入輸出交互接口。即通過復用JTAG下載線來模擬串口的操作。如果系統中有多個輸出輸出設備,如有多個UART,則在編程時,需在BSP的環境中設定,選擇使用哪個UART作為系統的輸出。
使用ALTERA的Qsys工具可以方便的在FPGA上構建SOC系統。只需選擇相應的IP(可以是系統自帶,也可以使用自己構建支持avalon-mm接口的IP)。通過系統的互聯從而構成一個片上系統。圖形化的界面只需通過avalon總線連接信號將NIOSII和外設連接在一起即可。連接完畢后,還需要下面操作:
(1) 為每個外設設定地址,例如上圖中RAM和JTAG-UART,每個外設都需要一個地址范圍,可以點擊系統中自動地址分配,也可以手動分配一個區間。只有為每個外設分配地址后(相當于整個系統的門牌號),處理器才能根據地址來訪問各個外設。
(2) 如外設有中斷,則為外設分配中斷號,也可自動或者手動完成。如不分配中斷的話,那么處理器訪問外設,只有查詢一種交互方式了。中斷方式使用可以減少處理器的負載。
在ALTERA的QSYS工具中,硬件信息全部存儲在sopcinfo。主要是包括各個外設的地址信息等,用于產生system.h。也就是說,作為軟件和硬件的交互的渠道是每個外設的基地址,中斷,和內部寄存器等信息。系統構建結束后,剩下的就可以軟件編程了,運行在搭建的SOC系統上的第一個“hello world”的程序。
對于現在FPGA上的SOC設計,廠商為了其方便易用,做了大量的工作,只需按照其指南一步步,就可以實現相應的設計,但同時,也限制了對其基本原理的深入的理解。什么事情都有其兩面性,作為FPGA工程師,SOC的原理則應該能夠重點關注,這樣不論是ALTERA還是XILINX其基本原理也是一致的。如不使用廠家的處理器核(NIOSII、microblaze),也可以使用其他的軟核(如51等,ARM)在FPGA上實現SOC系統。只不過原來工具做的工作,就需要手動來完成了。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
fpga相關文章:fpga是什么
評論