Bài giảng Điện tử số - Chương 6: Mạch làm toán - Nguyễn Trung Lập

6.4 Phép toán với số có 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, điều này có thể khắc phục được bằng cách dùng số có
dấu.
Với qui ước số dương có bit dấu là 0 và số âm có dấu là 1
Thí dụ 9: +1010 = 01010 +1510 = 01111 +2310 = 010111
-1010 = 10110 - 1510 = 10001 - 2310 = 101001
Có thể thấy rằng số âm của một số là số 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:
A-B = A+(-B ) 
pdf 23 trang thamphan 29/12/2022 680
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Điện tử số - Chương 6: Mạch làm toán - Nguyễn Trung Lập", để 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:

  • pdfbai_giang_dien_tu_so_chuong_6_mach_lam_toan.pdf

Nội dung text: Bài giảng Điện tử số - Chương 6: Mạch làm toán - Nguyễn Trung Lập

  1. ___Chương 6 Mạch làm toán VI - 1  CHƯƠNG 6: MẠCH LÀM TOÁN – SỐ BÙ – PHÉP TRỪ SỐ NHỊ PHÂN DÙNG SỐ BÙ 1 – PHÉP TRỪ SỐ NHỊ PHÂN DÙNG SỐ BÙ 2 – PHÉP TOÁN VỚI SỐ CÓ DẤU – MẠCH CỘNG ˜ Bán phần ˜ Toàn phần ˜ Cộng hai số nhiều bít – MẠCH TRỪ ˜ Bán phần ˜ Toàn phần ˜ Trừ hai số nhiều bit ˜ Cộng & trừ hai số nhiều bit trong một mạch – MẠCH NHÂN ˜ Mạch nhân cơ bản ˜ Mạch nhân nối tiếp - song song đơn giản – MẠCH CHIA ˜ Mạch chia phục hồi số bị chia ˜ Mạch chia không phục hồi số bị chia ___ ___ 6.1 Số bù Cho số dương N, n bit, các số bù của N được định nghĩa: n n Số bù 2: (N)2 = 2 - N (số 2 gồm bit 1 và n bit 0 theo sau) n Số bù 1: (N)1 = (N)2 -1 = 2 - 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 đây: (H 6.1) - Khi C=1, B là số bù 1 của b (B1 và b1 là bit LSB) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  2. ___Chương 6 Mạch làm toán VI - 3 Kết quả A-B là số 0 hoặc âm, phép tính được thực hiện như sau: Tính A - B: n n A - B = A-B+2 -1-2 +1 n n = A+(2 -B -1 ) - 2 +1 n = A+(B )1 - 2 +1 n = - {2 - [A+(B )1] -1} = - [A+(B )1]1 Vậy A-B có được bằng cách cộng số bù 1 của B vào A rồi lấy bù 1 của tổng và thêm dấu trừ . Như vậy để thực hiện phép tính trừ ta chỉ cần dùng phép cộng và phép đảo Thí dụ 3 : Tính 1001 - 11010 dùng số bù 1 Ta có A = 01001 (thêm số 0 vào để có 5 bit như số B B = 11010 ⇒ (B)1 = 00101 A-B = - [A+(B )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: Không có số tràn (hay số tràn =0) là dấu hiệu của kết quả âm (hoặc =0) và ta phải lấy bù 1, thêm dấu trừ để đọc kết quả cuối cùng: (01110)1 = - 10001 Thí dụ 4: Tính 10110 - 10110 A = 10110 và B = 10110 ⇒ (B)1 = 01001 Trong phép cộng đầu tiên không có số tràn, kết quả xem như số âm (hoặc =0) lấy bù 1 của kết quả ta được A-B =00000. b/ - A >B Kết quả A-B là số dương, phép tính được thực hiện theo qui tắc sau: Cộng A với (B)1 rồi thêm 1 và không quan tâm tới số nhớ cuối cùng Thí dụ 5: Tính 110101 - 100110 dùng số bù 1 A = 110101 và B = 100110 ⇒ (B)1 = 011001 Bỏ qua số nhớ cuối cùng, ta được kết quả A-B =001111. Trong hệ thập phân đó là bài toán 5310 - 3810 = 1510. ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  3. ___Chương 6 Mạch làm toán VI - 5 Thí dụ 8 : Tính 10110 - 10110 A = 10110 và B = 10110 ⇒ (B)2 = 01010 Bỏ qua số tràn ta được A-B =00000. 6.4 Phép toán với số có 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, điều này có thể khắc phục được bằng cách dùng số có dấu. Với qui ước số dương có bit dấu là 0 và số âm có dấu là 1 Thí dụ 9: +1010 = 01010 +1510 = 01111 +2310 = 010111 -1010 = 10110 - 1510 = 10001 - 2310 = 101001 Có thể thấy rằng số âm của một số là số 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: A-B = A+(-B ) Thí dụ 10: Tính A-B =01110 - 01001; B = 01001 = +910 ⇒ - 910 = 10111 Bit dấu =0 chỉ kết quả dương, bỏ bit tràn C’2. Vậy A-B = 00101 [(+1410 )-(+910)] = +510 Nếu A hoặc B đều dương hoặc âm , kết quả có thể cần thêm một bit do tràn số. Trong trường hợp này bit tràn đầu tiên thuộc kết quả và C’2 là bit dấu Thí dụ 11: Tính A+B với A = 01110 (+1410) và B = 01001 (+910) Kết quả là 010111 = +2310 với C’2 = 0 là bit dấu ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  4. ___Chương 6 Mạch làm toán VI - 7 6.5.2 Mạch cộng toàn phần (Full adder,FA) : Là mạch cộng hai bit ở cùng vị trí trong hai số nhị phân nhiều bit, nói cách khác, đây là mạch cộng hai bit , giả sử thứ n, và bit nhớ có được từ phép cộng hai bit thứ n-1 của hai số nhị phân đó. Ta có bảng sự thật Cn-1 BnB 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 được Sn và Cn như sau: S= C⊕ (A⊕ B ) n n− 1 n n Cn = An B n + Cn− 1 (A n ⊕ Bn ) (H 6.4) Có thể thấy một mạch cộng toàn phần gồm hai mạch cộng bán phần và một cổng OR 6.6 Cộng hai số nhị phân nhiều bit: 6.6.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 toàn phần duy nhất, số nhớ từ ngã ra Cn được làm trễ một bit nhờ FF D và đưa vào ngã vào Cn-1. Như vậy tốc độ của phép cộng tùy thuộc vào tần số xung CK và số bit phải thực hiện. (H 6.5) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  5. ___Chương 6 Mạch làm toán VI - 9 (H 6.7) Nhận thấy thời gian tính số nhớ giống nhau ở các tầng và bằng t1+t2 . t1 là thời gian truyền đồng thời qua các cổng AND và t2 là thời gian truyền qua cổng OR. Sơ đồ khối mạch cộng song song định trước số nhớ: (H 6.8) Trên thị trường hiện có IC 7483 (tương đương 4008 của CMOS) là IC cộng 4 bit theo kiểu định trước số nhớ. 6.6.4 Cộng hai số BCD Trên thị trường có các IC cộng số nhị phân, trong lúc trên thực tế nhiều khi chúng ta cần cộng các số BCD để cho kết quả là số BCD. Chúng ta tìm cách dùng IC 7483 (4008) để cộng hai số BCD Hai số BCD có trị từ 010 đến 910 khi cộng lại cho kết quả từ 010 đến 1810. Để đọc được kết quả 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à kết quả tương đương giữa 3 loại mã: thập phân, nhị phân và BCD Phân B C BCD đọc Nhị D TP S’=C’4 S’4 S’3 S’2 S’1 S =C4 S4 S3 S2 S1 theo 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 ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  6. ___Chương 6 Mạch làm toán VI - 11 Để cộng một chuỗi số, nhiều mạch cộng toàn phần sẽ được sử dụng, số nhớ được lưu lại để đưa vào mạch cộng bit cao hơn. Thí dụ 14 : Với 3 số 3-bit X (X3X2X1), Y(Y3Y2Y1), Z (Z3Z2Z1) mạch cộng có dạng (H 6.10) Ngưòi ta dùng mạch cộng loại này để thực hiện bài toán nhân. Để có kết quả nhanh hơn, có thể dùng mạch (H 6.11) (H 6.11) 6.7 Mạch trừ nhị phân: 6.7.1 Mạch trừ bán phần Là mạch trừ hai số 1 bit (H 6.12) (H 6.12) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  7. ___Chương 6 Mạch làm toán VI - 13 (H 6.15) Ta cũng có thể thực hiện mạch cộng trừ theo kiểu mắc nối tiếp (H 6.16) (H 6.16) Nếu hai số A, B là số 8 bit, có dấu, 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 . Khi OV =1 nghĩa là có số tràn (tức C7≠C8), thì số tràn C8 sẽ là bit dấu, S8 là một bit của kết quả và khi OV = 0 (tức C7=C8), thì S8 là bit dấu. 6.8 Mạch nhân Lấy thí dụ bài toán nhân 2 số 4 bit Y4 Y3 Y2 Y1 Số bị nhân X4 X3 X2 X1 Số nhân P14 P13 P12 P11 Tích từng phần P24 P23 P22 P21 P34 P33 P32 P31 P44 P43 P42 P41 S8 S7 S6 S5 S4 S3 S2 S1 Kết quả 6.8.1. Mạch nhân cơ bản Việc thực hiện bài toán nhân có thể xem như gồm hai bước: - Tính các tích từng phần: thực hiện bởi các cổng AND - Tính tổng của các tích từng phần: Áp dụng bài toán tổng chuỗi số (H 6.17) ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  8. ___Chương 6 Mạch làm toán VI - 15 - Số bị nhân đưa nối tiếp vào mạch theo thứ tự từ bit LSB. Các FF D có tác dụng dịch kết quả của phép nhân (là các tích từng phần) trước khi đưa vào mạch cộng để cộng các tích từng phần này. Thí dụ 15 : Xem bài toán nhân 10x14. Số nhân là 1010 (1010) và số bị nhân là 1110 (1410). Quá trình nhân 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 100011002 = 14010 Có thể thấy rằng ngã ra A luôn luôn bằng 0 vì bit LSB của số nhân = 0. Ngã ra B có giá trị của số bị nhân được làm trễ 1 bit (1 xung đồng hồ). Ngã ra C được làm trễ 2 bit và luôn bằng 0 (Giống như A). Ngã ra D giống như B nhưng trễ 3 bit. Điều này có thể so sánh với bài toán trên giấy Số bị nhân 1 1 1 0 Số nhân 1 0 1 0 A 0 0 0 0 B 1 1 1 0 0 C 0 0 0 0 0 0 D 1 1 1 0 0 0 0 Tích 1 0 0 0 1 1 0 0 Muốn không sử dụng mạch cộng số nhiều bit, người ta dùng mạch (H 6.20) (H 6.20) Mạch (H 6.20) cần (n-1) mạch cộng và mạch trễ (FF D) cho số nhân n bit. Các cổng AND cho phép các bit của số bị nhân đi qua khi số nhân là 1, số bị nhân (với số bit bất kỳ) được cho vào mạch nối tiếp với bit LSB vào đầu tiên. Ngã ra cổng 4 sau 4 xung Clock là 1110. Ngã ra cổng 3 luôn luôn bằng 0. Mạch cộng A cộng số ngã ra 3 và ngã ra 4 bị trễ 1 bit: 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ố bị nhân 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 ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  9. ___Chương 6 Mạch làm toán VI - 17 Dịch Yes No Số chia < Số bị chia ? Thương số = 1, Thương số =0, Trừ số bị chia Không trừ cho số chia Chia xong ? Yes No Kết thúc (H 6.23) 6.9.1 Phép chia có phục hồi số bị chia Thay vì phải thực hiện việc so sánh, người ta làm phép tính trừ một phần số bị chia cho số chia, nếu kết quả dương, thương số là 1, nếu kết quả âm, thương số là 0, trong trường hợp này phải phục hồi lại số bị chia bằng cách cộng số bị chia cho số chia trước khi dịch số bị chia sang trái 1 bit (hoặc số chia sang phải) để tiếp tục lặp lại bài toán cho đến khi kết thúc. (H 6.24) là sơ đồ giải thuật thực hiện phép chia có phục hồi số bị chia. ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  10. ___Chương 6 Mạch làm toán VI - 19 ♦ Số chia lớn hơn số bị chia (nhánh bên phải) Lưu ý là dịch số chia về bên phải 1 bit tương đương với chia số đó cho 2 Nhánh bên phải của sơ đồ trên gồm 2 bài toán: - Cộng số bị chia với số chia. - Trừ số bị chia cho 1/2 số chia (trừ bị chia cho số chia đã dịch phải) Hai bước này có thể gom lại thành một bước duy nhất như sau: - Cộng số bị chia với số chia đã dịch phải. ♦ Số chia nhỏ hơn số bị chia (nhánh bên trái) Sau khi lấy kết quả =1, lệnh kế tiếp thực hiện là trừ số chia đã dịch phải. Từ các kết quả nhận xét trên có thể thay sơ đồ (H 6.24) bởi sơ đồ giải thuật thực hiện phép chia không cần phục hồi số bị chia (H 6.25) số bị chia - số chia No Ye s Kết quả dương ? Thương sô = 1 Thương sô = 0 Dịch Dịch số bị chia + số chia số bị chia - số chia Chia xong? No Kết thúc (H 6.25) Dựa vào sơ đồ (H 6.25), các bước thực hiện bài toán chia như sau: ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  11. ___Chương 6 Mạch làm toán VI - 21 Thí dụ 2 và 3 dưới đây là bài toán 6 bước Thí dụ 2 : Chia 21 cho 6 được kết quả 3 và số dư là 3 Thí dụ 3 : Chia 21 cho 5, được kết quả 4 và số dư là 1. Tuy nhiên trên phép toán ta thấy phép cộng với số chia cuối cùng cho kết quả âm (số 1100) nên để điều chỉnh số dư ta phải cộng số chia vào và bỏ qua số tràn. ___ Nguyễn Trung Lập KỸ THUẬT SỐ
  12. ___Chương 6 Mạch làm toán VI - 23 (H 6.26) ___ Nguyễn Trung Lập KỸ THUẬT SỐ