Kĩ thuật số - Chương 6: Mạch làm toán
Bạn đang xem tài liệu "Kĩ thuật số - Chương 6: Mạch làm toán", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- ki_thuat_so_chuong_6_mach_lam_toan.pdf
Nội dung text: Kĩ thuật số - Chương 6: Mạch làm toán
- Tổ Tin Học CHƯƠNG 6: MẠCH LÀM TOÁN 9 SỐ BÙ 9 PHÉP TOÁN VỚI SỐ BÙ 1 9 PHÉP TOÁN VỚI SỐ BÙ 2 9 PHÉP TOÁN VỚI SỐ BÙ 2 KỂ CẢ BIT DẤU 9 MẠCH CỘNG • Bán phần • Toàn phần • Cộng nhiều bit 9 MẠCH TRỪ • Bán phần • Toàn phần • Cộng trừ trong một mạch 9 MẠCH NHÂN 9 MẠCH CHIA I. SỐ BÙ Cho số dương N, n bit, các số bù của N được định nghĩa như sau: n Số bù 2: (N)2 = 2 – N. n Số bù 1: (N)1 = (N)2 – 1 = 2 – N –1. Ví dụ 1: Ta cho N = 1010. Số bù 2 của N là (N)2 = 10000 – 1010 = 0110. Và số bù 1 của N là (N)1 = 0110 – 1 = 0101. Ví dụ 2: Ta cho N = 1100 1010 1100. Số bù 2 của N là (N)2 = 0011 0101 0100. Và số bù 1 của N là (N)1 = 0011 0101 0011. Nhận xét: - Để có số bù 2 của một số, bắt đầu từ bit LSB (bit tận cùng bên phải), đi ngược về bên trái, các số sẽ giữ nguyên cho đến lúc gặp bit 1 đầu tiên, sau đó đảo tất cả các bit còn lại. - Để có số bù 1 ta đảo tất cả các bit của số đó. Từ nhận xét trên, ta có thể tạo mạch với số bù 1 và bù 2 (hình dưới). C B b 1 1 B2 b2 B3 b3 Hình: Mạch tạo số bù 1 và bù 2 (3 bit). Khi C = 1, mạch tạo ngã ra là số nhị phân bù 1 (của số ngã vào). Khi C = 0, mạch tạo ngã ra là số nhị phân bù 2 (của số ngã vào). Ta xét biểu thức ngã ra theo các ngã vào như sau: B1 = b1 ⊕ C B2 = b2 ⊕ (C + b1 ) B3 = b3 ⊕ (C + b1 + b2 ) Khi C = 1, các ngã ra của cổng OR luôn bằng 1, các cổng EX-OR luôn có 1 ngã vào bằng 1 nên ngã ra là đảo của ngã vào còn lại. Trang 73 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số B1 = b1 ⊕1 = b1 B2 = b2 ⊕ (1+ b1 ) = b2 ⊕1 = b 2 B3 = b3 ⊕ (1+ b1 + b2 ) = b3 ⊕1 = b3 Khi C = 0. B1 = b1 ⊕ 0 = b1 B2 = b2 ⊕ (0 + b1) = b2 ⊕ b1 B3 = b3 ⊕ (0 + b1+ b2) = b2 ⊕ (b1 + b2) Vậy tất cả các bít sau bit đầu tiên bằng 1 (tính từ bít trọng số nhỏ nhất - LSB) đều bị đảo trạng thái. Đây chính là số bù 2 của b. Chúng ta có thể thiết kế mạch tạo số bù 2 bằng cách dùng FF RS. Mạch này dùng thuận tiện khi cần thực hiện bài toán cộng và trừ nhiều bit nối tiếp. 0 G2 S Pr Q B (B)2 G1 CK 1 R Cl Q G3 CK Hình: Mạch tạo số bù 2 dùng FF RS. Bắt đầu, Preset mạch để ngã ra Q = 1, các cổng G2 mở, G3 đóng cho số B đi qua mà không bị đảo cho đến khi có bit 1 đầu tiên đến, cổng G1 mở cho xung đồng hồ đi qua, FF RS được Reset Q = 0 và Q =1, G3 mở, G2 đóng, số B đi qua cổng G2 và bị đảo. Ở ngã ra được số bù 2 của B. II. CÁC PHÉP TOÁN NHỊ PHÂN TRÊN SỐ BÙ 1 1. Trường hợp N1<N2 Cho số 2 số dương N1 và N2 có n bit (nếu số bit khác nhau ta phải thêm 0 vào, mà không làm thay đổi giá trị, để cả hai có cùng số bit). Ta tính: n n N1 – N2 = N1 – N2 + 2 – 1 – 2 + 1 n n = N1 + (2 – N2 – 1) – 2 + 1 n = N1 + (N2)1 – 2 + 1 n = – {2 – [N1 + (N2)1] – 1} = – [N1 + (N2)1]1 Vậy N1 – N2 có được bằng cách cộng số bù 1 của N2 vào N1 rồi lấy bù 1 của tổng và thêm dấu trừ. Như vậy, ta có thể thực hiện phép trừ chỉ cần dùng phép cộng và phép đảo. Ví dụ: Tính 1001 – 11010 dùng số bù 1. Ta có: N1 = 01001 (thêm vào số 0 để có 5 bit như N2). N2 = 11010 → (N2)1 = 00101 N1 – N2 = – [N1 + (N2)1]1 = –(01001 + 00101) = – (01110)1 = –(10001) Trong hệ thập phân đây là bài toán: 910 – 2610 = –1710. Để thấy dấu trừ được nhận ra như thế nào, ta viết lại phép toán. Chủ biên Võ Thanh Ân Trang 74
- Tổ Tin Học N 01001 + 1 N2 00101 Số tràn→ 0 01110 Không có số tràn là dấu hiệu của số âm, ta phải lấy bù 1 và thêm dấu trừ để đọc kết quả cuối cùng: –(01110)1 = – 10001. 2. Trường hợp N1 ≥ N2 Kết quả N1 – N2 là số 0 hoặc số dương, phép tính được thực hiện theo qui tắc sau: Cộng N1 với (N2)1 rồi cộng thêm 1 mà không quan tâm đến số nhớ. Ví dụ 1: Tính 110101 – 100110. N1 = 110101 và (N2)1 = 011001. N 110101 + 1 (N2)1 011001 1 001110 + 1 Số tràn→1 001111 Bỏ qua số nhớ cuối cùng ta được kết quả N1 – N2 =001111. Trong hệ thập phân đây là bài toán: 5310 – 3810 = 1510. Trong phép tính trên có số tràn chứng tỏ kết quả là số dương. Số 1 cộng thêm vào xem như lấy từ số nhớ đem qua. Ví dụ 2: Tính 10110 – 10110. N1 = 10110 và (N2)1 = 01001. N 10110 + 1 (N2)1 01001 11111 + 1 Số tràn→1 00000 Trong phép cộng đầu tiên, không có số tràn, kết quả xem như số âm của số bù và khi cộng thêm 1 thì xuất hiện số tràn mà ta đã bỏ qua. Vậy N1 – N2 = 00000. III. CÁC PHÉP TOÁN NHỊ PHÂN TRÊN SỐ BÙ 2 1. Trường hợp N1<N2 Các toán dùng số bù 1 bất tiện vì ta phải cộng 1 vào, để tránh việc này, ta dùng phép toán dùng số bù 2. Tương tự, cho 2 số nhị phân dương N1 và N2 có n bit. Ta tính: n n N1 – N2 = N1 – N2 + 2 – 2 n n = N1 + (2 – N2) – 2 n = N1 + (N2)2 – 2 n = – {2 – [N1 + (N2)2]} = – [N1 + (N2)2]2 Vậy N1 – N2 có được bằng cách cộng số bù 2 của N2 vào N1 rồi lấy bù 2 của tổng và thêm dấu trừ. Như vậy, ta đã chuyển phép tính trừ thành phép tính cộng. Ví dụ: Tính 1001 – 11010 dùng số bù 2. N1 = 01001 và (N2)2 = 00110. Trang 75 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Vậy N1 – N2 = – [N1 + (N2)2]2 = –[01001+00110]2 = –(01111)2 = – (10001). Tương tự như trên, để thấy trừ được nhận ra như thế nào, ta viết lại phép toán. N 01001 + 1 (N2)2 00110 Số tràn→0 01111 Không có số tràn là dấu hiệu của số âm. Ta phải lấy bù 2 và thêm dấu trừ để có kết quả cuối cùng. 2. Trường hợp N1 ≥ N2 Kết quả N1 – N2 là số 0 hoặc số dương, phép tính được thực hiện theo qui tắc n sau: Cộng N1 với (N2)2 mà không quan tâm đến số nhớ ở vị trí 2 . Ví dụ 1: Tính 110101 – 100110. N1 = 110101 và (N2)2 = 011010. N 110101 + 1 (N2)2 011010 Số tràn→1 001111 Có số tràn, đây là kết quả số dương. Bỏ qua số nhớ cuối cùng, không cần biến đổi ta được kết quả N1 – N2 =001111. Trong hệ thập phân đây là bài toán: 5310 – 3810 = 1510. Ví dụ 2: Tính 10110 – 10110. N1 = 10110 và (N2)1 = 01010. N 10110 + 1 (N2)2 01010 Số tràn→1 00000 Bỏ qua số tràn, ta được N1 – N2 = 00000. IV. CÁC PHÉP TOÁN DÙNG SỐ BÙ 2 KỂ CẢ BIT DẤU Cho tới giờ, chúng ta thực hiện các phép toán với số không dấu và đôi khi xuất hiện dấu trừ trong kết quả. Trong máy tính, đều này có thể khắc phục được bằng cách dùng số có dấu. Với qui ước chung là: Số dương bit dấu là 0, số âm bit dấu là 1. Ví dụ 1: Ta lấy một số số âm và dương đối nhau như dưới đây (lưu ý là hai số đối nhau cộng lại phải bằng 0). +10 = 01010 +15 = 01111 +23 = 010111 –10 = 10110 –15 = 10001 –23 = 101001 Có thể thấy rằng, số âm của một số là bù 2 của nó kể cả bit dấu. Với cách biểu diễn số có dấu, phép toán trừ trở thành phép toán cộng. N1 – N2 = N1 + (–N2) Ví dụ 2: Tính N1 – N2 = 01110 – 01001. N2 = 01001 = +910 Î –910 = 10111. Chủ biên Võ Thanh Ân Trang 76
- Tổ Tin Học C2↓ C1↓ 1111 ← Số nhớ 01110 + 10111 1 0 0101 C’2↑ Dấu↑ Bit dấu bằng 0 chỉ kết quả là số dương, bỏ số tràn C’2. Vậy N1 – N2 = 00101. Trong thập phân đây là bài toán [14 + (–9)] = 5. Nếu N1, N2 đều dương hoặc âm, kết quả có thể cần thêm 1 bit do tràn số. Trong trường hợp này bit tràn đầu tiên thuộc kết quả C’2 là bit dấu. Ví dụ 3: Tính N1 + N2 = 01110 + 01001 (Bài toán: 1410 + 910). Kết quả là: 010111 (2310). Với C’2 = 0 là bit dấu. C2↓ C1↓ 01 ← Số nhớ 01110 + 01001 010111 Dấu = C’2↑ Ví dụ 4: Tính N1 – N2 = 10010 – 01001 (Bài toán: –1410 – 910). Tương tự như trên: (N2)2 = 10111. C2↓ C1↓ 1011 ← Số nhớ 10010 + 10111 101001 Dấu = C’2↑ Một lần nữa C’2 chỉ bit dấu. Kết quả là: 101001 Ù–2310 (010111 Ù+2310). Từ các kết quả trên, ta rut ra qui tắc sau: Nếu C1 = C2 thì C’2 là bit tràn bỏ đi. Nếu C1 ≠ C2 thì C’2 là bit dấu. Ví dụ 5: Tính N1 – N2 = 011101 – 0110 (Bài toán: 2910 – 610). Tương tự như trên, N2 phải có số bit bằng N1: N2 = 000110 Î (N2)2 = 111010. C2↓ C1↓ 1 1 1 ← Số nhớ 0 11101 + 1 11010 1 0 10111 C’2↑ Dấu↑ Trường hợp này C1 = C2 nên C’2 là bit tràn, ta bỏ đi. Trang 77 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Ghi chú: - Trong tất cả trường hợp, ta luôn thực hiện phép cộng do đó có thể bỏ qua phép trừ. - Khi hai số hạng cùng dấu thì có thể xảy ra hiện tượng tràn, lúc đó bít dấu dời về bên trái 1 bit. Trong các trường hợp khác thì dấu của kết quả cùng vị trí với dấu của số hạng. - Ngoài ra, kết quả còn được xử lý bằng cách so sánh hai số nhớ C1 và C2 như nói trên. V. MẠCH CỘNG NHỊ PHÂN 1. Mạch cộng nhị phân bán phần (Half adder, HA) Là mạch cộng 2 số 1 bit. Vào Ra a b S C a S 0 0 0 0 S = a ⊕ b a S b HA 0 1 1 0 C = a.b b C 1 0 1 0 C 1 1 1 1 Bảng sự thật. Kết quả 2. Mạch cộng nhị phân toàn phần (Full adder, FA) Là mạch cộng 2 số 1 bit ở cùng vị trí trong 2 số nhị phân nhiều bit, nói cách khác, đây là mạch cộng 2 bit (giả sữ thứ n) và bít nhớ từ phép cộng 2 bit thứ n–1 của 2 số nhị phân đó. Ta có bảng sự thật như dưới đây. Cn–1 Bn An Sn Cn 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 Dùng bảng đồ Karnaugh ta xác định Sn và Cn, ta được: Sn = Cn–1 ⊕ (An ⊕ Bn) Cn = AnBn + Cn–1(An ⊕ Bn) Chủ biên Võ Thanh Ân Trang 78
- Tổ Tin Học C S n–1 n Cn–1 a S Sn An S’ HA C’’ An a S b C Bn Cn Cn HA C’ Bn b C Hình: Sơ đồ mạch và ký hiệu của mạch cộng toàn phần. Có thể thấy, mạch cộng toàn phần gồm 2 mạch cộng bán phần và một cổng OR. VI. CỘNG HAI SỐ NHỊ PHÂN NHIỀU BIT 1. Cộng nối tiếp Trong cách cộng nối tiếp, người ta dùng các ghi dịch để chuyển các bit vào một mạch cộng duy nhất, số nhớ từ ngã ra Cn được làm trể 1 bit nhờ FF D và đưa vào ngã vào Cn–1. Vậy tốc độ của phép cộng tùy thuộc vào các xung CK và số bit phải thực hiện. A An S FA B Bn Cn–1 Cn Q D CK FF D Hình: Sơ đồ mạch cộng nối tiếp. 2. Cộng song song Trong cách cộng song song, mỗi mạch cộng toàn phần dùng cho 1 bit, số nhớ của bit trước sẽ được mang qua bit sau, chính vì lý do này mà tốc độ cộng còn hạn chế. Muốn nâng tốc độ cộng, người ta thực hiện phép cộng song song định trước số nhớ. A4 B4 A3 B3 A2 B2 A1 B1 C0 FA 4 FA 3 FA 2 FA 1 C C C C4 S4 3 S3 2 S2 1 S1 Hình: Sơ đồ mạch cộng song song. 3. Mạch cộng song song định trước số nhớ Để tăng tốc độ của mạch cộng song song, người ta tạo trước các số nhớ để đưa đồng thời vào mạch cộng. Từ biểu thức xác định số nhớ: Cn = An.Bn + Cn–1(An ⊕ Bn) Trang 79 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Ta đặt: Pn = An.Bn và Gn = An ⊕ Bn Ta xác định C1, C2, C3, như sau: P1 C1 G C = P + C G 1 1 1 0 1 C 0 t1 t2 P2 C1 C2 = P2 + C1G2 P1 C2 = P2 + P1G2 + C0G1G2 G 2 G1 C0 t1 t2 P3 C 1 P2 C3 = P3 + C2G3 G3 C3 = P3 + P2G3 + P1G2G3 + C0G1G2G3 P1 G2 G1 C0 t1 t2 Ta nhận thấy thời gian tính số nhớ bằng nhau ở tất cả các tầng và bằng t1 + t2 là thời gian truyền qua hai cổng AND và OR. Dưới đây là sơ đồ mạch cộng song song định trước số nhớ. b4 a4 b3 a3 b2 a2 b1 a1 C0 Tính Gn và Pn G4 P4 G3 P3 G2 P2 G1 P1 Tính số nhớ b4 a4 C3 b3 a3 C2 b2 a2 C1 b1 a1 Tính tổng C4 S4 S3 S2 S1 Trên thị trường hiện có IC 7483 (tương đương với 4008 của CMOS) là IC cộng 4 bit theo kiểu định trước số nhớ. Chủ biên Võ Thanh Ân Trang 80
- Tổ Tin Học VDD B3 C4 S3 S2 S1 S0 C0 B4 S4 C4 C0 GND B1 A1 S1 16 15 14 13 12 11 10 9 16 15 14 13 12 11 10 9 4008 7483 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 A B A B A B A V A S A B V S B A 3 2 2 1 1 0 0 ss 4 3 3 3 CC 2 2 2 Hình: Sơ đồ chân IC 4008 và IC 7483. 4. Mạch cộng hai số BCD Dùng IC 7483 (hoặc 4008) để cộng 2 số BCD. Hai số BCD có trị từ 0 đến 9 khi cộng lại cho kết quả từ 0 đến 18. Để đọc được kết quả dưới dạng BCD, ta phải hiệu chỉnh kết quả có được từ mạch cộng nhị phân. Dưới đây là bảng tương đương của 3 mã: thập phân, nhị phân, BCD. BCD Số nhị phân Số BCD đọc TP theo S’=C’ S’ S’ S’ S’ S=C S S S S 4 4 3 2 1 4 4 3 2 1 NP 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 2 0 0 0 1 0 0 0 0 1 0 2 3 0 0 0 1 1 0 0 0 1 1 3 4 0 0 1 0 0 0 0 1 0 0 4 5 0 0 1 0 1 0 0 1 0 1 5 6 0 0 1 1 0 0 0 1 1 0 6 7 0 0 1 1 1 0 0 1 1 1 7 8 0 1 0 0 0 0 1 0 0 0 8 9 0 1 0 0 1 0 1 0 0 1 9 10 0 1 0 1 0 1 0 0 0 0 16 11 0 1 0 1 1 1 0 0 0 1 17 12 0 1 1 0 0 1 0 0 1 0 18 13 0 1 1 0 1 1 0 0 1 1 19 14 0 1 1 1 0 1 0 1 0 0 20 15 0 1 1 1 1 1 0 1 0 1 21 16 1 0 0 0 0 1 0 1 1 0 22 17 1 0 0 0 1 1 0 1 1 1 23 18 1 0 0 1 0 1 1 0 0 0 24 Ta nhận thấy: - Khi kết quả <10 mã nhị phân và BCD trùng nhau. - Khi kết quả ≥ 10, để có được mã BCD ta phải cộng thêm 6 cho mã nhị phân. Trang 81 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Như vậy, ta sẽ thực hịên một mạch có ngã ra Y = 1 khi phát hiện kết quả phép cộng ≥ 10. TP C’4 S’4 S’3 S’2 Y 0,1 0 0 0 0 0 2,3 0 0 0 1 0 4,5 0 0 1 0 0 6,7 0 0 1 1 0 8,9 0 1 0 0 0 10,11 0 1 0 1 1 12,13 0 1 1 0 1 14,15 0 1 1 1 1 16,17 1 0 0 0 1 18 1 0 0 1 1 Ta không dùng ngã vào S’1 vì ứng với từng cặp trị số C’4S’4S’3S’2 giống nhau thì S’1 = 0 và S’1 = 1 (Y không phụ thuộc vào S’1). Dùng bảng đồ Karnaugh xác định Y ta được như sau: Y = C’4 + S’4(S’3 + S’2) Chục A4 C4 A3 A S 2 4 A C A S 4 4 1 3 Đơn vị A 4008 S 3 2 A2 S4 B4 S1 A1 S3 B3 4008 S2 B2 B4 S1 B1 C0 B3 B2 B1 C0 Hình: Sơ đồ mạch cộng hai số BCD dùng IC 4008. 5. Mạch cộng lưu số nhớ Nhắc lại mạch cộng toàn phần FA, nhận 3 bit ở ngã vào và 2 bit ở ngã ra. Để cộng một chuỗi số, nhiều mạch cộng toàn phần được sử dụng, số nhớ được lưu lại để đưa vào mạch cộng bit cao hơn. Chủ biên Võ Thanh Ân Trang 82
- Tổ Tin Học Ví dụ: Tính X + Y + Z, với X, Y, Z là số nhị phân 3 bit. Y3 X3 Y2 X2 Y1 X1 FA FA FA Z3 Z2 Z1 FA FA FA FA S5 S4 S3 S2 S1 Hình: Mạch cộng 3 số 3 bit dùng FA. Người ta dùng mạch cộng này để thực hiện một bài toán nhân. Để có kết cộng quả nhanh hơn ta có thể dùng mạch như hình dưới đây. Z3 Y3 X3 Z2 Y2 X2 Z1 Y1 X1 FA FA FA S S C C FA FA FA S5 S4 S3 S2 S1 Hình: Mạch cộng 3 số 3 bit dùng FA (cải tiến). VII. MẠCH TRỪ NHỊ PHÂN 1. Mạch trừ nhị phân bán phần Là mạch trừ 2 số 1 bit. Vào Ra A b D R a D 0 0 0 0 D = a ⊕ b b 0 1 1 1 R = a.b 1 0 1 0 R 1 1 0 0 Bảng sự thật. Kết quả Trang 83 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số 2. Mạch trừ nhị phân có số nhớ (mạch trừ toàn phần) Là mạch trừ 2 bit có quan tâm đến số nhớ mang từ bit trước. Rn–1 Bn An Dn Rn 0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 Dùng bảng đồ Karnaugh ta xác định Dn và Rn, ta được: Dn = Rn–1 ⊕ (An ⊕ Bn) R n = An Bn + Rn−1 (An ⊕ Bn ) Rn–1 Dn A D n n An SUB Bn B Rn n Rn–1 Rn Hình: Sơ đồ và ký hiệu của mạch trừ toàn phần. 3. Trừ nhiều bit Ta có mạch trừ nhiều bit bằng cách mắc song song các mạch trừ 1 bit. A4 B4 A3 B3 A2 B2 A1 B1 R0 SUB 4 SUB 3 SUB 2 SUB 1 R R R R4 D4 3 D3 2 D2 1 D1 Hình: Sơ đồ mạch trừ nhiều bit. 4. Cộng và trừ nhiều bit trong một mạch Để thực hiện phép toán trừ, người ta cộng với số bù 1 và cộng thêm 1 (cộng với số bù 2). Như vậy, để thực hiện phép tính A – B ta tính A + (B)1 + 1. Mạch cộng toàn phần được sửa đổi để có thể thực hiện phép toán cộng và trừ tuỳ vào ngã vào điều khiển C. - C = 0, ta có mạch cộng. - C = 1, ta có mạch trừ. Chủ biên Võ Thanh Ân Trang 84
- Tổ Tin Học B4 B3 B2 B1 C A4 A3 A2 A1 FA 4 FA 3 FA 2 FA 1 C C C C4 S4 3 S3 2 S2 1 S1 Hình: Sơ đồ cộng và trừ chung một mạch. Ta cũng có thể thực hiện mạch cộng trừ theo kiểu mắc nối tiếp. Tạo số bù 2 B C C=1: Cộng C=0: Trừ A C FA K FF D Hình: Mạch cộng hoặc trừ nối tiếp (chung mạch). Nếu A, B là số 8 bit, kết quả được xử lý bởi mạch dò số tràn, thiết kế dựa vào biểu thức: OV = C7 ⊕ C8 hoặc OV = A8 B8 S 8 + A8 B8 S8 . Khi OV = 1 nghĩa là có số tràn, thì C8 là bit dấu, S8 là 1 bit kết quả; khi OV = 0 thì S8 là bit dấu. VIII. MẠCH NHÂN 1. Mạch cơ bản Lấy ví dụ nhân 2 số 4 bit như sau: Y4 Y3 Y2 Y1 Thừa số 1 X4 X3 X2 X1 Thừa số 2 P14 P13 P12 P11 P24 P23 P22 P21 Các tích P34 P33 P32 P31 từng phần P44 P43 P42 P41 S8 S7 S6 S5 S4 S3 S2 S1 Kết quả Việc thực hiện phép nhân có thể chia làm 2 bước. - Tính các tích từng phần, được thực hiện bởi các cổng AND. - Tính tổng các tích từng phần: Áp dụng bài toán tổng chuỗi số. Trang 85 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Y4 Y3 Y2 Y1 X4 X3 X2 X1 P23 P14 P22 P13 P21 P12 FA FA FA P33 P24 P32 P31 FA FA FA P43 P34 P42 P41 FA FA FA FA FA FA S8 S7 S6 S5 S4 S3 S2 S1 Hình: Sơ đồ mạch nhân số 4 bit. Dùng IC cộng 4 bit (7483 hoặc 4008) mạch nhân 2 số 4 bit có dạng như dưới đây. b2 b1 a4 a3 a2 a1 a4 a3 a2 a1 B 4 B3 B2 B1 A4 A3 A2 A1 C 4 S4 S3 S2 S1 C0 b3 a4 a3 a2 a1 B 4 B3 B2 B1 A4 A3 A2 A1 C 4 S4 S3 S2 S1 C0 b 4 a4 a3 a2 a1 B 4 B3 B2 B1 A4 A3 A2 A1 C 4 S4 S3 S2 S1 C0 P P P P P P P P 8 7 6 5 4 3 2 1 Hình: Sơ đồ mạch nhân dùng IC cộng 4 bit. Chủ biên Võ Thanh Ân Trang 86
- Tổ Tin Học 2. Mạch nhân nối tiếp – song song đơn giản b1 1 b2 2 D b3 a4a3a2a1 3 D D Adder Output b 4 D D D 4 Hình: Mạch nhân nối tiếp – song song đơn giản. Trong loại mạch này, 1 trong 2 thừa số được đưa nối tiếp vào mạch, thừa số còn lại được đưa song song vào mạch. Thừa số a4a3a2a1 được đưa nối tiếp vào mạch, bắt đầu từ bit LSB (a1). Các FF D có tác dụng dịch kết quả của phép nhân trước khi đưa vào mạch cộng để tính các tích từng phần này. Thừa số b4b3b2b1 được đưa song song vào mạch như hình trên. Ví dụ: Xét bài toán 10×14. Thừa số thứ nhất là 1010, thừa số thứ 2 là 1110. Quá trình nhân được giải thích như sau: P8 P7 P6 P5 P4 P3 P2 P1 A 0 0 0 0 0 0 0 0 B 0 0 0 1 1 1 0 0 C 0 0 0 0 0 0 0 0 D 0 1 1 1 0 0 0 0 Output 1 0 0 0 1 1 0 0 Ta thấy rằng: 100011002 = 14010. Ngã ra A luôn bằng 0 vì LSB của số nhân bằng 0. Ngã ra B có giá trị nhân được làm trể 1 bit (1 xung đồng hồ). Ngã ra C được làm trể 2 bit (luôn bằng 0 – giống A). Ngã ra D được làm trể 3 bit. Điều này có thể so sánh với bài toán trên giấy như dưới đây. 1 1 1 0 Thừa số 1 1 0 1 0 Thừa số 2 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 Tích Muốn không sử dụng mạch cộng số nhiều bit, người ta sử dụng mạch theo sơ đồ sau: a4a3a2a1 =1110 b =1 b =0 b =1 b =0 4 3 2 1 4 3 2 1 Output D Adder D Adder D Adder A B C Hình: Mạch cộng số 4 bit. Trang 87 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số Mạch trên cần (n–1) mạch cộng và mạch trể cho số nhân n bit. Các cổng AND cho phép các bit của thừa số thứ nhất đi qua khi bit của thừa số 2 là 1. Thừa số thứ nhất với số bit bất kỳ cho vào mạch nối tiếp với bit LSB đầu tiên. Ngã ra cổng AND thứ tư sau 4 xung Clock có giá trị là 1110. Ngã ra cổng 3 là 0000 (do b3 = 0). Vậy Adder A sẽ tính giá trị ngã ra cổng AND 4 bị trể 1 bit và ngã ra cổng AND 3 là: 11100 + 0000. 0 0 0 0 1 1 1 0 0 1 1 1 0 0 Tương tự, mạch cộng B cộng số nhị phân ở ngỏ ra cổng AND 2 với kết quả A được làm trể 1 bit. 1 1 1 0 1 1 1 0 0 0 1 0 0 0 1 1 0 Và cộng tiếp với mạch cộng C, kết quả ở mạch cộng A trể 1 bit. Ta được kết quả ở ngã ra của mạch cộng C. 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 Lưu ý: Các mạch trên là mạch cộng chưa quan tâm đến số nhớ. Để thiết kế mạch cho kết quả với số nhớ ta thiết kế như dưới đây. a4a3a2a1 =1110 b4=1 b3=0 b2=1 b1=0 4 3 2 1 Output D FA D FA D FA D FA C4 C3 C2 C1 C0 Hình: Mạch nhân số 4 bit có quan tâm số nhớ. Để thiết kế mạch thực tế dùng ghi dịch 4 bit có ngã vào/ra song song và một chíp 4 cổng AND (IC 4 cổng AND) để thực hiện bài toán nhân, có sơ đồ như dưới đây. a4a3a2a1 =1110 b4=1 b3=0 b2=1 b1=0 4 3 2 1 C4 FA C3 FA C2 FA C1 FA C0 Output D D D D Clock Hình: Mạch nhân 4 bit dùng tổ hợp các IC. Chủ biên Võ Thanh Ân Trang 88
- Tổ Tin Học IX. MẠCH CHIA Tương tự như mạch nhân, mạch chia có thể xem như một chuỗi mạch trừ liên tiếp của số bị chia và số chia. Tuy nhiên, tuỳ theo kết quả của mạch trừ dương hay âm mà có cách xử lý khác nhau. Dưới đây là qui tắc: - Số chia (SC) lớn hơn số bị chia (SBC) (SBC–SC 0), thương số là 1, dịch phải số chia 1 bit, thực hiện bài toán trừ số chia và số bị chia (cộng với số bù 2). Để đơn giản, ta xét số bị chia và số chia đều dương (MSB = 0), số bị chia gồm 6 bit và số chia gồm 4 bit. Ví dụ 1: Thực hiện bài toán 2110 = 0101012 chia 710 = 01112. Số bù 2 của 710 = 01112 là (0111)2 = 1001. 010101 1001 011100 ↑ 0111 100111 ↑ 1001 10000 Số dư 0 1 1 Thương Dấu ↑ trong ô chỉ lên số 1, tức là kết quả phép trừ là số âm, bước kế tiếp là dời và cộng với số chia – cộng với 0111. Dấu ↑ trong ô chỉ lên số 0, tức là kết quả phép trừ là số dương, bước kế tiếp là dời và trừ với số chia (cộng với số bù 2) – cộng với 1001. Thương số là số có được từ các số tràn, như hình trên. Kết quả thương là 011 (3) và số dư là 0000 (0). Bài toán trên cho kết quả với 3 mức cộng/trừ. Tuy nhiên, nếu chia 21 cho 1 ta cần 6 phép cộng trừ để có thương số 6 bit. Một cách tổng quát, số mức của bài toán bằng với số bit của số bị chia (ta có thể thêm vào phép chia trên 3 số 0 trước số bị chia để có được thương số là 6 bit). Ví dụ 2: Thực hiện bài toán 2110 = 0101012 chia 610 = 01102. Số bù 2 của 610 = 01112 là (0111)2 = 1010. Trang 89 Chủ biên Võ Thanh Ân
- Giáo trình Kỹ Thuật Số 0 0 0 010101 1 0 1 0 0 1 0 1 0 1 ↑ 0 1 1 0 0 1 0 1 1 0 ↑ 0 1 1 0 0 1 1 0 0 1 ↑ 0110 0 11110 ↑ 0110 101001 ↑ 1010 10011 Số dư 0 0 0 0 1 1 Thương số Ví dụ 3: Thực hiện bài toán 2110 = 0101012 chia 510 = 01102, được kết quả là 4 dư 1. Tuy nhiên, trên phép toán ta thấy phép cộng với phép chia cuối cùng cho kết quả âm (1100), để điều chỉnh ta phải cộng vào số chia và bỏ qua số tràn. Số bù 2 của 510 = 01012 là (0111)2 = 1011. 0 0 0010101 1 0 1 1 0 1 0 1 1 1 ↑ 0 1 0 1 0 1 1 0 0 0 ↑ 0101 0 11011 ↑ 0101 100000 ↑ 1011 010111 ↑ 0101 01100 0101← Cộng vào số chia, để 0 00 1 0 0 10001 điều chỉnh số dư đúng. Thương số = 4 Số dư = 1 Trong mạch chia hình dưới đây, bước đầu tiên được thực hiện bởi các cổng EXOR trên cùng, có ngã vào điều khiển là 1 để thực hiện bài toán trừ. Sau bước thứ nhất, bit thứ tư của mạch cộng (S4) sẽ quyết định phép toán sau đó là cộng (S4=1) hay trừ (S4=0) số bị chia với số chia. Số nhớ của bài toán cuối cùng (bước 6) là bit LSB của thương số. Mạch cộng cuối cùng được thiết kế kết hợp các cổng AND để xử lý kết quả của số dư như trong hai ví dụ 2 và 3. Nếu kết quả của bài toán ở bước 6 có S4=1 thì cổng AND được mở để thực hiện bài toán cộng với số chia để điều chỉnh số dư. Chủ biên Võ Thanh Ân Trang 90
- Tổ Tin Học 0 0 0 D D D D D D d d d d 6 5 4 3 2 1 1 2 3 4 1 C4 S S S S 4 3 2 1 C4 C4 C4 C4 C4 0 O6 O5 O4 O3 O2 O1 R4 R3 R2 R1 Th••ng s• S• d• Trang 91 Chủ biên Võ Thanh Ân