8位全加器可由2個4位的全加器串聯組成,因此,先由一個半加器構成一個全加器,再由4個1位全加器構成一個4位全加器并封裝成元器件。加法器間的進位可以串行方式實現,即將低位加法器的進位輸出cout與相臨的高位加法器的最低進位輸入信號cin相接最高位的輸出即為兩數之和。最后一個Cout輸出進位,D8顯示。
時序仿真
1、建立波形文件。為此設計建立一個波形測試文件。選擇File項及其New,再選擇右側New窗中的vector Waveform file項,打開波形編輯窗。
2、輸入信號節點。在波形編輯窗的左方雙擊鼠標,在出現的窗口中選擇Node finder,在彈出的窗口中首先點擊List鍵,這時左窗口將列出該項設計所以利用中間的“=》”鍵將需要觀察的信號選到右欄中。
3設定仿真時間寬度。選擇edit項及其End time選項,在End time選擇窗中選擇適當的仿真時間域,本次實驗由于是八位的全加器,為避免延遲太大不利于顯示,可將End Time 設置為50ms,以便有足夠長的觀察時間和便于分析的波形仿真波形圖。
4、波形文件存盤。選擇File項及其Save as選項,按OK鍵即可。存盤窗中波形文件名是默認的(這里是adder.scf所以直接存盤即可。
5、運行仿真器。點擊processing中的Start simulation選項,如圖是仿真運算完成后的時序波形。注意,剛進入如圖所示的窗口時,應該將最下方的滑標拖向最左側,以便可觀察到初始波形。
仿真波形圖:
分組后的仿真圖:
實現步驟
1.首先為此工程建立一個放置與此工程相關的所有文件的文件夾,認為工作庫(Work Library)。本項設計我的文件夾取名為8位全加器。
2. 選File?New,在彈的New對話框中選擇Device Design Files 頁的原理圖文件編輯輸入項Block diagram\Schematic File,畫半加器原理圖。 3. 另存自己的工程,將已設計好的圖文件命名為:h_adder.bdf,并保存在此文件夾內。編譯通過之后,將該半加器封裝入庫待設計1位全加器的時候調用。
4. 利用封裝后的半加器畫1位的全加器,并封裝成元器件。
5. 利用封裝后的1位全加器,將4個1位全加器串行,畫4位的全加器,并封裝成元器件。
6. 將2個4位全加器元器件串行,按照實驗原理設計8位全加器。
7.運行并調試成功。
8. 鎖引腳,
9. 連接USB。
按START運行。
VHDL源程序
4位二進制并行加法器的源程序ADDER4B.VHD --ADDER4B.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER4B IS
PORT(C4: IN STD_LOGIC;
A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CO4: OUT STD_LOGIC); END ENTITY ADDER4B;
ARCHITECTURE ART OF ADDER4B IS
SIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5, B5: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN
A5《=‘0’& A4; B5《=‘0’& B4; S5《=A5+B5+C4;
S4《=S5(3 DOWNTO 0); CO4《=S5(4);
END ARCHITECTURE ART; --ADDER8B.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER8B IS
PORT(C8:IN STD_LOGIC;
A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B8:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CO8:OUT STD_LOGIC); END ENTITY ADDER8B;
ARCHITECTURE ART OF ADDER8B IS COMPONENT ADDER4B IS PORT(C4:IN STD_LOGIC;
A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CO4:OUT STD_LOGIC); END COMPONENT ADDER4B; SIGNAL SC:STD_LOGIC; BEGIN
U1:ADDER4B
PORT MAP(C4=》C8,A4=》A8(3 DOWNTO 0),B4=》B8(3 DOWNTO 0), S4=》S8(3 DOWNTO 0),CO4=》SC); U2:ADDER4B
PORT MAP(C4=》SC,A4=》A8(7 DOWNTO 4),B4=》B8(7 DOWNTO 4), S4=》S8(7 DOWNTO 4),CO4=》CO8); END ARCHITECTURE ART;
在程序調試和仿真時,我們要使用自底向上的方法進行,也就是對于含有多個模塊的設計,我們要先從底層模塊進行調試和仿真,再進行更高層次模塊的調試和仿真,最后進行頂層模塊的調試與仿真。下圖分別使用Quartus II 8.0對ADDER4B和ADDER8B進行時序仿真的結果。
ADDER4B的時序仿真結果
ADDER8B的時序仿真結果
邏輯綜合分析
下面是使用Quartus II 8.0進行邏輯綜合ADDER8B的RTL視圖;對ADDER8B的RTL視圖中ADDER4B進行展開的視圖;使用Quartus II 8.0對ADDER8B進行邏輯綜合后的資源使用情況
ADDER8B綜合后的RTL視圖
ADDER8B綜合后的RTL視圖中將ADDER4B展開后的視圖
評論
查看更多