8086奇地址数据读取两个时钟周期内存访问

问题描述

当一个16位字要从一个奇数内存地址(比如125)的内存中读取时, 8086 C P U 8086CPU 8086CPU首先把 124 124 124放在地址总线上,并在数据高8位中获得125位置的内容。在下一个时钟周期中, 8086 C P U 8086CPU 8086CPU 126 126 126放在地址总线上,并在数据低8位中获取 126 126 126地址的内容。这两个字节然后由处理器交换,因为这些值在数据总线的错误位置(高8位低8位相反位置)进入CPU。

上述操作需要2个时钟周期。为什么CPU不能简单地将地址125放在地址总线上,然后计算下一个地址,并将该地址的内容(在本例中为126)放在数据总线的低阶字节上?低阶字节和高阶字节可以稍后交换,允许处理器仅在1个时钟周期内从内存中获取16位值。

原因分析

先给出8086引脚图。
在这里插入图片描述

8086CPU有20根地址线: A 0 : A 19 A0:A19 A0:A19,有16根数据线: D 0 : D 15 D0:D15 D0:D15。实际上16个数据线和20根地址线的低16位是相同的引脚,也称为 A D 15 : A D 0 AD15:AD0 AD15:AD0。它们的功能是在同一个时钟周期的第一部分充当地址线,在后一部分充当数据线。寻址同样重要的是一个引脚称为 B H E ‾ \overline{BHE} BHE,用于“总线高位使能”。同时地址线最低bit A 0 A0 A0 也作为“使能”引脚,用于“总线低位使能”,稍后我们将看到。

B H E ‾ \overline{BHE} BHE信号和 A 0 A0 A0一样,低电平有效。

两次时钟周期读取原因分析

如果 8086 8086 8086 想要读取地址 124 − 125 124-125 124125 处的 16 b i t 16bit 16bit字,则先将地址124放在地址线 A 19 : A 0 A19:A0 A19:A0 上,并将 B H E ‾ \overline{BHE} BHE设置为低电平。此时由于 A 0 A0 A0 B H E ‾ \overline{BHE} BHE都是低电平有效,所以高位低位两个8bit数据同时有效。高8位数据放在 D 15 : D 8 D15:D8 D15:D8上,低8位数据放在 D 7 : D 0 D7:D0 D7:D0上, C P U CPU CPU得到一个完整的字。

如果 8086 8086 8086 想要读取地址 124 124 124的单个字节数据,则将地址 124 124 124放在 A 19 : A 0 A19:A0 A19:A0上,并将 B H E ‾ \overline{BHE} BHE设置为高电平。由于 A 0 A0 A0低电平(有效),低8位数据放在 D 7 : D 0 D7:D0 D7:D0 上,但由于 B H E ‾ \overline{BHE} BHE为高电平,高8位数据什么也不做。

如果 8086 8086 8086 想要读取地址 125 125 125的单个字节,则将地址 125 125 125放在 A 19 : A 0 A19:A0 A19:A0上,并将 B H E ‾ \overline{BHE} BHE设置为低电平。因为 A 0 A0 A0为高电平,低8位数据什么也不做,因为 B H E ‾ \overline{BHE} BHE低电平有效,高8位数据放在 D 15 : D 8 D15:D8 D15:D8 上。

这是三种可能的情况( A 0 A0 A0高和 B H E ‾ \overline{BHE} BHE高电平则高低位数据同时无效,所以它没有做任何事情)。注意,地址线高19位 A 19 : A 1 A19:A1 A19:A1在所有三种情况下都是相同的,并且它们在整个时钟周期中不会改变。如果 8086 8086 8086想要在地址 125 − 126 125-126 125126处读取一个 16 b i t 16bit 16bit字,而这两个地址在 A 19 : A 1 A19:A1 A19:A1上有不同的位,所以它需要两次内存读操作。

读取之后处理器交换高低数据原因分析

按照小端序的存储方式,一个 16 b i t 16bit 16bit 数据 0 x 1234 0x1234 0x1234 在地址 a d d r addr addr处的存储方式应该为: a d d r addr addr地址存储内容为 0 x 34 0x34 0x34 a d d r + 1 addr+1 addr+1地址存储内容为 0 x 12 0x12 0x12。那么当 C P U CPU CPU同时高低位使能时,取出一整个字,此时高位数据 0 x 12 0x12 0x12放数据线 D 15 : D 8 D15:D8 D15:D8,低位数据 0 x 34 0x34 0x34放数据线 D 7 : D 0 D7:D0 D7:D0 上,共同组成正确数据 0 x 1234 0x1234 0x1234

当数据位于地址 125 125 125位置时, C P U CPU CPU第一个时钟周期取数据时将地址 125 125 125放地址线,将 B H E ‾ \overline{BHE} BHE设置为低电平,此时低位数据 0 x 34 0x34 0x34位于数据线的高8位。 C P U CPU CPU第二个时钟周期取数据时将地址 126 126 126放地址线,将 B H E ‾ \overline{BHE} BHE设置为高电平,此时高位数据 0 x 12 0x12 0x12位于数据线的低8位,数据线数据为 0 x 3412 0x3412 0x3412。刚好和真实数据相反。所以需要处理器交换两字节位置。

知识扩展

根据上述描述把相关原理扩展到32bit处理器中在对不对齐地址数据的读写操作中,可以有如下图所示内容:

在这里插入图片描述
第一个时钟周期先在上一个对齐字中读取一部分数据,第二个时钟周期再从下一个对齐字中读取剩余数据,将两次数据做适当移位合并为最终数据。

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
内存工作原理 1.内存寻址 首先,内存从CPU获得查找某个数据的指令,然后再找出存取资料的位置时(这个动作称为“寻址”),它先定出横坐标(也就是“列地址”)再定出纵坐标(也就是“行地址”),这就好像在地图上画个十字标记一样,非常准确地定出这个地方。对于电脑系统而言,找出这个地方时还必须确定是否位置正确,因此电脑还必须判读该地址的信号,横坐标有横坐标的信号(也就是RAS信号,Row Address Strobe)纵坐标有纵坐标的信号(也就是CAS信号,Column Address Strobe),最后再进行读或写的动作。因此,内存在读写时至少必须有五个步骤:分别是画个十字(内有定地址两个操作以及判读地址两个信号,共四个操作)以及或读或写的操作,才能完成内存的存取操作。 2.内存传输 为了储存资料,或者是从内存内部读取资料,CPU都会为这些读取或写入的资料编上地址(也就是我们所说的十字寻址方式),这个时候,CPU会通过地址总线(Address Bus)将地址送到内存,然后数据总线(Data Bus)就会把对应的正确数据送往微处理器,传回去给CPU使用。 3.存取时间 所谓存取时间,指的是CPU读或写内存内资料的过程时间,也称为总线循环(bus cycle)。以读取为例,从CPU发出指令给内存时,便会要求内存取用特定地址的特定资料,内存响应CPU后便会将CPU所需要的资料送给CPU,一直到CPU收到数据为止,便成为一个读取的流程。因此,这整个过程简单地说便是CPU给出读取指令,内存回复指令,并丢出资料给CPU的过程。我们常说的6ns(纳秒,秒-9)就是指上述的过程所花费的时间,而ns便是计算运算过程的时间单位。我们平时习惯用存取时间的倒数来表示速度,比如6ns的内存实际频率为1/6ns=166MHz(如果是DDR就标DDR333,DDR2就标DDR2 667)。 4.内存延迟 内存的延迟时间(也就是所谓的潜伏期,从FSB到DRAM)等于下列时间的综合:FSB同主板芯片组之间的延迟时间(±1个时钟周期),芯片组同DRAM之间的延迟时间(±1个时钟周期),RAS到CAS延迟时间:RAS(2-3个时钟周期,用于决定正确的行地址),CAS延迟时间 (2-3时钟周期,用于决定正确的列地址),另外还需要1个时钟周期来传送数据数据从DRAM输出缓存通过芯片组到CPU的延迟时间(±2个时钟周期)。一般的说明内存延迟涉及四个参数CAS(Column Address Strobe 行地址控制器)延迟,RAS(Row Address Strobe列地址控制器)-to-CAS延迟,RAS Precharge(RAS预冲电压)延迟,Act-to-Precharge(相对于时钟下沿的数据读取时间)延迟。其中CAS延迟比较重要,它反映了内存从接受指令到完成传输结果的过程中的延迟。大家平时见到的数据3—3—3—6中,第一参数就是CAS延迟(CL=3)。当然,延迟越小速度越快。
【方案介绍】本图像数据采集卡作为整个控制卡的一部分,可以应用在图像数据采集、语音数据采集等领域。其采用德州仪器TMS320VC5416 DSP作为处理器, Lattice公司的ispMACH系列LC4256V CPLD作为系统间逻辑控制,板载4Mbit NORFLASH及32M NANDFLASH,并带有隔离RS485工业总线,PDIUSBD12 USB器件,可通过USB供电及传输数据。 本图像数据采集卡的系统基本结构如图。通过外置工业CCD摄像头模块,可以将视频信号例如包含有图像信号、行同步信号、行消隐信号、场同步信号、场消隐信号等模拟数据通过AD芯片转为数字信号。为了实现SRAM 中数据地址的同步,将A/D 转换的数字信号送往CPLD 进行缓冲,然后送SRAM 供DSP 读取:DSP 通过查询和中断方式,监控CPLD 发出的中断信号,一旦接收到CPLD 发出的中断信号,DSP 读取某路的数值并与初始数据比较,根据比较结果继续向CPLD发送控制信号,如果此时的控制信号为采集完成信号,则DSP 在通知CPLD停止采集的同时,延时一段时间后再读取SRAM,然后在内部进行图像数据处理,将处理结果放在NANDFLASH存储器中。 本图像数据采集卡板载4Mbit 的NORFLASH芯片,可以用来存储5416 DSP程序,让系统从NORFLASH上运行。 本图像数据采集卡搭载的DSP数字信号处理器为TMS320VC5416,它主要负责图像处理部分,包括图像预处理、分割、特征提取等环节。图像预处理主要是经过图像增强和图像恢复,降低噪声对图像的影响,提高图像的质量。根据图像区域内部特征或属性进行图像分析,采用边缘检测等技术将图像分割为若干个有意义的区域,获取区域特征描述,进行图像分类或分离、图像识别,本图像数据采集卡统主要应用在对图像质量以及实时性要求不高的场合,优点是开发周期短,价格便宜。 德州仪器TMS320VC5416 DSP是德州仪器定点C5000系列产品中的经典产品,它具有高达120MHZ/160MHZ的主频,8M FLASH存储器,128K RAM。它是基于先进的改进哈佛结构的16 位定点DSP,拥有一条程序总线和三条数据总线。本数据卡采用的是160MHZ型号,采用多层板设计,数据接口皆采用光耦隔离,实现了高速通信的抗干扰设计。 下面描述一下该数据采集卡的电源设计方案: 电源方案框图如下: 由于TMS320VC5416 DSP内核采用1.6V供电,外部采用3.3V供电,而对于LC4256V及NORFLASH、 NANDFLASH、PDIUSBD12和光耦皆用3.3V供电,MAX3487和MAX3486采用5V电源,考虑到5V可以用USBBUS本身提供,所以在设计板卡时,需要额外提供两种电源。经过几天的选型,后来选择了这款德州仪器的TPS767D301双LDO电源芯片,这个芯片是TI专用于DSP系统中需要双电源供电的电源方案。 它的主要特点如下:◆带有可单独供电的双路输出,一路固定输出电压为3.3V,另一路输出电压可以调节,范围为1.5-5.5V; ◆每路输出电流的范围为0-1A; ◆电压差大小与输出电流成正比,且在最大输出电流为1A时,最大电压差仅为350mV; ◆具有超低的典型静态电流(85μA),器件无效状态时,静态电流仅为1μA; ◆每路调整器各有一个开漏复位输出,复位延迟时间为200ms; ◆ 28引脚的TSSOP PowerPAD封装形式可保证良好的功耗特性; ◆工作温度范围为-40℃-125℃,且每路调整器都有温度自动关闭保护功能。 它的各功能引脚如下: 俗话说,好马配好鞍,这个芯片当时采购价格还是蛮高的。下面是电路原理图和实物图片。 板卡电源部分实物: 板卡局部实物图: 在TI WEBENCH工具中,集成了【FPGA/uP】选项工具,选择对应好的控制器件后,可以直接得到一个针对此器件的电源方案,可谓非常省事。下面我们就用这个工具,重新来设计一个针对TMS320VC5416的电源方案。 【TI WEBENCH方案设计】下面是利用TI WEBENCH工具生成TMS320VC5416芯片方案的过程: 步骤一开启设计首先点击工具图标左上角的【FPGA/uP】及红色字体【Up Architect】,这里选择处理器电源为:【TI】如下图: 说明:在这个架构工具中,TI将FPGA和uP集成在一块,DSP属于【Up Architect】。 步骤二选择TMS320VC5416芯片开启设计点击上面的【开启设计】后,系统会载入FLASH界面,并出现一个型号选择界面,这里面全是德州仪器公司的产品,从AM335系列、MSP430系列,DSP系列都有,不过只有其公司产品的部分型号,在里面找到一个【TMS320VC5416PGE160】这一项

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值