軟件:Quartus 18.1,FPGA:Cyclone 5cgxfc5c6,配置芯片:ECPQ256
1.硬件設置
我們將Reset vector memory指向EPCQ flash,將Reset vector offset設置為大於sof大小的一個值,這里從jic轉換后的map文件可得到sof大小為0x0041f013,所以設置offset為0x41f060,offset更改后,Reset vector memory從原來的0x0400_0000變為0x0400_0000+0x41f060=0x441f060.
2.SBT設置
必要文件的生成:
- 右擊NIOS software工程,選擇Make Targets > Build,在工程文件夾下生成elf文件。
- 選擇mem-init-generate,點擊build,生成memory初始化hex文件,該文件在NIOS software工程mem_init文件夾下。
在控制台中可以看到生成hex文件的命令: Post-processing to create mem_init/epcq_controller_0.hex... alt-file-convert -I elf32-littlenios2 -O hex --input=LED_blink.elf --output=mem_init/epcq_controller_0.hex --base=0x04000000 --end=0x05ffffff --reset=0x0441f060 --out-data-width=8
--boot="C:/intelfpga/18.1/nios2eds/components/altera_nios2/boot_loader_cfi.srec"
- 注意,mem-init-generate生成的hex文件開始地址可能與預想的不一致,比如,在BSP根據execute in place from EPCQ模式設置各選項時,本來開始地址應該為0x41f060,但生成的hex文件卻是0x01f060.比如下面的hex文件: :020000040001F9
:20F06000140084003A48011004F8BF1016FDBF007410410014A97C083A6800080000000018
但boot copier方式啟動時,生成的hex文件沒問題。
3. 編程文件轉換(.jic的生成)
- 編程文件類型選擇.jic文件;配置芯片選擇EPCQ256。
- 點擊Add Sof Page,選中SOF Data,點擊Add File;
- .sof文件的地址設置:選中SOF Data,點擊Properties,set the start address to 0x0 to avoid a "size exceeds memory capacity" error.
- .hex文件的選擇:點擊Add Hex Page,如果是boot copier方式啟動,選擇絕對地址。
如果是execute in place from epcq啟動方式,選擇相對地址,在開始地址里填入合適的值,使hex的起始地址對應硬件里的起始地址。
- 點擊generate,成功生成.jic文件。
4.燒寫程序后,上電后軟核代碼總是不運行,clock模塊復位后才運行。
參考文檔
1.AN736_ Nios II Processor Booting From Altera Serial Flash (EPCQ)
2.Generic Serial Flash Interface Intel FPGA IP Core User Guide