Sơ lược về khối AU_FLOATING_POINT:o Input: Sel: chọn phép tính cho khối module AU A , B: 2 giá trị cần tính toáno Output: Overflow, Underflow: báo cờ tràn trên hoặc tràn dưới Result: kết quả của phép tính toáno Module: ADD_SUB 00_01: Khối thực hiện chức năng cộng, trừ 2 số MULTIPLIER 10: Khối thực hiện chức năng nhân 2 số DIVISION 11: Khối thực hiện chức năng chia 2 số
Trang 1ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ
-o0o -
BÁO CÁO BÀI TẬP LỚN MÔN HỌC: KỸ THUẬT SỐ NÂNG CAO THIẾT KẾ MÁY TÍNH DẤU CHẤM ĐỘNG 32 BITS
GVHD: Trịnh Vũ Đăng Nguyên SVTH: Nguyễn Thái Nguyên 1712386
Bùi Thị Thắm 1814071
TPHCM, tháng 5 năm 2021
Trang 2MỤC LỤC
1 Khối cộng trừ: 6
1.1 Sơ đồ khối: 6
1.2 Chức năng 3 khối chính: 6
1.3 Một số module hỗ trợ: 7
1.4 Giải thuật thứ nhất: Full-adder 9
2 Bộ nhân 10
2.1 Sơ đồ khối: 10
2.2 Chức năng các khối chính: 10
2.3 Các module hỗ trợ cho giải thuật 1 Array multiplier 11
3 Bộ chia 13
3.1 Sơ đồ khối Restore & Non_Restore division: 13
3.2 Chức năng các khối chính: 13
3.3 Giải thuật Restore & Non_Restore Division 14
4 Kết quả mô phỏng phần II 14
4.1 Bộ cộng: 14
4.2 Phép nhân: 16
4.3 Phép chia 17
5 Phần Bonus 17
5.1 Bộ chuyển FP32 sang thập phân 17
5.2 Giải thuật 2 phép cộng trừ Carry Tree Adder (CTA) 19
5.3 Giải thuật 2 phép nhân Booth Multiplier 22
Trang 3HÌNH ẢNH
Hình 1-1 : Sơ đồ khối bộ Add_sub 6
Hình 1-2: Ví dụ hoạt động của bộ Shiftright count = 2 8
Hình 1-3 Sơ đồ khối bộ Full_ adder 9
Hình 2-1 Sơ đồ khối bộ nhân 10
Hình 2-2 Bộ nhân 2 bit 11
Hình 2-3 Bộ nhân 4bits 11
Hình 2-4 : Bộ nhân 8 bits 12
Hình 3-1 : Sơ đồ khối bộ Restore & Non_Restore Division 13
Hình 3-2 : Ví dụ phép chia Non_restore 5bits 14
Hình 4-1 : Mô phỏng cộng trừ với số 14
Hình 4-2 : Mô phỏng cộng đặt biệt 15
Hình 4-3 : Mô phỏng trừ đặc biệt 15
Hình 4-4 : Mô phỏng nhân với số 16
Hình 4-5 : Mô phỏng nhân đặc biệt 16
Hình 4-6 : Mô phỏng chia với số 17
Hình 4-7 : Mô phỏng chia đặt biệt 17
Hình 5-1 : Sơ đồ chuyển đổi FP32 18
Hình 5-2 : Ví dụ fraction_process 6 bits 19
Hình 5-3: Mô phỏng chuyển đổi dạng wave FP32 sang Thập phân 19
Hình 5-4 : Mô phỏng chuyển đổi FP32 sang Thập phân 19
Hình 5-5 : Sơ đồ khối CTA 16 bits 20
Hình 5-6 : BlackCell and GrayCell 20
Hình 5-7: Ví dụ cho giải thuật CTA 21
Hình 5-8: Kết quả mô phỏng cộng trừ giải thuật 2 22
Hình 5-9: Sơ đồ khối phép nhân Booth 23
Hình 5-10: Ví dụ cho giải thuật Booth 24
Hình 5-11: Mô phỏng phép nhân giải thuật 2 24
Trang 4YÊU CẦU BÀI TẬP LỚN MÔN KỸ THUẬT SỐ NÂNG CAO
I HOÀN THÀNH 3 BÀI LAB
TOÁN (+, -, *, /) GIỮA HAI SỐ FLOATING POINT (IEEE-754, SINGLE PRECISION, 32-BIT
Ngõ vào: 2 số float 32-bit (A, B) và 2-bit lựa chọn các phép toán (+, -, *, /)
Ngõ ra: Kết quả phép toán ở định dạng IEEE-754
Lưu ý: Không được sử dụng các phép toán có sẵn trong Verilog/VHDL (như +, -, *, / và <<) chỉ được sử dụng các lệnh logic (AND, OR, XOR, NOT)
III PHẦN BONUS
Thực hiện giải thuật thứ 2 cho các phép tính cộng, trừ (+, -) DONE
Thực hiện giải thuật thứ 2 cho phép tính nhân * DONE
Thực hiện giải thuật thứ 2 cho phép tính chia /
Thực hiện phép lấy căn bậc n
Chuyển ngõ vào, ngõ ra thành dạng thập phân tương ứng (ex 5.25*10-5,
Trang 5Hình 1: Sơ đồ khối máy tính dấu chấm động (AU_FLOATING_POPINT)
Sơ lược về khối AU_FLOATING_POINT:
o Input:
Sel: chọn phép tính cho khối module AU
A , B: 2 giá trị cần tính toán
o Output:
Overflow, Underflow: báo cờ tràn trên hoặc tràn dưới
Result: kết quả của phép tính toán
o Module:
ADD_SUB [00_01]: Khối thực hiện chức năng cộng, trừ 2 số
MULTIPLIER [10]: Khối thực hiện chức năng nhân 2 số
DIVISION [11]: Khối thực hiện chức năng chia 2 số
Trang 61 Khối cộng trừ:
1.1 Sơ đồ khối:
Hình 1-1 : Sơ đồ khối bộ Add_sub
1.2 Chức năng 3 khối chính:
Compare_and_shift: so sánh exponent và dịch fraction
o Input: exp_a, exp_b, frac_a, frac_b
o Output: exp_shift, exp_tem, frac_a_shifted, frac_b_shifted
Compare_and_Shift
Trang 7o Sub_26: trừ 2 exponent, sau đó tạo biến count để dịch phải tương ứng cho từng fraction, biến count được lấy dựa vào flag của 2 phép tính sub_26 (count
5 bits)
o Shift_right_32: dịch phải fraction nhỏ hơn với giá trị “count” bits sau khi trừ
2 exponent Module Shift được tạo dựa trên bộ mux 2-1
BIG_ADD_SUB:
o Input: operator, frac_a_shift, frac_b_shift, in_exp (), sign a, sign b
o Output: frac_added, exp_tem, out_sign
o Com-2: two-compliment tạo số bù 2 cho biến
o Ngõ ra out_frac sẽ được chọn dựa vào giá trị “sign” của A và B
o Ngõ ra out_sign là giá trị bit 25 của fraction
NORMALIZE:
o Input: frac_added, exp_shifted
o Output: out_frac, out_exp, flag-over
o Việc đầu tiên là loại bỏ bit 1 đầu tiên (do lúc đầu cộng vô)
o Kiểm tra exponent xem có over hoặc under không
o Tìm bit 1 (lưu vào count), sau đó dịch trái frac (sau khi loại bỏ bit 1)
o Trừ exponent với count để có giá trị exponent mới
o Underfolw: dựa vào bit 8 của exponent
o Overflow: dùng (&exponent) = 1 thì overflow
Trang 8 n bit đầu vào thì ta có n bộ mux 2_1
count [m-1:0]: thì ta có m tầng dịch, đồng thời n bộ mux của mỗi tầng
sẽ cùng chân sel với nhau (count [x] tương ứng)
2 ngõ vào a,b của bộ mux:
Tại level đầu chân a của bộ mux đầu tiên (trọng số cao nhất) là 1’b0, chân b của bộ mux này là chân a của bộ mux kế cạnh Theo thứ tự từ trái sang phải là bit trọng số cao tới trọng số thấp Tại level thứ 2, chân a của 2 bộ mux đầu tiên là 1’b0, chân b của
bộ mux này là chân a của bộ mux cách đó “level” bộ
Hình 1-2: Ví dụ hoạt động của bộ Shiftright count = 2
Module check Zero, Inf của A, B:
o Zero: Khi exp[7:0] = 00000000
Khi frac[22:0] = 00 00 => Zero
Khi frac [22:0] != 00 00 => Number
o Inf: Khi exp[7:0] = 11111111
Khi frac [22:0] = 00 00 => +Inf or -Inf
Khi frac [22:0] != 00 00 => NaN
Trang 9 Module Count_to_shift:
o Input fraction 24 bit
o Output: count 5 bit
o Xét lần lượt từ bit 23, nếu [23] = 1 thì count = 0, nếu [22] = 1 thì count = 1, tương tự đến bit 0 = 1 thì count = 23
1.4 Giải thuật thứ nhất: Full-adder
Hình 1-3 Sơ đồ khối bộ Full_ adder
S = A xor B xor Cin Cout = (A xor B).Cin + A.B
Module add_sub được thực hiện bằng cách cho Cin=1
và B’ = B xor Cin tạo B bù
2
Trang 11o Cờ tràn được xét theo điều kiện tương ứng
2.3 Các module hỗ trợ cho giải thuật 1 Array multiplier
Hình 2-2 Bộ nhân 2 bit
Hình 2-3 Bộ nhân 4bits
Trang 12Hình 2-4 : Bộ nhân 8 bits
Bộ nhân cho 16 và 24 bits cũng tương tự
Shiftright_32: dịch phải fracsion qua 1 bit
Count_to_shift: tìm bit 1 và lưu vào biến count
Shiftleft_32: dịch trái fraction qua count bits
Trang 133 Bộ chia
3.1 Sơ đồ khối Restore & Non_Restore division:
Hình 3-1 : Sơ đồ khối bộ Restore & Non_Restore Division
Trang 143.3 Giải thuật Restore & Non_Restore Division
Hình 3-2 : Ví dụ phép chia Non_restore 5bits
4 Kết quả mô phỏng phần II
4.1 Bộ cộng:
a) Trường hợp với số:
Hình 4-1 : Mô phỏng cộng trừ với số
Trang 15A
Trang 16Hình 4-5 : Mô phỏng nhân đặc biệt
A
Trang 17+INF NAN -INF +INF NAN
5.1 Bộ chuyển FP32 sang thập phân
1 Lý thuyết chuyển đổi:
- FP32 được chia thành 3 phần:
Sign = FF[31] ; Exponent = FF[30:23] ; Fraction =FF[22:0]
- Một số floating point được chuyển thành thập phân như sau:
Trang 18Hình 5-1 : Sơ đồ chuyển đổi FP32
3 Fraction_process
a Bảng chuyển đổi giá trị:
- Vì số nhị phân không cộng sau dấu “.” được, nên tạm thời ta cộng như phần nguyên trước
- Vì những bit fraction có giá trị ngày càng nhỏ ở những bit có trọng số thấp, nên ta chỉ lấy giá trị của 10 bits đầu tiên, mặc dù độ chính xác sẽ thay đổi nhưng không đáng
b Sơ đồ khối fraction_process
Trang 19- Ta gán giá trị số nhị phân tạm thời vào biến value[n]
Hình 5-2 : Ví dụ fraction_process 6 bits
1 Kết quả mô phỏng
Hình 5-3: Mô phỏng chuyển đổi dạng wave FP32 sang Thập phân
Hình 5-4 : Mô phỏng chuyển đổi FP32 sang Thập phân
Trang 205.2 Giải thuật 2 phép cộng trừ Carry Tree Adder (CTA)
1 Sơ đồ khối 16 bit
Hình 5-5 : Sơ đồ khối CTA 16 bits
Hình 5-6 : BlackCell and GrayCell
2 Giải thích giải thuật
- Thực hiện phép tính cout trước bằng cách tạo ra 2 khái niệm g và p (propagate and generate):
g (a,b) = a.b cho biết bit tiếp theo có được tạo ra hay không
p (a,b) = a xor b cho biết bit 1 có được lan truyền đi tiếp không, tức là tổng 2 bit thứ i có được mang qua bit thứ i+1 hay không.(một số định nghĩa khác cho thấy p = a + b, về căn bản không ảnh hưởng đến giá trị c(carry) sau đó)
Trang 21 Việc tạo ra g và p để ta thực thi 1 module mới chỉ cho giá trị c và việc tính tổng lúc này chỉ đơn giản là tính xor bit thứ i của a, b và c (không nhớ)
Tuy cách này có hiệu quả hơn so với Ripple Carry Adder nhưng với 2
số > 16 bits thì cell của c15 sẽ có đến 16 tầng dẫn đến delay cũng rất đáng kể và số cell để thực hiện cho block này cũng rất lớn
- Có 3 cách để thực hiện cho bộ Carry tree adder: Kogge–Stone adder, Brent–Kung adder, Lynch–Swartzlander
- Ở đây chúng ta sử dụng phương pháp Kogge-Stone adder (KSA) như CLA, ta được c4 = (g4, p4) ο [ (g3, p3) ο [(g2, p2) ο (g1, p1)] ] Việc sắp xếp lại như này c4 = [(g4, p4) ο (g3, p3)] ο [(g2, p2 ) ο (g1, p1)] có thể giúp cho thiết kế hoạt động song song , dẫn đến hiệu suất cao hơn Nếu như CLA n bits phải có độ trễ của n tầng, thì CTA chỉ có độ trễ log2n tầng
- Hai khối được bổ sung trong phương pháp này là Black cell và Gray cell (dành cho đầu ra cuối cùng trước khi đưa vào khối FA) Nếu ta đặt co(k+1) = ak bk và
c1(k+1) = ak + bk (carry tiếp theo tại nút k) và c k+1 được biểu diễn như sau: ck+1 =
~cin.co(k+1) + cin.c1(k+1) Như đã trình bày ở trên
Hình 5-7: Ví dụ cho giải thuật CTA
Trang 223 Kết quả mô phỏng
Hình 5-8: Kết quả mô phỏng cộng trừ giải thuật 2
5.3 Giải thuật 2 phép nhân Booth Multiplier
1 Sơ đồ khối :
- Thuật toán Booth hoạt động dựa trên thực tế là các chuỗi số 0 trong hệ số nhân
không yêu cầu phép cộng mà chỉ cần dịch chuyển và chuỗi số 1 trong hệ số nhân từ trọng số bit 2 ^ k đến trọng số 2 ^ m có thể được coi là 2 ^ (k + 1) thành 2 ^ m
- Như trong tất cả các sơ đồ nhân, thuật toán Booth yêu cầu kiểm tra các bit của hệ số nhân và dịch chuyển của tích từng phần
Các số hạng trong phép nhân phải có dấu Vậy nếu là Số dương bit lớn nhất =0; Số
âm bit lớn nhất = 1
Các số hạng có độ dài bit giống nhau
Khởi tạo Q-1=0
Khi Q0Q-1= 00 hay 11 dời bit sang phải giảm số hạng nhân là 1
Khi Q0Q-1 = 01 thì A = A+M dời bit sang phải giảm số hạng nhân là 1
Khi Q0Q-1 = 10 thì A = A-M dời bit sang phải giảm số hạng nhân là 1
Khi dời bit giữ dấu của A
Khi nhân hết số hạng kết quả là giá trị được nối giữa hai giá trị A & Q
- Các module hỗ trợ cho quá trình tính toán tương tự như giải thuật 1
Trang 23Hình 5-9: Sơ đồ khối phép nhân Booth
2 Ví dụ cho giải thuật:
- Tính 7 x (-3)
Trang 24Hình 5-10: Ví dụ cho giải thuật Booth
3 Kết quả mô phỏng:
Hình 5-11: Mô phỏng phép nhân giải thuật 2