Làm thế nào để tìm ra nếu một số nhị phân bằng không


16

Tôi đã triển khai ALU từ các thông số kỹ thuật được đưa ra trong cuốn sách Các yếu tố hệ thống máy tính của tôi. Tôi bị mắc kẹt chỉ với một vấn đề. Làm thế nào để tôi tìm thấy nếu một số nhất định là 0 hay không. Một điều tôi có thể làm là hoặc mỗi bit trong xe buýt, và sau đó áp dụng một cổng không trên đó. Nhưng phải có một số giải pháp thanh lịch khác.


6
có vẻ như bạn không bị mắc kẹt thực sự - giống như bạn không hài lòng :)
Abbeyatcu

7
một đầu vào X một giải pháp tao nhã. Để xác định xem thanh ghi có chứa 0 hay không, mọi bit phải được kiểm tra xem nó có chứa logic không 0. Bạn đã chỉ định rằng bạn cần một đầu ra bit đơn. Do đó, bạn cần một số chức năng với đầu vào X và một đầu ra, như một NOR.
W5VO

Câu trả lời:


14

Đơn giản là không có cách nào để ORing tất cả các bit, có vẻ như không thỏa mãn. Tuy nhiên, bạn cũng không bị hạn chế ở hai cổng đầu vào bằng silicon. Bạn có thể xây dựng một cổng NOR 4 đầu vào theo logic CMOS bằng cách đặt 4 bóng bán dẫn loại p loạt vào mạng pullup và 4 bóng bán dẫn loại n song song trong mạng kéo xuống. Điều đó làm giảm độ sâu của cấu trúc liên kết cây của bạn và do đó độ trễ lan truyền của bạn. Bạn chỉ có thể đưa lý thuyết đó đi xa mặc dù trước khi sụt áp tích lũy trên các bóng bán dẫn loạt làm cho việc kéo lên không đủ để trở thành "1" ... bốn là một quy tắc tốt nếu tôi nhớ chính xác.


Đối với số lượng bit lớn hơn, sử dụng cổng NOR và NAND xen kẽ có ý nghĩa gì không? Ví dụ, với quạt 4 cổng, kiểm tra 0 bit 64 bit có thể sử dụng 16 cổng NOR cho kết quả là 1 nếu 4 bit từ 0 đến 4 cổng NAND cung cấp kết quả là 0 nếu tất cả 4 bit là 1 (tất cả 4 bit là 1 (tất cả 16 bit gốc là 0), bốn kết quả này sau đó sẽ được gửi đến cổng NOR cuối cùng. (Tôi không phải là EE, nhưng điều đó có vẻ tốt hơn so với sử dụng bộ biến tần trung gian, để lấy kết quả hoàn toàn bằng 0 về 0 và chỉ sử dụng cổng NOR.)
Paul A. Clayton

Cũng có thể có cách gấp một phần độ trễ phát hiện bằng 0 vào độ trễ bổ sung.
Paul A. Clayton

Điều gì về việc sử dụng NMOS: Một điện trở kéo lên và bóng bán dẫn X để giảm mức xuống 0 nếu có bất kỳ đầu vào nào là 1?
Oskar Skog

13

Hàm logic là cổng NOR. Đó là chức năng logic đơn giản nhất tồn tại.


8

Giải pháp điển hình với các máy 8 bit là ALU sẽ tạo ra một số bit 'cờ' đại diện cho kết quả của hoạt động gần đây nhất. Mặc dù có thể có bất kỳ số bit cờ nào xung quanh (nghĩa là bạn có thể có cờ 'Z' cho mỗi thanh ghi trong CPU của mình), nhưng đó thường là điều bạn vừa tính toán mà bạn thấy thú vị nhất, vì vậy nó làm cho một mức độ ý nghĩa nhất định để làm điều đó theo cách đó.

Một số CPU cũ sẽ tự động thiết lập các bit cờ cho hầu hết mọi di chuyển dữ liệu, trong khi các CPU khác yêu cầu bạn dán một hướng dẫn 'so sánh' cụ thể trong mã của bạn nếu bạn đột nhiên cần biết liệu một thanh ghi nhất định có bằng không. Và cho dù bạn cung cấp kiểm tra 0 cho mỗi đăng ký hay chỉ cho những gì vừa được tính toán, thực sự không có cách nào đơn giản hơn để kiểm tra "từ này có phải là 0" hay không chỉ là HOẶC tất cả các bit cùng nhau.


1
Đây cũng là điển hình của chip ARM 32 bit và có thể là điển hình của hầu hết các kiến ​​trúc. Đối với ARM, APSR (Thanh ghi trạng thái chương trình ứng dụng) giữ các bit N, Z, C, V và Q (Phủ định, Zero, Carry, oVerflow, saturQ) để cung cấp các chức năng khác ngoài bit 0 mà bạn đang tìm kiếm . Đây có thể hoặc có thể không hữu ích cho máy của bạn.
Kevin Vermeer

Tôi đã nhận được hoặc giải pháp ổn, nhưng nó làm tôi bực mình, tôi phải sử dụng rất nhiều logic để có được chỉ một chút. Phải có một số giải pháp thanh lịch.
Rick_2047

@ Rick_2047 - bạn đã không đề cập đến những gì bạn đang thực hiện điều này với, nhưng tôi đoán là một đồ họa? Nó cũng sẽ làm phiền tôi, khi phải buộc bất kỳ số lượng khối logic nào chỉ để làm một cổng thông tin cao. Đó là một lý do tốt để chỉ đưa vào một trong số họ.
JustJeff

không chính xác là một FPGA mà là một HDL và giả lập phần cứng.
Rick_2047

3

Một số CPU, ví dụ MIPS, có một thanh ghi luôn chứa 0, làm cho việc kiểm tra một thanh ghi khác cho 0 rất nhanh.


Làm cách nào để kiểm tra số nếu tôi có một thanh ghi chứa số 0? Ngoài ra tôi muốn tạo chỉ một bit là đúng hay sai tùy thuộc vào việc bus 16 bit có bằng 0 hay không
Rick_2047

1
một bộ so sánh ... suy biến thành một cổng NOR được tôn vinh ...
Abbeyatcu

Anh ta có thể đạt được một cái gì đó theo cách này nếu các thanh ghi rẻ (chúng nằm trong khối SRAM trong một đồ họa) và anh ta cần một hướng dẫn so sánh thanh ghi vì những lý do khác.
jpc

@vicatu - thực sự nếu bạn muốn so sánh hai số bit N, bạn cần có cổng XOR 2 đầu vào. Điều OR / NOR chỉ tốt cho các bài kiểm tra số không.
JustJeff

nhưng cuối cùng tôi sẽ cần sử dụng nhiều cổng như tôi có các bit đầu vào hoặc ít nhất là nhiều bóng bán dẫn.
Rick_2047

0

Tôi là một fan hâm mộ lớn của or_reduce- hầu hết các công cụ tổng hợp sẽ tối ưu hóa nó để thực hiện tốt nhất vì họ biết chính xác những gì bạn đang làm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.