标题:
并行NOR Flash在SOPC开发中的应用之二
[打印本页]
作者:
pengpengpang
时间:
2015-8-21 20:43
标题:
并行NOR Flash在SOPC开发中的应用之二
3 存储可直接执行的软处理器代码
这里仍然使用上面创建的EDK工程,由于J3D具有类似SRAM的接口,上电后可以直接像SRAM一样进行读操作,但却不能直接进行写操作。因此,应将只读段.code、.rodata、.sdata2、.sbss2指定到J3D中,其余段指定到BRAM中,这可以在Generate Linker Script对话框中完成。重新编译后生成新的Bootable.elf文件。此时,Bootable.elf仍是一个整体,需要将其在物理上分为2个文件:一个存放只读段,另一个存放其余段。具体可以通过下面的操作实现。
① 创建存储在BRAM中的镜像volatile.elf。在XPS中,选择Project → Launch EDK Shell,并执行下列命令:
② 创建存储在Flash中的镜像J3D.bin。在XPS中,选择Project → Launch EDK
将volatile.elf合并到系统配置比特流system.bit,生成dowload.bit,再经iMPCT转为MCS格式后下载到配置PROM中。再将J3D.bin通过Program Flash Memory对话框下载到J3D中。这样系统上电并完成配置后,J3D中的代码无需引导便可以直接执行。
4 存储非易失数据或参数
有时候系统需要存储非易失的数据或参数,这就需要通过编写程序直接对J3D进行读/写操作。当然,前提是先要在EDK中为J3D添加一个XPS MCH EMC接口。这个接口对并行NOR Flash和SRAM来说都是适用的,如果用于SRAM则可以直接读/写,不需要驱动,而用于并行Flash则需要自己编写相应的驱动程序。下面为自行编写的一个执行块擦除、单字写、单字读操作的程序。需要注意的是: 写操作前一定要先进行擦除操作,写命令或写数据之后一定要对状态寄存器进行判断是否完成相应操作;读操作则很简单,像SRAM的读/写一样。
还有一种情况是在系统运行前就把数据写入Flash中。首先,把数据写入一个二进制文件中。注意,MicroBlaze的存储格式是BigEndian(即高字节数据保存在低地址,低字节数据保存在高地址),PC机的存储格式则是LittleEndian(即高字节数据保存在高地址,低字节数据保存在低地址),因此如果是用VC++产生的二进制文件,一定要进行高、低字节交换。在Matlab中生成数据文件则可以在相应的文件操作函数中添加参数'b'(表示以BigEndian格式存储),如FileID=fopen('data.bin','w+','b')。产生的二进制文件可以通过Program Flash Memory对话框下载到J3D中,注意不要选中Autoconvert file to SREC format when programming flash和Create Flash Bootloader Application选项。
结语
本文讨论了在以Xilinx Spartan XC3S1600E为基础的SOPC设计中,Intel J3D并行NOR Flash的4种不同用途及其使用方法与技巧,尤其对一些技术关键问题予以详细的阐述,其中融入了笔者在项目开发中的实际经验,具有较高的参考价值。J3D既可以用于存储FPGA配置比特流,又可以存储软处理器程序代码,也可以存储非易失的数据和参数,甚至三者可以并存于同一片J3D中。本文只是以Intel J3D并行NOR Flash为例讨论其在SOPC开发中的用法,这些方法同样适用于其他厂家具有CFI(Common Flash InteRFace)接口的并行NOR Flash。灵活地综合运用这些方法,对于SOPC开发具有重要意义。
参考文献
[1] 薛小刚,葛毅敏.Xilinx ISE 9.x FPGA/CPLD设计指南[M].北京:人民邮电出版社,2007.
[2] Ying Sue.Connecting Intel StrataFlash to Memory to Spartan3E FPGAs,2005.
[3] Intel Inc.Intel Embedden Flash Memory(J3 v.D),200702.
[4] Xilinx Inc.Spartan3E FPGA Family:Complete Data Sheet,20070529.
[5] Xilinx Inc. Executing and Debugging Software FromFlash Memory,20070924.
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0