工程师的NIOS II学习笔记(转)
Nios Development Board Reference Manual, Stratix II Edition
在使用Nios II SDK Shell試運行./restore_my_flash時,發現restore_my_flash會區分目錄名的大小寫,因此使用Nios II SDKShell時最好注意大小寫一致。
restore_my_flash.pl為perl腳本,可以直接修改后直接執行。
restore_my_flash不能正常取得命令行參數,但這不影響恢復出廠設置的操作,因為restore_my_flash可以不依靠命令行參數來 執行。
最好不要移動NiosII的安裝目錄,例如restore_my_flash就會從目錄名中提取內容生成需要的文件名。
恢復出廠設置需 要.sof和.flash兩個文件,估計.sof用于生成最小的nios系統,以便將.flash文件下載到Flash中。 (restore_my_flash提示使用J24 JTAG連接器,該連接器是用于配置StratixII器件的。)
Creating Multiprocessor NiosII Systems Tutorial
在standard設計的基礎上修改了Nios II系統,又添加了兩個Nios II處理器及各自的定時器、共享互斥鎖、消息緩沖區。編譯、運行和調試了hello_world_multi程序。
SOPC Builder中設置的NiosII的Reset和Exception地址很重要;
QuartusII生成的編程文件中包含有NiosII處理器的 復位地址;
NiosII IDE的編譯會生成絕對地址的代碼和數據;
NiosII IDE通過NiosII處理器中的jtag_debug_module重定向程序的執行地址;
上電或復位后,NiosII處理器從復位地址(通常指 向Flash)處執行Boot Loader,將程序拷貝到Ram中并在Ram中執行;
Exception地址確定了程序拷貝到Ram中的位置,Exception地址的低位總是 0x20,NiosII處理器跳轉到Ram執行時先執行低位地址為0x00的指令(用于初始化指令cache),之后執行低位地址為0x20處的系統啟動代碼。
Nios II多處理器設計的注意點:
不支持SMP(對稱多處理),只支持不對稱的(每個處理器執行不同的程序);
處理器之間可以不共享資源;
同一程序存儲器中的各處理器的代碼空間不能重合(通過Reset和Exception地址實現);
共享數據存儲器最好用硬件共享互斥鎖 結合軟件操作的方式來實現,不支持純硬件的共享方式(如果軟件不使用硬件互斥鎖,仍然會有訪問沖突),純軟件的共享方式有使用限制并且較復雜;
軟件 共享互斥鎖只適用于同一處理器的不同進程之間共享資源;
Nios II HAL library不支持共享外設(涉及中斷處理、外設輸入數據的處理等),Altera建議由固定的處理器管理相應的外設,其他處理器要使用該外設可以通過 消息緩沖區的方式;
不同于單處理器設計,多處理器設計一定要明確規定每個組件的總線連接點;
只要由不同的處理器訪問,兩個組件可以有相同的地址;
由設計人員保證各處理器使用的代碼空間是足夠的、不發生覆蓋的;
多處理器的軟件的運行、調試可以一起或分別啟動、終止,NiosII 5.0暫不支持一起暫停、再繼續,“一起”不是“同時”。
Nios II Flash Programmer User Guide
Quartus II的Programmer只支持FPGA和配置器件;
Flash Programmer只支持CFI接口的Flash或EPCS配置器件,但可燒入配置文件、軟件代碼和任意數據;
使用Flash Programmer需要生成Target Board及生成Flash Programmer可編程邏輯設計,并在實際項目SOPC Builder流程中指定該Target Board;
Boot-Copier Program是Nios II IDE自帶的,當軟件代碼位于Flash或EPCS中時由Flash Programmer自行使用,不同的是對Flash而言Boot-Copier Program放在Flash中,對EPCS而言Boot-Copier Program放在EPCS serial flash controller包含的on-chip ROM中;
上電或復位時,Nios II從Boot-Copier Program開始執行(不論是Flash或EPCS),這要求SOPC Builder流程中指定復位地址為Flash或EPCS serial flash controller。
Simulating Nios II Embedded Processor Designs
仿真NiosII設計包括三種方式:“NiosII IDE Debugger + Signal Tap II + 物理板”的軟硬件聯調方式;“NiosII IDE Debugger +指令集仿真器ISS”的軟件調試方式(ISS可對部分組件建模);使用ModelSim-Altera進行的RTL級的功能仿真方式(可以調試處理器及其 外設之間的交互情況)。本文針對RTL級仿真方式。
存儲器的初始化:含有軟件代碼的存儲器都應被初始化,不論是片上還是片外存儲器;軟件代碼相關的存儲器初始化文件由NiosII IDE編譯軟件時生成。
JTAG UART和PIO在SOPC Builder中都可設置仿真選項,ModelSim-Altera還可根據仿真選項調出UART交互終端窗口。
需要在SOPC Builder中設置ModelSim的路徑和使能Simulation,之后SOPC Builder會生成仿真用的ModelSim項目文件、ModelSim宏命令、UART等組件的初始化文件。
需要在Nios II IDE中為System Library屬性打開“ModelSim only,no hardware support”開關,這樣在編譯軟件時才會生成代碼相關的存儲器初始化文件,但生成的代碼不含啟動代碼(指令和數據Cache沒有初始化、BSS段也不清除),以便加速仿真。因此,如果要下載代碼到硬件板,必須關掉“ModelSim only,no hardware support”開關并且重編譯,以便生成完整的代碼。
在Nios II IDE中以NiosII ModelSim方式運行(需設置ModelSim的路徑),將使ModelSim編譯setup_sim.do并接管后續的仿真運行工作。
較重要的ModelSim宏(SOPC Builder生成):s、w、jtag_uart_drive。
一定要從Nios II IDE運行ModelSim,jtag_uart_drive宏才能正常運行。其他仿真步驟都可單獨使用ModelSim打開該項目,在執行完setup_sim.do后運行。
應該可以在SOPC Builder生成TestBench文件后修改該文件,以便進行Nios II和片上其他邏輯的聯合仿真。(因為是SOPC Builder生成的TestBench文件,并沒有在Quartus II中生成,所以不一定是完整的片上設計的TestBench文件。)
NIOS和NIOS II都使用了Avalon總線,這是一種交換式架構的片內總線;
該總線形式和PCI、ISA等板間互連總線的最大區別在于:主從設備之間有緊密耦合關系。Avalon總線架構中,由硬件設計人員通過SOPC Builder規定互連的主從設備(包括數據、控制信號、片選、地址的互連),不連接的設備之間是互相看不到的。
每個Avalon主設備端有多路復用器,用來從多個從設備的數據總線中選擇當前要訪問的數據——這也是“交換”的含義所在。可見多路復用器的接口引 線相當多,這只能在連線資源豐富的FPGA內實現。所以說,Avalon總線架構是適用FPGA設計的。片外的交換式總線也有,但都是串行接口的,主要是 為了降低PCB布線難度,如:PCI Express、以太網等。由于,Avalon總線架構中所有設備沒有實現全互連,也就不存在“全交換”。但即使這樣,不同的主設備訪問不同的從設備也是 可以同時的、并發的。
每個Avalon從設備都有仲裁器,仲裁各主設備的訪問,確保訪問周期的完整性和正確性。我們可以認為訪問周期是“原子”的,即不被其他主設備破壞的。
軟件對共享資源的訪問,通常要求一個序列的多個訪問不能被其他CPU打斷,這不是“原子”級的訪問周期設計能保證的,這也是SOPC Builder中提供了硬件共享互斥鎖的由來。
各CPU上運行的軟件都可對某個硬件共享互斥鎖進行SET和TEST操作,以爭取對資源的占用能力。由于對硬件共享互斥鎖的訪問周期是“原子”,所以硬件共享互斥鎖能保證多CPU設計中軟件級別的共享資源互斥訪問。
NIOS II設計的靈活性是我感興趣的主要原因。只要有足夠的邏輯資源余量,NIOS II的設計是可以不斷更新的,設計人員不用為自己的設計能力、CPU版本的升級擔心,這放開了我們的“思維”約束。
總結
以上是生活随笔為你收集整理的工程师的NIOS II学习笔记(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartus II与 ModelSim
- 下一篇: SAP ITS Mobile 系统实例(