Từ cổng đến bộ cộng
Cộng hai bit cho ra hai bit, một bit tổng và một bit số nhớ
Một cộng một bằng hai, viết cơ số hai thành hai chữ số: hàng đơn vị của kết quả là tổng, hàng hai là số nhớ; số nhớ chỉ là bit kết quả, không phải bộ nhớ.
Sum (tổng) là chữ số hàng đơn vị của kết quả, carry (số nhớ) là chữ số hàng hai. Số nhớ là một bit kết quả, không phải bộ nhớ.
Xem lời đọc
Lưới ô SRAM giữ được số nhưng chưa tính ra số mới. Ta cần phép tính, trước hết là cộng hai bit. Một cộng một bằng hai, và hai viết theo cơ số hai thành hai chữ số. Chữ số hàng đơn vị của kết quả, ở đây là không, ta gọi là tổng. Chữ số hàng hai, ở đây là một, ta gọi là số nhớ. Số nhớ chỉ là một bit của kết quả, không phải bộ nhớ. Hai bit vào có bốn cách đặt, nên bảng chân lý có bốn hàng. Ta cần một mạch cho ra tổng và số nhớ từ hai bit vào.
Cộng hai bit có bốn cách đặt: 0+0 = 00, 0+1 = 01, 1+0 = 01, 1+1 = 10 (viết cơ số hai). Chữ 'carry' trong tiếng Anh nghĩa là 'mang sang'; số nhớ chỉ là một dây tín hiệu, mất khi đầu vào đổi, khác bộ nhớ giữ bit.
Nửa cộng dùng một cổng XOR cho tổng và một cổng AND cho số nhớ
Cột tổng của bảng là XOR, cột số nhớ là AND; hai cổng chung hai đầu vào là mạch cộng hai bit.
Half adder (nửa cộng) là mạch cộng hai bit, gồm XOR cho tổng và AND cho số nhớ.
Xem lời đọc
Ta nhìn lại bảng chân lý của phép cộng hai bit. Cột tổng ra mức một khi hai bit vào khác nhau. Đó đúng là cổng XOR. Cột số nhớ ra mức một khi cả hai bit vào là mức một. Đó đúng là cổng AND. Vậy ta nối hai bit vào cả cổng XOR lẫn cổng AND. Mạch hai cổng này gọi là nửa cộng. Ví dụ một cộng một, XOR ra mức không, AND ra mức một.
Nửa cộng chỉ có hai đầu vào nên không nhận được số nhớ từ hàng bên cạnh; vì vậy gọi là 'nửa'. Dựng từ NAND: XOR cần bốn NAND, AND là NAND cộng cổng đảo, tổng cộng nhiều cổng hơn một NAND đơn.
Toàn cộng nhận thêm số nhớ vào, nên có ba đầu vào, dựng từ hai nửa cộng và một cổng OR
Từ hàng hai phải cộng ba bit (hai bit số và số nhớ vào); hai nửa cộng nối nhau rồi cổng OR gom hai số nhớ; ra tổng và số nhớ ra.
Full adder (toàn cộng) cộng ba bit, gồm hai bit số và số nhớ vào, cho ra tổng và số nhớ ra.
Xem lời đọc
Cộng số nhiều bit thì từ hàng hai trở đi có thêm số nhớ từ hàng trước. Hàng ấy phải cộng ba bit, nên nửa cộng chưa đủ. Ta ghép hai nửa cộng nối nhau. Nửa cộng thứ nhất cộng hai bit số. Nửa cộng thứ hai cộng tổng của nửa cộng đầu với số nhớ vào. Hai nửa cộng đều có thể cho số nhớ, nên một cổng OR gom chúng lại. Ví dụ một cộng một cộng một bằng ba, viết thành tổng một và số nhớ ra một. Vậy toàn cộng cộng ba bit và cho ra tổng cùng số nhớ ra.
Nửa cộng đầu cho tổng một và số nhớ một; nửa cộng hai cộng tổng một với số nhớ vào. Hai nửa cộng không cho số nhớ một cùng lúc, nên OR chỉ gom, không tạo tổ hợp mới. Bảng chân lý toàn cộng có tám hàng: tổng bằng một khi số bit mức một là lẻ, số nhớ ra bằng một khi từ hai bit mức một trở lên.
Bộ cộng nhiều bit nối số nhớ ra của mỗi toàn cộng vào số nhớ vào của toàn cộng kế tiếp
Mỗi hàng bit một toàn cộng gọi là một tầng; số nhớ ra tầng này là số nhớ vào tầng kế; bốn tầng cộng hai số bốn bit.
Ripple-carry adder (bộ cộng truyền số nhớ) nối các toàn cộng thành chuỗi; mỗi toàn cộng là một tầng.
Xem lời đọc
Muốn cộng hai số bốn bit, ta dùng bốn toàn cộng, mỗi hàng bit một cái. Mỗi toàn cộng như thế gọi là một tầng. Tầng đầu tiên cộng hai bit hàng đơn vị, số nhớ vào là mức không. Số nhớ ra của tầng này đi thẳng vào số nhớ vào của tầng kế. Tầng kế lại cho số nhớ ra vào tầng sau nữa. Cứ thế đến tầng cuối, cho kết quả bốn bit cùng một số nhớ ra ở cuối. Bộ cộng nhiều bit chỉ là các toàn cộng giống nhau, lặp lại.
Tầng đầu có số nhớ vào là 0 vì không có hàng nào đứng trước. Số nhớ ra của tầng cuối cho biết kết quả tràn thêm một bit. Tên ripple (gợn sóng) tả số nhớ lan lần lượt qua các tầng. 'Tầng' ở bài 7 cùng nghĩa với bài 4: một khối trong chuỗi, ở đây là một toàn cộng.
Số nhớ đi lần lượt qua từng tầng, nên tầng sau chỉ có kết quả đúng khi số nhớ đã tới
Ví dụ cộng 0111 với 0001: ba tầng đầu nhận và chuyển tiếp số nhớ một, tầng cuối nhận số nhớ rồi cho tổng một; kết quả 1000.
Số nhớ chạy lần lượt từ tầng hàng đơn vị lên các tầng sau; từ tầng thứ hai, mỗi tầng chờ số nhớ vào.
Xem lời đọc
Ví dụ ta cộng bảy với một, viết theo cơ số hai. Tầng đầu tiên cộng hai bit một, cho tổng không và số nhớ ra một. Số nhớ ấy tới tầng thứ hai, nơi cũng cộng ra tổng không và số nhớ ra một. Rồi tới tầng thứ ba, vẫn tổng không và số nhớ ra một. Tầng thứ tư nhận số nhớ vào là một, cho tổng một. Kết quả bốn bit là một, không, không, không, tức tám. Từ tầng thứ hai, mỗi tầng phải chờ số nhớ vào từ tầng trước mới có kết quả đúng.
Ví dụ 7 + 1 = 8 (cơ số hai: 0111 + 0001 = 1000), chọn vì số nhớ phải đi qua ba tầng. Tầng một: 1+1 = tổng 0, số nhớ 1. Tầng hai, ba: 1+0+1 = tổng 0, số nhớ 1. Tầng bốn: 0+0+1 = tổng 1, số nhớ 0. Giá trị thập phân ghi cạnh dãy bit chỉ để minh họa.
Bộ cộng dựng được từ chín cổng NAND đã có, nên số học trên chip cũng chỉ cần nMOS và pMOS
Bộ cộng bốn bit gồm bốn toàn cộng; mỗi toàn cộng dựng từ mười ba NAND, bỏ bốn cổng đảo thừa còn chín; mỗi NAND là nMOS và pMOS; không cần linh kiện mới.
Một toàn cộng dựng được từ chín cổng NAND; mỗi cổng NAND gồm nMOS và pMOS.
Xem lời đọc
Ta nhìn vào bên trong bộ cộng bốn bit. Nó gồm bốn toàn cộng giống nhau, nối thành chuỗi. Mỗi toàn cộng gồm hai nửa cộng và một cổng OR. Dựng riêng từng khối bằng cổng NAND thì cần mười ba cổng. Hai cặp cổng đảo đứng liền nhau triệt tiêu nhau, nên bỏ được bốn cổng. Còn lại chín cổng NAND. Mỗi cổng NAND gồm hai nMOS nối tiếp và hai pMOS song song. Vậy bộ cộng không cần linh kiện mới nào. Chip thật có thể dùng dạng cùng chức năng nhưng ít transistor hơn, vẫn là nMOS và pMOS.
Dựng riêng từng khối: mỗi nửa cộng năm NAND (XOR bốn NAND, cộng một NAND làm cổng đảo cho số nhớ), OR ba NAND (hai cổng đảo ở đầu vào cộng một NAND), tổng 5 + 5 + 3 = 13. Hai NAND đảo ở đầu ra AND của hai nửa cộng đứng liền với hai NAND đảo ở đầu vào OR; đảo hai lần triệt tiêu, nên bỏ bốn cổng thừa, còn chín. Chip thật thường dùng mạch toàn cộng riêng ít transistor hơn (cỡ 28 transistor ở kiểu mirror adder): cùng chức năng, vẫn chỉ gồm nMOS và pMOS.
Số nhớ phải đi qua mọi tầng, nên trễ của bộ cộng tăng theo số bit
Đường dài nhất của bộ cộng là đường số nhớ qua mọi tầng; mỗi tầng ví dụ 35 ps; bốn bit cỡ 140 ps, tám bit cỡ 280 ps; chu kỳ xung nhịp phải ít nhất cỡ đường ấy.
Đường dài nhất của bộ cộng là đường số nhớ qua mọi tầng; trễ tăng gần tỉ lệ với số bit.
Xem lời đọc
Trong mỗi toàn cộng, số nhớ vào đi qua hai cổng NAND để thành số nhớ ra. Ví dụ hai cổng ấy mất ba mươi lăm pi cô giây. Số nhớ phải đi qua cả bốn tầng lần lượt. Đó là đường dài nhất của bộ cộng, cỡ một trăm bốn mươi pi cô giây. Bộ cộng tám bit có tám tầng, nên cỡ hai trăm tám mươi pi cô giây. Nhiều bit hơn thì trễ lớn hơn, gần tỉ lệ với số bit. Chu kỳ xung nhịp phải ít nhất cỡ đường dài nhất này.
Số nhớ vào đi qua NAND ⑤ (đánh số ở cảnh trước; phan ao ba, trễ 3 × 7 = 21 ps) rồi NAND ⑨ (phan ao hai vì nối hai cổng của tầng sau, 2 × 7 = 14 ps): 21 + 14 = 35 ps (ví dụ, theo mô hình trễ tỉ lệ phan ao). Bốn tầng: 4 × 35 = 140 ps; tám tầng: 280 ps. Đây là xấp xỉ: đường thật còn thêm vài cổng ở tầng đầu, và ở tầng cuối đường đi tới tổng thay cho số nhớ ra. Chu kỳ xung nhịp còn phải cộng thời gian chuẩn bị của mạch chốt, nên 'ít nhất cỡ'. Nối số nhớ lần lượt như vậy gọi là ripple-carry; còn nhiều kiến trúc cộng nhanh hơn dùng thêm cổng để tính số nhớ sớm.
Một toàn cộng đã cỡ ba mươi sáu transistor, và mỗi lần nạp điện dung phải lấy điện từ dây cấp điện
Chín NAND × bốn transistor = 36 mỗi tầng; bộ cộng bốn bit 144 (ví dụ); khi đổi mức, cổng sau nạp hoặc xả điện dung; mỗi lần nạp lấy điện từ dây cấp điện, lặp mỗi nhịp.
Một toàn cộng dựng từ chín NAND có 36 transistor (ví dụ); bộ cộng bốn bit có 144. Mỗi lần đổi mức nạp hoặc xả điện dung.
Xem lời đọc
Ví dụ mỗi cổng NAND có bốn transistor, nên chín cổng là ba mươi sáu. Bộ cộng bốn bit có bốn toàn cộng, tức một trăm bốn mươi bốn transistor. Mỗi lần bộ cộng chạy, nhiều cổng trong đó đổi mức. Đổi mức là nạp hoặc xả điện dung của các cổng sau. Mỗi lần nạp lấy điện từ dây cấp điện. Chạy theo xung nhịp thì nạp rồi xả lặp lại ở mỗi nhịp. Vấn đề còn lại là mỗi lần nạp tốn bao nhiêu điện.
36 = 9 × 4 và 144 = 4 × 36 chỉ tính các cổng của toàn cộng, không tính dây cấp điện hay mạch khác; là ví dụ để thấy bậc độ lớn. Toàn cộng kiểu mirror adder có cỡ 28 transistor. Khi nạp điện dung (mức không lên mức một) điện lấy từ dây cấp điện; khi xả điện dung xả xuống đất. Mức tiêu thụ cụ thể tùy kích thước cổng và điện áp cấp.
Số liệu
- Loại số liệu: bài này không có số từ mô phỏng TCAD. Mọi số trên hình là VÍ DỤ minh họa, hình ghi "(ví dụ)" hoặc "≈". Số ví dụ không phải số DEVSIM.
- Nửa cộng = XOR (tổng) + AND (số nhớ); toàn cộng = hai nửa cộng + một cổng OR; bộ cộng nhiều bit nối số nhớ ra của mỗi toàn cộng vào số nhớ vào của toàn cộng kế tiếp (ripple-carry adder): kiến thức chuẩn của giáo trình mạch số CMOS (Weste–Harris, Rabaey).
- Toàn cộng dựng từ NAND: nửa cộng 5 NAND (XOR bốn NAND, cộng một NAND làm cổng đảo cho số nhớ), OR ba NAND, tổng 5 + 5 + 3 = 13; hai cặp cổng đảo liền nhau triệt tiêu, bỏ bốn cổng còn chín. Mỗi NAND bốn transistor nên toàn cộng 9 × 4 = 36 transistor, bộ cộng bốn bit 4 × 36 = 144 (ví dụ, chỉ tính các cổng của toàn cộng). Toàn cộng kiểu mirror adder cỡ 28 transistor (Weste–Harris), cùng chức năng.
- Trễ ví dụ: NAND trễ 7 ps khi phan ao bằng một, tỉ lệ theo phan ao (bài 4). Số nhớ vào đi qua NAND số 5 (phan ao ba, 21 ps) rồi NAND số 9 (phan ao hai, 14 ps): 35 ps mỗi tầng. Bốn tầng 140 ps, tám tầng 280 ps. Đây là xấp xỉ theo mô hình trễ tỉ lệ phan ao, không phải số đo.
- Ví dụ 7 + 1 = 8 (cơ số hai: 0111 + 0001 = 1000), tự tính; số nhớ đi qua ba tầng.