จำนวนเต็มสูงสุดที่ไม่ได้ลงนามถูกนำไปใช้ในฮาร์ดแวร์อย่างไร


10

ฉันกำลังออกแบบที่เกี่ยวข้องกับฟังก์ชั่นสูงสุดจำนวนมาก (และฟังก์ชั่นสูงสุดเป็นข้อโต้แย้งกับฟังก์ชั่นสูงสุดอื่น ๆ )

ในความพยายามที่จะทำให้การออกแบบฮาร์ดแวร์ง่ายขึ้นฉันสงสัยว่าจะใช้งานสูงสุดในฮาร์ดแวร์ได้อย่างไร

ทางคณิตศาสตร์ Max (a, b) สามารถแสดงเป็น [(a + b) + abs (b - a)] / 2

นี่เป็นวิธีการใช้ในฮาร์ดแวร์หรือไม่ (เช่นในขั้นตอนการเพิ่มการแบ่งบิตกะ ฯลฯ )

ถ้าเป็นเช่นนั้นความแตกต่างของการคำนวณสัมบูรณ์เป็นอย่างไร

คำตอบ:


10

วิธีการที่ง่ายมากคือการนำไปใช้ (a> b)? a: b a> b สามารถดำเนินการได้โดยเริ่มจากด้านซ้ายและตรวจสอบแต่ละคู่ของ (a, b):

  • ทั้ง 0 หรือทั้งคู่ 1: ไปยังคู่ล่างถัดไป
  • a คือ 1: a สูงสุด b คือ 1: b สูงสุด

เมื่อคุณรู้ว่าอันไหนที่สูงที่สุดคุณสามารถเลือกอันนั้นโดย 2N-> N mux

ด้วยการหลอกลวงอย่างชาญฉลาดการตรวจสอบคู่บิตสามารถรวมกับ muxer สำหรับบิตคู่เดียวกัน


2

ให้ดูอัลกอริทึมในคำถาม:

[(a + b) + abs(b - a)]/2

ขั้นตอนนี้มีการเพิ่มและการลบซึ่งจะถูกป้อนไปยังการเพิ่มระยะที่สอง การหารด้วย 2 นั้นเป็นเรื่องเล็กน้อยในฮาร์ดแวร์มันสามารถทำได้โดยการเอา LSB ออก อย่างไรก็ตามตัวบวก / ลบสองขั้นตอนนั้นค่อนข้างช้าและใช้เกทมากโดยเฉพาะอย่างยิ่งถ้าคุณกำลังลดระดับของคาปาริซอนหลายตัวเหมือนคุณ

โครงสร้างของคำตอบของ Wouter van Ooijen โครงสร้างทั่วไปคือเครื่องเปรียบเทียบแบบดิจิทัลที่ใช้สัญญาณเลือกของ mux:

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab

แผนผังข้างต้นสำหรับ:

(A > B) ? A : B

แต่สังเกตเห็นว่าสามารถกำหนดค่าได้ง่ายสำหรับการเปรียบเทียบระหว่างอินพุตทั้งสองโดยทำการเชื่อมต่อแบบลอจิคัลที่แตกต่างกันระหว่างเอาต์พุตตัวเปรียบเทียบและตัวเลือก mux

ดังนั้นหากเรารู้วิธีกำหนดผลลัพธ์สามอย่างจากตัวเปรียบเทียบเราสามารถใช้การเปรียบเทียบใด ๆ ในฮาร์ดแวร์ ตรรกะเปรียบเทียบอธิบายไว้อย่างดีที่นี่ เพื่อเพิ่มประสิทธิภาพของฮาร์ดแวร์เราจะลบตรรกะในการขับเคลื่อนเอาต์พุตตัวเปรียบเทียบที่ไม่ได้ใช้

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


1

หากคุณต้องการสร้างวงจรพิเศษเพื่อคำนวณค่าสูงสุดคุณสามารถเริ่มต้นด้วยบล็อกพื้นฐานด้วยสมการต่อไปนี้:

Eผม,โอยูเสื้อEผม,ผมn¬(aผมผม)Lผม,โอยูเสื้อ(¬Eผม,ผมnLผม,ผมn)(Eผม,ผมnaผม¬ผม)Rผม(¬Eผม,ผมn((Lผม,ผมnaผม)(¬Lผม,ผมnผม)))(Eผม,ผมn(aผมผม))

จากนั้นเชื่อมต่อพวกมันด้วยตัวเลขที่สำคัญที่สุดให้อาหารตัวถัดไป ส่วนที่สำคัญเริ่มจาก MSB ไปยัง LSB ในขณะที่วงจรที่ใช้การแทนที่จะดีที่สุดจะมีเส้นทางที่สำคัญไปจาก LSB ไปยัง MSB จากนั้นกลับไปที่ LSB

มันเทียบเท่า adder กระเพื่อม หากคุณสนใจคุณสามารถสร้างสิ่งที่เทียบเท่ากับตัวเสริมการพกพาหรือการพกพา

EL มีความหมายเฉพาะในกรณีที่ ¬E และหมายถึงเลือก a)

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