软件: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