算數邏輯單元_第1頁
算數邏輯單元_第2頁
算數邏輯單元_第3頁
算數邏輯單元_第4頁
算數邏輯單元_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1、 實驗目的:1、掌握簡單運算器的數據傳送通路2、驗證運算器的組合功能二、實驗原理: 算術邏輯部件的主要功能是對二進制數據進行定點算術運算、邏輯運算和各種移位操作。算術運算包括定點加減乘除運算;邏輯運算主要有邏輯與、邏輯或、邏輯異或和邏輯非操作。ALU通常有兩個數據輸入端A和B,一個數據輸出端Y以及標志位等。74181是一種典型的4位ALU器件。圖是74181的電路圖。 20世紀80年代計算機中的算是邏輯單元有許多是用現成的算術邏輯器件連接起來構成的。如上面提到的74181和Am2901等就是著名的算術邏輯器件。使用這些4位的算術邏輯器件,能夠構成8位、16位等長度的算術邏輯單元。現在由于超

2、大規模器件的廣泛應用,使用這種方法構成算術邏輯單元已經不多見,代之以直接用硬件描述語言設計算術邏輯單元。CPU的算術邏輯單元就是一個簡單的例子。圖 74181的電路圖三、實驗步驟:(1)打開Quartus,參照3.4節,安裝ByteBlaster。(2)將子板上的JTAG端口和PC機的并行口用下載電纜連接。打開試驗臺電源。(3)執行ToolsProgrammer命令,將adder8.sof下載到FPGA中,注意在執行Programmer中,應在program/configure下的方框中打鉤,然后下載。(4) 在試驗臺上通過模式開關選擇FPGA-CPU獨立的調試模式010.要求:1、實驗設計目

3、標設計一個16位算術邏輯單元,滿足以下要求。(1)16位算術邏輯單元能夠進行下列運算:加法、減法、加1、減1、與、或、非和傳送。用3位運算操作碼OP210進行運算,控制方式如表4.1所示:運算操作碼OP210運 算對標志位Z和C的影響000resultßA+B影響標志位Z和C001resultßA+1影響標志位Z和C010resultßA-B影響標志位Z和C011resultßA-1影響標志位Z和C100resultßA and B影響標志位Z101resultßA or B影響標志位Z110resultßnot B影響標志

4、位Z111resultß B不影響標志位Z和C(2)設立兩個標志位寄存器Z和C。當復位信號reset為低電平時,將這兩個標志寄存器清零。當預算結束后,在時鐘CLK的上升沿改變標志寄存器Z和C的值。運算結果改變標志寄存器C、Z的情況下:加法、減法、加1、減1、運算改變Z、C;與、或、非運算改變Z,C保持不變;傳送操作保持Z、C不變。因此在運算結束時,Z、C需要兩個D觸發器保存。(3)為了保存操作數A和B。設計兩個16位寄存器A和B。當寄存器選擇信號sel=0時。如果允許寫信號write=1,則在時鐘clk的上升沿將數據輸入dinput送入A寄存器;當sel=1時,如果允許寫信號writ

5、e=1,則在時鐘clk的上升沿將數據輸入dinput送入B。(4)算術邏輯單元用一個設計實體完成。2、頂層設計實體的引腳要求引腳要求對應關系如下:clk對應實驗臺上的時鐘(單脈沖);reset對應實驗臺上的CPU復位信號CPU_RST;數據輸入dinput對應實驗臺開關SD15SD0;允許寫信號write對應實驗臺開關SA5;OP210對應實驗臺開關SA2SA0;寄存器選擇信號sel對應實驗臺開關SA4;16位運算結果result對應實驗臺上的指示燈A15A0;Z、C標志位對應實驗臺上的Z、C指示燈。4、 實驗現象及分析:(1)實驗臺設置成FPGA-CPU獨立調試模塊;REGSEL=0,CLK

6、SEL=1,FDSEL=0.使用實驗平臺上的單脈沖,即STEP_CLK短路子短接,短路子RUN_CLK斷開;(2)將設計在Quartus II 下輸入,在編譯后下載到TEC-CA上的FPGA中;(3)輸入A這個數:Sel=0(SA4),write=1(SA5),A數(SD15SD0) ,按一下單脈沖按鈕(單脈沖按鈕),使之存入A寄存器;(4)輸入B這個數:Sel=1(SA4),write=1(SA5),B數(SD15SD0),按一下單脈沖按鈕(單脈沖按鈕),使之存入B寄存器;(5)輸入功能碼OP210(SA2SA0),按一下單脈沖按鈕(單脈沖按鈕);(6)觀察16位運算結果result(A15

7、A0)及Z、C指示燈;(7)重復實驗步驟(3)-(6)對以下4組數據進行表4.1的8種運算,把運算結果及標志位填寫在表中:A、對第一組數據進行8種運算,A為0xAAAA,B為0x5555;B、對第一組數據進行8種運算,A為0xFFFF,B為0x0000;C、對第一組數據進行8種運算,A為0x0000,B為0xFFFF;D、對第一組數據進行8種運算,A為0x8950,B為0x9863;表 算術邏輯單元實驗運算數據運算類型操作碼OP運算結果result標志位C標志位Z運算前運算后運算前運算后第1組數據A=0xAAAAB=0x5555resultßA+B0000xFFFF0 0 0 0re

8、sultßA+10010xAAAB0 0 0 0resultßA-B0100x55550 0 0 0resultßA-10110xAAA90 0 0 0resultßA and B1000x00000 00 1resultßA or B1010xFFFF0 00 0resultßnot B1100xAAAA0 00 0resultß B1110x55550 00 0第2組數據A=0xFFFFB=0x0000resultßA+B0000xFFFF0 00 0resultßA+10010x00000 10 1

9、resultßA-B0100xFFFF1 01 0resultßA-10110xFFFE0 00 0resultßA and B1000x00001 11 1resultßA or B1010xFFFF0 00 0resultßnot B1100xFFFF0 01 0resultß B1110x00000 01 0第3組數據A=0x0000B=0xFFFFresultßA+B0000xFFFF0 01 0resultßA+10010x00010 00 0resultßA-B0100x00010 10 0r

10、esultßA-10110xFFFF0 10 0resultßA and B1000x00000 00 1resultßA or B1010xFFFF0 00 0resultßnot B1100x00000 00 1resultß B1110xFFFF1 10 0第4組數據A=0x8950B=0x9863resultßA+B0000x21B31 10 0resultßA+10010x89511 00 0resultßA-B0100xF0ED0 10 0resultßA-10110x894F1 00 0re

11、sultßA and B1000x88400 00 0resultßA or B1010x99731 10 0resultßnot B1100x679C1 10 0resultß B1110x98631 10 0五、實驗過程中遇到問題及解決方法: 設立兩個標志位寄存器Z和C。當復位信號reset為低電平時,將這兩個標志寄存器清零。當預算結束后,在時鐘CLK的上升沿改變標志寄存器Z和C的值。運算結果改變標志寄存器C、Z的情況下:加法、減法、加1、減1、運算改變Z、C;與、或、非運算改變Z,C保持不變;傳送操作保持Z、C不變。六、實驗源碼:(加注釋)-算數邏

12、輯單元libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entity ALU isport(reset,clk :in std_logic;-reset復位信號,當reset為低電平時,兩個標志寄存器清零。clk為時鐘信號,clk為高電平,改變Z,C OP: in std_logic_vector(2 downto 0);-運算操作碼sel: in std_logic;-選擇信號,sel=0,若為寫信號,clk上升則存入A寄存器,若sel=1則存入

13、B寄存器 write:in std_logic;-寫信號 C,Z:out std_logic;-Z,C為標志位Dinput: in std_logic_vector(15 downto 0);-輸入將寫入的數據通過它存入A寄存器或B寄存器 result: out std_logic_vector(15 downto 0)-輸出結果);end ALU;architecturebehav of alu iscomponentreg isport(clr: instd_logic;-寄存器復位信號D:instd_logic_vector(15 downto 0);-寄存器輸入信號clock:inst

14、d_logic;-時鐘信號write:instd_logic;-寫信號sel:instd_logic;-選擇信號Q:outstd_logic_vector(15 downto 0);end component;signalz_tmp :std_logic;signal A,B :std_logic_vector(15 downto 0);signalresult_t: std_logic_vector(16 downto 0);beginA_reg: reg port map-A寄存器(clr=> reset,-對應ALU的復位信號 D=>Dinput,對應ALU的輸入信號 clo

15、ck=>clk,-對應ALU的時鐘信號write=> write,sel=> (not sel),-sel=0則表示選擇A寄存器 Q=> A);B_reg: reg port map-B寄存器(clr=> reset, D=>Dinput,clock=>clk, write=> write,-sel=1則表示選擇B寄存器sel=>sel, Q=> B);alu_proc:process(OP,A,B)begincase OP iswhen "000" =>result_t<= ('0'

16、& A) + ('0' & B);-A+Bwhen "001" =>result_t<= ('0' & A) + '1'-A+1when "010" =>result_t<= ('0' & A) - ('0' & B);-ABwhen "011" =>result_t<= ('0' & A) - '1'-A-1when "100&q

17、uot; =>result_t<= ('0' & A) and ('0' & B);-與when "101" =>result_t<= ('0' & A) or ('0' & B);-或when "110" =>result_t<= not ('0' & B);-非when "111" =>result_t<= ('0' & B);-傳遞end

18、case;end process;result <= result_t(15 downto 0);z_tmp<= (not result_t(15) and (not result_t(14) and(not result_t(13) and (not result_t(12) and(not result_t(11) and (not result_t(10) and(not result_t(9) and (not result_t(8) and(not result_t(7) and (not result_t(6) and(not result_t(5) and (not

19、result_t(4) and(not result_t(3) and (not result_t(2) and(not result_t(1) and (not result_t(0);c_proc: Process(reset,clk,result_t,OP)begin if reset = '0' then-若按下復位信號則寄存器C為0C <= '0'elsifclk'event and clk = '1' then-若clk為上升 if OP(2) = '0' thenC <= result_t(16);end if;end if;end process;z_proc: process(reset,clk,z_tmp,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論