1.Giới thiệu
--Sơ đồ khối tổng quát của khối ALU cần thiết kế (hình dưới):
- q2 ngõ vào Bus A, Bus B 32 bit.
- q2 bit ALU Control dùng để xác định phép toán cần thực hiện.
- q1 ngõ ra Output 32 bit.
-- Ngoài ra, còn có các bit cờ.
2. Thiết kế
- Hướng thiết kế
+ Hai đầu vào A,B 32 bit ,đầu ra cũng là 32 bit
- Vậy chúng ta phải chia ra thành 32 khối nhỏ ,mỗi khối xữ lí 2 bit tín hiệu vào (lấy từ A,B) để đưa 1 bit tín hiệu ngõ ra.
2.1.1 Bộ cộng 1 bit:
- Có 3 bit đầu vào: A,B,Cin.
- Đầu ra có 2bit: SUM , Cout.
- SUM = A+B+ Cin
- Cout = AB + Cin(A + B)
- Với Cin là bit nhớ phép cộng trước
=> Có thể xây dựng bộ cộng 8 bit từ 8 bộ cộng 1 bit.
==> Từ đó, xây dựng được bộ cộng 32 bit từ 4 bộ cộng 8 bit.
2.2 Thiết kế Bộ trừ 32 bit:
´Xây dựng bộ trừ 32 bit từ bộ cộng 32 bit.
- Phép A-B bằng cách lấy bù 2 của B là(–B) và cộng với A . Như vậy ta có thể thiết kế bộ trừ từ bộ cộng đã có sẵn:
- Dùng một mạch đảo để lấy bù 1 của B.
- Dùng thêm một mạch mux với control bit lớn nhất của ALU Control để lựa chọn B hay B’ nạp vào mạch adder.
- Muốn A cộng với bù 2 của B, ta lấy A cộng bù 1 của B rồi cộng thêm 1 ( A+B’+1), để làm điều này, đường Cin được chọn bằng 1 thay vì bằng 0. Như vậy mạch adder sẽ cộng A với bù 1 của B, rồi cộng thêm 1, tương ứng A-B. Như vậy:
+ Cin ở đây phải là 1, ta lấy bit cao nhất của bộ ALU Control.
+ Để thực thi ADD, dùng ALU Control 00 và Cin = 0.
+ Để thực thi SUB, dùng ALU Control 10 và Cin = 1.
2.3 Thiết kế bộ NOR
- Khối ALU phía trên có thể thực hiện phép AB’. Mà A NOR B = A’B’.
- Vậy ta cần thêm vào mạch đảo giá trị A.
- Để thực thi phép NOR, chọn Op code là 00, xác nhận Ainvert và Binvert. Những hoạt động còn lại vẫn như trên, với Ainvert không được xác nhận.
2.3 Thiết kế bộ XOR 32bit
2.4 Thiết kế Bộ SLT 32 bit:
- Cho kết quả là 1 nếu A < B. Ta cần gán giá trị của bit thấp nhất LSB của kết quả bằng bit dấu của phép trừ, và gán các bit còn lại giá trị 0.
2.5 Xác định các cờ:
2.5.1 Cờ ZERO
- Được set lên khi kết quả bằng 0.
- Để kiểm tra cờ ZERO, ta NOR tất cả các bit từ 0 đến 31 của kết quả.
2.5.2 Cờ Negative
- NEGATIVE: được set lên khi kết quả có giá trị âm.
- Gán cờ Negative bằng bit thứ 31 (MSB) của kết quả.
+ MSB = 1: set Negative
+ MSB = 0: clear Negative
2.5.3 Cờ CARRYOUT
- Chỉ xét đối với phép ADD và SUB.
- Cờ CARRYOUT chính là Cout của hai khối ADDER 32 bit đã thiết kế ở trên.
2.5.4 Cờ OVERFLOW
- Để xác định Overflow ta chỉ cần quan tâm đến cờ nhớ vào Cin và cờ nhớ ra Cout ở bit thứ 31 (MSB).
- Khi đó cờ Overflow là phép XOR giữa Cin và Cout.
2.6 Xác định ngõ ra:
- Sau khi tính toán, ta có được kết quả của 4 phép toán ADD, XOR, SUB và SLT. Căn cứ vào 2 bit điều khiển ALU Control để xác định kết quả nào được đưa ra Output port theo bảng.
THIẾT KẾ BỘ ALU TRÊN LOGISIM
Link down gg driver
minion_big
Thiết kế bộ alu
--Sơ đồ khối tổng quát của khối ALU cần thiết kế (hình dưới):
- q2 ngõ vào Bus A, Bus B 32 bit.
- q2 bit ALU Control dùng để xác định phép toán cần thực hiện.
- q1 ngõ ra Output 32 bit.
-- Ngoài ra, còn có các bit cờ.
2. Thiết kế
- Hướng thiết kế
+ Hai đầu vào A,B 32 bit ,đầu ra cũng là 32 bit
- Vậy chúng ta phải chia ra thành 32 khối nhỏ ,mỗi khối xữ lí 2 bit tín hiệu vào (lấy từ A,B) để đưa 1 bit tín hiệu ngõ ra.
2.1.1 Bộ cộng 1 bit:
- Có 3 bit đầu vào: A,B,Cin.
- Đầu ra có 2bit: SUM , Cout.
- SUM = A+B+ Cin
- Cout = AB + Cin(A + B)
- Với Cin là bit nhớ phép cộng trước
=> Có thể xây dựng bộ cộng 8 bit từ 8 bộ cộng 1 bit.
==> Từ đó, xây dựng được bộ cộng 32 bit từ 4 bộ cộng 8 bit.
2.2 Thiết kế Bộ trừ 32 bit:
´Xây dựng bộ trừ 32 bit từ bộ cộng 32 bit.
- Phép A-B bằng cách lấy bù 2 của B là(–B) và cộng với A . Như vậy ta có thể thiết kế bộ trừ từ bộ cộng đã có sẵn:
- Dùng một mạch đảo để lấy bù 1 của B.
- Dùng thêm một mạch mux với control bit lớn nhất của ALU Control để lựa chọn B hay B’ nạp vào mạch adder.
- Muốn A cộng với bù 2 của B, ta lấy A cộng bù 1 của B rồi cộng thêm 1 ( A+B’+1), để làm điều này, đường Cin được chọn bằng 1 thay vì bằng 0. Như vậy mạch adder sẽ cộng A với bù 1 của B, rồi cộng thêm 1, tương ứng A-B. Như vậy:
+ Cin ở đây phải là 1, ta lấy bit cao nhất của bộ ALU Control.
+ Để thực thi ADD, dùng ALU Control 00 và Cin = 0.
+ Để thực thi SUB, dùng ALU Control 10 và Cin = 1.
2.3 Thiết kế bộ NOR
- Khối ALU phía trên có thể thực hiện phép AB’. Mà A NOR B = A’B’.
- Vậy ta cần thêm vào mạch đảo giá trị A.
- Để thực thi phép NOR, chọn Op code là 00, xác nhận Ainvert và Binvert. Những hoạt động còn lại vẫn như trên, với Ainvert không được xác nhận.
2.3 Thiết kế bộ XOR 32bit
2.4 Thiết kế Bộ SLT 32 bit:
- Cho kết quả là 1 nếu A < B. Ta cần gán giá trị của bit thấp nhất LSB của kết quả bằng bit dấu của phép trừ, và gán các bit còn lại giá trị 0.
2.5 Xác định các cờ:
2.5.1 Cờ ZERO
- Được set lên khi kết quả bằng 0.
- Để kiểm tra cờ ZERO, ta NOR tất cả các bit từ 0 đến 31 của kết quả.
2.5.2 Cờ Negative
- NEGATIVE: được set lên khi kết quả có giá trị âm.
- Gán cờ Negative bằng bit thứ 31 (MSB) của kết quả.
+ MSB = 1: set Negative
+ MSB = 0: clear Negative
2.5.3 Cờ CARRYOUT
- Chỉ xét đối với phép ADD và SUB.
- Cờ CARRYOUT chính là Cout của hai khối ADDER 32 bit đã thiết kế ở trên.
2.5.4 Cờ OVERFLOW
- Để xác định Overflow ta chỉ cần quan tâm đến cờ nhớ vào Cin và cờ nhớ ra Cout ở bit thứ 31 (MSB).
- Khi đó cờ Overflow là phép XOR giữa Cin và Cout.
2.6 Xác định ngõ ra:
- Sau khi tính toán, ta có được kết quả của 4 phép toán ADD, XOR, SUB và SLT. Căn cứ vào 2 bit điều khiển ALU Control để xác định kết quả nào được đưa ra Output port theo bảng.
THIẾT KẾ BỘ ALU TRÊN LOGISIM
Link down gg driver
minion_big
Thiết kế bộ alu