จะทราบได้อย่างไรว่าเลขฐานสองเป็นศูนย์


16

ฉันใช้ ALU จากข้อมูลจำเพาะที่ระบุไว้ในหนังสือ The Elements of Computing systems ฉันติดอยู่กับปัญหาเดียวเท่านั้น ฉันจะค้นหาได้อย่างไรว่าจำนวนที่กำหนดเป็นศูนย์หรือไม่ สิ่งหนึ่งที่ฉันสามารถทำได้คือหรือทุกอย่างในรถบัสจากนั้นใช้ประตูที่ไม่ใช่ แต่จะต้องมีทางออกที่หรูหราอื่น ๆ


6
ดูเหมือนว่าคุณจะไม่ติดจริงๆ - มากขึ้นเช่นคุณไม่พอใจ :)
vicatcu

7
X input NOR เป็นคำตอบที่สวยงาม เพื่อตรวจสอบว่ารีจิสเตอร์มีศูนย์ทุกบิตต้องถูกตรวจสอบเพื่อดูว่ามีโลจิคัล 0 หรือไม่คุณระบุว่าคุณต้องการเอาต์พุตบิตเดียว ดังนั้นคุณต้องการฟังก์ชั่นบางอย่างที่มีอินพุต X และเอาต์พุตหนึ่งเอาต์พุตเช่น NOR
W5VO

คำตอบ:


14

ไม่มีทางที่จะสามารถ ORing บิตทั้งหมดได้อย่างไม่น่าพอใจเท่าที่ควร อย่างไรก็ตามคุณไม่ได้ จำกัด อยู่เพียงสองประตูในซิลิคอน คุณสามารถสร้างเกทเกต NOR แบบ 4 อินพุตในตรรกะลอจิกโดยใส่ทรานซิสเตอร์ชนิดซีรีย์ 4 ชุดในเครือข่าย pullup และทรานซิสเตอร์ชนิด n ขนานชนิด 4 ตัวในเครือข่ายแบบดึงลง ที่ช่วยลดความลึกของโครงสร้างต้นไม้และทำให้การเผยแพร่ล่าช้า คุณสามารถนำทฤษฏีนั้นมาใช้ได้ก่อนที่จะมีการลดลงของแรงดันไฟฟ้าสะสมในทรานซิสเตอร์ซีรีส์ทำให้การดึงขึ้นไม่เพียงพอที่จะเป็น "1" ... สี่เป็นกฎง่ายๆหากฉันจำได้ถูกต้อง


สำหรับบิตที่มากขึ้นจะใช้การสลับ NOR และ NAND เข้าท่าใช่ไหม? เช่นด้วย fan-in ของ 4 ประตูการทดสอบ 64- บิตศูนย์สามารถใช้ 16 NOR gates ที่ให้ผลลัพธ์ 1 ถ้า 4 บิตเป็นศูนย์ถึง 4 NAND Gates ซึ่งป้อนผลลัพธ์ 0 ถ้า 4 บิตทั้งหมด 1 (ทั้งหมด 16 บิตดั้งเดิมคือ 0) ผลลัพธ์ทั้งสี่นี้จะถูกส่งไปยังประตู NOR สุดท้าย (ฉันไม่ใช่ EE แต่ดูเหมือนจะดีกว่าการใช้อินเวอร์เตอร์ระดับกลาง - เพื่อให้ได้ผลลัพธ์ทั้งหมดเป็นศูนย์กลับไปที่ 0 - และใช้ประตู NOR เท่านั้น)
Paul A. Clayton

อาจมีวิธีที่จะลดความหน่วงแฝงของการตรวจจับเป็นศูนย์บางส่วนให้เป็นเวลาแฝงเพิ่มเติม
Paul A. Clayton

สิ่งที่เกี่ยวกับการใช้ NMOS: ตัวต้านทานแบบเลื่อนขึ้นหนึ่งตัวและทรานซิสเตอร์ X เพื่อลดระดับลงเป็น 0 หากอินพุตใด ๆ เป็น 1
Oskar Skog


8

วิธีการแก้ปัญหาทั่วไปด้วยเครื่องจักร 8 บิตคือ ALU จะผลิตบิต 'flag' จำนวนมากที่จะแสดงผลลัพธ์ของการดำเนินการล่าสุด ในขณะที่เป็นไปได้ที่จะมีบิตแฟล็กจำนวนเท่าใดก็ได้ (เช่นคุณอาจมีแฟล็ก 'Z' สำหรับการลงทะเบียนทุกครั้งใน CPU ของคุณ) แต่โดยปกติแล้วสิ่งที่คุณเพิ่งคำนวณว่าคุณน่าสนใจที่สุด มันทำให้รู้สึกถึงระดับหนึ่งที่จะทำอย่างนั้น

ซีพียูเก่าเหล่านั้นบางตัวจะตั้งค่าแฟล็กบิตโดยอัตโนมัติสำหรับการย้ายข้อมูลเกือบทุกครั้งในขณะที่คนอื่น ๆ ต้องการให้คุณติดคำสั่ง 'เปรียบเทียบ' เฉพาะในรหัสของคุณถ้าคุณเพียงแค่ต้องรู้ทันที และไม่ว่าคุณจะให้การตรวจสอบที่เป็นศูนย์สำหรับทุกการลงทะเบียนหรือเพียงแค่สิ่งที่เพิ่งได้รับการคำนวณไม่มีวิธีที่ง่ายกว่าในการตรวจสอบว่า "คือคำนี้เป็นศูนย์" มากกว่าแค่หรือบิตทั้งหมดเข้าด้วยกัน


1
นี่เป็นลักษณะทั่วไปของชิป ARM แบบ 32 บิตและอาจเป็นสถาปัตยกรรมทั่วไป สำหรับ ARM APSR (การลงทะเบียนสถานะโปรแกรมแอปพลิเคชัน) เก็บบิต N, Z, C, V และ Q (ลบ, ศูนย์, พกพา, oVerflow, saturateQ) บิตเพื่อให้ฟังก์ชั่นอื่น ๆ นอกเหนือจากศูนย์บิตที่คุณกำลังมองหา . สิ่งเหล่านี้อาจเป็นประโยชน์กับเครื่องของคุณหรือไม่ก็ได้
Kevin Vermeer

ฉันได้รับหรือการแก้ปัญหาไม่เป็นไร แต่มันทำให้ฉันต้องใช้ตรรกะมากมายในการรับเพียงหนึ่งบิต จะต้องมีทางออกที่สง่างาม
Rick_2047

@ Rick_2047 - คุณไม่ได้พูดถึงสิ่งที่คุณใช้กับสิ่งนี้ แต่ฉันคาดเดา FPGA? มันจะทำให้ฉันงงด้วยเช่นกันต้องผูกบล็อกลอจิกจำนวนเท่าใดก็ได้เพื่อสร้างประตูเข้าออกสูง นั่นเป็นเหตุผลที่ดีที่จะใส่เฉพาะหนึ่งในนั้นเท่านั้น
JustJeff

ไม่ใช่ FPGA แต่เป็น HDL และตัวจำลองฮาร์ดแวร์
Rick_2047

3

ยกตัวอย่างเช่นซีพียู MIPS บางตัวมีการลงทะเบียนที่มีศูนย์อยู่เสมอทำให้ทำการทดสอบการลงทะเบียนอีกครั้งสำหรับศูนย์ที่รวดเร็วมาก


ฉันจะตรวจสอบหมายเลขได้อย่างไรถ้าฉันมีการลงทะเบียนที่มีศูนย์? นอกจากนี้ฉันต้องการสร้างเพียงหนึ่งบิตซึ่งเป็นความจริงหรือเท็จขึ้นอยู่กับว่ารถบัสของ 16 บิตเป็นศูนย์หรือไม่
Rick_2047

1
เครื่องมือเปรียบเทียบ ... ซึ่งลดความน่า
เชื่อถือของ

เขาอาจได้รับสิ่งนี้ถ้ารีจิสเตอร์ราคาถูก (พวกเขาอยู่ในบล็อก SRAM ใน FPGA) และเขาต้องการคำสั่งเปรียบเทียบการลงทะเบียนด้วยเหตุผลอื่น ๆ
jpc

@vicatu - จริงๆแล้วถ้าคุณต้องการเปรียบเทียบตัวเลข N บิตสองตัวคุณต้องมีประตู XOR อินพุท N 2 อัน สิ่งที่ OR / NOR นั้นดีสำหรับการทดสอบที่เป็นศูนย์เท่านั้น
JustJeff

แต่ในที่สุดฉันก็จำเป็นต้องใช้ประตูให้มากที่สุดเท่าที่ฉันมีบิตอินพุตหรืออย่างน้อยก็เป็นทรานซิสเตอร์จำนวนมาก
Rick_2047

0

ฉันเป็นแฟนตัวยงของor_reduce- เครื่องมือสังเคราะห์ส่วนใหญ่จะปรับให้เหมาะกับการใช้งานที่ดีที่สุดเพราะพวกเขารู้ว่าคุณกำลังทำอะไรอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.