原创 Nios程序烧写到EPCS方法

2011-5-8 13:59 10985 13 16 分类: FPGA/CPLD

这里主要是针对EP3C系列FPGA的Nios程序固化到EPCS中的方法做简要说明。
硬件SOPC
1、要固化程序到EPCS,在SOPC Builder中首先需要添加EPCS_Controller核,此外,CPU的reset vector设置为EPCS_Co
ntroller,Exception Vector一般设置为SDRAM即可。
2、生成该nios_cpu。对于EP3C系列的FPGA来说,在生成cpu后,会出现与EPCS_Controller相关的4根引线(如图),


d546193a-c015-4cbc-accb-cec7e36225fe.jpg


这在之前的EP2C等早期系列的FPGA中是没有的,因为系统已经默认完成了相应的设置,而EP3C是需要自己来对这些引脚设置的,这一点尤为要注意,下面就来具体说明一下。
这4根信号线分别为(EP3C10F256):
EPCS_DATA0   ->  H2
ASDO                 ->  C1
nCS0,(Flash_nCE)  ->  D2
DCLK                ->  H1
在对这4根引线进行引脚分配的时候,要在Device中将这些双功能引脚功能都设置为regular I/O Pin,
否则会出现错误:
比如:Error:Can't place multiple pins assigned to pin location PIN_H2
                        ......
对这些引脚做完这些设置后,即可进行编译、下载了(引脚分配如下图)。


ad2e8f44-73fc-4add-af39-c94d3a43a31d.jpg


另外,在使用Quartus II 10.0高版本编译Cyclone IV器件的时候,可能在Device->Dual Purpose里面的DCLK等引脚没有USE AS Regular I/O选项,用户就无法给DCLK这些引脚指定Pin Assignment。
这时的解决办法是:
打开工程的.qsf文件,加上以下几句(若存在对这4个引脚的其它类似配置信息时,先删除):
set_global_assignment -name RESERVED_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"
保存并编译,就可以正确读写EPCS了。
软件Nios
1、在nios中建立相应工程,并编译。
2、编译完成之后,打开FLASH Programmer。
勾上Program FPGA configuration data into hardware-image region of flash memory(将FPGA的配置文件写入Flash(EPCS)),
并设置对应的.sof文件Hardware Image设置为Custom,Memory设置为EPCS_Controller,offset为0x0,
不勾选Program a file into flash memory(可将二进制文件写入Flash)。
完成后如图所示:


da2d7c91-a048-4e25-aa49-83fecfd74175.jpg


以上所有设置完成后,Apply,然后Program Flash即可。烧写成功后,会有如下信息:


#!/bin/sh
#
# This file was automatically generated by the Nios II IDE Flash Programmer.
#
# It will be overwritten when the flash programmer options change.
#


cd D:/MySoftwares/QuartusII/Mywork/sopc_project/led_test/software/led_test/Debug


# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="D:/MySoftwares/QuartusII/Mywork/
sopc_project/led_test/led_test.sof" --output="led_test.flash"
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=led_t
est.opt D:/MySoftwares/QuartusII/Mywork/sopc_project/led_test/led_test.sof led_t
est.pof
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 70 megabytes
    Info: Processing ended: Wed Mar 30 12:34:48 2011
    Info: Elapsed time: 00:00:02
    Info: Total CPU time (on all processors): 00:00:02
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert led_test.pof led_test.rpd
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 68 megabytes
    Info: Processing ended: Wed Mar 30 12:34:51 2011
    Info: Elapsed time: 00:00:03
    Info: Total CPU time (on all processors): 00:00:02


# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x01001800 --sidp=0x0
1002018 --id=1794073991 --timestamp=1301451768 --instance=0 "led_test.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x01002018: verified


              : Checksumming existing contents         


00000000      : Verifying existing contents            


00010000      : Verifying existing contents            


00020000      : Verifying existing contents            


00000000      : Reading existing contents              


00010000      : Reading existing contents              


00020000      : Reading existing contents              


Checksummed/read 54kB in 1.4s                                       


00000000 ( 0%): Erasing                                


00010000 (33%): Erasing                                


00020000 (66%): Erasing                                


Erased 192kB in 1.9s (101.0kB/s)                      


00000000 ( 0%): Programming                            


00010000 (33%): Programming                            


00020000 (66%): Programming                            


Programmed 139KB +53KB in 3.3s (58.1KB/s)                 
Did not attempt to verify device contents
Leaving target processor paused


# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="led_test.flash" --input="led_tes
t.elf" --output="epcs_controller.flash"


# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x01001800 --sidp=0x0
1002018 --id=1794073991 --timestamp=1301451768 --instance=0 "epcs_controller.fla
sh"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x01002018: verified


              : Checksumming existing contents         


00020000      : Verifying existing contents            


00020000      : Reading existing contents              


Checksummed/read 42kB in 1.1s                                       


00020000 ( 0%): Erasing                                


Erased 64kB in 0.6s (106.6kB/s)                       


00020000 ( 0%): Programming                            


Programmed 23KB +41KB in 0.7s (91.4KB/s)                  
Did not attempt to verify device contents
Leaving target processor paused


烧写完成,Reset或者断电重启,烧写在EPCS中的程序即开始运行了。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户442413 2013-12-8 16:28

我用11.0的,烧写成功了,但上电后程序不自动运行。

asus119_412419641 2011-10-13 09:48

这应该是Nios还没有找到器件,可以检查一下硬件是不是都连接好了,重新连接一下硬件,在nios中多扫描几次看能不能找到device

用户1475716 2011-10-8 14:44

请问,SOPC照你所说配置好后,编译通过。quartus部分AS烧写成功;但NIOS部分的JTAG DEVICE始终是no device,即无法烧写是什么原因?
相关推荐阅读
asus119_412419641 2013-07-17 23:41
Allegro使用小结
1、解决Allegro在大鼠标模式下的拖影问题(尤其在Win7系统下) 大鼠标去掉拖影的设置方法:在env文件里面一句set infinite_cursor_bug_nt 注意:在pcbe...
asus119_412419641 2013-07-15 23:37
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 22:03
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 21:58
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-06-30 23:28
Cadence Allegro导网表的错误问题解决
  在Allegro导入网表的时候,有时候会出现这样一个错误问题,如下:   ------ Oversights/Warnings/Errors ------   #1   E...
asus119_412419641 2013-04-24 17:22
[博客大赛]关于OrCAD Capture CIS导网表出现问题的解决方法
在Capture CIS中完成原理图编辑修改后,导出网表时,出现了以下错误:   #192 ERROR(ORCAP-36004): Conflicting values of part n...
EE直播间
更多
我要评论
3
13
关闭 站长推荐上一条 /3 下一条