Tại sao tôi không thể tạo flip-flops trong trình mô phỏng logic?
Tôi đã chơi với một vài trình mô phỏng logic và không hiểu tại sao flip-flops không hoạt động. Tôi đang cố gắng thực hiện một cú lật chữ T với cổng NAND:
![](https://post.nghiatu.com/assets/images/s/T0cRcm.png)
Tất cả các trình mô phỏng mà tôi đã thử đều cho kết quả giống nhau. Q hoặc Q 'có trạng thái của đồng hồ thay vì chuyển đổi trên cạnh tăng, tùy thuộc vào thời gian của các bản cập nhật nội bộ. Với sự đối xứng của mạch, tôi không ngạc nhiên lắm, nhưng tự hỏi nó hoạt động như thế nào trong thực tế.
Liệu điều này có khả thi không, hay những người bắt chước này cung cấp các thành phần nắp gập vì nó không thể làm được với các bộ phận cơ bản? Nếu vậy, tại sao và những gì còn thiếu?
Trình mô phỏng:
- https://logic.ly/demo
- https://circuitverse.org/simulator
- https://academo.org/demos/logic-gate-simulator/
- https://simulator.io/board
Mạch cổng NAND so với một flip-flop T được cung cấp (circuitverse.org):
![](https://post.nghiatu.com/assets/images/s/pCY7qm.png)
Tương tự trong simulator.io (sử dụng AND + NOT vì không có NAND):
![](https://post.nghiatu.com/assets/images/s/imvMgm.png)
Trả lời
Bởi vì từ trang này , kiểu mà bạn hiển thị chỉ hoạt động nếu độ rộng của xung đồng hồ được điều chỉnh đủ dài để giai đoạn đầu ra phản ứng, nhưng đủ ngắn để thứ không dao động. Một trình mô phỏng logic không mô hình hóa thời gian lan truyền có thể không đối phó được.
Để mô phỏng mạch của bạn, bạn cần một trình mô phỏng mạch 'hiểu' độ trễ lan truyền hoặc bạn cần mô phỏng mạch của mình ở cấp độ bóng bán dẫn.
Cùng trang đó hiển thị mạch này cho J-Kflip-flop hoàn toàn đồng bộ (chỉ cần kết nối J & K với nhau để có T ff):
![](https://post.nghiatu.com/assets/images/s/TCDq1.png)
Bạn có thể muốn thử điều đó trong trình mô phỏng của mình, xem điều gì sẽ xảy ra.
Mạch bạn hiển thị là chốt JK có gated, không phải là mạch lật. Nó có một lỗ hổng: với T cao và xung nhịp cao, các cổng NAND ghép chéo tạo thành một bộ dao động vòng. Đây đôi khi được gọi là vấn đề 'chạy đua xung quanh'. Đầu ra không bao giờ lắng xuống cho đến khi đồng hồ được đưa về mức thấp.
Mạch này minh họa cho cách không tạo xung nhịp. Nếu không thì vô ích. Một cú bật tắt thực sự sẽ sử dụng một cặp chốt trong hai giai đoạn, được tính ở các mức đối diện. Điều này đôi khi được gọi là cú lật mặt 'kích hoạt cạnh' hoặc 'chủ nô'.
Xem thêm tại đây: Q và Q 'được xác định như thế nào trong lần đầu tiên trong flip flop của JK?
Và đây: Chốt JK, lỗi Ben Eater có thể xảy ra?
Tôi tin rằng, để thực hiện một T Flip-Flop được kích hoạt cạnh mà không phụ thuộc vào thời gian trễ cổng, tôi tin rằng, tối thiểu là 6 cổng Nand. Mạch bên dưới mô phỏng tốt trong CircuitLab.
![](https://post.nghiatu.com/assets/images/s/lzgQy.png)
mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
Biên tập:
Ai đó đã nhận xét rằng mạch này không phải là T flip-flop vì mạch chỉ phụ thuộc vào đồng hồ, và không có đầu vào T và đồng hồ riêng biệt.
Tuy nhiên, khi tôi google "T flip-flop", các hit đầu tiên mà đi lên đối với tôi là này mà trạng thái:
Flip-flop T hoặc "bật tắt" thay đổi đầu ra của nó trên mỗi cạnh đồng hồ, tạo ra đầu ra có tần số bằng một nửa tần số của tín hiệu đến đầu vào T.
Nó rất hữu ích để xây dựng các bộ đếm nhị phân, bộ chia tần số và các thiết bị cộng nhị phân chung. Nó có thể được tạo ra từ một chiếc flip-flop JK bằng cách buộc cả hai đầu vào của nó ở mức cao.
và chứa hình ảnh:
![](https://post.nghiatu.com/assets/images/s/onfma.png)
Tôi không khẳng định rằng đây nhất thiết phải là sự bác bỏ có thẩm quyền đối với tuyên bố rằng flip-flop T phải có đầu vào T và xung nhịp riêng biệt. (Chắc chắn có rất nhiều thông tin sai lệch về flip-flop trên các mạng interwebs. Ví dụ, mạch OPs, hiển thị khắp nơi được dán nhãn là flip-flop T mặc dù thực tế là nó có vấn đề được mô tả trong các câu trả lời khác.) , Tôi cung cấp thông tin trên như một quan điểm thay thế cho quan điểm của người bình luận.
Chỉnh sửa2: Một người bình luận đã yêu cầu một biểu đồ trạng thái cho mạch. Tôi sẽ cung cấp thông tin này, nhưng không phải dưới dạng sơ đồ.
Có 4 trạng thái ổn định và 12 trạng thái là giao dịch giữa các trạng thái ổn định trong hoạt động bình thường.
Các trạng thái ổn định là:
Trạng thái: Vin N1 N2 N3 N4 N5 N6
S1: 0 1 1 0 1 1 0
S2: 1 0 1 0 1 0 1
S3: 0 1 1 1 0 0 1
S4: 1 1 0 1 1 1 0
Quá trình chuyển đổi diễn ra như sau
S1 Trong \$\uparrow\$N1 \$\downarrow\$N6 \$\uparrow\$N5 \$\downarrow\$ S2
S2 Trong \$\downarrow\$N1 \$\uparrow\$N4 \$\downarrow\$N3 \$\uparrow\$ S3
S3 Trong \$\uparrow\$N2 \$\downarrow\$N5 \$\uparrow\$N6 \$\downarrow\$N4 \$\uparrow\$ S4
S4 Trong \$\downarrow\$N2 \$\uparrow\$N3 \$\downarrow\$ S1
Một vấn đề khác mà bạn có thể (nhưng nên ) gặp phải là : Làm thế nào để xác định Q và Q 'trong lần đầu tiên trong ván bài lật ngửa của JK? .
Điều này đặc biệt đúng với T Flip-Flop.
Đối với một Flip-Flop T chỉ có 2 đầu vào, T và Clock, không có cách nào để đầu ra chuyển sang trạng thái đã biết trong mô phỏng hỗ trợ 'X'.
Một trình mô phỏng tốt sẽ hiển thị dấu 'X' trên cả hai đầu ra, điều này cho thấy giá trị là không xác định.
Như tôi đã đề cập trong câu trả lời của mình , người ta có thể sử dụng đầu vào đồng bộ hoặc không đồng bộ để đặt đầu ra ở trạng thái đã biết.
Để tham khảo, tôi đã xây dựng T Flip-Flop với đầu vào không đồng bộ bằng cách sử dụng Master Slave JK Flip-Flop, bạn có thể mô phỏng trong trình duyệt của mình:
![](https://post.nghiatu.com/assets/images/s/MCHJt.png)