A và B lần lượt là 2 input đầu vào 24bits- A là số bị nhân, được nạp vào thanh ghi dịch trái Shift Left Reg và sử dụng tín hiệu điều khiển SL từ controller.. Cuối cùng kết quả đưa đến cổ
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KỸ THUẬT MÁY TÍNH
BÁO CÁO CUỐI KỲ MÔN HỌC THIẾT KẾ HỆ THỐNG SỐ VỚI HDL
LỚP: CE213.N11
NHÓM 15 SINH VIÊN THỰC HIỆN:
NGUYỄN THỊNH PHÁT - 20521738
VÕ NHẬT NAM - 20520646 NGUYỄN HỮU TRÍ - 20522051
TP HỒ CHÍ MINH, NĂM 2022
Trang 2Project: 32 BITS - FLOATING POINT
MULTIPLIER
1 Số thực dấu chấm động (độ chính xác đơn):
Định nghĩa:
Biểu diễn số thực:
3.1459265…ten (pi)
2.71828…ten (e)
0.000000001ten or 1.0ten x 10-9 (seconds in a nanosecond)
3,155,760,000ten or 3.15576ten x 109 (second in a typical century)
Scientific nonation: Một số thực được gọi là “scientific notation” khi
bên trái dấu chấm động có đúng 1 chữ số
Normalized number: Một số thực được gọi là “Normalized number” (dạng chuẩn) khi số này được viết trong “scientific
nonation” và chữ số bên trái dấu chấm không phải là 0
Ví dụ: 1.0ten x 10-9: số thực chuẩn
0.1ten x 10-8: không phải số thực chuẩn
10.0ten x 10-10: không phải số thực chuẩn
Trong máy tính, các số nhị phân phải được đưa về dạng chuẩn như sau:
1.xxxxxxxxxtwo x 2yyyy
Biểu diễn số thực dấu chấm động:
Biểu diễn số thực dấu chấm động theo chuẩn IEEE 754 (với độ chính xác đơn)
Trong đó:
Trang 3s biểu diễn dấu của số thực dấu chấm động (1 nghĩa là âm, ngược lại 0 là
dương)
Phần mũ (exponent) có kích thước là 8 bit Exponent là biểu diễn quá 127
của yyyy (excess -127 hoặc bias of 127)
Phần lẻ (fraction) hay phần định trị (mantissa) dùng 23 bits để biểu diễn
cho xxxxxxxxx
Tổng quát, số thực dấu chấm động được tính dựa theo (với bias = 127):
(-1) S x (1 + fraction) x 2 (Exponent – Bias)
Hoặc:
(-1) S x (1 + (s1 x 2 -1 ) + (s2 x 2 -2 ) + (s3 x 2 -3 ) + (s4 x 2 -4 ) +…) x 2 E với (s1, s2, s3,… là các bit lần lượt từ trái sang phải của fraction)
Ví dụ: biểu diễn số -2345,125
B1: Chuyển đổi số trên ra hệ hai
-2345,125 = -1001 0010 1001.001 (dãy số nhị phân được biểu diễn bình thường)
B2: Chuẩn hoá theo IEEE 32bit
-100100101001.001
=> -1.00100101001001 x 2^11
(tức là lùi dấu chấm ra trước kế bên số đầu tiên, bao nhiêu số thì mũ mấy)
B3: Xác định các thông số biểu diễn S,E,M
S: phần định trị là số âm, nên s là 1
E : phần mũ được xác định E = 11+127=138=10001010
M: phần định trị được xác định là 001001010010010 0000 0000 (23 số) (tức là M = dãy số sau dấu chấm sau khi chuẩn hóa, còn lại ghi số 0 cho đủ
23 số)
Dãy số là:
S E M
1 10001010 00100101001001000000000
2 24 bits Multiplier Architecture:
Trang 4A và B lần lượt là 2 input đầu vào 24bits
- A là số bị nhân, được nạp vào thanh ghi dịch trái (Shift Left Reg) và sử dụng tín hiệu điều khiển SL từ controller
- B là số nhân, được nạp vào thanh ghi dịch phải (Shift Right Reg) và sử dụng tín hiệu điều khiển SR từ controller
- Khối ALU bao gồm một bộ AND với chính input, một bộ cộng và một bộ MUX
Nếu B[0]=0 thì kết quả của ALU sẽ lấy kết quả từ thanh ghi REG và and với chính nó
Nếu B[0]=1 thì ALU sẽ lấy kết quả của Shift Left Reg cộng với kết quả
từ thanh ghi REG
Trang 5Cuối cùng kết quả đưa đến cổng Tri, khi có tín hiệu từ Controller thì kết quả sẽ được xuất ra
- Ngoài ra, ở bộ so sánh với 0 (Compare 0), khi nhận thấy giá trị ở thanh ghi Shift Right Reg = 0 thì có nghĩa phép nhân đã được thực thi xong, sẽ truyền tín hiệu cho Controller để xuất kết quả
24bits Multiplier FSM:
- Trạng thái S0:
SL và SR sẽ bằng 01 để bật tín hiệu cho phép nạp giá trị vào thanh ghi
Lúc này, do chưa thực hiện phép tính nên chưa xuất kết quả, vì vậy nên
V = 0
Khi có tín hiệu S = 1 thì trạng thái S0 sẽ chuyển sang trạng thái S1
- Trạng thái S1:
SL = 10 cho phép thanh ghi Shift Left Reg dịch trái để thực thi phép tính
SR = 11 cho phép thanh ghi Shift Right Reg dịch phải để thực thi phép tính
Khi có tín hiệu EN từ bộ so sánh (Compare 0) bật lên 1 thì từ trạng thái S1 sẽ chuyển sang trạng thái S2
- Trạng thái S2:
Tín hiệu V=1 cho phép xuất kết quả
Trang 6 SL và SR lúc này không cần quan tâm giá trị vì trạng thái S2 chỉ xuất kết quả
3 32 bits Multiplier Architecture:
- Tín hiệu đầu vào ở đây là 2 input A và B ở dạng số thực dấu chấm động (Floating Point) nên khi input nạp vào sẽ được tách thành 3 phần chính:
Sign (dấu): gồm 1 bit (0 là số dương, 1 là số âm)
Exponent (mũ): gồm 8 bits kế tiếp
Mantissa (định trị): gồm 23 bit cuối
- Khi có tín hiệu Load từ Controller thì input (32bits) sẽ được nạp vào thanh ghi và được tách thành 3 phần như trên
Trang 7- Đối với phần dấu, 2 bit mũ đi qua cổng XOR được sử dụng để tính được bit dấu của tích Giá trị đi đến cổng Tri và khi có tín hiệu điều khiển từ Controller thì kết quả sẽ được xuất ra
Input A Input B Output
Khi 2 bit mũ khác nhau thì kết quả đi qua cổng XOR sẽ là 1 (có nghĩa nhân hai số trái dấu với nhau thì kết quả sẽ là số âm)
Khi 2 bit mũ cùng dấu thì kết quả đi qua cổng XOR sẽ là 0 (có nghĩa nhân hai số cùng dấu với nhau thì kết quả sẽ ra số dương)
- Với phần mũ, các bit mũ sẽ lần lượt được trừ với 127 Sau đó hai phần mũ
sẽ được cộng lại với nhau và cộng với 128 Kết quả sau đó sẽ được đưa đến bộ trừ (Subtractor) để trừ đi phần mũ Kết quả của phần mũ trừ kết quả của Counter ở bộ Shift Left_Counter ta sẽ ra được bit mũ chính xác cuối cùng Kết quả sẽ được đưa đến cổng Tri và chờ tín hiệu điều khiển từ Controller để xuất kết quả
- Đối với phần định trị, do phần định trị của cả hai input chỉ còn 23bits nên
sẽ cần thêm một bit 1 ở phía trước mỗi input để trở thành 24bits và được đưa vào bộ nhân 24bits (24bits Multiplier) để thực thi phép nhân Thông qua bộ nhân, kết quả trả về sẽ ở dạng 48bits Kết quả qua bộ Shift Left_Counter (bao gồm một bộ dịch trái và bộ đếm) để đưa về dạng 1.xx, khi kết quả ra 0.xx thì bộ dịch sẽ dịch trái để đưa kết quả về dạng 1.xx Đồng thời, ở mỗi lần dịch trái thì bộ Counter cũng sẽ phải tăng thêm lên 1 Sau cùng, lấy kết quả của phần mũ trừ kết quả quả Counter ta sẽ ra được bit mũ chính xác cuối cùng Phần định trị sẽ lấy kết quả từ bộ Shift Left
Trang 8[46-23] (chỉ lấy 23 bits) qua cổng Tri chờ tín hiệu điều khiển từ Controller
sẽ cho xuất ra kết quả
- Ngoài ra, khi bộ 24bits Multiplier thực thi xong sẽ có tín hiệu V trả về Controller để báo hiệu kết quả thực thi ở bộ nhân 24bits đã tính xong
32bits Multiplier FSM:
- Trạng thái S0:
Load = 1 cho phép nạp giá trị input vào thanh ghi
Lúc này, kết quả chưa xuất nên V = 0
Khi tín hiệu Start = 1 thì trạng thái S0 sẽ chuyển sang trạng thái S1
- Trạng thái S1:
Load = 0 do giá tị đã được nạp ở trạng thái S0
Lúc này, kết quả vẫn chưa xuất nên vẫn tiếp tục V = 0
Khi tín hiệu Done từ bộ nhân 24bits bật lên 1 thì trạng thái S1 sẽ chuyển sang trạng thái S2
- Trạng thái S2:
V = 1 cho phép xuất kết quả
4 Mô phỏng:
Input A Input B Kết quả lý thuyết
1 01000000101010101111100111011011
(5.343)
01000011110110001011001100110011 (433.4)
01000101000100001011101010000000 (2315.6562)
2 01000011011100100110011001100110 11000001010001001100110011001100 11000101001110100101100001010000
Trang 9(242.4) (-12.3) (-2981.52)
3 01000010111101101110110100001110
(123.463)
00000000000000000000000000000000 (0)
00000011011101101110110100001110 (0.000xx)
4 11000010111110010000000000000000
(-124.5)
11000010001101010100101011000000 (-45.323)
01000101101100000101010110110100 (5642,7135)
Testcase 1:
Waveform:
Post Synthesis:
Fmax = 178.35 Mhz
Testcase 2:
Waveform:
Post Synthesis:
Testcase 3:
Waveform:
Trang 10 Post Synthesis:
Testcase 4:
Waveform:
Post Synthesis: