จาก C ถึง Silicon: วิธีการใช้งานซอฟต์แวร์ / เฟิร์มแวร์โซลูชั่นเป็นฮาร์ดแวร์?


13

ตามคำถามนี้ฉันสงสัยว่ามีกระบวนการมาตรฐานที่เป็นธรรมสำหรับเปลี่ยนโซลูชันซอฟต์แวร์ให้กลายเป็นการนำฮาร์ดแวร์ไปใช้หรือไม่ ยกโทษให้ฉันและจินตนาการของฉัน แต่จะมีคอมไพเลอร์ที่สามารถใช้โปรแกรม C และรวบรวมมันในรูปแบบของทรานซิสเตอร์ตัวต้านทานตัวต้านทาน ฯลฯ หรืออาจเป็น PCB ที่รู้จักกันดี

ฉันรู้ว่าฉันสามารถดูสถานการณ์นี้จากมุมมองที่ผิด ในอดีตจากประสบการณ์ของฉันเองโดยทั่วไปคุณมีฮาร์ดแวร์บางชิ้นที่บางคนใช้เป็นโซลูชันซอฟต์แวร์ (คิดว่าจำลองฮาร์ดแวร์) แนวคิดนี้มีการย้อนกลับหรือไม่ บริษัท ใหญ่ ๆ เหล่านี้ทำเช่น software vs hardware IP routing อย่างไร


โปรดดูเพิ่มเติมที่ "ทำไมฉันไม่สามารถสร้างโปรแกรม C แบบเธรดหลายเธรดโดยอัตโนมัติได้"
pjc50

@ pjc50: ฉันจะดูได้ที่ไหน "ทำไมฉันไม่สามารถสร้างโปรแกรมแบบมัลติเธรดแบบเธรดของฉันโดยอัตโนมัติ" ?
davidcary

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

คำตอบ:


11

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

ในช่วงหลายปีที่ผ่านมามีคอมไพเลอร์ที่ใช้โค้ด "C-Like" และรวบรวมเป็นฮาร์ดแวร์ - ในลักษณะเดียวกับที่ VHDL หรือ Verilog สามารถคอมไพล์ลงในฮาร์ดแวร์ได้ แต่สิ่งสำคัญคือมันเป็น "C-Like" ไม่ใช่ C คุณยังไม่สามารถทำได้ตัวอย่างเช่นโปรแกรม C / C ++ ที่คำนวณ PI และแปลงมันเป็นฮาร์ดแวร์ที่คำนวณ PI อย่างน่าอัศจรรย์ ภาษา C-Line เหล่านี้ส่วนใหญ่หายไปหรือไม่ได้ใช้กับตัวเลขใด ๆ หนึ่งในรุ่นที่ได้รับความนิยมมากกว่านี้คือSystemCแต่สิ่งสำคัญคือให้สังเกตว่าไม่ใช่ C / C ++ และไม่เป็นประโยชน์สำหรับทั่วไป "ลองเขียนซอฟต์แวร์แล้วรวบรวมเป็นฮาร์ดแวร์" คุณยังต้อง "เขียนฮาร์ดแวร์บางตัวที่อาจถูกรวบรวมเป็นซอฟต์แวร์"

สวิทช์และเราเตอร์มักจะมีฮาร์ดแวร์ส่วนใหญ่จะทำหน้าที่เราเตอร์ที่สำคัญที่ใช้กันทั่วไปและเร่งความเร็ว (ค้นหาข้อมูลในตารางเส้นทาง, การจัดการคิว ฯลฯ ) ในฮาร์ดแวร์และจากนั้นใช้ CPU เพื่อทำหน้าที่ไม่เหมือนกันทั้งหมด (การจัดการข้อยกเว้นข้อผิดพลาดการอัพเดทตารางเส้นทาง ฯลฯ ) ในหลายวิธีนี้คล้ายกับวิธีการทำงานของ CPU สมัยใหม่ซึ่ง opcodes ที่ใช้กันทั่วไปส่วนใหญ่จะทำในฮาร์ดแวร์และบางครั้ง opcodes บางตัวถูกนำไปใช้จริงในซอฟต์แวร์ (ตัวอย่างเช่นคำแนะนำจุดลอยตัวเมื่อไม่มี FPU)


ไม่เพียง แต่เป็น SystemC จริง C ++ แต่เป็นเพียงไลบรารี C ++ คุณสามารถใช้รหัส C ++ สามัญใด ๆ ที่คุณต้องการกับ SystemC ที่กล่าวว่า SystemC ไม่มีส่วนเกี่ยวข้องกับการสร้างฮาร์ดแวร์โดยอัตโนมัติ มันมุ่งเน้นไปที่ระบบจำลองช่วยในการตัดสินใจทางสถาปัตยกรรมและอนุญาตให้ทีมซอฟต์แวร์เริ่มต้นก่อนที่ฮาร์ดแวร์จะพร้อมใช้งาน
Theran

สิ่งนี้ช่วยให้ฉันเข้าใจจริงๆว่าเหตุใดจึงมีฮาร์ดแวร์เฉพาะที่ทำงานเฉพาะด้าน
แช้ดแฮร์ริสัน

มีคอมไพเลอร์C to HDLอื่น ๆ อีกมากมายที่ออกแบบมาเพื่อจุดประสงค์นี้
Anderson Green

5

สิ่งที่ใกล้จะ Altera ของC-เพื่อฮาร์ดแวร์ (C2H) คอมไพเลอร์ มันสามารถทำสิ่งที่คุณแนะนำ แต่มีข้อแม้ที่ท้าทาย คุณไม่สามารถเปลี่ยนรหัส C เป็นฮาร์ดแวร์ได้และคุณไม่ต้องการ แต่ฟังก์ชั่นบางอย่างทำงานค่อนข้างดีและคุณสามารถเห็นประสิทธิภาพที่เพิ่มขึ้น

โดยทั่วไปแล้วคุณจะใช้หน่วยประมวลผล softcore NIOS II ใน Altera FPGA จากนั้นคุณจะเขียนรหัส ANSI C เพื่อให้เหมือนกับตัวประมวลผลอื่น ๆ จากนั้นสมมติว่าหนึ่งในฟังก์ชัน C ที่คุณเขียนนั้นเกี่ยวข้องกับคณิตศาสตร์หนักบางอย่างที่จะเป็นประโยชน์ต่อการปฏิบัติงานจากการทำงานแบบขนาน คุณเรียกใช้คอมไพเลอร์ C2H พูดว่า "Implement in Hardware" และมันจะเปลี่ยนฟังก์ชั่นนั้นให้กลายเป็นอุปกรณ์ต่อพ่วงของหน่วยประมวลผล softcore ของ NIOS II

นี่คือตัวอย่างของการเข้ารหัสการคำนวณ Mandelbrot ใน ANSI C แล้วนำไปใช้ในฮาร์ดแวร์:

อัลกอริทึม Mandelbrot ที่คอมไพเลอร์เร่งด้วย C2H ส่งผลให้มีการปรับปรุงความเร็วอย่างน้อย 60x เมื่อเทียบกับอัลกอริทึมเดียวกันที่ทำงานบนโปรเซสเซอร์ Nios II ที่เร็วที่สุดโดยใช้การเพิ่มประสิทธิภาพคอมไพเลอร์ระดับ 2 (-O2) การเพิ่มความเร็วนี้เกิดขึ้นเนื่องจากการขนานและความเร็วการวนซ้ำที่ฮาร์ดแวร์สามารถจัดเตรียมได้ซึ่งไม่สามารถทำได้จากหน่วยประมวลผลที่ใช้งานทั่วไป

กลับไปที่ตัวอย่างของคุณโปรเซสเซอร์ NIOS II สามารถเรียกใช้ Linux และฟังก์ชั่นบางอย่างที่จำเป็นต่อการกำหนดเส้นทางงานจะได้ประโยชน์จากการเร่งด้วยฮาร์ดแวร์ มันน่าจะทำงานได้ดีกว่าเราเตอร์ซอฟต์แวร์ที่บริสุทธิ์ แต่จะไม่เข้าใกล้ประสิทธิภาพของ ASICs เฉพาะที่ออกแบบมาเป็นพิเศษ


1
Xilinx มีเครื่องมือเทียบเคียงที่เรียกว่า Vivado HLS (การสังเคราะห์ระดับสูง) ซึ่งก่อนหน้านี้รู้จักกันในชื่อ AutoESL ใช้คำเตือนที่คล้ายกัน: มันทำงานได้ดีในการแปลงรหัสเป็น RTL ถ้าเป็นรหัสชนิดที่ง่ายต่อการแปลงเป็น RTL โดยอัตโนมัติ
Theran

@Theran ฉันไม่รู้ว่า Xilinx มีผลิตภัณฑ์คู่แข่ง ฉันจะต้องตรวจสอบว่า ขอบคุณ!
embedded.kyle

2

คุณพูดถึง "C to Silicon" ในชื่อเรื่องของคุณและพูดถึงผลิตภัณฑ์ระดับบอร์ดในร่างกาย ฉันจะมุ่งเน้นไปที่ส่วนของสมการที่มีอยู่ -> กระแสการออกแบบ "C to Silicon" C ในตัวมันเองนั้นไม่เหมาะกับคำอธิบายของฮาร์ดแวร์เนื่องจากมันขาดการสนับสนุนขั้นพื้นฐานสำหรับการขนานของตัวฮาร์ดแวร์ความจำเป็นในการป้องกันสภาวะการแข่งขันและปัญหาอื่น ๆ หรือไม่มากเท่ากับ Verilog และ VHDL

รหัส C ที่สามารถสังเคราะห์ได้ (เช่นสามารถแสดงผลเป็นคำอธิบายฮาร์ดแวร์) และที่นี่ hardware = ตรรกะดิจิตอลจะไม่ชนะการแข่งขันการเข้ารหัสใด ๆ ที่ตัดสินโดยผู้พัฒนาซอฟต์แวร์

นี่คือรายชื่อของผู้จำหน่ายที่โดดเด่นบางรายจัดหา C -> เครื่องมือซิลิคอนสำหรับฝูงชน ASIC

  • Forte Cynthesizer

  • หนังสติ๊กที่ปรึกษา

  • BlueSpec C.

  • Synopsys Synphony (อดีต - Synfora)

  • จังหวะ C-to-Silicon


1

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

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