在计算机科学中,每个用于数据存取的基本单位,在进行数字的加法计算时,都被赋予一个独一的序号,是产生数的和的装置,即为地址加法器。

中文名

地址加法器外文名

Address adder

分    类

电脑知识与技术

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

编辑

语音

介绍了针对数字信号处理器设计的一 种应用于地址生成单元和算术移位部件的加法器电路—PC加法器(Psum一 Cout加法器),它可以根据不同应用添加求和选择电路或者求和电路,以实现所需功能。在65nm工艺下为减小漏流功耗,采用全静态CMOS电路。结果表明,在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内部结构和工作原理

8086是英特尔于1978年推出了首枚16位微处理器,有29000只晶体管,速度可分为5MHz、8MHz、10MHz,内部数据总线(处理器内部传输数据的总线)、外部数据总线(处理器外部传输数据的总线)均为16 位,地址总线为20 位,可寻址1MB内存,为双列直插式封装,有40根引脚,电源为5V。

8086从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit)。执行单元的功能就是负责指令的执行,由8个16位通用寄存器 (AX,CX,DX,BX,SP,BP,SI,DI),1个16位标志寄存器(FLAGS),1个16位暂存寄存器 ,1个16位算术逻辑单元ALU及EU控制电路组成。

总线接口单元的功能是负责与存储器,I/O端口传送数据, 由4个16位段寄存器 (CS,DS,SS,ES),1个16位的指令指针寄存器IP,1个与EU通信的内部暂存器,1个指令队列,1个计算20位物理地址的加法器及总线控制电路构成。8086 的指令队列为6个字节,会在执行指令的同时,从内存中取指令,取来的指令就放在指令队列中。EU单元每次都是从指令队列的前部取指令,然后在本单元中执行指令,这样CPU执行完一条指令就可以立即执行下一条指令,不需要从内存取指令,然后再执行,从而提高效率。8086的内部寄存器都是16位的,所以需要一个附加的部件来根据16位寄存器提供的信息来计算出20位的物理地址,地址加法器就是用来完成这个作用的。计算方法为:将代码段寄存器CS的内容左移4位,然后再与IP的内容相加得到最终的物理地址。[2]

总线接口部件和执行部件之间不是同步工作的,但两者的动作仍然是有管理原则的,体现于以下几个方面:

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.

唐茜茜 , 刘衡竹 , 郭海勇.65nm工艺下32位PC加法器的设计与应用:微处理器技术论坛, 2011

2.

吴俊达 , 吴秀龙.基于VHDL实现8086 IP核的设计:电脑知识与技术, 2008 , 4 (31):969-970

微型计算机的地址加法器,地址加法器相关推荐

  1. 【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )

    文章目录 一.数组相关地址 1.数组首元素地址 2.数组地址 二.代码示例 一.数组相关地址 数组首元素地址 与 数组地址 值相等 ; int array[10]; 其中 array + 1 的值是 ...

  2. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★

    文章目录 前言 一.查找子弹数据临时内存地址 二.查找子弹数据的静态地址 1.调试内存地址 05A59544 获取基址 05A59478 2.通过搜索基址 05A59478 获取内存地址 0E1DC1 ...

  3. 【Windows 逆向】内存地址分析 ( 动态地址 | 静态地址 | 偏移量 )

    文章目录 一.动态地址 二.静态地址 三.偏移量 一.动态地址 在 [Windows 逆向]使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内 ...

  4. 【计算机网络】网络层 : 总结 ( 功能 | 数据交换 | IP 数据报 | IPv4 地址 | IPv6 地址 | 路由选择协议 | 路由算法 )★★★

    文章目录 一.网络层功能 二.数据交换方式 ★ 三.IP 数据报 ★ 四. IPv4 地址 ★★ 1 . IP 地址 发展 : 2 . 分类 IP 地址 3 . NAT 转换 4 . 子网划分 5 . ...

  5. 【计算机网络】网络层 : 移动 IP 技术 ( 移动节点 | 本地代理 | 外部代理 | 永久地址 | 转交地址 | 移动 IP 通信过程 )

    文章目录 一.移动 IP 技术 简介 二.移动 IP 通信 一.移动 IP 技术 简介 移动 IP 技术 简介 : ① "移动 IP 技术" 概念 : 移动节点 以 固定的网络 I ...

  6. 【计算机网络】网络层 : IPv4 地址 ( IP 地址分类 | 特殊 IP 地址 | 私有 IP 地址 | A 类、B 类、C 类 IP 地址网络号主机号数量 )★

    文章目录 一.IP 地址 发展 二.分类 IP 地址 三.特殊 IP 地址 四.私有 IP 地址 五.分类 IP 地址 网络号 主机数 详情 一.IP 地址 发展 IP 地址 发展 : 第一阶段 : ...

  7. 博客地址 RSS地址

    博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster h ...

  8. Centos/Linux下如何查看网关地址/Gateway地址

    Centos/Linux下如何查看网关地址/Gateway地址? Linux下查看网关的命令还是很多的,不过如果IP是DHCP获取,那么有些命令是不适用的,当然也有通用的查询网关命令. 1.ifcon ...

  9. c语言中打印ipv6地址,IPv6地址介绍

    1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是1 ...

  10. Spring boot 获取本机的IP地址mac地址以及电脑名称!

    Spring boot 获取本机的IP地址mac地址以及电脑名称! package com.example.demo;import java.net.InetAddress;import java.n ...

最新文章

  1. OpenFeign服务接口调用
  2. android 之图文混排+GridView
  3. 【Git】git的基本使用
  4. Java之路:this关键字的用法
  5. Magento模型集合addFieldToFilter常用过滤条件
  6. sql语句的备份(导入、导出)
  7. 前端html面试题及答案2019,前端面试题及答案2019-20210415034948.docx-原创力文档
  8. 毕业设计管理系统(JAVA毕业设计)
  9. 离散域下的泊松方程求解(python实现)
  10. 差分编码 Differential Encoding
  11. 图片验证码的实现以及校验验证码
  12. 被低估的EIP-3074,以太坊用户的大利好
  13. i5 8250u java_i5 8250U整机综合性能_笔记本评测-中关村在线
  14. 一键安装微信已完成,编号10,欢迎品尝
  15. 【iOS】越狱入门梳理
  16. android上使用poi操作excel
  17. 北京联通KD-YUN-811E改桥接
  18. 在webView中使用JAVAScript定位
  19. 爬虫01-爬取约会吧图片
  20. sizebox模型下载_【gts游戏】sizebox的一些功能介绍以及使用教程

热门文章

  1. 小孔子内容管理系统V2.0正式开源发布
  2. 约瑟夫环(简单理解版)
  3. 路由器2.4G和5G有什么区别
  4. LaTex 箭头上添加文字
  5. omnet++ 中tictoc10-12学习笔记
  6. mybatis mysql begin end_mybatis批量操作
  7. Abp(.NetCore)开发与发布过程3-部署Ubuntu站点
  8. 不使用设备管理器卸载外设驱动的方法(转)
  9. selenium.common.exceptions.WebDriverException: Message: 'geckodriver' execut
  10. 计算机的硬盘容量可以调,怎么查看电脑硬盘容量_怎么查看电脑内存大小