地址加法器

地址加法器

在計算機科學中,每個用於數據存取的基本單位,在進行數字的加法計算時,都被賦予一個獨一的序號,是產生數的和的裝置,即為地址加法器。

65nm工藝下32位PC加法器的設計與套用

介紹了針對數位訊號處理器設計的一 種套用於地址生成單元和算術移位部件的加法器電路—PC加法器(Psum一 Cout加法器),它可以根據不同套用添加求和選擇電路或者求和電路,以實現所需功能。在65nm工藝下為減小漏流功耗,採用全靜態CMOS電路。結果表明,在0.9V、65unr工藝下進行電路模擬,地址生成單元中加法器和選擇電路合併後傳播時間為345Ps,算術移位部件中和輸出傳播時間為340Ps,飽和位傳播時間為28Ps。

PC加法器結構

加法器由P/G產生單元、前綴單元和進位產生單元組成。為實現帶進位輸入的加法,對Sklansky結構的最低位進行改造:將cin和A[0]、B[0]作為一組,生成第一位的進位輸出,加數的其餘位則兩位一組生成一級進位。

加法器電路設計

該加法器設計採用全靜態CMOS電路,它具有很多優點,如抗噪聲能力強、速度快、功耗低、對器件參數的變化不敏感、易於設計等。設計採用了偏斜邏輯門。所謂偏斜邏輯門就是在某個門中,把P管和n管的比例設的不均衡,如果關心電路中某個門的上位速度就把P管的尺寸加大成n管的倍數,反之亦成立。這種做法可以明顯提高加法器的速度,而且由於電路中的不對稱邏輯門,可以減少靜態功能,進而減小整體的功耗延時積。

加法器在地址產生部件中的套用

地址產生單元處於高性能處理器的關鍵路徑上,其運算速度直接影響到處理器的速度。進行地址運算時,需進行加或減運算,其運算結果要通過選擇模組對定址的基地址和線性定址的地址結果進行選擇。在控制信號比找到至少一級門然時的前提下,可以將加法器的求和部分與選擇模組合併,從而減少關鍵路徑的延時。

由於加法器輸出的低13位的時序緊張,而高19位的輸出時序較松,則針對低13位的進位輸出做專門最佳化,使之達到時序要求。在最佳化時,只需對低13位電路的R5、R6、R7級以及最後添加的反相器進行最佳化,多採用偏斜門邏輯。在對R7級最佳化時,要均衡Cout輸出正反信號的負載。

加法器在算術移位部件中的套用

算術移位部件主要負責分支跳轉及複雜移位運算操作,其需要一款帶胞和位判斷的加法器,結合加法器結構和XOR電路,再加之胞和位判斷電路,可以得到所需加法器。

選擇XOR門電路實現此加法器和輸出的原因如下:Cout處於加法器的關鍵路徑,用XOR門Cout的反信號,從而減少Cout的負載;在具有相同延時、相同負載的前提下,選擇電路的功耗大於XOR門電路的功耗。基本延時和功耗的考慮,選擇XOR門實現和輸出更為合理。

VHDL實現8086IP核的設計

介紹了8086的內部結構和工作原理,其中包括執行單元、匯流排接口單元、算術邏輯單元、暫存器組和地址加法器。使用VHDL實現了IP核的設計,並使用Modelsim進行了仿真,仿真結果表明IP核可以正常工作。

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的內容相加得到最終的物理地址。

匯流排接口部件和執行部件之間不是同步工作的,但兩者的動作仍然是有管理原則的,體現於以下幾個方面:

1) 每當指令佇列中有2個空位元組時,匯流排接口部件就會自動把指令取到指令佇列中。

2) 當執行部件請求匯流排接口部件訪問匯流排時,匯流排接口部件正在將某個指令取到指令佇列中去,這時,匯流排接口部件將首先完成這個取指令的匯流排周期,然後再去回響執行部件發出的訪問匯流排的請求。

3) 當指令佇列已滿,而且執行部件對匯流排又沒有匯流排訪問請求,則匯流排接口部件進入空閒狀態。

4) 在執行轉移指令,調用指令和返回指令時,指令佇列中的原有內容會被制動清除,匯流排接口部件會接著往指令佇列中裝入另一個程式段中的指令。

當復位信號來時,CPU內部的部件都初始化,段暫存器被設為0XFFFF,其他暫存器都被設為0,指令佇列被清空,匯流排接口部件開始讀取指令(指令的地址由段暫存器和指令指針通過地址加法器相加給出,為 0XFFFF0),送往指令佇列,然後指令執行部件可以不停地從指令佇列讀取指令,開始解釋執行指令,周而復始地進行下去。在整個過程中執行部件和匯流排接口部件以一種並行方式工作。如果指令執行所需要的數據以及最後的結果都不需要訪問I/O部件或存儲器,則EU的工作將和BIU的取指令工作並行,這樣就可以節省時間開銷,提高了工作效率。

設計

使用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用來控制對於位元組還是字的讀寫操作。程式的接口如下:

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等,程式接口如下:

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

相關詞條

熱門詞條

聯絡我們