4/4/2014
Binary numbers
(And some other useful bases)
1
2
Tại sao sử dụng hệ nhị phân?
• Máy tính sử dụng số nhị phân vì:
– Dễ thực hiện mạch: 1=1V, 0=0V (in the past 3.3V or 5V)
– Dễ thiết kế các mạch phức tạp với các cổng (transistors)
• Có thể sử dụng nhiều mức điện áp?…
– 1=1V, 2=2V, 3=3V, etc.
– Nhiễu sẽ phá huỷ mạch
– Ví dụ nhiễu trong mạch số:
• No noise: 1 + 0 → 1;
• With noise: 0.9 + 0.4 → 1, not 1.3
– Ví dụ nhiễu mạch tương tự:
• 1.4V + 3.4V → 4.8V (closer to 5 than 4!)
4/4/2014
3
Hệ cơ số 2 (binary)
4/4/2014
4
Các hệ cơ số
4/4/2014
5
LSBs và MSBs
• LSB = Least Significant Bit - > Bit có trọng số thấp
• MSB = Most Significant Bit -> bit có trọng số cao
• Example: 0101 1101 1110 1001
MSB – largest
value digit
LSB– lowest
value digit
4/4/2014
6
Số có dấu
4/4/2014
7
Làm thế nào để biểu diễn số có dấu
• Có 3 chuẩn biểu diễn
– Trường dấu
– Mã bù 1
– Mã bù 2
• Trong 3 chuẩn trên MSB là bit dấu (1 = negative)
• Mã bù 1 khơng được sử dụng nhưng vẫn phải tính
• Ln sử dụng mã bù 2 cho số nguyên
• Trường dấu được sử dụng biểu diễn số thực dấu phẩy động
4/4/2014
8
Trường dấu
Đơn giản là bit đầu tiên là bit dấu: +/‐
4/4/2014
9
Một số vấn đề về số có dấu
Kiểm sốt được dấu và trường dấu:
– Nếu A âm và B âm, A+B → âm (A + B)
– Nếu A dương và B dương, A+B → dương (A + B)
Phức tạp hơn với đấu trừ:
4/4/2014
10
Tràn số trong mã bù 2
• Khác với các số khơng dấu -> có tín hiệu nhớ
• Tràn số có nghĩa là số có dấu khơng được biểu diễn
• Trong phép cộng số bù 2:
– Các số trái dấu nhau thì khơng tràn số
– Tràn số nếu các số có cùng dấu lại cho kết quả khác dấu
• Trong cả hai ví dụ, carry in đến bit dấu == carry out
4/4/2014
11
So sánh các số
Các tốn hạng khơng dấu
• Z: equality/inequality
• C=0: A>=B
• C=1: A
• S: no meaning
• O: no meaning
Mã bù hai
• Z: equality/inequality
• C: no meaning
• S và O
– S XOR O = 0: A>=B
– S XOR O = 1: A
• so sánh A và B, thực hiện A‐B
• kiểm tra kết quả: ZERO, CARRY, SIGN, OVERFLOW
4/4/2014
12
Số không nguyên: số thực
dấu phẩy động và cố định
4/4/2014
13
Các số khơng ngun
• Hệ cơ số 10 :
– 12.2510 = 1x101 + 2x100 + 2x10‐1 + 5x10‐2
• Hệ cơ số 2:
– 12.2510 = 1100.01 = 1x23 + 1x22 + 1x2 ‐2
• Đây là dấu phẩy cố định:
– abc.def = a*22 + b*21 + c*20 + d*2‐1 + e*2‐2 + f*2‐3
– E.g., 011.110 = 2 + 1 + 1/2 + 1/4 = 3.75
• Dấu phẩy nhị phân đặt ở đâu?
– Có 6 bit để biểu diễn:
– xxx.yyy → max = 111.111 = 7.875,
min = 000.001 = 0.125
– xxxxx.y → max = 11111.1 = 63.5,
min = 00000.1 = 0.5
– x.yyyyy → max = 1.11111 = 1.96875, min = 0.00001 = 0.03125
4/4/2014
14
Tính tốn là giống nhau đối
với dấu phẩy cố định
Phép cộng và phép trừ (số
bù 2) là giống nhau
4/4/2014
15
Nhưng tồn tại một số vấn đề
sau …
• Dấu phẩy cố định tính tốn rất tốt nếu biết độ rộng
– Thường sử dụng trong xử lý tín hiệu (DSPs in cell phones, etc.)
– Tuy nhiên không phải lúc nào cũng biết một số có độ lớn là bao nhiêu?
• Đấu phẩy động giải quyết vấn đề này:
– Sử dụng một số bít để lựa chọn dấu phẩy động nhị phân
– Ví dụ: Nếu có 20 bít, sử dụng 4 bit để đặt dấu phải nhị phân.
4/4/2014
16
Dấu phẩy động
• Sử dụng một vài bít để lựa chọn dấu phẩy nhị phân
– Tạo ra số lớn hoặc nhỏ bằng việc dịch chuyển dấu phẩy nhị phân.
– Sử dụng các bit hiệu quả hơn!
• Tổng quát một số thực X được biểu diễn theo kiểu số dấu phẩy động
như sau: X = M*Re.
• Trong đó:
E là phần mũ (Exponent), E = e – 127
M là phần định trị (Mantissa)
R là cơ số (Radix)
4/4/2014
17
Tiêu chuẩn đấu phẩy động của
IEEE
• Bit dấu S
– Có một bit dấu: 0=positive 1=negative
• Số mũ e
– Giá trị không dấu, độ lệch bias “‐127”
– Dễ dàng so sánh (xem xét ở phần định trị)
• Phần thập phân f
– Giá trị không dấu
– Là các số nhị phân với dấu phẩy nhị phân bên cạnh bit có trọng số lớn nhất.
4/4/2014
18
Ví dụ về dấu phẩy động 32 bit
1
S
•
•
•
•
10000010 1010110000000000000000
e
f
S = 1 -> Số âm (S là 1 bít đầu tiên).
e = 1000 00102 = 13010 -> E = 130 - 127 = 3 (e là 8 bít tiếp theo).
m = 101011 -> M = 1.101011 (m là 23 bít cịn lại, ở đây khơng cần quan tâm đến
các bít 0 ở cuối vì khi ghép M = 1.m thì các số 0 này không cần viết vào)
X = -1.101011 * 23 = -1101.011 = -13.375
4/4/2014
19
Dạng chuẩn hố
Câu hỏi: Với 23
bit phần định trị
và khơng chuẩn
hố, có bao nhiêu
cách biểu diễn số
Answer: 23.
Lãng phí Bit!
• Định dạng 1 trước phần thập phân
– Cách biểu diễn số đơn giản như sau:(‐1)s x (1.f) x 2(e – 127)
• Dạng khơng chuẩn hố:
– ví dụ: 3 giá trị thập phân ở phần định trị
(‐1)S x 0.f1f2f3 x 2e
• Làm thế nào để biểu diễn số 2?
– (‐1)0 x 0.100 x 2(e=2) = 1/2 x 4 = 2
– (‐1)0 x 0.010 x 2(e=3) = 1/4 x 8 = 2
– (‐1)0 x 0.001 x 2(e=4) = 1/8 x 16 = 2
Dạng chuẩn hố
chỉ có một cách:
(‐1)0 x 1.000x2(e=1)
=1x2=2
• Lãng phí bit dùng để biểu diễn một số theo nhiều cách
4/4/2014
20
Phép cộng dấu phẩy động
• Ví dụ: 2.1x1012 + 9.2x1010
1. Viết lại để cùng số mũ bằng việc dịch phần thập phân:
2.1x1012 + 0.092x1012
2. Cộng các phần thập phân với nhau:
(2.1+0.092)x1012 = 2.192x1012
3. Làm tròn để phù hợp với số bit cần để biểu diễn:
= 2.2x1012
• các bước thực hiện?
– dịch (multiply) số nhỏ hơn để cùng số mũ the smaller number to match
the exponents
– cộng phần thập phân
– làm tròn kết quả cuối cùng để phù hợp với số bit biểu diễn
• phức tạp hơn tính tốn số ngun
• có thể làm mất tính chính xác của các số nhỏ hơn khi cộng.
4/4/2014
21
Phép nhân dấu phẩy động
• ví dụ: 2.1x1012 * 9.2x1010
1. nhân phần định trị (thập phân):
2.1 * 9.2 = 19.32
2. cộng các số mũ:
12 + 10 = 22
3. làm tròn (và dịch ở cơ số 10) để phù hợp với số bit cần biểu
diễn: = 19.32x1022 = 1.9x1023
• các bước thực hiện?
– Multiply the mantissas and add the exponents
– Shift (normalize) to put the decimal point in the right place
– Round at the end to fit in to the number of bits
• đơn giản hơn phép cộng số thực dấu phảy động
• cần bộ nhân lớn (23 bits for floats, 53 for doubles)
4/4/2014
22
Sai số trong dấu phẩy động
Dịch để cùng số mũ trước
khi cộng
• Xem xét:
– Big + Small ≈ Big
– 2.1x1020 + 9.2x105 = 2.1x1020+0.0000000000000092x1020 ≈ 2.1x1020
• Điều gì sẽ xảy ra khi trừ một số lớn?
Floating point gives us non‐linear
‐
– có nhật được số nhỏ?
precision. (Remember the graph.)
We only get 23 bits around one binary
– (Big + Small) – Big = ?
point. (Big or small.)
– (Big + Small) ≈ Big
– (Big + Small) – Big ≈ Big – Big = 0
– No, I get something very close to zero.
• Now what happens if I try to divide by the result?
– x/0 = … bad
– Order of operations matters!
– (Big – Big) + Small = Small
• Good news: There are lots of truly excellent libraries that do the right thing for you.
– This is why you do not write your own linear algebra code or FFT code
4/4/2014
4/4/2014
Thiết kế mức logic số
23
24
Mức logic số
• Các kết nối logic
– Các cổng
– Logic → Bảng chân lý
– Bảng chân lý → Các cổng(Karnaugh maps)
– Các thành phần cơ bản: Bộ dồn kênh (Multiplexors), Bộ mã
(encoders), bộ giải mã (decoders).
• Các phần tử nối tiếp
– Xây dựng bộ đếm.
– Bộ nhớ và các mạch chốt.
4/4/2014
25
Phương trình tốn học và
bảng chân lý
Các bảng chân lý định
nghĩa trạng thái của
cổng (đầu ra) với tất
cả các kết nối có thể ở
đầu vào.
4/4/2014