特权制造 本教程仅用于配套 SF-NIOS2 FPGA 开发板学习交流使用
《圣经》箴言九 11 “敬畏耶和华是智慧的开端,认识至圣者便是聪明。” http://group.ednchina.com/2522/
1
特权和你一起学 NIOS2
欢迎加入 EDN FPGA/CPLD 助学小组共同交流学习:http://group.ednchina.com/1375/
本教程仅适用于特权制造的 SF-NIOS2 FPGA 开发板,转载请注明出处!
版本信息
时间 说明 备注
2010-10-7 创建 V1.0
特权制造 本教程仅用于配套 SF-NIOS2 FPGA 开发板学习交流使用
《圣经》箴言九 11 “敬畏耶和华是智慧的开端,认识至圣者便是聪明。” http://group.ednchina.com/2522/
2
第四章 实战演练之存储控制器
在上一章中,第一个工程实例里并未创建一个完整的最终可供下载运行的嵌入式系统。
缺什么?存储器。不是已经有一个 on-chip memory 了么?没有错,在 on-chip memory 上的
系统也的的确确跑起来了。但是你有没有注意,那不过只是一个 RAM 而已哦,RAM 的特性
是下电即丢失数据。虽然我们的系统在线烧录后跑得很 HIGH,估计都把你兴奋的不行了,
但是下电试试,再上电的时候估计你发现怎么什么都没有了,空忙活一场!
呵呵,不用操心,这章特权同学就和你一起解决这个棘手的问题。我们可以复习一下第
一章说概念的时候提到的嵌入式系统都应该有哪些基本组件。CPU 肯定是要有的,就是我们
这里的 NIOS2 了;电源,这个集成在 FPGA 的硬件结构上了,不需要我们的 SOPC 系统中考
虑,先 pass;时钟,在我们的第一个系统中就直接使用了与 FPGA 连接的外部 25MHz 的晶
振;复位,一般也要有,系统初上电的时候需要初始化到一个固定的状态,第一个系统里也
使用了 FPGA 外部的输入复位引脚,为了让这个复位能够更加稳定可靠一些,在 FPGA 内部
逻辑也把外部输入复位信号做了一些简单的同步处理;ROM,相当于 PC 机的硬盘,所有的
运行程序在断电后依然需要保存,那么就只有靠 ROM 了,我们的第一个系统里缺的就是它,
没有它,再好的系统也只能停留在调试阶段,因为无法对程序进行固化,每次断电后都需要
重新加载一次(那就意味着不能离开 PC 机了),而有了 ROM,程序在上电后就从 ROM 搬运
出来后用于执行;RAM,相当于 PC 机的内存条,它的一个特性是下电就丢失数据,那为什
么还要用它呢?因为它的另一个特性是速度比 ROM 快,并且是快得多,因此执行程序的地
方一般是 RAM 而非 ROM,还有就是它的读写控制逻辑要比 ROM 简单,很适合于一些经常
读写的变量的暂存。因此,一个系统中,通常是 ROM 和 RAM 都不可或缺。另外,还要有一
些调试的接口,如 JTAG UART 等,因为不是本章的重点,所以也 pass。下面我们要专心来谈
存储系统,即 ROM 和 RAM。
第一个系统里使用了 FPGA 的片内 RAM 做程序和数据存储器,虽然也能够跑起来,而
且性能也绝对够好。但是 FPGA 的片内存储器是很昂贵的,性价比也是很低的,并且最主要
的是我们所能够用得起的 FPGA,它的片内存储器资源都是相对有限的。因此,在一个嵌入
式系统中,我们通常不会选择用这种昂贵的方案来实现我们的程序存储和运行。当然了,片
内存储器有更便利的用途,通常用他来配置一些 FPGA 器件内或者 FPGA 器件与外部器件数
据交互的一个“桥梁”,如双口 RAM 或者异步 FIFO 等。这个用途也极大的发挥了用 FPGA
搭建系统的灵活性。作为存储系统,选择 SDRAM 和 FLASH 是比较常见的,既然说到这里了,
特权制造 本教程仅用于配套 SF-NIOS2 FPGA 开发板学习交流使用
《圣经》箴言九 11 “敬畏耶和华是智慧的开端,认识至圣者便是聪明。” http://group.ednchina.com/2522/
3
特权同学觉得有义务让大家对目前比较盛行的一些系统存储的搭配与程序存储运行的基本
原理有一些了解。
下文的“嵌入式存储系统”和“基于 FPGA 的嵌入式存储解决方案”内容主要参考 numonyx
公司的文档《EmbeddedCodeStorage_web.pdf》和 altera 公司的文档《edh_ed_handbook32.pdf》。
特权同学对各个知识点进行重新组织和描述,希望能够对大家快速消化这部分内容有所帮
助。)
嵌入式存储系统
eXecute-In-Place(XIP)、Fully Shadowed 和 Demand Paging 是三种目前广为使用的代码存
储方式,或者更确切的理解,应该称之为代码运行方式,而他们又分别是怎样的一种运行方
式呢?
首先说 eXecute-In-Place(XIP),如果非得要译成中文,那我们叫它“就地执行”。它的意
思和它的名字一样,表示代码可以在当前的存储器中执行。为了帮助大家理解这个概念,特
权同学从网络上搜到一段关于 XIP 定义的论述,如下:
XIP 即就地执行的意思,操作系统内核直接在 Flash 中运行,不需要拷贝到 RAM。但是,
Flash 的存储器访问周期要比 RAM 大得多,在使用 XIP 技术后可能会降低程序的运行速度,
不过由于 CPU 的指令预取机制以及 Cache 机制,实际使用起来并不会明显降低应用程序的
运行速度。XIP 的原理很简单,即指操作系统或应用程序直接从非易失性存储器中执行。就
当前的技术来说,这里的非易失性存储器特指 NOR Flash,因为只有 N0R Flash 才可以随机存
取。
除了硬件提供支持以外,XIP 还需要软件的支持。操作系统内核和应用程序在运行时,
它在内存中的映像可以分为三个部分:代码段、数据段和堆栈段。代码段对应于执行程序中
的 Text Section,其中包括运行代码和只读数据,这个段在内存中一般被标记为只读。数据
段对应于运行文件中的 Data Section 和 BSS Section,其中存放的是各种数据(经过初始化的
和未经初始化的)和静态变量,而堆栈段存放的则用于保存函数调用和局部变量。从以上分
析可知,程序运行时在内存的映像分为两类:一类是只读的,如代码段;另一类是可写的,
如数据段。而 Flash 虽然是可写的,但并不能像写普通 RAM 一样简单。因此,当程序在 Flash
中运行时,我们仍然需要把部分可写的数据段放在 RAM 中。
XIP 是一种能够直接在 Flash 中执行代码而无须装载到 RAM 中执行的机制。这样减少了
内核从 Flash 拷贝到 RAM 的时间,并采用非压缩映像减少了内核自解压的时间。由于 Flash
特权制造 本教程仅用于配套 SF-NIOS2 FPGA 开发板学习交流使用
《圣经》箴言九 11 “敬畏耶和华是智慧的开端,认识至圣者便是聪明。” http://group.ednchina.com/2522/
4
访问速度低于 RAM,采用 XIP 技术的同时,根据硬件环境对 Flash 和 RAM 使用量进行平衡。
可见 XIP 方式主要是应用在 NOR Flash 上,而并不适合 NAND Flash,最主要原因在于 NOR
Flash 读取速度快一些。这样的应用在 ARM、DSP 系统中比比皆是。一个 NAND Flash 做代码
存储器,外加一些 SRAM 或者 SDRAM 作为数据存储器。其实 51 单片机的应用也与此类似,
尽管一般的应用中无需外扩存储器,单片机内部自带了 ROM 和 RAM,但是它的运行机制也
和 XIP 有着异曲同工之妙,代码是从 ROM 里运行,数据变量大多在 RAM 上存储。
XIP 方式的一个主要局限性上文也提到了,就是 NOR Flash 的读取速度,它无论如何也比不
上 RAM。但是在很多应用中,其实 CPU 对代码的执行速度要求也不是那么苛刻,况且 XIP
方式相对于 Fully Shadowed 和 Demand Paging 方式更节省存储空间。
再说 Fully Shadowed 方式,中文也可译为“完全映射”。嵌入式系统程序运行时,将所
有的代码从非易失存储器(Flash、ROM 等)复制到 RAM 中运行。这类应用也很多,它的好
处在于充分依托于 RAM 在运行代码时速度上的优势,而它的劣势在于需要的 RAM 存储空间
比 FLASH 的存储空间(代码量)还要大。此外,这种启动方式在上电后还必须等待一段时间,
直到数据装载(从 FLASH 搬运到 RAM 中)完成才能正常运行代码,而代码量越大,这个等
待时间也会越长。
Demand Paging 方式,即“按需分页”。它在代码运行时只复制部分代码到 RAM 中。这
种方法对 RAM 中的页进行导入/导出管理,当需要运行某些代码时才将代码和数据映射到
RAM 中。之所以提出按需分页的代码运行方式,这里打一个简单的比方,我们手头的 PC 机,
在装好 XP 操作系统后至少也应该有 3GB 的存储空间,再加上随便装一些应用程序,4-5 个
GB 那算小的了。如果在每次开机时 PC 机要把这些代码都从硬盘预载入内存中,那么估计咱
们现在使用的 PC 机都要被淘汰了。
所以,按需分页解决了上述问题,它在 PC 机启动时只装载部分最频繁使用的代码到内
存中。而其他应用程序只在用户希望运行时才进行实时装载,这个装载过程就是用户能够感
受到的延时。它相比于完全映射方式大大减少了 RAM 的存储空间。
这里提到的三种基本代码启动方式是嵌入式系统中最常见的,但并不是任何一个嵌入式
应用都可以套用上面的某一个代码运行方法。也许设计者在对自己的处理器所需要达到的速
度、功耗等性能要求做一些评估后再做决定似乎更稳妥一些。
基于 FPGA 的嵌入式存储解决方案
高效的存储器功能有利于提升基于 FPGA 的嵌入系统的性能。在嵌入系统中存储器可用
特权制造 本教程仅用于配套 SF-NIOS2 FPGA 开发板学习交流使用
《圣经》箴言九 11 “敬畏耶和华是智慧的开端,认识至圣者便是聪明。” http://group.ednchina.com/2522/
5
来储存软件代码和硬件加速器查找表(LUTs)等。
对于系统中的存储器的需求,在很大程度上是由系统实现应用的性质来决定的。如简单
的、低成本的系统,对于存储器的性能和容量等需求是很低的。相反的,在复杂的、高性能
的系统中,存储器的吞吐能力是最重要的。在嵌入式系统中可能使用到的存储器类型无外乎
易失存储器和非易失存储器两类。
易失存储器,这一类存储器的主要特征就是易失性。易失存储器只能够在存储设备供电
期间保持数据内容。当停止供电时,存储器中的数据内容便会丢失。因此,如果需要在存储
器关闭后仍保持数据,就不能使用易失存储器。常见的易失存储器包括静态 RAM(SRAM),
同步静态 RAM(SSRAM),同步动态 RAM(SDRAM)和 FPGA 片内存储器。在我们的第一个
系统中就只使用了 FPGA 片内存储器作为程序存储和运行的存储器,结果当然是在下电后无
法保存程序。
非易失存储器在断电后仍能够保持数据内容。对于在供电循环后需要恢复存储数据的应
用,非易失存储器成为最好的选择。CPU 启动代码、应用程序设定和 FPGA 的配置数据,这
些通常都储存在非易失存储器中。在我们后面将要搭建的第二个系统中,就是要使用这种存
储方式。尽管具有断电后保持数据的优点,非易失存储器的写入速度通常比易失存储器慢,
并且擦写的步骤更复杂。另外,非易失存储器的可擦写次数是有限的,超过这个有效次数后
擦除操作将失败。常见的非易失存储器包括所有种类的闪存,EPROM 和 EEPROM 等。现代
的嵌入系统大多使用闪存作为非易失性存储器。
片内存储器
片内存储器是基于 FPGA 的嵌入系统可使用的最简单的存储器。因为存储是在 FPGA 内
部完成,电路板上无需外部连线。可以简单地选择 SOPC builder 中 System Contents-> On-Chip
Memory 选项,来完成设计中的片内存储器。也可以根据需求定义片内存储器的大小、带宽、
种类、及特殊的片内存储器特性,如 DDR 模式。
片内存储器在基于 FPGA的嵌入式系统可用的存储器中具有最高吞吐量和最低反应延时。
它的反应延时通常仅为一个时钟周期。通过存储处理管道化,可以使吞吐量达到每个时钟周
期进行一次数据处理。
有些片内存储器被设计成可以在DDR 模式下进行存取,其中读和写是分别进行操作的。
DDR 模式能够有效地实现双倍存储带宽,允许存储器在一个通道进行写入,同时在另一个通
道进行读取。
片内存储器的另一个好处是,由于它是在 FPGA 上直接实现的,它无需在板上或电路中
- 1
- 2
- 3
- 4
- 5
- 6
前往页