CPU的作用抽象地说,其实就是数据处理,所以从这个角度来说,ALU是整个CPU的核心,虽然它不是最复杂的部件。ALU完成运算功能,运算包括算数运算和逻辑运算。算数运算包括加法和减法操作。逻辑运算包括AND, OR,NOT,XOR。这些基本上都是二元操作符,所以ALU的接口需要定义两个参与运算的操作数(ALUP1 和 ALUP2),同还要定义进行的是何种操作(ALUOP)以区分不同的操作。8086是16位的CPU,但处于兼容地考虑,同时也实现了8位的指令,所以我们要在实现中定义接口信号ALUBYTE来区分进行的是字节还是字操作。在8086中有带进位的加法操作,所以在接口中要有CARRY信号的输入(即 ALUCI信号)。其他还包含的信号有:ALURES, ALUC, ALUZ等,程序接口如下:
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
唐茜茜 , 刘衡竹 , 郭海勇
.65nm工艺下32位PC加法器的设计与应用
:微处理器技术论坛
, 2011
吴俊达 , 吴秀龙
.基于VHDL实现8086 IP核的设计
:电脑知识与技术
, 2008 , 4 (31)
:969-970
词条标签:
科学百科信息科学分类