Giáo trình Kỹ thuật số - Chương 6: Mạch làm toán
6.1 Số bù
Cho số dương N, n bit, các số bù của N được định nghĩa:
Số bù 2: (N)2 = 2n - N (số 2n gồm bit 1 và n bit 0 theo sau)
Số bù 1: (N)1 = (N)2 -1 = 2n - N - 1
Thí dụ 1: N = 1010
Số bù 2 của N là (N)2 = là 10000 - 1010 = 0110
Và số bù 1 của N là (N)1 = 0110 - 1 = 0101
Thí dụ 2: N = 110010101100 ⇒ (N)2 = 001101010100 và (N)1 = 001101010011
Nhận xét:
- Để có số bù 2 của một số, bắt đầu từ bit LSB (tận cùng bên phải) đi ngược về bên
trái, các bit 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 của một số, ta đảo tất cả các bit của số đó.
Từ các nhận xét trên ta có thể thực hiện một mạch tạo số bù 1 và 2 sau
Cho số dương N, n bit, các số bù của N được định nghĩa:
Số bù 2: (N)2 = 2n - N (số 2n gồm bit 1 và n bit 0 theo sau)
Số bù 1: (N)1 = (N)2 -1 = 2n - N - 1
Thí dụ 1: N = 1010
Số bù 2 của N là (N)2 = là 10000 - 1010 = 0110
Và số bù 1 của N là (N)1 = 0110 - 1 = 0101
Thí dụ 2: N = 110010101100 ⇒ (N)2 = 001101010100 và (N)1 = 001101010011
Nhận xét:
- Để có số bù 2 của một số, bắt đầu từ bit LSB (tận cùng bên phải) đi ngược về bên
trái, các bit 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 của một số, ta đảo tất cả các bit của số đó.
Từ các nhận xét trên ta có thể thực hiện một mạch tạo số bù 1 và 2 sau
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật số - Chương 6: Mạch làm toán", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- giao_trinh_ky_thuat_so_chuong_6_mach_lam_toan.pdf
Nội dung text: Giáo trình Kỹ thuật số - Chương 6: Mạch làm toán
- ___Chương 6 Mạch làm toán VI - 2 - Khi C=0, B là số bù 2 của b. Thật vậy, các biểu thức logic của B theo b và C là: B1= b 1 ⊕ C B2= b 2 ⊕( C + b1 ) B3= b 3 ⊕( C + b1+ b 2 ) - Khi C=1 , các ngã ra cổng OR luôn bằng 1, các cổng EX - OR luôn có một ngã vào bằng 1 nên ngã ra là đảo của ngã vào còn lại, ta được: B1= b 1 ⊕ 1 = b1 B2= b 2 ⊕( 1 + b1 ) = b 2 ⊕ 1 = b2 B3= b 3 ⊕( 1 + b1 + b 2 ) = b 3 ⊕ 1 = b3 - Khi C=0 B1= b 1 ⊕ 0 = b1 B2= b 2 ⊕( 0 + b1 )= b 2⊕ b 1 = b2 nếu b1=0 và b2 nếu b1 = 1 B3= b 3 ⊕ (0 + b1 + b 2 )= b 3⊕ (b 1+ b 2 ) = b3 nếu b1 và b2 đều =0 = b3 nếu (b1 và/hoặc b2 = 1) Như vậy tất cả các bit sau bit 1 thứ nhất tính từ bit LSB đều bị đảo và B chính là số bù 2 của b Chúng ta cũng có thể thiết kế mạch tạo số bù hai bằng cách dùng FF RS, có ngã vào R, S tác động mức cao, kết hợp với các cổng logic như (H 6.2). Mạch này dùng khá tiện lợi khi cần thực hiện bài toán cộng và trừ nhiều bit kiểu nối tiếp. (H 6.2) Bắt đầu, Preset mạch để ngã ra Q = 1, cổng G3 đóng, G2 mở, 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, Q = 1, G2 đóng, G3 mở, số B đi qua cổng G2 và bị đảo. Ở ngã ra được số bù 2 của B. 6.2 Phép trừ số nhị phân dùng số bù 1: Cho hai số dương A và B có n bit (nếu số bit khác nhau, ta thêm số 0 vào , mà không làm thay đổi trị, để cả hai có cùng số bit) a/ - A≤B ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 4 Trong phép tính 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. Tóm lại, để thực hiện bài toán trừ, A-B, ta cộng A với bù 1 của B. Dựa vào sự có mặt hay không của số tràn mà có biện pháp xử lý kết quả: - Nếu số tràn =0, kết quả là số âm (hoặc =0) , ta phải lấy bù 1 của kết quả và thêm dấu - để đọc. - Nếu số tràn =1, ta cộng thêm 1 vào để có kết quả cuối cùng (bỏ qua bit tràn) là một số dương. 6.3 phép trừ số nhị phân dùng số bù 2: Phép toán dùng số bù 1 có một bất tiện là ta phải thêm bài toán cộng 1 vào, để tránh việc này ta dùng phép toán với số bù 2 Cho hai số dương A và B có n bit a/ - A<B Tính A-B: n n A-B = A-B+2 -2 n n = A+(2 - B ) - 2 n = A+(B )2 - 2 n = - {2 - [A+(B )2] } = - [A+(B )2]2 Vậy A-B có được bằng cách cộng số bù 2 của B vào A 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 cộng Thí dụ 6: Tính 1001 - 11010 dùng số bù 2 Ta có A = 01001 (thêm số 0 vào để có 5 bit như số B) B = 11010 ⇒ (N2)2 = 00110 A-B = - [A+(B )2]2 = - (01001+00110) =- (01111)2 = - (10001) Ta được lại kết quả trên Để thấy dấu trừ được nhận ra như thế nào, ta viết lại phép toán: Không có số tràn là dấu hiệu của kết quả âm và ta phải lấy bù 2, thêm dấu trừ để đọc kết quả cuối cùng: (01111)2 = - 10001 b/ - A ≥B Kết quả A-B là 0 hoặc số dương, phép tính được thực hiện theo qui tắc sau: n Cộng A với (B)2 và không quan tâm tới số nhớ ở vị trí 2 Thí dụ 7 : Tính 110101 - 100110 dùng số bù 2 A = 110101 và B = 100110 ⇒ (B)2 = 011010 Có số tràn, kết quả là số dương. Bỏ qua số tràn và đọc ngay kết quả mà không phải biến đổi: 001111 = 1510 ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 6 Thí dụ 12: Tính A-B với A =10010 (-1410) và B =01001 (+910) 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 rút ra qui tắc sau đây: Nếu C1 = C2 thì C’2 là bit tràn, bỏ đi và nếu C1≠ C2 thì C’2 là bit dấu. Thí dụ 13: Tính A-B với A =011101 (+2910) và B =0110 (+610) B B = 000110 = +610 ⇒ - 610 = 111010 Ghi chú: - Trong tất cả trường hợp, ta luôn luôn thực hiện phép cộng do đó có thể bỏ qua phép trừ - Khi cộng hai số hạng cùng dấu thì có thể xảy ra hiện tượng tràn, lúc đó bit dấu dời về bên trái một 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 các số hạng - Ngoài ra kết quả còn được xử lý tùy vào kết quả so sánh sự khác nhau của hai số nhớ C1 và C2 (nhờ một cổng EX-OR). 6.5 Mạch cộng nhị phân: 6.5.1 Mạch cộng bán phần (Half adder, HA): Là mạch cộng hai số 1 bit Bảng sự thật kết quả Mạch Ký hiệu (H 6.3) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 8 6.6.2 Cộng song song Trong cách cộng song song, các bit được đưa đồng thời vào các mạch cộng toàn phần và số nhớ của kết quả ở bit thấp được đưa lên bit cao hơn (H 6.6). (H 6.6) Chính vì phải chờ số nhớ mà tốc độ cộng còn hạn chế. Muốn nâng tốc độ cộng lên, người ta thực hiện phép cộng song song định trước số nhớ. 6.6.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= A n B n+ C n− 1 (A n⊕ B n ) Đặt Pn = AnBnB và Gn = An ⊕ Bn Ta xác định được C1, C2, C3 như sau: ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 10 18 1 0 0 1 0 1 1 0 0 0 24 Nhận thấy: - Khi kết quả <10 mã nhị phân và BCD hoàn toàn giống nhau - Khi kết quả ≥10 để có được mã BCD ta phải cộng thêm 6 cho mã nhị phân Để giải quyết vấn đề hiệu chỉnh này trước tiên ta sẽ thực hiện một mạch phát hiện kết quả trung gian của mạch cộng hai số nhị phân 4 bit. Mạch này nhận vào kết quả trung gian của phép cộng 2 số nhị phân 4 bit và cho ở ngã ra Y = 1 khi kết quả này ≥10, ngược lại, Y=0. Bảng sự thật 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ì từng cặp trị có C’4 S’4 S’3 S’2 giống nhau thì S’1 = 0 và S’1 = 1 Dùng bảng Karnaugh xác định được Y Y = C’4 + S’4 (S’3 + S’2) Và mạch cộng hai số BCD được thực hiện theo sơ đồ (H 6.9) (H 6.9) Vận hành: - IC thứ nhất cho kết quả trung gian của phép cộng hai số nhị phân. - IC thứ hai dùng hiệu chỉnh để có kết quả là số BCD: - Khi kết quả < 10, IC 2 nhận ở ngã vào B số 0000 (do Y=0) nên kết quả không thay đổi. - Khi kết quả trung gian ≥ 10, IC 2 nhận ở ngã vào B số 01102 = 610 (do Y=1) và kết quả được hiệu chỉnh như đã nói trên. 6.6.5 Mạch cộng lưu số nhớ Nhắc lại, một mạch cộng toàn phần (FA) nhận 3-bit ở ngã vào và cho 2 ngã ra : - Một là tổng của các bit có cùng trọng số với các bit ở ngã vào - Một là số nhớ có trọng số gấp đôi trọng số của các bit ở ngã vào ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 12 6.7.2 Mạch trừ có số nhớ (mạch trừ toàn phần) Là mạch trừ 2 bit có quan tâm tới số nhớ mang từ bit trước Rn-1 An BnB 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 Bảng sự thật Dùng bảng Karnaugh xác định được các hàm Dn và Rn Dn= R n− 1 ⊕ (An⊕ B n ) Rn = An Bn + R n− 1 (A n⊕ B n ) Và mạch (H 6.13) (H 6.13) Nhận thấy cấu tạo mạch trừ giống như mạch cộng, chỉ khác ở mạch tạo số nhớ 6.7.3 Trừ số nhiều bit Ta có mạch trừ số nhiều bit bằng cách mắc song song các mạch trừ 1 bit (H 6.14) (H 6.14) 6.7.4 Cộng và trừ số nhiều bit trong một mạch Nhắc lại để 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 (hoặc cộng với số bù 2), như vậy để thực hiện phép trừ A - B ta tính A + (B)1 + 1 . Mạch (H 6.6) đưọc sửa đổi để có thực hiện phép cộng và trừ tùy vào ngã điều khiển C (H 6.15) - Khi C=0, ta có mạch cộng - Khi C =1, ta có mạch trừ ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 14 (H 6.17) Dùng IC cộng 4 bit (7483 hoặc 4008) mạch nhân hai số 4 bit có dạng (H 6.18) (H 6.18) 6.8.2. Mạch nhân nối tiếp - song song đơn giản (H 6.19) (H 6.19) Trong mạch này, một trong hai số được đưa nối tiếp vào mạch (trong trường hợp này là số bị nhân) và số còn lại đưa song song vào mạch. - Số nhân (b4b3b2b1) đưa song song vào mạch qua các cổng AND đồng thời kiểm soát các cổng này: ứng với bit 1 số bị nhân qua mạch để tới mạch cộng (cổng 2 và 4); ứng với bit 0 ngã ra cổng AND bằng không (cổng 1 và 3) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 16 và mạch cộng C 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 Lưu ý là ở mạch (H 6.20) kết quả cho ở ngã ra mạch cộng C với bit LSB ra đầu tiên, tuy nhiên mạch này chưa quan tâm tới số nhớ. Mạch (H 6.21) cho kết quả với số nhớ . (H 6.21) Và (H 6.22) là một mạch thực tế dùng ghi dịch 4 bit có ngã vào/ra song song, một mạch cộng 4 bit và một chip 4 cổng AND 2 ngã vào để thực hiện bài toán nhân. (H 6.22) 6.9 Mạch chia Nguyên tắc của phép chia số nhị phân là thực hiện phép so sánh một phần của số bị chia (số bit đầu tiên bằng với số bit của số chia) với số chia, nếu số bị chia lớn hơn số chia thì thương số =1, thực hiện phép trừ, ngược lại thì thương số =0, sau đó dịch trái phần còn lại của số bị chia một bit (hoặc dịch phải số chia 1 bit) rồi tiếp tục thực hiện bài toán so sánh giống như trên. Công việc được lặp lại cho đến khi chấm dứt. Sơ đồ (H 6.23) tóm tắt giải thuật thực hiện bài toán chia ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 18 Dịch số bị chia - số chia Yes Kết quả No dương ? Thương sô = 1 Thương sô = 0 số bị chia + số chia Yes Chia xong? No Kết thúc (H 6.24) Để thực hiện phép chia theo sơ đồ trên, ngoài các thanh ghi để chứa các số bị chia, số chia , số thương người ta phải dùng thanh ghi chứa số bị chia được phục hồi. 6.9.2 Phép chia không phục hồi số bị chia Hệ thống sẽ đơn giản hơn nếu chúng ta dùng phép chia không cần phục hồi số bị chia theo nguyên tắc như dưới đây. Quan sát giản đồ (H 6.24) ta thấy có 2 trường hợp: ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 20 - 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ừ (cộng số bù 2) số bị chia cho số chia Để đơn giản, giả sử số chia và bị chia đều dương (MSB = 0), số bị chia gồm 6 bit và số chia gồm 4 bit. Thí dụ 1: Thực hiện bài toán chia 2110 = 0101012 cho 710 = 01112. Số bù 2 của 0111 là (0111)2 = 1001 Ghi chú: (1) Số 1 trên mũi tên chỉ rằng kết quả phép toán trừ là số âm, bước kế tiếp là dời và cộng số chia (2) Số 0 trên mủi tên chỉ rằng kết quả phép toán trừ là số dương, bước kế tiếp là dời và trừ số chia (cộng số bù 2) Thương số có được từ các số tràn mà trên phép tính ta ghi trong vòng 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 bước cộng/trừ. Tuy nhiên nếu ta chia 21 cho 1 thì cần tới 6 bước cộng trừ để có thương số 6 bit. Một cách tổng quát số bước của bài toán bằng với số bít của số bị chia. Ta có thể làm lại bài toán với 6 bước cộng/trừ ((thêm 3 bit 0 cho số bị chia) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
- ___Chương 6 Mạch làm toán VI - 22 (1) Cộng số chia vào để điều chỉnh số dư Mạch thực hiện các bài toán này cho ở (H 6.26). Trong (H 6.26) bước đầu tiên được thực hiện bởi các cổng EX-OR trên cùng có ngã điều khiển = 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ố. Và mạch cộng cuối cùng được thiết kế kết hợp với các cổng AND để xử lý kết quả của số dư như trong hai thí 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 mở để thực hiện bài toán cộng với số chia để điều chỉnh số dư. ___ Nguyễn Trung Lập KỸ THUẬT SỐ