1 引言
随着集成电路工艺技术
![](/icons/51731de.gif)
不断发展和集成度
![](/icons/51731de.gif)
提高
![](/icons/51731dou.gif)
嵌入式系统由板级向芯片级过渡
![](/icons/51731dou.gif)
形成
![](/icons/51731yi.gif)
种新
![](/icons/51731de.gif)
设计思路方法
![](/icons/51731yi.gif)
片上系统(
![](/icons/51731System.gif)
_disibledevent=>
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731dou2.gif)
2.2 Flash编程设计
Flash编程设计实际就是
![](/icons/51731yi.gif)
个由SoPC Builder系统生成
![](/icons/51731de.gif)
最小FPGA设计
![](/icons/51731dou2.gif)
Flash编程设计是IDE Flash Programmer
![](/icons/51731de.gif)
关键组成部分
![](/icons/51731dou2.gif)
区别
![](/icons/51731de.gif)
目标板往往使用区别
![](/icons/51731de.gif)
Flash器件
![](/icons/51731dou.gif)
并且Flash和FPGA
![](/icons/51731de.gif)
引脚连接以及FPGA
![](/icons/51731de.gif)
型号也不相同
![](/icons/51731dou2.gif)
因此
![](/icons/51731dou.gif)
每个Flash编程设计都是和具体
![](/icons/51731de.gif)
目标板相联系
![](/icons/51731de.gif)
![](/icons/51731dou.gif)
不能用于其他
![](/icons/51731de.gif)
目标板
![](/icons/51731dou2.gif)
如果使用自己
![](/icons/51731de.gif)
目标板
![](/icons/51731dou.gif)
那么设计者必须创建该目标板
![](/icons/51731de.gif)
Flash编程设计
![](/icons/51731dou2.gif)
Altem公司
![](/icons/51731de.gif)
Nios开发板都提供了相应
![](/icons/51731de.gif)
Flash编程设计
![](/icons/51731dou.gif)
可以在NiosII开发套件安装目录
![](/icons/51731de.gif)
、ipnios2_ip文件夹中找到
![](/icons/51731dou2.gif)
2.3 Flash编程设计信息
目标板Flash编程设计描述了系统和目标板的间
![](/icons/51731de.gif)
关系
![](/icons/51731dou2.gif)
目标板Flash编程设计对Flash编程必不可少
![](/icons/51731dou.gif)
它提供了Flash Programmer对Flash编程所需
![](/icons/51731de.gif)
全部信息
![](/icons/51731dou2.gif)
![](/icons/51731yi.gif)
个目标板Flash编程设计是
![](/icons/51731yi.gif)
组SOPC Builder文件
![](/icons/51731dou.gif)
其中必须指明FPGA和Flash
![](/icons/51731de.gif)
连接关系
![](/icons/51731dou2.gif)
![](/icons/51731yi.gif)
个目标板Flash编程设计包含下列信息:①每
![](/icons/51731yi.gif)
个连接到电路板FPGA上
![](/icons/51731de.gif)
F1ash
![](/icons/51731de.gif)
参考元件标号
![](/icons/51731dou.gif)
如U7
![](/icons/51731dou.gif)
U7Flash
![](/icons/51731dou.gif)
U3EPCS等;②Flash器件在F1ash编程设计中
![](/icons/51731de.gif)
基地址;③用于配置目标板上FPGA
![](/icons/51731de.gif)
Flash编程设计
![](/icons/51731de.gif)
SOF文件
![](/icons/51731dou2.gif)
参考元件标号用于区分设计中区别
![](/icons/51731de.gif)
Flash器件
![](/icons/51731dou2.gif)
目标板上
![](/icons/51731de.gif)
Flash器件在设计时
![](/icons/51731de.gif)
命名和基地址可能区别
![](/icons/51731dou.gif)
但参考元件标号总是相同
![](/icons/51731de.gif)
![](/icons/51731dou2.gif)
3 目标板Flash编程设计
![](/icons/51731de.gif)
创建
用户自制目标板
![](/icons/51731dou.gif)
而在Target选项区中
![](/icons/51731de.gif)
Board下拉列表框中没有相应
![](/icons/51731de.gif)
目标板Flash编程设计
![](/icons/51731dou.gif)
用户就必须自己创建目标板Flash编程设计
![](/icons/51731dou2.gif)
3.1目标板Flash编程设计文件创建
下面以QuaausII 7.0为例
![](/icons/51731dou.gif)
详细介绍说明目标板Flash编程设计
![](/icons/51731de.gif)
创建
![](/icons/51731dou2.gif)
目标板Flash编程设计在SoPC Builder中实现
![](/icons/51731dou2.gif)
在QuaausII中新建
![](/icons/51731yi.gif)
个工程
![](/icons/51731dou.gif)
在[Tools]菜单中选择[SoPC Builder]
![](/icons/51731dou.gif)
打开Ahera SOPC Builder图形编辑界面环境
![](/icons/51731dou2.gif)
在SoPC Builder图形编辑界面中
![](/icons/51731dou.gif)
在[File]菜单中选择[New Board Description]
![](/icons/51731dou.gif)
打开Board Description Editor对话框
![](/icons/51731dou.gif)
在此对话框中选择NetList页面
![](/icons/51731dou.gif)
在Device Familv栏中正确选择目标板
![](/icons/51731de.gif)
FPGA系列
![](/icons/51731dou.gif)
这里以Cyclone II为例
![](/icons/51731dou.gif)
如图2所示
![](/icons/51731dou2.gif)
![基于SoPC目标板Flash编程设计<img src='/icons/51731de.gif' />创建及应用](http://www.crazycoder.cn/WebFiles/20098/41bb9b9d-20a9-416b-a7e3-5c3572e8e59c.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731dou2.gif)
选择Flash Memory页面
![](/icons/51731dou.gif)
单击New Flash Memory按钮添加目标板
![](/icons/51731de.gif)
Flash器件
![](/icons/51731dou.gif)
并输入正确
![](/icons/51731de.gif)
连接到目标板FPGA
![](/icons/51731de.gif)
参考元件标号和Flash器件类型
![](/icons/51731dou2.gif)
参考元件标号可命名为用户
![](/icons/51731de.gif)
任意
![](/icons/51731zifu.gif)
串
![](/icons/51731dou.gif)
如U7
![](/icons/51731dou.gif)
EPCS
![](/icons/51731dou.gif)
Flash等
![](/icons/51731dou.gif)
但不能命名成U7(CFIFlash)
![](/icons/51731dou.gif)
U3(EPCS)等形式
![](/icons/51731dou2.gif)
再单击此页面
![](/icons/51731de.gif)
New HardwareImage按钮
![](/icons/51731dou.gif)
指定FPGA硬件配置
![](/icons/51731chengxu.gif)
![](/icons/51731de.gif)
存储位置
![](/icons/51731dou.gif)
![](/icons/51731yi.gif)
般选择EPCS器件
![](/icons/51731dou2.gif)
如果设置为Flash器件
![](/icons/51731dou.gif)
需要有相应
![](/icons/51731de.gif)
外部控制器、单片机或CPLD配合使用
![](/icons/51731dou2.gif)
设置如图3所示
![](/icons/51731dou2.gif)
![基于SoPC目标板Flash编程设计<img src='/icons/51731de.gif' />创建及应用](http://www.crazycoder.cn/WebFiles/20098/2638ac4f-e9cb-4b4e-a404-2842bd71611f.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731dou2.gif)
FPGA硬件配置可放在NOR Flash中
![](/icons/51731dou.gif)
也可放在EPCS中
![](/icons/51731dou2.gif)
在Hardware Image Name栏下输入硬件配置映像
![](/icons/51731de.gif)
名称
![](/icons/51731dou.gif)
如epcs
![](/icons/51731dou.gif)
user
![](/icons/51731dou.gif)
factory等
![](/icons/51731dou2.gif)
对于每
![](/icons/51731yi.gif)
个Hardware Image Name
![](/icons/51731dou.gif)
都要选择
![](/icons/51731yi.gif)
个用来存储
![](/icons/51731de.gif)
Flash
![](/icons/51731dou2.gif)
如果用户设计中
![](/icons/51731dou.gif)
即采用EPCS
![](/icons/51731dou.gif)
又采用NOR Flash对FPGA
![](/icons/51731de.gif)
配置数据进行存储
![](/icons/51731dou.gif)
则可在Hardware Image Name栏下输入两个硬件配置映像名
![](/icons/51731dou.gif)
如user
![](/icons/51731dou.gif)
factory
![](/icons/51731dou.gif)
然后分别指定为前面
![](/icons/51731de.gif)
参考元件标号;对于off
![](/icons/51731set.gif)
栏
![](/icons/51731de.gif)
设置
![](/icons/51731dou.gif)
如果对应
![](/icons/51731de.gif)
Device栏为Flash器件
![](/icons/51731dou.gif)
则可以指定硬件映像在Flash中
![](/icons/51731de.gif)
编程偏移地址;如果对应
![](/icons/51731de.gif)
Device栏为EPCS器件
![](/icons/51731dou.gif)
则不能在off
![](/icons/51731set.gif)
栏中指定偏移地址
![](/icons/51731dou2.gif)
最后选择Files页面
![](/icons/51731dou.gif)
输入Board Description Name
![](/icons/51731dou.gif)
Version和
![](/icons/51731System.gif)
Template
![](/icons/51731dou.gif)
单击Finish按钮完成目标板Flash编程设计
![](/icons/51731de.gif)
创建
![](/icons/51731dou.gif)
如图4所示
![](/icons/51731dou2.gif)
![基于SoPC目标板Flash编程设计<img src='/icons/51731de.gif' />创建及应用](http://www.crazycoder.cn/WebFiles/20098/6daf293e-0e19-474d-80df-633393810886.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731System.gif)
Template栏可通过Brows按钮选择设置
![](/icons/51731de.gif)
系统模板*.ptf(或者直接输入)
![](/icons/51731dou.gif)
也可不设置系统模板
![](/icons/51731dou2.gif)
如果设置系统模版
![](/icons/51731dou.gif)
则系统模板需要存储在目标板Flash编程设计文件目录下
![](/icons/51731de.gif)
system文件夹中
![](/icons/51731dou2.gif)
并且在构建NiosII CPU时
![](/icons/51731dou.gif)
当选择带系统模板
![](/icons/51731de.gif)
目标板Flash编程设计时
![](/icons/51731dou.gif)
会自动在SoPCBuilder图形编辑界面添加系统模板带
![](/icons/51731de.gif)
CPU组件
![](/icons/51731dou2.gif)
目标板Flash编程设计成功创建后
![](/icons/51731dou.gif)
在QuartusII工程目录下会生成
![](/icons/51731yi.gif)
个和Board Description Name相同
![](/icons/51731de.gif)
目录
![](/icons/51731dou2.gif)
在此目录下包含目标板Flash编程设计
![](/icons/51731de.gif)
文件
![](/icons/51731class.gif)
.ptf
![](/icons/51731dou2.gif)
文件夹下还包含两个子文件夹
![](/icons/51731dou.gif)
![](/icons/51731yi.gif)
个是system
![](/icons/51731dou.gif)
设计者指定
![](/icons/51731de.gif)
系统模版便存放在此;另
![](/icons/51731yi.gif)
个是netlist
![](/icons/51731dou.gif)
存储设计者提供
![](/icons/51731de.gif)
PCB网表文件
![](/icons/51731dou.gif)
格式为wirelist
![](/icons/51731dou2.gif)
如果设计者不需要这两个文件
![](/icons/51731dou.gif)
则为空文件夹
![](/icons/51731dou2.gif)
对于Board Description Editor对话框中其他页面
![](/icons/51731de.gif)
选项
![](/icons/51731dou.gif)
和目标板Flash编程设计描述没有必要
![](/icons/51731de.gif)
关系
![](/icons/51731dou2.gif)
详细内容请参见Altera
![](/icons/51731de.gif)
数据手册
![](/icons/51731dou2.gif)
3.2 目标板Flash编程设计设置
目标板Flash编程设计成功创建后
![](/icons/51731dou.gif)
为了在任何设计
![](/icons/51731de.gif)
SoPC Builder中都能使用
![](/icons/51731dou.gif)
则可将生成
![](/icons/51731de.gif)
整个文件夹拷贝到NiosII开发套件安装目录
![](/icons/51731de.gif)
ipnios2_ip文件夹中
![](/icons/51731dou.gif)
或者设置SoPC Builder
![](/icons/51731de.gif)
搜索路径
![](/icons/51731dou.gif)
配置Component/Kit Library SearchPath
![](/icons/51731dou.gif)
增加用户设计
![](/icons/51731de.gif)
目标板Flash编程设计目录
![](/icons/51731dou2.gif)
然后关闭Ahera SoPC Builder重新启动SoPC Builder
![](/icons/51731dou.gif)
就可以在SoPCBuilder图形界面中
![](/icons/51731de.gif)
Target下拉列表框中找到创建
![](/icons/51731de.gif)
目标板Flash编程设计
![](/icons/51731dou2.gif)
4 目标板Flash编程设计
![](/icons/51731de.gif)
应用
以
![](/icons/51731yi.gif)
个最小SoPC系统流水灯为例
![](/icons/51731dou.gif)
介绍说明目标板Flash编程设计在实际Flash编程中
![](/icons/51731de.gif)
应用
![](/icons/51731dou2.gif)
4.1 NiosII CPU生成
在Altera SoPC Builder图形界面中
![](/icons/51731dou.gif)
首先在Target选项区中Board下拉列表框中选择刚创建
![](/icons/51731de.gif)
目标板Flash编程设计
![](/icons/51731dou.gif)
并指定NiosII系统
![](/icons/51731de.gif)
时钟
![](/icons/51731dou2.gif)
然后添加系统所需
![](/icons/51731de.gif)
外设元件
![](/icons/51731dou.gif)
设置各外设元件
![](/icons/51731de.gif)
参数
![](/icons/51731dou2.gif)
分配Base Address和IRQ
![](/icons/51731dou2.gif)
添加完组件后如图5所示
![](/icons/51731dou2.gif)
![基于SoPC目标板Flash编程设计<img src='/icons/51731de.gif' />创建及应用](http://www.crazycoder.cn/WebFiles/20098/ffb1f997-2c52-4540-a24f-912841aaec7a.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731dou2.gif)
添加完组件后
![](/icons/51731dou.gif)
在Nios II More“cpu”Settings中设置复位地址和异常地址
![](/icons/51731dou2.gif)
如果Nios
![](/icons/51731chengxu.gif)
下载到Flash中
![](/icons/51731dou.gif)
则复位地址设为ext_flash;如果下载到EPCS中
![](/icons/51731dou.gif)
则复位地址设为epcs_controller
![](/icons/51731dou2.gif)
最后在
![](/icons/51731System.gif)
Generation中点击Generation按钮生成NiosII CPU
![](/icons/51731dou2.gif)
4.2 构建最小SOPC系统
在QuartusII中构建最小SoPC系统
![](/icons/51731dou2.gif)
此SoPC系统由NiosII CPU模块、PLL模块和系统复位模块组成
![](/icons/51731dou2.gif)
在系统
![](/icons/51731de.gif)
顶层模块中分别添加SoPC Builder生成
![](/icons/51731de.gif)
NiosII CPU
![](/icons/51731dou.gif)
PLL模块及系统复位模块构成最小
![](/icons/51731de.gif)
SoPC系统
![](/icons/51731dou2.gif)
由于目标板上时钟是50 MHz
![](/icons/51731dou.gif)
而构建NiosII CPU时钟设为80 MHz
![](/icons/51731dou.gif)
故需通过Mega Wizard Plug-In Manager生成PLL模块
![](/icons/51731dou.gif)
将系统时钟提高到80 MHz
![](/icons/51731dou2.gif)
添加完模块后
![](/icons/51731dou.gif)
再添加输入/输出端口
![](/icons/51731dou.gif)
并连接引脚和端口
![](/icons/51731dou.gif)
命名端口名(建议端口命名和实际电路中
![](/icons/51731de.gif)
网络标号相同)
![](/icons/51731dou2.gif)
然后分配引脚
![](/icons/51731dou.gif)
并设置相关参数
![](/icons/51731dou2.gif)
编译工程生成FPGA
![](/icons/51731de.gif)
配置文件*.sof
![](/icons/51731dou.gif)
并利用QuartusII
![](/icons/51731de.gif)
Programmer下载到FPGA或EPCS中
![](/icons/51731dou2.gif)
4.3 Nios
![](/icons/51731chengxu.gif)
生成及Flash编程
启动NiosII IDE
![](/icons/51731dou.gif)
建立和编译
![](/icons/51731yi.gif)
个简单
![](/icons/51731de.gif)
LED流水灯
![](/icons/51731de.gif)
Nios应用
![](/icons/51731chengxu.gif)
![](/icons/51731dou2.gif)
在Nios应用
![](/icons/51731chengxu.gif)
调试正确后
![](/icons/51731dou.gif)
单击菜单[Tools]下
![](/icons/51731de.gif)
[Flash Programmer]
![](/icons/51731dou.gif)
弹出Flash Programmer编程界面
![](/icons/51731dou2.gif)
选中Flash Programmer
![](/icons/51731dou.gif)
单击New按钮创建
![](/icons/51731yi.gif)
个FlashProgrammer配置
![](/icons/51731dou2.gif)
在Flash Programmer界面中选择Main选项卡
![](/icons/51731dou.gif)
设置Flash Programmer相关参数
![](/icons/51731dou2.gif)
如果选中Program software project
![](/icons/51731int.gif)
o flash memory project项
![](/icons/51731dou.gif)
表示将工程
![](/icons/51731de.gif)
*.elf文件写入Flash(EPCS或CFI Flash)存储器中
![](/icons/51731dou2.gif)
将*.elf文件写入Flash
![](/icons/51731de.gif)
过程时
![](/icons/51731dou.gif)
如果工程没有编译连接
![](/icons/51731dou.gif)
会自动进行工程
![](/icons/51731de.gif)
编译连接
![](/icons/51731dou2.gif)
对于*.elf文件
![](/icons/51731de.gif)
编程
![](/icons/51731dou.gif)
Flash Programmer窗口中并没有存储器和偏移地址
![](/icons/51731de.gif)
设置
![](/icons/51731dou.gif)
存储器和偏移地址由是SOPC Builder中Re
![](/icons/51731set.gif)
Address指向
![](/icons/51731de.gif)
存储器和设置
![](/icons/51731de.gif)
偏移地址决定
![](/icons/51731dou2.gif)
如果将Re
![](/icons/51731set.gif)
Address指向CFI F1ash.偏移地址从0x0HD开始
![](/icons/51731dou.gif)
那么FlashProgrammer就会从CFI Flash
![](/icons/51731de.gif)
基地址+0x00开始烧写数据;如果将Re
![](/icons/51731set.gif)
Address指向epcs_controller
![](/icons/51731dou.gif)
偏移地址从Ox00开始
![](/icons/51731dou.gif)
那么Flash Programmer就会从EPCS
![](/icons/51731de.gif)
基地址+配置数据空间+Ox00开始烧写数据
![](/icons/51731dou2.gif)
如果选中Program FPGA configuration data
![](/icons/51731int.gif)
o hardware-image region of flash memory
![](/icons/51731dou.gif)
可将FPGA配置数据写入Flash(EPCS或CFI Flash)
![](/icons/51731dou2.gif)
选择作为硬件系统
![](/icons/51731de.gif)
FPGA配置文件*.sof
![](/icons/51731dou.gif)
指定配置文件
![](/icons/51731de.gif)
硬件配置映像名及存储
![](/icons/51731de.gif)
偏移地址
![](/icons/51731dou2.gif)
如果在制作目标板Flash编程设计时
![](/icons/51731dou.gif)
指定可将配置文件编程到CFIFlash
![](/icons/51731dou.gif)
并指定多个偏移地址
![](/icons/51731dou.gif)
此项就可选择编程地址
![](/icons/51731dou.gif)
从而将配置文件编程到用户指定
![](/icons/51731de.gif)
存储器地址空间
![](/icons/51731dou2.gif)
对于将配置文件编程到EPCS
![](/icons/51731dou.gif)
偏移地址只能从Ox00开始
![](/icons/51731dou2.gif)
如果选择Program file
![](/icons/51731int.gif)
o a flash memory选项
![](/icons/51731dou.gif)
能将指定
![](/icons/51731de.gif)
2进制文件写入指定
![](/icons/51731de.gif)
Flash(EPCS或CFI Flash)存储地址空间
![](/icons/51731dou2.gif)
在Flash Programmer界面中选择Target Connection选项卡
![](/icons/51731dou.gif)
设置当前所用
![](/icons/51731de.gif)
下载电缆及JTAG器件
![](/icons/51731dou2.gif)
然后单击Program F1ash对Flash进行编程(EPCS或CFIFlash)
![](/icons/51731dou2.gif)
如果看到图6所示
![](/icons/51731de.gif)
提示消息
![](/icons/51731dou.gif)
则Flash编程已经成功
![](/icons/51731dou.gif)
介绍说明目标板Flash编程设计创建成功
![](/icons/51731dou2.gif)
![基于SoPC目标板Flash编程设计<img src='/icons/51731de.gif' />创建及应用](http://www.crazycoder.cn/WebFiles/20098/52f9eb30-55b1-4f46-b008-a1008e1842f6.jpeg)
图片看不清楚?请点击这里查看原图(大图)
![](/icons/51731dou2.gif)
5 结语
实现SoPC目标板Flash编程设计
![](/icons/51731de.gif)
创建
![](/icons/51731dou.gif)
并通过
![](/icons/51731yi.gif)
个最小SoPC系统介绍说明目标板Flash编程设计在Flash编程中
![](/icons/51731de.gif)
应用及Flash编程
![](/icons/51731de.gif)
思路方法
![](/icons/51731dou2.gif)
通过实验验证了目标板Flash编程设计创建思路方法
![](/icons/51731de.gif)
正确性
![](/icons/51731dou.gif)
并能对Flash编程
延伸阅读
最新评论