Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 06: Đơn vị số học logic (ALU) của MIPS
Nhắc lại: VHDL
Hỗ trợ thiết kế, minh chứng bằng tài liệu, mô
phỏng & kiểm tra và tổng hợp phần cứng.
Cho phép thiết kế được tích hợp ở các mức hành
vi và cấu trúc.
Cấu trúc cơ bản
Mô tả entity-architecture của thiết kế.
Mô hình thực thi dựa trên thời gian (mô phỏng sự
kiện rời rạc)
Hỗ trợ thiết kế, minh chứng bằng tài liệu, mô
phỏng & kiểm tra và tổng hợp phần cứng.
Cho phép thiết kế được tích hợp ở các mức hành
vi và cấu trúc.
Cấu trúc cơ bản
Mô tả entity-architecture của thiết kế.
Mô hình thực thi dựa trên thời gian (mô phỏng sự
kiện rời rạc)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 06: Đơn vị số học logic (ALU) của MIPS", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_vi_xu_ly_nang_cao_phan_1_thiet_ke_cpu_risc_bai_06.pdf
- Lec6.ppt
Nội dung text: Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 06: Đơn vị số học logic (ALU) của MIPS
- Bài giảng “Vi xử lý nâng cao” Phần 1: Thiết kế CPU RISC Bài 06: Đơn vị số học logic (ALU) của MIPS 1
- Nhắc lại : Tính chất của Entity-Architecture Entity định nghĩa các đặc trưng bên ngoài. Ports: các kênh truyền thông. - tín hiệu đặt theo tên các ngõ vào, ngõ ra , clock, điều khiển. Generic parameters: định nghĩa loại thành phần. - các đặc tính định thời , kích thước (fan-in), fan-out. Architecture định nghĩa hành vi hoặc cấu trúc bên trong của mạch. Khai báo các tín hiệu bên trong (tín hiệu nội). Mô tả hành vi - Tập các phát biểu gán tín hiệu đồng thời (CSA) ( cho bởi <= ); cũng có thể mô hình hành vi tạm thời cùng với các chú thích trì hoãn ( delay ) - Một hoặc nhiều process chứa các CSA và các phát biểu gán biến (tuần tự) (cho bởi := ) Mô tả cấu trúc - Liên kết nối các thành phần ; những mô hình hành vi cơ bản của từng thành phần phải được chỉ rõ. 3
- Biểu diễn VHDL của ALU entity ALU is port( A, B : in std_logic_vector ( 31 downto 0); m: in std_logic_vector ( 3 downto 0); result : out std_logic_vector ( 31 downto 0); zero : out std_logic; ovf : out std_logic) end ALU ; architecture process_behavior of ALU is . . . begin ALU : process( A, B, m) begin . . . result := A + B; . . . end process ALU ; end process_behavior; 5
- Các biểu diễn số của MIPS Các số có dấu 32-bit (bù-2): 0000 0000 0000 0000 0000 0000 0000 0000 two = 0 ten 0000 0000 0000 0000 0000 0000 0000 0001 two = + 1 ten 0000 0000 0000 0000 0000 0000 0000 0010 two = + 2 ten maxint 0111 1111 1111 1111 1111 1111 1111 1110 two = + 2,147,483,646 ten 0111 1111 1111 1111 1111 1111 1111 1111 two = + 2,147,483,647 ten 1000 0000 0000 0000 0000 0000 0000 0000 two = – 2,147,483,648 ten 1000 0000 0000 0000 0000 0000 0000 0001 two = – 2,147,483,647 ten 1000 0000 0000 0000 0000 0000 0000 0010 two = – 2,147,483,646 ten minint 1111 1111 1111 1111 1111 1111 1111 1101 two = – 3ten 1111 1111 1111 1111 1111 1111 1111 1110 two = – 2ten 1111 1111 1111 1111 1111 1111 1111 1111 two = – 1ten Nếu chuỗi bit biểu diễn các địa chỉ thì sao ? cũng cần các phép toán chỉ xử lý số nguyên dương (không dấu). 7
- Thiết kế ALU của MIPS zero ovf Phải hỗ trợ các phép toán 1 số học-logic của ISA. 1 A add, addi, addiu, addu 32 sub, subu ALU result 32 mult, multu, div, divu B sqrt 32 4 and, andi, nor, or, ori, xor, xori m (operation) beq, bne, slt, slti, sltiu, sltu Cùng với việc xử lý đặc biệt đối với Mở rộng dấu – addi, addiu, slti, sltiu Mở rộng zero – andi, ori, xori Phát hiện tràn – add, addi, sub 9
- Thủ thuật thiết kế : chia và chinh phục Chia vấn đề thành nhiều vấn đề đơn giản hơn, giải chúng và gắn lời giải với nhau. Thí dụ: giả định những trực tiếp (immediate) đã được chăm sóc trước đó, ALU lúc này giảm còn 10 phép toán, 0 add có thể mã hóa bằng 4 bit. 1 addu 2 sub 3 subu 4 and 5 or 6 xor 7 nor a slt b sltu 11
- Xây dựng mạch cộng nhị phân 1-bit carry_in AB carry_in carry_out S 0 0 0 0 0 Mạch 0 0 1 0 1 A cộng đầy đủ S 0 1 0 0 1 B 1-bit 0 1 1 1 0 (FA) 1 0 0 0 1 carry_out 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 S = A xor B xor carry_in carry_out = A&B | A&carry_in | B&carry_in hàm đa số (majority function ) Cách sử dụng mạch này để xây dựng mạch cộng 32- bit ? Cách sửa đổi để dễ dàng xây dựng mạch cộng/trừ? 13
- Mạch cộng/trừ gợn số nhớ 32-bit add/sub c =carry_in Nhớ rằng lấy bù-2 0 A 1-bit chỉ đơn thuần là 0 FA S0 B0 lấy bù tất cả bit c1 control A1 1-bit (0=add,1=sub) B if control = 0 FA S1 0 B B0 !B 0 if control = 1 1 c2 A2 1-bit FA S2 và cộng 1 vào bit có B2 c trọng số nhỏ nhất 3 A 0111 → 0111 . . . B - 0110 → + 1001 c31 0001 1 A31 1-bit S 1 0001 FA 31 B31 c32 =carry_out 15
- Phát hiện tràn và những hệ quả Tràn: Kết quả quá lớn để biểu diễn với số lượng bit được cấp phát. Khi cộng các toán hạng có dấu khác nhau , tràn không thể xảy ra ! Tràn xảy ra khi: việc cộng hai số dương tạo ra kết quả âm, hoặc , việc cộng hai số âm cho kết quả dương, hoặc , số dương trừ số âm cho ra kết quả âm, hoặc, số âm trừ số dương cho ra kết quả dương. Khi tràn, một ngoại lệ (ngắt) xảy ra. Điều khiển nhảy đến địa chỉ định trước cho ngoại lệ. Địa chỉ ngắt (địa chỉ của lệnh gây ra tràn) được lưu giữ để có thể tiếp tục được. Không phải ta luôn muốn phát hiện (ngắt) tràn. 17
- Thực hiện tối thiểu mạch cộng đầy đủ Thư viện cổng : cổng đảo , nand 2-ngõ vào , OAI. architecture concurrent_behavior of full_adder is signal t1, t2, t3, t4, t5 : std_logic; begin cout sẵn sàng trong 4ns t1 <= not A after 1 ns ; sum sẵn sàng trong 8 ns t2 <= not cin after 1 ns ; t4 <= not ((A or cin) and B) after 2 ns ; t3 <= not ((t1 or t2) and (A or cin)) after 2 ns ; t5 <= t3 nand B after 2 ns; S <= not ((B or t3) and t5) after 2 ns ; cout <= not (t1 or t2) and t4) after 2 ns ; end concurrent_behavior ; Có thể tạo ra sơ đồ mạch tương đương ? Có thể xác định trì hoãn xấu nhất (đường dẫn định thời xấu nhất ngang qua mạch)? 19
- Cell ALU đơn giản có hỗ trợ phép toán logic add/subt carry_in op A result 1-bit FA B add/subt carry_out 21
- Mã điều khiển của cell ALU khác s2 s1 s0 c_in Kết quả Công dụng 0 0 0 0 A truyền A 0 0 0 1 A + 1 giảm A 0 0 1 0 A + B cộng 0 0 1 1 A + B + 1 cộng có số nhớ 0 1 0 0 A –B –1 trừ có số mượn 0 1 0 1 A – B trừ 0 1 1 0 A – 1 giảm A 0 1 1 1 A truyền A 1 0 0 x A or B or 1 0 1 x A xor B xor 1 1 0 x A and B and 1 1 1 x !A lấy bù A 23
- Sửa đổi ALU cho slt A0 Trước tiên thực hiện result phép trừ. 0 + B0 Cho result bằng 1 less nếu phép trừ dẫn A đến kết quả âm. 1 result Cho result bằng 0 1 + nếu phép trừ dẫn B1 đến kết quả dương. 0 less Nối bit trọng số . . . lớn nhất của tổng A31 (bit dấu) với ngõ vào less thấp result 31 nhất. + B31 0 less set 25
- Phát hiện tràn Tràn xảy ra khi kết quả quá lớn để biểu diễn bằng số lượng bit được cấp phát: cộng 2 số dương cho kết quả số âm, hoặc cộng 2 số âm cho kết quả số dương, hoặc trừ số dương cho số âm có kết quả âm, hoặc trừ số âm cho số dương có kết quả dương. Chứng tỏ ta có thể phát hiện tràn bằng cách: XOR bit nhớ (vào) đến MSB với bit nhớ ra của MSB. 0 1 1 1 1 0 0 1 1 1 7 1 1 0 0 –4 + 0 0 1 1 3 + 1 0 1 1 – 5 1 0 1 0 – 6 0 1 1 1 7 27
- Còn hiệu suất thì sao? Đường tới hạn của mạch cộng gợn số nhớ n-bit là n*CP CarryIn0 A0 1-bit Result0 B0 ALU CarryOut0 CarryIn1 A1 1-bit Result1 B1 ALU CarryOut1 CarryIn2 A2 1-bit Result2 B2 ALU CarryOut2 CarryIn3 A3 1-bit Result3 B3 ALU CarryOut3 Thủ thuật thiết kế – đưa phần cứng vào mạch cộng (mạch cộng thấy trước số nhớ: carry lookahead adder). 29
- Lệnh nhân của MIPS Phép nhân tạo ra tích chính xác kép. mult $s0, $s1 # hi||lo = $s0 * $s1 op rs rt rd shamt funct Từ thấp của tích được lưu trong thanh ghi lo của bộ xử lý còn từ cao được lưu trong thanh ghi hi. Các lệnh mfhi rd and mflo rd được cung cấp để di chuyển tích này đến các thanh ghi (khả truy cập bởi người sử dụng) trong tập thanh ghi. Phép nhân được thực hiện bằng phần cứng chuyên dụng, nhanh, phức tạp hơn (và chậm hơn) so với những mạch cộng. Mạch chia phần cứng còn phức tạp hơn và chậm hơn; cũng như vậy cho phần cứng căn bậc hai. multu – nhân số không dấu 31
- Lệnh chia của MIPS Phép chia tạo ra dư số trong hi và thương số trong lo. div $s0, $s1 # lo = $s0 / $s1 # hi = $s0 mod $s1 op rs rt rd shamt funct Các lệnh mflo rd and mfhi rd được cung cấp để di chuyển dư số và thương số đến các thanh ghi truy cập được bởi người sử dụng trong tập thanh ghi. Cũng như phép nhân, phép chia bỏ qua tràn nên phần mềm phải xác định có phải thương số là quá lớn. Phần mềm cũng phải kiểm tra số chia để tránh việc chia cho 0 . 33