05/10 Từ transistor đến cổng logic Các chương

Từ transistor đến cổng logic

Nối vài transistor lại với nhau thì được gì?

Ở bài trước, ta đã có transistor: một công tắc được bật bằng điện.

Đầu ra của transistor này có thể điều khiển transistor tiếp theo. Không cần ngón tay gạt công tắc, cả mạch tự chuyển trạng thái bằng tín hiệu điện.

Nhưng một transistor riêng lẻ vẫn chỉ biết bật hoặc tắt.

Vậy nối nhiều transistor lại thì được gì?

Máy tính cần làm nhiều hơn bật và tắt

Giả sử máy đang cộng hai bit: 1 + 1.

Kết quả phải là 10: viết 0nhớ 1 sang cột tiếp theo.

Muốn làm được phép cộng đó, mạch phải tự xử lý những câu như:

  • nếu A và B đều là 1 thì bật đầu ra
  • nếu A hoặc B là 1 thì bật đầu ra
  • nếu A và B khác nhau thì bật đầu ra
  • nếu đầu vào là 1 thì đổi thành 0

Transistor không hiểu những câu đó. Nó chỉ dẫn điện hoặc không dẫn điện.

Vậy “nếu… thì…” phải nằm ở đâu? Câu trả lời nằm ở cách nối các công tắc với nhau.

Quy tắc nằm trong cách đi dây

Trước khi dùng transistor, hãy thử với hai công tắc A, B và một bóng đèn. Có hai cách nối đơn giản.

  • Nối tiếp: hai công tắc nằm trên cùng một đường điện. Điện chỉ tới bóng đèn khi cả A lẫn B đều đóng.
  • Song song: hai công tắc nằm trên hai nhánh khác nhau. Chỉ cần A hoặc B đóng, điện đã có đường tới bóng đèn.

Hình dưới vẽ hai mạch đó. Đường màu hổ phách là chỗ điện đang chạy.

Nối tiếp → AND A = 1 B = 1 pin đèn sáng Đèn sáng khi A B cùng đóng Song song → OR A = 1 B = 0 pin đèn sáng Chỉ cần A hoặc B đóng là đèn sáng
Cùng hai công tắc và một bóng đèn, đổi cách nối là đổi quy tắc. Màu hổ phách là đường dòng điện đang chạy.

Ở mạch song song bên phải, B đang mở mà đèn vẫn sáng, vì điện đã đi qua nhánh của A. Đủ bốn trường hợp:

A B Nối tiếp Song song
mở mở tắt tắt
mở đóng tắt sáng
đóng mở tắt sáng
đóng đóng sáng sáng

Hai cách nối dây đã tạo ra hai quy tắc khác nhau. Không có công tắc nào “hiểu” chữ hay hoặc.

Quy tắc nằm trong cấu trúc của mạch.

Máy tính không làm việc với “mở” và “đóng”, mà với 0 và 1. Bước tiếp theo là đổi công tắc thành transistor.

Thay công tắc bằng transistor

Thay mỗi công tắc bằng một transistor và quy ước:

  • có tín hiệu → 1
  • không có tín hiệu → 0

Một mạch nhận các bit đầu vào rồi tạo ra bit đầu ra theo một quy tắc cố định gọi là cổng logic (logic gate).

Hai mạch vừa rồi cho ta hai cổng đầu tiên:

  • AND (và): ra 1 khi A B cùng là 1
  • OR (hoặc): ra 1 khi A hoặc B là 1
A B AND OR
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1

Nói ngắn gọn:

Transistor xử lý dòng điện. Cổng logic biến dòng điện đó thành quy tắc.

AND và OR mới trả lời được hai trong bốn câu “nếu… thì…” ở đầu bài. Còn hai câu nữa: đảo một bit, và nhận ra hai bit khác nhau.

NOT và XOR

Hai câu đó ứng với hai cổng nữa: NOTXOR.

Thử mô phỏng dưới đây. Bắt đầu với NOT, đổi đầu vào cho tới khi không còn dấu ?, rồi thử AND, OR và XOR.

Phòng thí nghiệm cổng logic

Đầu ra Y bằng 1

  1. 0 ?
  2. 1 ?

NOT (đảo) chỉ có một đầu vào:

  • vào 0 → ra 1
  • vào 1 → ra 0

XOR (exclusive or, hoặc loại trừ) có hai đầu vào. Nó ra 1 khi hai đầu vào khác nhau.

A B AND OR XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

XOR giống OR ở ba dòng đầu. Chỉ khác ở dòng cuối: 1, 1 thì OR ra 1, còn XOR ra 0.

XOR: khác nhau thì ra 1.

Hình công tắc ở trên giúp thấy ý tưởng. Nhưng trong chip, cổng logic được làm thế nào?

Bên trong chip, cổng logic cũng làm từ transistor

Chip thật không đi dây như hai mạch công tắc ở trên. Cổng được ghép từ hai loại transistor:

  • một loại dẫn điện khi gate ở mức cao
  • loại kia dẫn điện khi gate ở mức thấp

Cổng gọn nhất là NOT, chỉ cần một transistor mỗi loại. Hai transistor xếp chồng: cái trên nối lên mức cao, cái dưới nối xuống mức thấp. Đầu vào đưa vào gate của cả hai, dây ra lấy ở giữa.

  • vào 0: cái trên dẫn, đầu ra được kéo lên mức cao, nên ra 1
  • vào 1: cái dưới dẫn, đầu ra được kéo xuống mức thấp, nên ra 0

Đầu ra luôn ngược với đầu vào. Đó chính là NOT.

AND, OR, XOR cũng được ghép từ nhiều transistor theo những cấu trúc khác nhau. Một cổng chỉ cần vài transistor. Một CPU hiện đại có hàng tỷ transistor, nhưng vẫn bắt đầu từ những mạch nhỏ như thế này.

Một cổng chỉ trả lời một câu hỏi rất nhỏ. Muốn tính toán, phải nối nhiều cổng lại.

Ghép nhiều cổng lại thì được gì?

Đầu ra của cổng này có thể trở thành đầu vào của cổng khác.

Ví dụ, máy muốn kiểm tra: 5 có khác 3 không?

  1. Đổi sang nhị phân: 5 = 0101, 3 = 0011.

  2. So từng cặp bit cùng cột bằng XOR:

    0 XOR 0 = 0
    1 XOR 0 = 1
    0 XOR 1 = 1
    1 XOR 1 = 0
  3. Được 0110. Có ít nhất một bit là 1, nghĩa là hai số có cột khác nhau.

  4. Gom bốn kết quả đó qua vài cổng OR. Chỉ cần một cột ra 1, đầu ra cuối là 1.

Mạch tự kết luận: 5 khác 3.

Không transistor nào biết số 5 là gì. Không cổng nào hiểu “so sánh”. Mỗi cổng chỉ làm một quy tắc cực nhỏ.

Ghép hàng loạt quy tắc nhỏ lại, ta bắt đầu có tính toán.

Phép tính quan trọng tiếp theo là phép cộng. Với một cột nhị phân:

0 + 0 → 0
0 + 1 → 1
1 + 0 → 1
1 + 1 → 0 và nhớ 1

Nhìn cột chữ số viết xuống: nó ra 1 đúng khi hai đầu vào khác nhau. Đó chính là XOR.

Nhưng 1 + 1 còn tạo thêm một bit nhớ, và bit nhớ đó cần một cổng khác.

NOT, AND, OR, XOR chỉ biến vài bit thành một bit.

Vậy ghép chúng lại, máy tính có thể cộng 5 với 3 như thế nào?