CHƯƠNG 3 : CỔNG LOGIC & MẠCH SỐ
b) Mạch đếm (counter)
Mạch đếm là thiết bị nhận xung đếm ở lối vào. Lối ra của mạch đếm có thể là số nhị phân hay BCD.
Traïng thái lối ra phản ánh số xung đếm xuất hiện ở lối vào của bộ đếm. Có nhiều kiểu bộ đếm khác nhau, sau đây ta sẽ xét một vài loại bộ đếm thông dụng.
Bộ đếm nhị phân
Bộ đếm nhị phân (Binary Counter) là bộ đếm mà mã số lối ra là số nhị phân. Bộ đếm nhị phân cấu tạo từ các FF. Một bộ đếm nhị phân có lối ra n bit thì cần n FF.
Hình 3-31: Bộ đếm nhị phân 4 bit D C B A Number of clock 0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 0 0 1 1 3 0 1 0 0 4 0 1 0 1 5 0 1 1 0 6 0 1 1 1 7 1 0 0 0 8 1 0 0 1 9 1 0 1 0 10 1 0 1 1 11 1 1 0 0 12 1 1 0 1 13
1 1 1 0 14 1 1 1 1 15
0 0 0 0 16 (recycles)
Hình 3-31 là sơ đồ bộ đếm nhị phân không đồng bộ 4 bit.Các FF dùng loại JK. Với 4 bit bộ đếm sẽ đếm được 24 =16 trạng thái. Một chu trình đếm sẽ kết thúc tại xung thứ 15, xung thứ 16 bộ đếm sẽ bắt đầu lại chu trình đếm mới. Bộ đếm trên hình 3-31 gọi là bộ đếm khơng đồng bộ (asynchronous counter) vì mỗi FF đóng vai trị như là đồng hồ cho các FF tiếp theo. Sự không đồng bộ là ở chỗ: Các FF khơng thay đổi trạng thái vào thời điểm có xung đồng hồ. Chỉ FF A thay đổi trạng thái khi có đồng hồ, cịn FF B thay đổi trạng thái khi FF A thay đổi.
Bộ đếm trên đây còn gọi là bộ đếm MOD N=2n. Ở đây n là số FF tham gia trong bộ đếm.
Bộ đếm với số trạng thái < 2n
Nếu nối bộ đếm với n FF thì có thể đếm được N = 2n trạng thái. Để mạch chỉ đến với số trạng thái < 2n thì ần phải kiểm sốt trạng thái theo cách sau đây: Sử dụng đường dây CLR để RESET bộ đếm tương ứng với trạng thái mong muốn. Ví dụ để mạch đếm 10 (từ 0 đến 9) thì cần phải có mạch theo dõi trạng thái lối ra sao cho khi xuất hiện trạng thái 10 = 10102 thì cần RESET bộ đếm. Có thể sử dụng mạch như hình 3-32.
Hình 3-32: Kiểm sốt trạng thái cho bộ đếm 10
Mạch đếm xuống (down counter)
Trong một số trường hợp cần phải đếm xuống từ một giá trị cho trước. Để thực hiện việc này cần phải sử dụng mạch đếm xuống như hình 3-33.
Hình 3-33: Mạch đếm xuống 3 bit
Mạch đếm này có sơ đồ nối như mạch đếm lên 3 bit không đồng bộ, chỉ khác là lối ra đảo của các FF A và FF B được đưa đến lối vào đồng hồ của các FF B và FF C.
Giả sử trạng thái ban đầu của bộ đếm là 000.
Xung đồng hồ thứ nhất làm cho bộ đếm có giá trị lối ra laø 111.
Xung đồng hồ tiếp theo, kết quả của bộ đếm là 110. Cứ tiếp tục như vậy cho đến xung đồng hồ thứ 7, trạng thái lối ra của bộ đếm là 000. Xung đồng hồ thứ 8, trạng thái bộ đếm là 111 và một chu trình đếm mới được bắt đầu.
CHƯƠNG 4: BỘ LOGIC SỐ HỌC (ALU)
Bộ logic và số học của máy tính là một bộ phận thuộc vi xử lý. Hoạt động của ALU do bộ điều khiển chỉ dẫn, còn số liệu cho các phép tính của ALU được cung cấp từ bộ nhớ. ALU thực hiện một loạt các phép tính trên số liệu mà cơ bản là thực hiện các phép cộng, trừ, nhân, chia. Trong chương này chúng ta sẽ xem xét những nguyên lý cơ bản cần thiết để hiểu hoạt động của bộ ALU trong máy tính về phương diện phần cứng khi nó thực hiện các phép toán cộng, trừ nhị phân, cũng như các phép toán trên số BCD và số Hex.
4.1 CẤU TRÚC CỦA ALU
ALU cuûa vi xử lý bao gồm các thanh ghi, các mạch logic. Trong trường hợp đơn giản ALU bao gồm:
• 2 thanh ghi ( A và B) để chứa các toán hạng của phép toán .
• Một mạch logic được điều khiển bởi bộ điều khiển nhằm thực hiện phép toán mong muoán.
• 1 thanh ghi (C) để chứa kết quả.
Các thanh ghi A, B, C có thể là một trong các thanh ghi của vi xử lý như thanh ghi tích lũy (accumulator), các thanh ghi dùng chung (general registers).
4.2 BỘ CỘNG NHỊ PHÂN
Để tiến hành cộng 2 số nhị phân cần phải dùng bộ cộng (adder). Có 5 trường hợp khả dó đối với phép cộng nhị phân, đó là:
0+0=0 0+1=1 1+0=1
1+1=10 = 0 nhớ 1 sang bit có trọng số lớn hơn . 1+1+1=11=1 nhớ 1 sang bit có trọng số lớn hơn.
Trường hợp cuối cùng xảy ra khi cộng 2 bit 1 và có nhớ 1 từ bit có trọng số bé hơn. Sau đây là vài ví dụ:
011(3) 1001(9) 11.011(3.375) +110(6) +1111(5) +10.110(2.750)
Khơng cần thiết phải xem xét phép cộng của nhiều số nhị phân vì máy tính chỉ thực hiện phép cộng của 2 số nhị phân cùng một lúc. Khi có nhiều hơn 2 số được cộng thì máy tính sẽ cộng 2 số với nhau rồi lấy kết quả đó cộng với số tiếp theo.
Phép cộng là phép tính số học quan trọng nhất trong máy tính. Như chúng ta sẽ thấy sau này phép trừ, phép nhân và phép chia cuối cùng đều quy về phép cộng.
a) Boä cộng nhị phân một nửa (half-adder)
Trước hết xét phép cộng nhị phân giữa 2 bit và khơng có bit nhớ vào. Trường hợp này gọi là phép cộng nhị phân một nửa. Giả sử 2 biến là X và Y. Tổng là S và C là bit nhớ ra. Sử dụng bài toán thiết kế mạch logic ở chương 3, ta có sơ đồ khối mạch cộng một nửa như hình 4-1.
X S
Y C Half-adder
Hình 4-1: Sơ đồ khối bộ cộng nhị phân một nửa Bảng sự thật cho phép cộng nhị phân một nửa nhö sau:
X Y S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1
Từ bảng sự thật, dễ daøng suy ra: S= X ⊕ Y vaø C=XY.
Mạch logic thực hiện phép cộng nhị phân một nửa vẽ trên hình 4-2.
Hình 4-2: Mạch cộng nhị phân một nửa
b) Bộ cộng đầy đủ ( Full - adder)
Bộ cộng một nửa ở trên chưa tính đến khả năng có bit nhớ vào khi cộng 2 bit nhị phân. Hãy xét ví dụ sau:
1011 1110 0101 tổng riêng 11 bit nhớ 11001 tổng cuối cùng
Sự kiện có bit nhớ vào trong khi cộng 2 bit phải được tính tới trong phép cộng nhị phân. Lúc này phải sử dụng bộ cộng đầy đủ như sơ đồ khối hình 4-3.
X S Y Ci Co Full adder Hình 4-3: Bộ cộng nhị phân đầy đủ
Để xác định S và C0, chúng ta lại sử dụng bài toán thiết kế mạch logic ở chương 3. Trước hết xây dựng bảng sự thật mô tả phép cộng đầy đủ như sau:
X Y Ci S Co 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Từ bảng sự thật, viết biểu thức cho S và C0. Sau khi đơn giản, ta thu được: S = X ⊕ Y ⊕ Ci
Co = XY + Ci(X⊕Y)
Có thể dùng các cổng XOR, AND và OR để thực hiện mạch cộng nhị phân đầy đủ. Nhưng nếu lưu ý đến biểu thức logic cho mạch cộng một nửa ở trên, chúng ta có thể dùng 2 mạch cộng nhị phân một nửa ghép lại và thêm một cổng OR để có được mạnh cộng nhị phân đầy đủ như hình 4-4.
Hình 4-4: Mạch cộng đầy đủ
4.3 BIỂU DIỄN SỐ CĨ DẤU
Trong máy tính, số nhị phân được biểu diễn bởi tập hợp các thiết bị lưu trữ nhị phân (các flip flop). Một thanh ghi 8 bit biểu diễn 1 số nhị phân 8 bit. Sự biểu diễn như vậy gọi là biểu diễn giá trị của số. Tuy nhiên cần phải có cách để biểu diễn các số có dấu. Để biểu diễn dấu người ta dùng thêm 1 bit gọi là dấu (sign bit). Bit dấu
thường được thêm vào ở vị trí MSB. Bit dấu có giá trị bằng 0 đối với số dương, bằng 1 đối với số âm.
Ví dụ sau đây cho thấy biểu diễn số +52 và -52 (bit A6 là bit dấu).
A6 A5 A4 A3 A2 A1 A0
0 1 1 0 1 0 0
A6 A5 A4 A3 A2 A1 A0
1 1 1 0 1 0 0
Cách biểu diễn các số có dấu như trên đây gọi là biểu diễn biên độ- dấu, tuy nhiên máy tính khơng sử dụng cách biểu diễn này vì mạch logic để thực hiện các phép tốn trên chúng rất phức tạp. Thay vào đó người ta sử dụng rộng rãi hệ bù 2 (2’s complement system ) của số nhị phân.
Số bù 2 của một số nhị phân có được từ số nhị phân nguyên thủy (original binary) bằng cách lấy đảo số nhị phân nguyên thủy (bù 1) rồi cộng với 1.
Ví dụ1: số nhị phân nguyên thuûy cuûa 4510 là 101101. Số bù 2 của 101101 có được như sau:
101101 số nhị phân nguyên thủy 010010 lấy bù 1
1 cộng thêm 1 010011 là bù 2 của 101101
Ví dụ 2: Số nhị phân nguyên thuỷ của 1210 là 1100. Số bù 2 của 12, theo cách tính trên đây là 0100
Nhận xét: Cho một số nhị phân nguyên thuỷ coù n bit. Ta coù:
Số bù 2 + nhị phân nguyên thủy = 2n.
Ví dụ: Trường hợp 4 bit, bù 2 của 12 là 4, vì 4+12=16=24. Trường hợp 5bit, bù 2 của 25 là 7, vì 7+25=32=25.
4.4 BIỂU DIỄN SỐ CÓ DẤU DÙNG HỆ BÙ 2
Hệ bù 2 của số có dấu được biểu diễn như sau:
• Nếu là số dương, thì giá trị của nó được biểu diễn dưới dạng nhị phân nguyên thủy với bit dấu là 0 ở vị trí MSB.
• Nếu là số âm thì giá trị của nó đưực chuyển sang dạng bù 2, sau đó thêm bit dấu là 1 tại MSB.
0 1 0 1 1 0 1 1 0 1 0 0 1 1
Heä bù 2 được sử dụng vì như chúng ta sẽ thấy sau này, nó cho phép thực hiện phép trừ cũng như phép cộng. Điều này rất quan trọng vì máy tính dùng chỉ một mạch logic để làm phép cộng cũng như phép trừ, do đó có thể đơn giản phần cứng.
Cách tổng quát để lấy bù 2 của 1 số là:
a) viết số đó dưới dạng nhị phân rồi thêm bit dấu bằng 0. b) nếu là số dương thì giữ nguyên kết quả ở bước a) c) nếu là số âm thì lấy bù 2 tồn bố số có được ở bước a) Ví dụ 1 : Lấy bù 2 của –9 ( 4 bit giá trị và 1 bit dấu)
a) vieát 9 dưới dạng số nhị phân với bit dấu bằng không 01001
b) vì số âm nên lấy bù 2 tồn bộ số 01001. Kết quả bằng10111 là bù 2 của – 9.
Bieán đổi từ dạng bù 2 về dạng nhị phân nguyên thủy
Lấy bù 2 của số bù 2 sẽ được số nhị phân nguyên thủy. Ví dụ 1: số nhị phân nguyên thủy là 10110
bù 1 của nó là 01001 cộng thêm 1 1 01010 là bù 2 của 10110 lấy bù 2 của 01010 lấy bù 1 của 01010 10101 cộng thêm1 1
10110 là số nhị phân nguyên thủy
Các trường hợp đặc biệt
Khi bit dấu bằng 1 cịn tất cả các bit khác đều bằng 0 thì nó tương đương với 2N trong đó N là số bit của phần giá trị. Ví dụ:
1000 = - 23 = -8 10000 = - 24 = - 16 100000 = -25 = - 32
Vuøng giá trị mà một số có dấu gồm N+1 bit có thể biểu diễn trong hệ bù 2 là: -2N đến + (2N -1 ) goàm 2N+1 giaù trị kể cả giá trị 0.
Sau đây là bảng các số có dấu trong hệ bù 2 (3 bit giá trị và 1 bit dấu)
Decimal value Signed binary
Using 2’s complement Hecxadecimal Equivalent
-8 1000 8 -7 1001 9 -6 1010 A -5 1011 B -4 1100 C -3 1101 D -2 1110 E -1 1111 F +0 0000 0 +1 0001 1 +2 0010 2 +3 0011 3 +4 0100 4 +5 0101 5 +6 0110 6 +7 0111 7 Số bit của số dưới dạng bù 2 có thể là tùy ý, tuy nhiên trong máy tính thường sử dụng 8, 16 hoặc 32 bit (kể cả bit dấu). Ví dụ thanh ghi AX=FFFF là thanh ghi 16 bit. Nó biểu thị cho số –1 trong hệ 10. Thanh ghi BX=7FFF biểu thị số dương 32767 trong hệ 10.
Trong trường hợp biểu diễn có dấu dùng 16 bit thì vùng giá trị các số là từ – 32767d đến +32768d. Các số từ 0000h đến 7FFFh là các số dương.Các số từ 8000h đến FFFFh là các số âm.
4.5 PHÉP CỘNG TRONG HỆ BÙ 2
Quy taéc:
• Phép cộng trong hệ bù 2 được tiến hành tương tự phép cộng nhị phân, mọi sự tràn số đều bị bỏ qua (khơng tính).
• Nếu bit dấu là 0 thì kết quả là số dương
• Nếu bit dấu là 1 thì kết quả là số âm trong hệ bù 2
4.6 PHÉP TRỪ TRONG HỆ BÙ 2
Quy tắc:
• Viết cả số bị trừ và số trừ dưới dạng bù 2 có dấu (số dương ở dạng nhị phân nguyên thủy bit dấu là 0, số âm chuyển sang dạng bù 2 có dấu).
• Lấy bù 2 của số trừ (đã được chuyển sang hệ bù 2 có dấu ở bước thứ nhất). Điều này sẽ làm số trừ là dương chuyển thành số âm và ngược lại. Nói cách khác, ta thay đổi dấu của số trừ.
• Sau khi lấy bù 2 số trừ ở bước thứ hai, nó được cộng với số bị trừ. Bit dấu của kết quả cho biết số dương hay số âm. Mọi sự tràn số bị bỏ qua. Nếu kết quả là số âm thì phải lấy bù 2 để biết giá trị nhị phân của nó.
• Hai số phải có cùng số bit.
Ý nghóa: Theo trên ta thấy rằng bằng cách sử dụng hệ bù 2, máy tính thực hiện phép trừ như phép cộng.
4.7 COÄNG VÀ TRỪ BCD
a) Coäng BCD
BCD là một bộ mã sử dụng 4 bit nhị phân để biểu diễn các số thập phân. Phép cộng BCD được thực hiện như đối với phép cộng nhị phân cho từng nhóm bit BCD. Có 2 trường hợp sau đây:
• Tổng 2 số nhỏ hơn hoặc bằng 9: xét trường hợp 5+4 5 0101 BCD for 5 4 0100 BCD for 4 9 1001 BCD for 9 xét trường hợp 45+33 45 0100 0101 BCD for 45 33 0011 0011 BCD for 33 78 0111 1000 BCD for 78 • Tổng hai số lớn hơn 9: Xét 6+7 6 0110 BCD for 6 7 0111 BCD for 7
13 1101 invalid code group for BCD
Để sửa sai người ta cộng thêm 6 (0110) vào kết quả nhö sau: 1101
0110
0001 0011 BCD for 13
Như vậy là trong phép cộng BCD, hệ số sửa sai (0110) sẽ được cộng vào kết quả nếu:
• Kết quả cộng 2 số BCD tạo ra invalid code for BCD (số lớn hơn 1001)
• Phép cộng BCD tạo ra bit nhớ sang vị trí bit có trọng số lớn hơn.
b) Trừ BCD
Phép trừ BCD được tiến hành như đối với phép trừ nhị phân và phải trừ đi hệ số sửa sai (0110) khỏi kết quả để sửa sai trong những trường hợp sau:
• Kết quả trừ 2 số BCD tạo ra invalid code for BCD (số lớn hơn 1001)
• Phép trừ BCD tạo ra bit mượn sang vị trí bit có trọng số lớn hơn. ví dụ: 17 0001 0111
-9 0000 1001
0000 1110 (1110 invalid code for BCD) - 0110
0000 1000
4.8 CỘNG VÀ TRỪ HEX
a) Cộng hai số HEX
Cộng trực tiếp các digit của 2 số hex như cộng thập phân. Nếu kết quả lớn hơn 15 thì trừ đi 16 và nhớ 1 sang bit có trọng số lớn hơn.
Sau đây là vài ví dụ cộng 2 số hex. Ví dụ 1:
97H + 98H
1810 1510 Kết quả trung gian 12FH
Ví dụ 2:
+ 3FH
11102510 Kết quả trung gian B9H
b) Trừ hai số hex
Cũng như với phép cộng, có thể trừ 2 số hex như trừ thập phân với lưu ý rằng số mượn là 16. Sau đây là vài ví dụ về trừ 2 số hex.
Ví dụ 1:
FCH - 25H
1310 710 kết quả trung gian D7H
Ví dụ 2:
A7H - 3BH
610 1210 kết quả trung gian 6CH
BÀI TẬP CHƯƠNG 2,3 & 4
1. Đổi các số thập phân sau đây thành số nhị phân và số Hex: a) 24 b) 15.25 c) 512