2812存储器映射

2812存储器映射
2812存储器映射

2812存储器映射

2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。

2812的存储器被划分成了下面的几个部分:

1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。

2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。

3.CPU中断向量。在程序空间里也保留了64个地址作为CPU的32个中断向量。通过CPU 寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。

映射和空间的统一编址

F2812内部的映射空间

低地址空间

高地址空间

2812CMD详解

CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。

1.)#pragma ,CODE_SECTION和DA TA_SECTION伪指令

#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明

将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址

2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。

以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Headers_ nonBIOS.cmd为例

F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置

CMD文件里有两个基本的段:初始化段和非初始化段。初始化段包含代码和常数等必须在D SP上电之后有效的数。故初始化块必须保存在如片内FLASH等非遗失性存储器中,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。

已初始化的段:.text,.cinit,.const,.econst,..pinit和.switch..

.text:所有可以执行的代码和常量

.cinit:全局变量和静态变量的C初始化记录

.const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明

.econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明

.pinit:全局构造器(C++)程序列表

.switch:包含switch声明的列表

非初始化的段:.bss,.ebss,.stack,.sysmem,和esysmem.(更好的理解就是,这些段就是存储空间而已)

.bss: 为全局变量和局部变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储在. bss空间中。

.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中

.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。

.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0

.esysmem:为动态存储分配保留的空间。如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0.

F2812_nonBIOS_Flash.cmd --- 用于无BIOS,从片内FLASH引导

对于程序在FLASH 中运行时,需要注意的: DSP 在150M 时钟频率下,FLASH 中只能提供大约120M 的时钟频率,所以有时候我们希望在RAM 中运行时间敏感或计算量很大的子程序(比如AD 采样)。但是我们所有代码都放在FLASH 中,这就必须在上电后将FLASH 中的这

段敏感程序复制到RAM中运行,加快速度。这是在.CMD文件就必须划分一段用来设置RA M的载入和运行地址。程序代码如下:

SECTIONS {………

ramfuncs : LOAD = FLASHD,

RUN = RAML0,

LOAD_START(_RamfuncsLoadStart),

LOAD_END(_RamfuncsLoadEnd),

RUN_START(_RamfuncsRunStart),

PAGE = 0

}

DSP281x_Headers_nonBIOS.cmd ----- 用于无BIOS,外设寄存器产生的数据段映射至对应的存储器空间

cmd小技巧:

如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

PRAMH0 : origin = 0x3F8002, length = 0x0014FE

L0RAM : origin = 0x008000, length = 0x001000

SECTIONS

.text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

查看段的分配及使用情况.map的链接器(存储器)分配映射文件,链接器的map文件描述以下内容:通过map文件可以查看各段的分配情况,包括段的起始地址,使用的字节数等配合cmd文件的使用,可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。

VisualLinker可视化链接器TI公司出品的DSP软件开发环境CCS还提供了一种可视化生成存储器配置文件的工具:VisualLinker可视化链接器。如果程序原来包含了一个链接器命令

文件(.cmd文件),则当创建可视化链接文件的时候,原来cmd文件中的内存配置仍然会被

使用。如果读者想修改内存配置,双击.rcp文件就会在CCS中打开可视化链接器的图形界面,调整每个内存模块的大小,直到认为合适,然后只需要重新连编,程序即可生成新的输出文件,重复上面的步骤,直到出现满意的结果。

hello第四课(二)f2812存储器映射及cmd详解-日志-eyes417-

hello第四课(二):f2812存储器映射及cmd详解-日志 -eyes417-... 2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。 2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3. CPU中断向量。在程序空间里也保留了64个地址作为CPU 的32个中断向量。通过CPU的一个寄存器ST1中的VMAP

位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址  F2812内部的映射空间  2812CMD详解CMD:command 命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明 将funcA数据块定位于用户自定义的段"dataA"中------ 需要在CMD中指定dataA段的物理地址2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Headers_nonBIOS.cmd为例 F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置CMD文件里有两个基本的段:初始化段和

DSP第三章

第三章 DSP芯片开发工具的 特点及应用
§3.1 DSP开发环境 §3.2 通用目标文件格式COFF §3.3 编程工具特点及应用 §3.4 调试工具的特点及应用
XCHL
《DSP原理及应用》讲稿
1

宏源程序 文件
C语音 源文件 汇编语音 源文件
§3.1 DSP 开发环境
汇 编 语 音 开 发 流 程
归档器 宏文件库
C编译器 汇编语音 源文件 建库应 用程序 实时 支持库 Computer 调试工具
汇编器
归档器
COFF通用 目标文件
目标 文件库 十六进制 转换程序 EPROM中 的十六进制 代码程序 绝对 列表器
链接器 可执行的单个 COFF文件
交叉引用 TMS320C2XX 芯片 列表器 返回本章首页
2
XCHL
《DSP原理及应用》讲稿

§3.2 通用目标文件格式COFF
COFF文件格式是基于段(section)的概念建立的,即程序被分 解成各种段的组合体:如文本段、数据段等。这种文件格式便于 实现模块化程序设计,即程序员设计时只需基于代码段和数据段 等概念进行,不需关注每条命令或每个数据的具体目标地址。至 于它们的最终将处于存储器的哪个位置,将由链接器来安排。
? ? ? ? ? ?
段的概念及分类 段的创立 段的组合及其在存储器中的映象 程序重定位 COFF文件内的符号 COFF文件的装载
?
《DSP原理及应用》讲稿
返回本章首页
XCHL
3

dsp复习要点1

第一章绪论 1.数字信号处理算法一般的实现方法有哪些?(详见课本 P2) 2.简述数字信号处理器的主要特点; 答:(1)存储器采用哈佛或者改进的哈佛结构;(2)内部采用了多级流水; (3)具有硬件乘法累加单元;(4)可以实现零开销循环;(5)采用了特殊的寻址方式;(6)高效的特殊指令;(7)具有丰富的片内外设。 3.举例请给出数字信号处理器的运算速度指标; 答:常见的运算速度指标有如下几种: (1)指令周期:执行一条指令所需的最短时间,数值等于主频的倒数;指令周期通常以ns(纳秒)为单位。例如,运行在200MHz的TMS320VC5510的指令周 期为5ns。 (2)MIPS:每秒百万条指令数。 (3)MAC时间:一次乘法累加操作花费的时间。大部分DSP芯片可在一个指令周期内完成MAC操作; (4)FFT执行时间:完成N点FFT所需的时间。FFT运算是数字信号处理中的典型算法而且应用很广,因此该指标常用于衡量DSP芯片的运算能力。 4. 简述哈佛结构的概念。 解:哈佛结构试验种将程序指令存储器和数据存储器分开的存储器结构。 哈佛机构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的 存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器 独立编址,独立访问。 5. DSP与单片机,DSP与嵌入式处理器的主要区别是什么? 解:DSP运算能力强,擅长很多的重复数据运算,而MCU则适合不同信息 源的多种数据的处理诊断和运算,侧重于控制,速度并不如DSP。一般来说 MCU偏重于控制,DSP侧重于运算,MCU区别于DSP的最大特点在于它的通

用性,反应在指令集和寻址模式中。通常我们将的单片机和嵌入式芯片一般属于MCU,单片机8位和16位居多,ARM以32位居多。 6.TMS320C54x型DSP采用结构对程序存储器和数据存储器进行控制 7. DSP处理器按数据格式分为两类,分别是和 8. 从数据总线的宽度来说,TMS320C54x型DSP是位的DSP处理器 9.目前市场上DSP生产厂商位居榜首的是( D ) (5) A Motorola B ADI C Zilog D TI 第二章TMS320C54x的硬件结构 10. TMS320C54x DSP 芯片的存储器结构如何?(详见课本 P9) TMS320C54x 存储器由3 个独立的可选择空间组成:程序空间、数据空间和I/O 空间。程序存储器空间包括程序指令和程序中所需要的常数表格;数据存储器空间用于存储需要程序处理的数据或程序处理后的结果;I/O 空间用于与外部存储器映象的外设接口,也可以用于扩展外部数据存储空间。 C54x存储器空间通常可以分为3个可单独选择的空间: 64K程序空间、64K数据空间和64K I/O 空间。CPU状态寄存器的MP/MC、OVLY和 DROM位影响实际存储器的配置。 所有TMS320C54x 芯片都包括随机访问存储器(RAM)和只读存储器(ROM)。RAM可分成若干块,每一个块可以在一个机器周期内读两次或读一

5509A开发板存储空间和存储器映射

5509A开发板存储空间和存储器映射 TMS320VC5509A数字信号处理芯片具有一个比较复杂的存储空间分配体系。因此,在使用之前,首先需要了解一下TMS320VC5509的存储空间体系。关于TMS320VC5509的存储空间的详细说明,请参考TMS320VC5509 Datasheet 和TMS320VC5509 DSP External Memory Interface(EMIF)(编号为SPRU670)用户手册。 1. 存储空间组织 TMS320VC5509A 芯片的存储空间组织如下图所示: 明伟TMS320VC5509A开发板外扩一片16位的SDRAM,用/CE0选通,容

量为4M X 16位,寻址占用/CE0和/CE1两个存储空间。最大可配置为8M*16 位,占用CE0—CE3全部四个片外存储空间。 片选CE0---CE3引至总线扩展器上,供用户自行连接设备。其中,CE1和 CE2接至CPLD使用,用户使用时请详细阅读以下内容,以免造成冲突。 2. 寄存器组映射 TMS320VC5509A 开发板共有6个扩展寄存器组,用于与板上外设如按键、 网络芯片等通信,进行控制或读写信息。这些寄存器组通过CPLD扩展,分别是:z功能选择寄存器组 z按键寄存器组 z Flash地址扩展寄存器组 z网络控制寄存器组 z LCD控制寄存器组 z LCD数据寄存器组 2.1 寄存器组定义 1)功能选择寄存器组(W,只写) 功能选择寄存器组用于选择与切换对其它寄存器组的控制功能,其各位含义 如下: D5 D4 D3 D2 D1 D0 D15-D6 ALCDC ALCDD ANET AFLASH AKEY X LCDDIR X:无影响,可取任意值 LCDDIR:控制LCD的数据输入/输出方向,0为写LCD,1为读LCD ALCDC:控制LCD控制寄存器组的使能,0为使能,1为禁用 ALCDD:控制LCD数据寄存器组的使能,0为使能,1为禁用 ANET:控制8019网络芯片控制寄存器组的使能,0为使能,1为禁用 AFLASH:控制Flash地址扩展寄存器组的使能,0为使能,1为禁用 AKEY:控制按键寄存器组的使能,0为使能,1为禁用

2812存储器映射

2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。 2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3.CPU中断向量。在程序空间里也保留了64个地址作为CPU的32个中断向量。通过CPU 寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址

F2812内部的映射空间 低地址空间 高地址空间 2812CMD详解 CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DA TA_SECTION伪指令 #pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明

将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址 2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。 以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Headers_ nonBIOS.cmd为例 F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置 CMD文件里有两个基本的段:初始化段和非初始化段。初始化段包含代码和常数等必须在D SP上电之后有效的数。故初始化块必须保存在如片内FLASH等非遗失性存储器中,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。 已初始化的段:.text,.cinit,.const,.econst,..pinit和.switch.. .text:所有可以执行的代码和常量 .cinit:全局变量和静态变量的C初始化记录 .const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明 .econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明 .pinit:全局构造器(C++)程序列表 .switch:包含switch声明的列表

存储器映射和存储器重映射概念

存储器映射和存储器重映射 1.1 什么是存储器映射? 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就称为存储器映射。如图 1.所示。 图 1.1 映射原理图 在完成了存储器映射后,用户就可以按地址去访问对应的存储单元。 1.2 什么是存储器重新映射? 顾名思义,存储器重映射就是给存储单元再分配1个地址。此时,该存储单元就有了两个地址。用户可以通过这两个地址来访问该存储单元。如图 1.1所示。 图 1.1 存储器重映射 1.3 为什么要进行存储器重映射? 在实际应用中,我们需要对某些存储单元再分配地址;此时,就要进行存储器重映射。例如,异常向量表所在存储单元和Boot ROM都须进行重映射。下面以异常向量表所在存储单元的重映射为例说明如下: (1)用户程序总是从异常向量表开始执行 在ARM7编程中,异常向量表是用户程序的必备部分,程序流总是从异常向量表开始的。 (2)发生异常时,只能通过规定地址访问异常向量表

由ARM7体系结构可知,ARM7的异常向量地址始终是0x0000 0000~0x0000 001c 。例如,复位时,CPU 会自动跳转到复位异常向量地址0x0处读取该处指令。 (3) 异常向量表所在的存储单元地址不固定 用户程序可以存储在片内RAM 、片内Flash 、片外存储器,随着存储位置的不同,用户程序的存储地址显然也不同;因此,作为用户程序一部分的异常向量表的存储地址也是不固定的。如图 1.2所示。 0x0000 00000x0000 001C 0x4000 0000 0x4000 001C 0x8000 00000xE000 0000 0xFFF FFFF 0x8000 001C 不定 图 1.2 各异常向量表的实际位置 (4) 问题的提出 当异常向量表的实际存储地址并不在要求的0x0000 0000~0x0000 001c 范围时,那么发生异常时,CPU 怎样才能访问到异常向量表呢? (5) 解决办法――存储器重映射 存储器重映射机制就是为了解决(4)所提的问题而设计的。用户可通过存储器重映射,把地址0x0000 0000~0x0000 001c 再分配给异常向量表所在存储单元。至此,CPU 内核既可以通过0x0000 0000~0x0000 001c 访问异常向量表,也可以通过异常向量表所在存储单元的实际地址来访问异常向量表。例如:用户程序现存放在片外Flash ,该程序的异常向量表实际存储地址位于0x80000000~0x8000003C ;但通过存储器重映射,可将地址0x00000000~0x0000003C 分配给0x80000000~0x8000003C 的存储单元。于是,用户既可以通过0x80000000~0x8000003C ,也可以通过0x00000000~0x0000003C 来访问异常向量表。所以,发生异常时,CPU 虽然仍是访问0x00000000~0x0000003C 处,但仍可通过该地址访问到实际位于片外Flash 的异常向量表。 1.4 小结 由上述可知,存储器重映射的用途就是给存储器单元再分配1个地址,以解决一些实际需要。 应用存储器重映射机制的例子,除异常向量表以外还有Boot ROM 。若您有兴趣,可参考我们的《深入浅出ARM7――LPC2300(上册)》中的“存储器重映射及引导块”小节。

ARM存储器结构

ARM存储器结构 ARM存储器:片内Flash、片内静态RAM、片外存储器 映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系。 我们可以把存储器看成一个具有输出和输入口的黑盒子。输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体电路实现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。 普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的,UGG boots。 而ARM比较复杂,ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理存储单元的地址可以根据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了(这就是后面要说的重新映射)。例如将0x00000000地址上的存储单元映射到新的地址0x00000007上。CPU存取0x00000007就是存取0x00000000上的物理存储单元。(随便举的例子为了说明道理,没有实际意义) 存储器重新映射(Memory Re-Map) 存储器重新映射是将复位后用户可见的存储器中部分区域,再次映射到其他的地址上。 存储器重新映射包括两个方面:1、Boot Block重新映射(关于Boot Block的相关内容看我博客中的另一篇文章)。2、异常(中断)向量重新映射 Boot Block重新映射:本来Boot Block在片内Flash的最高8KB,但是为了与将来期间相兼容,生产商为了产品的升级换代,在新型芯片中增加内部Flash容量时,不至于因为位于Flash高端的Boot Block的地址发生了变化而改写其代码,整个Boot Block都要被重新映射到内部存储器空间的顶部,即片内RAM的最高8KB。(地址为: 0x7FFFE000~0x7FFFFFFF) 异常(中断)向量重新映射:本来中断向量表在片内Flash的最低32字节,重新映射时要把这32个字节再加上其后的32个字节(后面这32个字节是存放快速中断IRQ的服务程序的)共64个字节重新映射(地址为:0x00000000~0x0000003F)重新映射到的地方有三个:内部Flash高端的64字节空间、内部RAM低端的64字节空间和外部RAM低端的64字节空间,再加上原来的内部Flash低端的64字节空间,异常向量一共可以在四个地方出现。为了对存储器映射进行控制,处理器设置了存储器映射控制寄存器MEMMAP,其控制格式如下图所示:

存储器及其接口

存储器的种类、特性和结构 一、分类 按元件组成:半导体M,磁性材料存储器(磁芯), 激光存储器 按工作性质:内存储器:速度快,容量小(64K?8Gbyte) 外存储器:速度慢,容量大(20MB?640GB)二、半导体存储分类 RAM SRAM 静态 DRAM 动态 IRAM 集成动态 ROM 掩膜ROM PROM 可编程 EPROM 可改写 E PROM 可电擦除 三、内存储器性能指标 1. 容量M可容纳的二进制信息量,总位数。 总位数=字数×字长bit,byte,word 2. 存取速度 内存储器从接受地址码,寻找内存单元开始,到它 取出或存入数据为止所需的时间,T A。 T A越小,计算机内存工作速度愈高,半导体M存储 时间为几十ns?几百ns ns=mus 3.功耗 维持功耗操作功耗 CMOS NMOS TTL ECL (低功耗.集成度高)(高速.昂贵.功耗高) 4、可靠性 平均故障间隔时间 MTBF(Mean Time Between Failures) 越长,可靠性越高.跟抗电磁场和温度变化的能力有关. 5、集成度 位/片1K位/片?1M位/片

在一块芯片上能集成多少个基本存储电路 (即一个二进制位) 四、存储器的基本结构 随机存储器RAM 或读写存储器 一、基本组成结构 存储矩阵 寄存二进制信息的基本存储单元的集合体,为便于读写,基本存储单元都排列成一定的阵列,且进行编址。 N×1—位结构:常用于较大容量的SRAM,DRAM N×4 N×8 —字结构常用于较小容量的静态SRAM

2、地址译码器 它接收来自CPU的地址信号,产生地址译码信号。选中存储矩阵中某一个或几个基本存储单元进行读/写操作 两种编址方式: 单译码编址方式. 双译码编址方式 (字结构M)(复合译码) 存储容量

第4课 2812的片内资源、存储器映射以及CMD文件的编写

第4课F2812片内资源、存储器映射以及CMD文件的编写 作者:顾卫钢谢芬(HELLODSP资深会员) 从今天开始,我们的课程终于进入F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学习2812的片内资源,初步了解它究竟有哪些本事,能拿来干些什么,然后一起了解2812存储器的结构,统一编址的方式、存储器映射关系,并重点分析CMD文件,以期望消除大家对CMD文件的迷惑,在自己编写程序的时候会修改CMD文件中的部分内容,从而满足自己设计时的需求。 1.F2812的片内资源 我们知道,TMS320F2812是32位的定点DSP,它既具有数字信号的处理能力,又具有强大的事件管理能力和嵌入式控制功能,特别适合用于需要大批量数据处理的测控领域,例如自动化控制、电力电子技术、智能化仪表、电机伺服控制。下面是F2812的内部资源框图。 图1 TMS320F2812内部资源框图 2812采用了高性能的静态CMOS技术,时钟频率可达150MHZ(6.67ns),其核心电压为1.8V,I/O口电压3.3V,Flash编程电压也为3.3V,所以我们在设计2812电源部分的时候,需要将常用的5V电压转换成1.8V和3.3V的电压之后,才能供给2812。具体的设计我们将会在以后的硬件设计内容里进行探讨。

让我们一起来看看图1,最左边的A(18-0)和D(15-0)是表示2812外扩存储器的能力,2812外扩的存储空间最大是219*16 bit,就是说最多只能扩512K个存储单元,每一个存储单元的位数为16位。 从图中我们也可以看到,F2812支持JTAG边界扫描(Boundary Scan),这也是为什么我们的仿真器都是采用JTAG口的原因了,在这里,提醒大家一点的就是,仿真的时候,JTAG口的方向不能插反,如果插反的话会将仿真器烧坏。我们所使用的14针JTAG口的第6针是空脚,所以一般情况下仿真器JTAG线的第6针是填针的,同时在板子上的第6脚是拔空的,这样可以防止您插反JTAG口,以避免不必要的损失。这一点,在我们自己设计板子的时候尤其需要注意。 在图1中,我们可以看到连接整个芯片各个模块的两条黑色的线,从英文单词上我们可以看到一条是Program Bus,另一条是Data Bus,就是程序总线和数据总线。这个概念讲的还是比较笼统的,下面我们详细分析这两天总线,并结合图中总线上的各个箭头来理解这些概念。 我们首先需要知道2812的存储器空间被分成了2块,一块是程序空间,一块是数据空间,而无论是那一块的内容,我们都需要借助于两种总线来进行传送相关的内容——地址总线和数据总线,用地址总线来传送存储单元的地址,而用数据总线来传送存储单元内的内容。2812的存储器接口具有3条地址总线和3条数据总线。了解了这些基本的内容之后我们接下来一一讲述2812内部的总线结构。 先来讲地址总线,顾名思义,这类总线的作用就是来传送存储单元的地址的。 1.PAB (Program Address Bus)程序地址总线,它是一个22位的总线,用于传送程序空间的读写地址。 程序在运行的时候,假如执行到了某一个指令,那么需要去找到这段代码的地址,就是用PAB来传送。 2.DRAB(Data-Read Address Bus)数据读地址总线,它是个32位的总线,用于传送数据空间的读地址。 假如要读取数据空间某一个单元的内容,那么这个单元的地址就是通过DRAB来传送。 3.DWAB(Data-Write Address Bus)数据写地址总线,它也是个32位的总线,用于传送数据空间的写地 址。类似的,如果我要对数据空间的某一个单元进行写操作,那么这个单元的地址就是通过DWAB来传送。 了解了地址总线后,我们再来看看数据总线,这类总线传送的就是数据了,也就是各个存储单元内的具体内容了。 1.PRDW(Program-Read Data Bus)程序读数据总线,它是一个32位的总线,用于传送读取程序空间时 的指令或者数据。我们在执行代码的时候,首先是通过PAB传送并找到了存放该指令的存储单元,但是这个存储单元下的具体内容就要由我们的PRDW来传送了。 2.DRDB(Data-Read Data Bus)数据读数据总线,它是一个32位的总线,在读取数据空间时用来传送数 据。我们在进行读操作时,先通过DRAB总线确定了需要进行读操作的数据单元的地址,接下来传送这个数据单元下面的具体内容时就需要DRDB了。 3.DWDB(Data/Program-Write Data Bus)数据写数据总线,它是一个32位的总线,在进行写操作时,

dsp复习详解

三、TMS320C54X的指令系统 TMS320C5000指令系统TMS320C54x的指令集 TMS320C54x的指令集有近两百条指令,按功能分为如下几类: ?算术运算指令?逻辑运算指令?程序控制指令?装入和存储指令 一、算术运算指令 算术运算指令可分为如下几类: ?加法指令?减法指令?乘法指令?乘加指令?乘减指令?双数/双精度指令?特殊操作指令定点DSP中数据表示方法 当它表示一个整数时,其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。 如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,7FFFH 表示最大的正数32767(十进制),而0FFFFH表示最大的负数-1(负数用2的补码方式显示)。实现16位定点加法 ‘C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于长立即数的加法。 1、加法指令 使用ADD完成加法 LD temp1, A ;将变量temp1装入寄存器A ADD temp2, A ;将变量temp2与寄存器A相加 ;结果放入A中 STL A, temp3 ;将结果(低16位)存入变量 ;temp3中。 注意:这里完成计算temp3=temp1+temp2,我们没有特意考虑temp1和temp2是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。

利用ADDS实现32位数据装入: LD #0,DP ; 设置数据页指针LD 60H,16,A ; 将60H的内容装到A的高16位ADDS 61H, A ;将61H的内容加到A的低16位DLD 60H,B ; 直接装入32位到B寄存器 2、减法指令 TMS320C54x汇编指令集:符号与缩写:

F2812存储器映射及CMD详解

2812存储器映射及CMD 2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0 xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。

2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3.CPU中断向量。在程序空间里也保留了64个地址作为CPU的32个中断向量。通过CPU寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址 F2 812内部的映射空间 低地址空间

高地址空间 2812CMD详解 CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令 #pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明 将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址

ARM的存储器映射与存储器重映射.

Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only. ARM的存储器映射与存储器重映射 当系统上电后,程序将自动从0x00000000地址处开始执行,因此在系统的初始状态,要求0x00000000地址处的存储器是非易性的ROM或Flash等。但是ROM 或Flash的访问速度相对较慢,每次中断发生后,都要读取ROM或Flash上的向量表开始,影响了中断响应速度。因此,LPC2200提供一种灵活的地址重映射方法,该方法可以将内部RAM的地址重新映射到0x00000000的位置。在系统执行重映射命令之前,需要将Flash中的中断向量代码拷贝到内部RAM中。这样在重映射命令执行之后相当于从内部RAM中0x00000000的位置找到中断向量,而实际上是将RAM的起始地址0x40000000映射为0x00000000了。这样,中断执行时相当于在RAM中找到对应中断向量,实现异常处理调试。 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说,0X00000000依 Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only. 次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器0X80000000,VPB(低速外设地址,如GPIO,UART)—— 0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。由于系统在上电复位时要从0X00000000开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。BOOTBLOCK运行完就是要运行用户自己写

存储器地址映射

通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数 在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。... 就是把一个地址连接到另一个地址。 例如,内存单元A的地址为X,把它映射到地址Y,这样访问Y时,就可以访问到A 了。当然,访问原来的地址X,也可以访问到A。 再如,在C语言等高级语言里面没有访问IO的指令,所以那样的话在C里面就无法访问IO,只能通过嵌入汇编或者通过调用系统函数来访问IO了。采用IO映射后就不同了,因为IO空间和内存空间本来不同,有不同的访问指令,那么,将IO空间映射到内存空间,就可以通过使用访问内存的方法来访问IO了,例如在C语言里面可以通过指针来访问内存 单元,从而访问到被映射的IO。 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统 一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。 用户只能在挂外部RAM或FLASH的情况下可进行自定义。ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说,0X00000000依次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器0X80000000,VPB(低速外设地址,如GPIO,UART)——0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。由于系统在上电复位时要从0X00000000 开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK 区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK 区了。BOOTBLOCK运行完就是要运行用户自己写的启动代码了,而启动代码中最重要的就是异常向量表,这个表是放在FLASH的头部首先执行的,而异常向量表中要处理多方面的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ(中断) ,FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器,BOOTBLOCK,SRAM中固化的,不可能都由用户直接定义,所以还是需要重映射把那些异常向量表的地址映到总表中。为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。重映射主要包括引导块―Boot Block‖重映射和异常向量表的重映射。1.引导块―Boot Block‖及其重映射Boot Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。这段代码在复位时被首先运行,主要用来判断运行哪个存储器上面的程序,检查用户代码是否有效,判断芯片是否被加密,系统的在应用编程(IAP)以及在系统编程功能(ISP)等。Boot Block存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间,但也有其他的LPC系列不占用FLash空间的,而部分没有内部Flash空间的ARM处理器仍然存在Boot Block。重映射的原因:Boot

DSP课后习题集答案解析

第一章 1.简述典型实时数字信号处理系统组成部分。 答:包括:抗混叠滤波器(Anti-aliasing filter)、模数转换器ADC(Analog-to-Digital Converter)、数字信号处理、数模转换器DAC(Digital-to-Analog Converter)和抗镜像滤波器(Anti-image filter) 。 2.简述X86处理器完成实时数字信号处理的优缺点。 答:利用X86处理器完成实时数字信号处理。特点是处理器选择范围宽,主板及外设资源丰富,有多种操作系统可供选择,开发、调试较为方便;缺点是数字信号处理能力不强,硬件组成较为复杂,系统体积、重量较大,功耗较高,抗环境影响能力较弱。 3.简述数字信号处理器的主要特点。 答:(1)存储器采用哈佛或者改进的哈佛结构;(2)内部采用了多级流水;(3)具有硬件乘法累加单元;(4)可以实现零开销循环;(5)采用了特殊的寻址方式;(6)高效的特殊指令;(7)具有丰富的片内外设。 4.给出存储器的两种主要结构,并分析其区别。 答:存储器结构分为两大类:冯·诺依曼结构和哈佛结构。冯·诺依曼结构的特点是只有一个存储器空间、一套地址总线和一套数据总线;指令、数据都存放在这个存储器空间中,统一分配地址,所以处理器必须分时访问程序和数据空间。哈佛结构程序存储器空间和数据存储器空间分开,具有多套地址、数据总线,哈佛结构是并行体系结构,程序和数据存于不同的存储器空间,每个存储器空间独立编址、独立访问。 5.简述选择数字信号处理器所需要考虑的因素。 答:应考虑运算速度、算法格式和数据宽度、存储器类型、功耗和开发工具。 6.给出数字信号处理器的运算速度指标,并给出其具体含义。 答:常见的运算速度指标有如下几种: (1)指令周期:执行一条指令所需的最短时间,数值等于主频的倒数;指令周期通常以ns(纳秒)为单位。例如,运行在200MHz的TMS320VC5510的指令周期为 5ns。 (2)MIPS:每秒百万条指令数。 (3)MOPS:每秒百万次操作数。 (4)MFLOPS:每秒百万次浮点操作数。 (5)BOPS:每秒十亿次操作数。 (6)MAC时间:一次乘法累加操作花费的时间。大部分DSP芯片可在一个指令周期内完成MAC操作; (7)FFT执行时间:完成N点FFT所需的时间。FFT运算是数字信号处理中的典型算法而且应用很广,因此该指标常用于衡量DSP芯片的运算能力。

最新存储器及其接口

存储器及其接口

存储器的种类、特性和结构 一、分类 按元件组成:半导体M,磁性材料存储器(磁芯),激光存储器 按工作性质:内存储器:速度快,容量小(64K?8Gbyte)外存储器:速度慢,容量大(20MB?640GB) 二、半导体存储分类 RAM SRAM 静态 DRAM 动态 IRAM 集成动态 ROM 掩膜ROM PROM 可编程 EPROM 可改写 E PROM 可电擦除 三、内存储器性能指标 1. 容量 M可容纳的二进制信息量,总位数。 总位数=字数×字长 bit,byte,word 2. 存取速度 内存储器从接受地址码,寻找内存单元开始,到它

取出或存入数据为止所需的时间,T A。 T A越小,计算机内存工作速度愈高,半导体M存储时间为几十ns?几百ns ns=mus 3.功耗 维持功耗操作功耗 CMOS NMOS TTL ECL (低功耗.集成度高)(高速.昂贵.功耗高) 4、可靠性 平均故障间隔时间 MTBF(Mean Time Between Failures) 越长,可靠性越高.跟抗电磁场和温度变化的能力有关. 5、集成度 位/片 1K位/片?1M位/片 在一块芯片上能集成多少个基本存储电路 (即一个二进制位) 四、存储器的基本结构

随机存储器 RAM 或读写存储器 一、基本组成结构 存储矩阵 寄存二进制信息的基本存储单元的集合体,为便于读写,基本存储单元都排列成一定的阵列,且进行编址。 N×1—位结构:常用于较大容量的SRAM,DRAM

N×4 N×8 —字结构常用于较小容量的静态SRAM 2、地址译码器 它接收来自CPU的地址信号,产生地址译码信号。选中存储矩阵中某一个或几个基本存储单元进行读/写操作 两种编址方式: 单译码编址方式. 双译码编址方式 (字结构M)(复合译码) 存储容量

地址分配和存储器映射

在嵌入式编程里,特别是32bit CPU里,各种各样五花八门的动作是CPU通过对外设的驱动来完成的.因为底层编程大部分工作就是外设编程。 CPU本身几乎每一种外设都是通过读写设备上的寄存器来进行操作的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。注意,这里的外设是相对于CPU来讲的,比如S3C2440除了ARM920T的内核以外,还在同一块CPU里集成很多模块,这一些模块也称为外设。 CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped)称为端口映射,另一种是存储空间映射方式(Memory-mapped),称为内存映射。而具体采用哪一种则取决于CPU的体系结构。 内存映射 有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设 I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为存储空间的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。这就是所谓的“存储空间映射方式”(Memory -mapped)。ARM体系的CPU均采用这一模式.

简而言之,就是内存(一般是SDRAM)与外设寄存器统一编址。 端口映射 而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即 I/O端口)。这就是所谓的“I/O映射方式”(I/O-mapped)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(0-0xffff)。这是“I/O映射方式”的一个主要缺点。而且必须要专门的汇编语言才能处理. 内存映射模式下,对寄存器的访问就是某一个地址的操作,因此C语言的指针即可完成此操作。这样编程相当方便。 Linux 最早是在在X86运行,对硬件地址采用端口映射,后来又扩展到ARM之类运行.为了简化操作,Linux在所以CPU上都采用I/O端口概念.如果是象ARM这样内存映射.也被模拟成端口. SOC的外设地址编址 -----------------------------------------------------------------------------------------------

相关文档
最新文档