Giáo trình Kiến trúc máy tính - Chương 3: Binary numbers - Đại học Bách Khoa
Tổng quan: mức logic nối tiếp
• Các bước thực hiện?
– Phần tử trạng thái lưu giữ giá trị current
state
– Sử dụng tổ hợp logic để tính toán giá trị next
state từ current state
– Tạo ra vòng lặp hồi tiếp:
• Với mỗi clock signal
• The current state → next state
• Đầu vào và ra tác động qua lại lẫn nhau.
• Tốc độ đồng hồ (Clock speed) được xác định
bằng việc mức logic kế tiếp cập nhật nhanh như
thế nào.
Tổng kết: các phần tử trạng thái
• Các phần tử trạng thái (memories) lưu trữ trạng thái.
• Chỉ cập nhật trong thời gian xác định (e.g., clock 0→1)
• Sử dụng các tổ hợp logic (combinational logic -> gates) để tính toán các
giá trị tiếp theo (the next value)
• Sử dụng các phần tử trạng thái (memories) để lưu trữ giá trị hiện thời (the
current value)
• Cập nhật giá trị hiện thời = bằng giá trị kế tiếp trong một xung đồng hồ.
57 trang |
Chia sẻ: thucuc2301 | Lượt xem: 681 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Giáo trình Kiến trúc máy tính - Chương 3: Binary numbers - Đại học Bách Khoa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Binary numbers
(And some other useful bases)
4/4/2014
1
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
2
Hệ cơ số 2 (binary)
4/4/2014
3
Các hệ cơ số
4/4/2014
4
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
5
Số có dấu
4/4/2014
6
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
• Luôn 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
7
Trường dấu
Đơn giản là bit đầu tiên là bit dấu: +/‐
4/4/2014
8
Một số vấn đề về số có dấu
Kiểm soá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
9
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
10
So sánh các số
Các toán hạng không dấu
• Z: equality/inequality
• C=0: A>=B
• C=1: A<B
• 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<B
• 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
11
Số không nguyên: số thực
dấu phẩy động và cố định
4/4/2014
12
Các số không nguyên
• 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
13
Tính toá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
14
Nhưng tồn tại một số vấn đề
sau
• Dấu phẩy cố định tính toá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
15
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
16
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
17
Ví dụ về dấu phẩy động 32 bit
• 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
1 10000010 1010110000000000000000
S e f
4/4/2014
18
Dạng chuẩn hoá
Câu hỏi: Với 23
bit phần định trị
và không chuẩn
hoá, 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 hoá:
– 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
• Lãng phí bit dùng để biểu diễn một số theo nhiều cách
Dạng chuẩn hoá
chỉ có một cách:
(‐1)0 x 1.000x2(e=1)
=1x2=2
4/4/2014
19
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 toán số nguyên
• 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
20
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
21
Sai số trong dấu phẩy độ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?
– có nhật được số nhỏ?
– (Big + Small) – Big = ?
– (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
Dịch để cùng số mũ trước
khi cộng
‐Floating point gives us non linear
precision. (Remember the graph.)
We only get 23 bits around one binary
point. (Big or small.)
4/4/2014
22
Thiết kế mức logic số
4/4/2014
23
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
24
Phương trình toá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
25
Phương trình logic và các
cổng biểu diễn
• A+1 = 1
• A•1 = A
• A+0 = A
• A•0 = 0
4/4/2014
26
Ví dụ về bộ cộng
Full adder
Half - adder 4/4/2014
27
Phép cộng và phép nhân
4/4/2014
28
Thiết kế bộ nhân
• Bộ nhân NxN có tích số 2N bit ra
– Câu hỏi: Phép nhân thực hiện như thế nào trong MIPS khi sử dụng thanh ghi 32 bit?
– Trả lời: Hai thanh ghị đặc biệt Hi và Lo lưu kết quả phép nhân 32 bit mỗi thanh ghi
• Phép nhân chiếm nhiều tài nguyên: Có thể cân đối về tài nguyên và thời gian
4/4/2014
29
Serial multiplication 1
4/4/2014
30
Serial multiplication 2
4/4/2014
31
Serial multiplication 3
4/4/2014
32
Serial multiplication 4
Check LSB and add if 1
4/4/2014
33
Serial multiplication 5
4/4/2014
34
Serial multiplication 6
Check LSB and add if 1
4/4/2014
35
Serial multiplication 7
Shift multiplicand left and
multiplier right
4/4/2014
36
Serial multiplication 8
Check LSB and add if 1
4/4/2014
37
Serial multiplication 9
• Mỗi bước là dịch và cộng nếu LSB bằng 1
→ Cần 1 bộ cộng, nhưng thực hiện nhiều
bước
4/4/2014
38
Bộ nhân song song
• Cần n x n bộ cộng 1bit cùng một lúc
• Nhanh hơn nhưng tốn nhiều phần cứng hơn
4/4/2014
39
Bộ dồn kênh (MUXes) và
phân kênh (DEMUXes)
• Multiplexers (MUXes)
– Lựa chọn nhiều đầu vào để ra một
đầu ra tương ứng
– Các tín hiệu được định tuyến
• DE multiplexers (DEMUXes)
– Chức năng ngược với bộ MUXes.
• Các bus(tín hiệu multi‐bit)
– Các bus có ký hiệu giống nhau
– E.g., in là giá trị 8‐bit (8 dây) và out
cũng là giá trị 8‐bit (8 dây)
4/4/2014
40
Encoders and decoders
• Bộ giải mã (Decoders)
– Chuyển đổi mã nhị phân thành 1‐hot
– Số nhị phân10 == 0100 trong 1‐hot
• Bộ mã hoá (Encoders)
– Chuyển đổi cấu trúc 1‐ hot thành nhị phân
– 1‐hot 00000010 = binary 001
4/4/2014
41
Bộ nhớ
• Bộ nhớ là mảng 2 chiều
các phần tử bit.
• Mỗi phần tử là 1 bit
• Cho phép cả một hàng
đọc ra một từ của dữ liệu
• Chỉ có thể truy nhập một
hàng tại một một thời điểm,
hàng cho phép là 1 - hot
4/4/2014
42
Làm thế nào để xây dựng
được một mảng nhớ
Sử dụng địa chỉ nhị
phân (binary address)
để truy nhập bộ nhớ và
mong muốn đầu ra là
các bytes!
4/4/2014
43
Đọc một mảng nhớ
4/4/2014
44
Các mảng SRAM
4/4/2014
45
SRAM from ARM
4/4/2014
46
Các khối quan trọng
• MUXes lựa chọn một đầu ra trong nhiều đầu vào: Đầu vào có thể là một bus
(multiple bits)
• DEMUXes chức năng ngược lại: chọn một đầu ra trong nhiều đầu ra tương
ứng với một đầu vào.
• DECODERS nhận giá trị nhị phân đầu vào chuyển đổi thành một đầu
ra(1‐hot): giá trị nhị phân 010 biến đổi thành 1‐hot đầu ra #2
• ENCODERS nhận 1‐hot đầu vào chuyển đổi thành giá trị nhị phân: 1‐hot đầu
vào #3 thành giá trị nhị phân 011
• ADDERS nhận đầu vào là A và B đầu ra là tổng (sum)
– Half‐adder: A+B = {Sum, CarryOUT}
– Full‐adder: A+B+CarryIN = {Sum, CarryOUT}
4/4/2014
47
Ví dụ: Xây dựng một bộ đếm
• Làm thế nào để tạo ra một bộ đếm?
– Đếm 0, 1, 2, 3, 4,
– Tăng giá trị sau mỗi một xung đồng hồ clock signal (trạng thái
thay đổi rõ rệt)
• Công việc cụ thể:
– Tính toán giá trị kế tiếp (e.g., 0→1, 1→2, etc.)
– Lưu trữ giá trị hiện tại
– Cập nhật giá trị tiếp theo
• Các bước thực hiện:
– Combinational:
• next_value = current_value + 1
– Sequential (state):
• No clock: current_value = current_value
• On clock: current_value = next_value
• Đây chính là cách bộ đếm chỉ đếm khi có tín hiệu đồng hồ.
4/4/2014
48
Tổ hợp logic của bộ đếm
• Đếm như thế nào?
– 0 →1, 1 → 2, 2 → 3
• Answer: An adder!
• Công việc cụ thể:
– Next_value = current_value + 1
• Tạo ra bộ cộng như thế nào?
– SUM = A XOR B
– CARRY = A AND B
• Nếu lớn hơn 1 bit, ví dụ như cộng 3 bit?
Input: 3 bits of A (A, A1, A2)
Input: 3 bits of B (B, B1, B2)
Output: 4 bits (SUM, SUM1, SUM2, COUT)
4/4/2014
49
Kết nối trong bộ cộng nhiều
bit (ripple carry add)
• Móc nối giá trị nhớ sang bộ cộng kế tiếp:
– Carry out là bit 0 → Carry in là 1
• Cần bộ cộng đầy đủ!:
– {CIN + A + B} → {SUM, COUT}
4/4/2014
50
Kiểm tra bộ cộng
• Phép cộng :
– 2 + 3 = 5
– A = 2 = 010
– B = 3 = 011
– Output 5 = 101
– Có nhớ ở bit thứ 3
4/4/2014
51
Sử dụng bộ cộng để tạo bộ đếm
• Giá trị kế tiếp: next_value = current_value + 1
– Có tất cả giá trị 3 bit
• Nối dây đầu vào và đầu ra?
– Kết nối các giá trị nhớ
– B = 001 (+1)
– A = current_value
– SUM = next value
4/4/2014
52
Dùng mạch chốt để tránh
vòng lặp hồi tiếp
• Next_value = current_value + 1
• Cần phải cách ly giá trị
current_value với next_value
• Các mạch chốt chỉ dịch chuyển
đầu ra tới đầu vào bằng tín hiệu
đồng hồ : state element
• Cập nhật current_value thành
new_value khi có tín hiệu đồng hồ.
4/4/2014
53
Tín hiệu đồng hồ hoạt động
như thế nào?
Time →
Khi clock 0→1 đầu vào của mạch chốt được lưu trữ và đầu ra sẽ được
cập nhật lại tương ứng với đầu vào mới.
4/4/2014
54
Tốc độ tín hiệu đồng hồ
• Khi sườn xung tăng (0→1)
• Giá trị next_value được lưu lại như là giá trị
hiện tại
• Giá trị mới current_value được đưa vào bộ
cộng để tạo ra giá trị mới của next_value
4/4/2014
55
Tổng quan: mức logic nối tiếp
• Các bước thực hiện?
– Phần tử trạng thái lưu giữ giá trị current
state
– Sử dụng tổ hợp logic để tính toán giá trị next
state từ current state
– Tạo ra vòng lặp hồi tiếp:
• Với mỗi clock signal
• The current state → next state
• Đầu vào và ra tác động qua lại lẫn nhau.
• Tốc độ đồng hồ (Clock speed) được xác định
bằng việc mức logic kế tiếp cập nhật nhanh như
thế nào.
4/4/2014
56
Tổng kết: các phần tử trạng thái
• Các phần tử trạng thái (memories) lưu trữ trạng thái.
• Chỉ cập nhật trong thời gian xác định (e.g., clock 0→1)
• Sử dụng các tổ hợp logic (combinational logic -> gates) để tính toán các
giá trị tiếp theo (the next value)
• Sử dụng các phần tử trạng thái (memories) để lưu trữ giá trị hiện thời (the
current value)
• Cập nhật giá trị hiện thời = bằng giá trị kế tiếp trong một xung đồng hồ.
4/4/2014
57
Các file đính kèm theo tài liệu này:
- kien_truc_may_tinhchapter_3_arithmetic_and_digital_logic_21_2016039.pdf