複製鏈接
請複製以下鏈接發送給好友

地址加法器

鎖定
在計算機科學中,每個用於數據存取的基本單位,在進行數字的加法計算時,都被賦予一個獨一的序號,是產生數的和的裝置,即為地址加法器。
中文名
地址加法器
外文名
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