首页 > 编程知识 正文

地址加法器的工作原理,简单加法器代码

时间:2023-05-05 03:37:27 阅读:125032 作者:2740

在计算机科学中,当对数据访问的每个基本单元进行数字相加时,提供唯一的编号并产生数字和的装置,即地址加法器。

中文名称

地址加法器外语名称

地址寻址器

分类

计算机知识和技术

地址加法器65nm工艺中32位PC加法器的设计与应用

编辑

语音

介绍了为数字信号处理器设计的地址生成单元和应用于算术移位部件的加法电路——PC加法器(psum-cout加法器),根据各自的应用增加加法选择电路或加法电路,可以实现所需的功能。 采用全静态CMOS电路以在65nm工艺中降低漏电流的功耗。 结果在0.9V、65unr过程中进行了电路仿真,地址生成单元中加法器和选择电路加在一起的传播时间为345Ps,算术移位部件和输出传播时间为340Ps,饱和位传播时间为28Ps。 [1]

地址加法器PC的加法器结构

所述加法器由P/G生成单元、前缀单元和进位生成单元构成。 为实现带进位输入的加法,对Sklansky结构的最低有效位进行改造:以cin和A[0]、B[0]为一组,生成第一进位输出,加法运算的其馀位数为两位一组,生成一级进位。 [1]

地址加法器电路设计

该加法器的设计采用全静态CMOS电路,具有抗干扰能力强、速度快、功耗低、对器件参数变化不敏感、易于设计等诸多优点。 设计采用了时滞逻辑门。 所谓时滞逻辑门,是指在某个门中,p管和n管的比例不均衡,如果关心电路中某个门的上位速度,则将p管的大小增大到n管的倍数,反之亦然。 这种方法可以明显提高加法器的速度,而且由于电路中的不对称逻辑门,可以减少静态功能,进而减少整体的功耗延迟积。 [1]

地址加法器在地址生成部中的应用

地址生成单元位于高性能处理器的关键路径上,其运算速度直接影响处理器的速度。 进行寻址运算需要加法或减法运算,其运算结果在选择模块中选择寻址的基本地址和线性寻址的寻址结果。 假设找到了控制信号比至少一级的栅极,可以将加法器的相加部分与选择模块集成,减少关键路径的延迟。

由于加法器输出的低13位的定时紧张,高19位的输出定时宽松,所以专门针对低13位的进位输出进行优化,以满足定时要求。 在优化时,只要优化后13位电路的R5、R6、R7级以及最后追加的逆变器即可,大多采用时滞门逻辑。 当优化为电平R7时,Cout必须平衡输出正反信号的负载。 [1]

地址加法器在算术移位手段中的应用

算术移位部件主要负责分支跳跃和复杂的移位运算操作,需要具有单元和比特判决的加法器,通过将加法器的结构与XOR电路结合,再加上单元和比特判决电路,可以得到所需的加法器。

选择XOR门电路实现该加法器和输出的原因是Cout位于加法器的关键路径上,使用XOR门Cout的反向信号减轻Cout的负荷; 在相同延迟、相同负载的前提下,选择电路的功耗大于XOR门电路的功耗。 XOR门的实现和选择输出比较合理,考虑基本的延迟和功耗。 [1]

用地址加法器VHDL设计8086IP核

编辑

语音

介绍了8086的内部结构和工作原理,包括执行单元、总线接口单元、算术逻辑单元、寄存器组和地址加法器。 使用VHDL实现IP核的设计,并使用Modelsim进行仿真,结果表明IP核可以正常工作。 [2]

地址加法器8086的内部结构和工作原理

886是英特尔1978年推出的第一个16位微处理器,有29000个晶体管,速度可以分为5MHz、8MHz和10MHz,包括内部数据总线(在处理器内部传输数据的总线)、外部数据

功能上分开运行886设备欧盟(execution unit )和总线接口单元biu (businterfaceunit )。 执行单元的功能是负责指令的执行,包括1个8个16位通用寄存器(AX、CX、DX、BX、SP、BP、SI、DI )、1个16位临时寄存器、16位寄存器

总线接口单元的功能负责与存储器、I/O端口的数据传输,包括四个16位朴素的胡萝卜(CS、DS、SS、ES )、一个16位指令指针寄存器IP、与一个EU通信的内部寄存器、 8086的指令队列为6字节,在执行指令的同时从存储器中检索指令,获取的指令置于指令队列中。 EU单元每次从指令队列的开头获取指令,在本单元执行指令,从而CPU执行1个指令后即可立即执行下一个指令,无需从存储器获取指令后再执行,因此提高了效率。 8086的内部寄存器都是16位,所以需要额外的部件来根据16位寄存器提供的信息计算20位的物理地址。 地址加法器是用来起到这个作用的。 计算方法是将代码朴素的胡萝卜CS的内容向左移动4位,与IP的内容相加得到最终的物理地址。 [2]

总线接口部件和执行机构部件之间并不同步工作,但两者的工作仍然有管理原则,表现在以下方面:

p>

1) 每当指令队列中有2个空字节时,总线接口部件就会自动把指令取到指令队列中。

2) 当执行部件请求总线接口部件访问总线时,总线接口部件正在将某个指令取到指令队列中去,这时,总线接口部件将首先完成这个取指令的总线周期,然后再去响应执行部件发出的访问总线的请求。

3) 当指令队列已满,而且执行部件对总线又没有总线访问请求,则总线接口部件进入空闲状态。

4) 在执行转移指令,调用指令和返回指令时,指令队列中的原有内容会被制动清除,总线接口部件会接着往指令队列中装入另一个程序段中的指令。

当复位信号来时,CPU内部的部件都初始化,朴素的胡萝卜被设为0XFFFF,其他寄存器都被设为0,指令队列被清空,总线接口部件开始读取指令(指令的地址由朴素的胡萝卜和指令指针通过地址加法器相加给出,为 0XFFFF0),送往指令队列,然后指令执行部件可以不停地从指令队列读取指令,开始解释执行指令,周而复始地进行下去。在整个过程中执行部件和总线接口部件以一种并行方式工作。如果指令执行所需要的数据以及最后的结果都不需要访问I/O部件或存储器,则EU的工作将和BIU的取指令工作并行,这样就可以节省时间开销,提高了工作效率。[2]

地址加法器设计

使用VHDL,采用层次化,模块化的方式来设计整个系统。由讨论的内容知道CPU作为最外层模块(记做MAIN),它包含了ALU,EU,BIU和寄存器组,还有指令队列,地址加法器。EU的实现为ECC(execute control circuit),BIU的实现为IOCC(I/O control circuit),指令队列的实现为FIFO(first in first out)即队列,其中地址加法器包含在IOCC 中。为了验证CPU,设计了TOP模块,RAM,ROM,AL模块,用于测试MAIN模块,相当于用这些模块组建了一个简单的电脑主板。AL模块的作用是 :地址锁存。由于8086采用的是数据和地址复用总线,所以总线上不能同时出现数据和地址信号。当出现数据信号是,地址信号已经消失了,所以在把存储器模块需要的地址和数据信号传给存储器模块时 ,要对地址信号进行锁存 ,同时锁存的还有BHE信号(bus highenable)。BHE用来控制对于字节还是字的读写操作。程序的接口如下:[2]

library ieee;

use ieee.std_logic_1164.all;

entity Al isport(AlAddrIn:in std_logic_vector(19 downto 0);

AlAddrOut:out std_logic_vector(19 downto 0);

AlBhebin:in std_logic;

AlBhebOut:out std_logic;

Alls:in std_logic;

Alle:in std_logic);

end Al;

CPU的作用抽象地说,其实就是数据处理,所以从这个角度来说,ALU是整个CPU的核心,虽然它不是最复杂的部件。ALU完成运算功能,运算包括算数运算和逻辑运算。算数运算包括加法和减法操作。逻辑运算包括AND, OR,NOT,XOR。这些基本上都是二元操作符,所以ALU的接口需要定义两个参与运算的操作数(ALUP1 和 ALUP2),同还要定义进行的是何种操作(ALUOP)以区分不同的操作。8086是16位的CPU,但处于兼容地考虑,同时也实现了8位的指令,所以我们要在实现中定义接口信号ALUBYTE来区分进行的是字节还是字操作。在8086中有带进位的加法操作,所以在接口中要有CARRY信号的输入(即 ALUCI信号)。其他还包含的信号有:ALURES, ALUC, ALUZ等,程序接口如下:[2]

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY Alu ISPORT(AluP1:IN STD_LOGIC_VECTOR(15 DOWNTO 0);

AluP2:IN STD_LOGIC_VECTOR(15 DOWNTO 0);

AluOp:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

AluByte:IN STD_LOGIC;

AluCi:IN STD_LOGIC;

AluA:OUT STD_LOGIC;

AluC:OUT STD_LOGIC;

AluO:OUT STD_LOGIC;

AluP:OUT STD_LOGIC;

AluS:OUT STD_LOGIC;

AluZ:OUT STD_LOGIC;

AluRes:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END Alu;

IOCC模块负责与存储器,I/O端口之间传送数据。在最小模式下,要负责产生相应的读写时序图。在实现读写时序时,一些信号需要在一个时钟周期内不同的时刻改变,所以需要延时。在仿真的时候,可以使用AFTER语句进行延时,但 AFTER语句是不可综合的,这里采用双时钟的方法,低频的时钟信号作为总线周期的时钟,高频的时钟信号用作计数 ,这样在不同的计数时刻就可以改变要改变的信号。

ECC出于简单考虑采用直接组合电路的方式进行译码,采用状态机的方式,根据不同指令功能 ,产生控制信号 ,在时钟的控制下,执行相应的动作,给出一段小的程序进行测试:

MOV AX,1000

MOV CX,2000

INC AX

XCHG AX,CX

ADD AX,CX

HLT[2]

参考资料

1.

现实的板凳 , hdsdbm , 奋斗的路灯.65nm工艺下32位PC加法器的设计与应用:微处理器技术论坛, 2011

2.

wwdbwb , 传统的大碗.基于VHDL实现8086 IP核的设计:电脑知识与技术, 2008 , 4 (31):969-970

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。