Presentation is loading. Please wait.

Presentation is loading. Please wait.

使用VHDL設計—4位元ALU電路 通訊一甲 B09622048 楊穎穆.

Similar presentations


Presentation on theme: "使用VHDL設計—4位元ALU電路 通訊一甲 B09622048 楊穎穆."— Presentation transcript:

1 使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆

2 目錄 目的 設計原理 程式 實驗結果 參考資料

3 目的 1. 使用VHDL設計一個4位元ALU電路 此電路有A與B輸入各4位元 前一進位Ci 輸出有和S與進位Cy 一些功能選擇線
功能有: Cy_S=A+B+Ci, Cy_S=A-B-Ci, Cy= S=A and B, Cy=0 S=A or B, Cy=0 S=A xor B, S_Cy=Ci_A右移1位元, Cy_S= A_Ci左移1位元 2. 將電路加以模擬 3. 將程式燒錄到IC執行 4. 將以上原理撰寫成PPT格式報告交出 5. 將以上原理與操作過程講述一便並錄製成影音檔交出

4 設計原理 主要是使用4位元算術邏輯單元來設計一個具有多功能的電路。 A B r S 4位元ALU

5 設計原理 主要包含的功能: S=A and B S=A or B S=A xor B A B S 0 0 0 1 1 0 1 1 1 A B
0 0 0 1 1 0 1 1 1 A B S 0 0 0 1 1 0 1 1 1 A B S 0 0 0 1 1 0 1 1 1 S=A and B S=A or B S=A xor B

6 設計原理 4位元減法器 4位元加法器 1001 1001 +) 1000 -) 0111 1 0001 +) 1 0010 0101
-) 1001 +) +) 0010 4位元減法器 0101 +) 4位元加法器

7 設計原理 1 1 1 1 1 1 位移器(右移) 位移器(左移)

8 程式 library ieee; use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ALU is 電路內部要做的電路名稱 port( 接腳 a,b :in std_logic_vector(3 downto 0); --輸入腳 a,b,內部各有四各位元數 ci :in std_logic; 輸入腳 ci ,代表前一進位 func :in std_logic_vector(2 downto 0); --輸入腳 func,內部有三個位元數 cy :out std_logic; 輸出腳 cy,代表進位或補數 r :out std_logic_vector(3 downto 0) --輸出腳 r,內部有四個位元數 ); end;

9 architecture Behav of ALU is --電路內部結構
signal c :std_logic_vector(4 downto 0); 表示 c 內部有五個位元數 begin process(a,b,ci,func,c) 處理影響內部的輸入訊號 a,b,ci,func,c case func is when"000"=> r <="0000" ; cy<='0'; --當func 輸入為"000",則"0000"搬入到 r,'0'搬入cy when"001"=> r <= a and b;cy<='0'; --當func 輸入為"001",則輸入a and b的值會搬入 r,'0'搬入cy when"010"=> r <= a or b; cy<='0'; --當func 輸入為"010",則輸入a or b的值會搬入 r,'0'搬入cy when"011"=> r <= a xor b; cy<='0'; --當func 輸入為"011",則輸入a xor b的值會搬入 r,'0'搬入cy when"100"=> r <= a(2 downto 0)&'0';cy<=a(3); --當func 輸入為"100",則將輸入端的值 a前三個位元後串上'0',並搬入到r, 且a(3)會搬入cy,左移一位元 when"101"=> r <= '0'& a(3 downto 1);cy<=a(0); --當func 輸入為"101",則將輸入端的值 a後三個位元前串上'0',並搬入到r,且a(0)會搬入cy,右移一位元 when"110"=> c(4 downto 0)<=('0'& a)+('0'& b)+("0000"& ci); r<=c(3 downto 0);cy<=c(4); --當func 輸入為"110",則將a,b輸入值前各串一個'0',ci前串上"0000",相加的值搬入到 c when others => c(4 downto 0)<=('0'& a)-('0'& b)-("0000"& ci); --當func 輸入為"111",則將a,b輸入值前各串一個'0',ci前串上"0000",相減的值搬入到 c end case; 結束case程式 end process; 結束process程式 end Behav; 程式結束

10 實驗結果(1) 當我func輸入為“001” a輸入為“1101”,b輸入為“0111”時,a and b得到的輸出直就會為“0101” 。

11 實驗結果(2) 當我func輸入為“010” a輸入為“1001”,b輸入為“0010”時,a or b得到的輸出直就會為“1011” 。

12 實驗結果(3) 當我func輸入為“011” a輸入為“0011”,b輸入為“0101”時,a xor b得到的輸出直就會為“0110” 。

13 實驗結果(4) 當我func輸入為“100” a輸入為“1101”時,輸出會為”1010”,a(3)會搬入到cy,顯示為‘1’ ,左移一位。

14 實驗結果(5) 當我func輸入為“101” a輸入為“1001”時,輸出會為”0100”,a(3)會搬入到cy,顯示為‘1’ ,右移一位。

15 實驗結果(6) 當我func輸入為“110” a輸入為“0011”,b輸入為“0101”,兩者相加得到的值為“1000”。
當我func輸入為“110” a輸入為“0011”,b輸入為“0101”, ci輸入為‘1’時,三者相加得到的值為“1001”。

16 實驗結果(7) 當我func輸入為“111” a輸入為“1101”,b輸入為“0011”,兩者相減得到的值為“1010”。
當我func輸入為“110” a輸入為“1101”,b輸入為“0011”, ci輸入為‘1’時,三者相減得到的值為“1001”。

17 參考資料 主要的資料內容是參考王志湖老師上課所教授的內容及“數位邏輯”這本書。

18 END


Download ppt "使用VHDL設計—4位元ALU電路 通訊一甲 B09622048 楊穎穆."

Similar presentations


Ads by Google