1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tính toán dấu chấm động (floating point)

24 387 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 1,32 MB
File đính kèm SOURCE_CODE.rar (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

MỤ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 3

HÌ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 4

YÊ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 5

Hì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 6

1 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 7

o 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 11

o 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 12

Hì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 13

3 Bộ chia

3.1 Sơ đồ khối Restore & Non_Restore division:

Hình 3-1 : Sơ đồ khối bộ Restore & Non_Restore Division

Trang 14

3.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 15

A

Trang 16

Hì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 18

Hì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 20

5.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 22

3 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 23

Hì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 24

Hì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

Ngày đăng: 19/08/2021, 18:02

TỪ KHÓA LIÊN QUAN

w