แรงจูงใจในการใช้ Verilog หรือ VHDL มากกว่า C คืออะไร


12

ฉันมาจากพื้นหลังการเขียนโปรแกรมและไม่ยุ่งกับฮาร์ดแวร์หรือเฟิร์มแวร์มากเกินไป (อย่างน้อยอุปกรณ์อิเล็กทรอนิกส์และ Arduino)

อะไรคือแรงจูงใจในการใช้ภาษาคำอธิบายฮาร์ดแวร์ (HDL) เช่น Verilog และ VHDL เหนือภาษาการเขียนโปรแกรมเช่น C หรือแอสเซมบลีบางส่วน

ปัญหานี้เป็นเรื่องของการเลือกหรือไม่?

ฉันอ่านว่าฮาร์ดแวร์ซึ่งเฟิร์มแวร์เขียนใน HDL นั้นมีข้อได้เปรียบที่ชัดเจนในการรันคำสั่งแบบขนาน อย่างไรก็ตามฉันรู้สึกประหลาดใจที่เห็นการอภิปรายแสดงความสงสัยว่าจะเขียนเฟิร์มแวร์ใน C หรือ Assembly (แอสเซมบลีที่เหมาะสมถ้าคุณไม่จำเป็นต้องมี CPU?) แต่ฉันสรุปว่ามันเป็นตัวเลือก

ดังนั้นฉันมีคำถามสองสามข้อ (อย่าลังเลที่จะอธิบายอะไร):

  1. เฟิร์มแวร์สามารถเขียนได้ทั้งใน HDL หรือในภาษาโปรแกรมซอฟต์แวร์หรือเป็นอีกวิธีหนึ่งในการทำภารกิจเดียวกัน ฉันชอบที่จะเป็นตัวอย่างในโลกแห่งความจริง ข้อ จำกัด ใดบ้างที่เกิดขึ้นจากตัวเลือกแต่ละตัว

  2. ฉันรู้ว่าการใช้เฟิร์มแวร์โดยทั่วไปของซอฟต์แวร์นั้นอยู่ในตัวเร่งความเร็วฮาร์ดแวร์ (เช่น GPU, อะแดปเตอร์เครือข่าย, ตัวเร่งความเร็ว SSL ฯลฯ ) ตามที่ฉันเข้าใจแล้วการเร่งความเร็วนี้ไม่จำเป็นเสมอไป แต่แนะนำเท่านั้น (เช่นในกรณีของ SSL และการเร่งความเร็วของอัลกอริทึมที่ซับซ้อน) สามารถเลือกระหว่างเฟิร์มแวร์และซอฟต์แวร์ในทุกกรณีหรือไม่? ถ้าไม่ฉันยินดีที่จะให้กรณีที่เฟิร์มแวร์ที่เหมาะสมอย่างชัดเจนและชัดเจน

  3. ฉันอ่านแล้วว่าเฟิร์มแวร์ส่วนใหญ่เขียนบน ROM หรือแฟลช มันถูกแสดงในที่นั้นได้อย่างไร? ในบิตเช่นซอฟต์แวร์? ถ้าเป็นเช่นนั้นความแตกต่างที่ลึกซึ้งคืออะไร? ความพร้อมใช้งานของวงจรดัดแปลงในกรณีของเฟิร์มแวร์หรือไม่?

ฉันเดาว่าฉันทำผิดพลาดที่นี่และมีสมมติฐานบางอย่างโปรดยกโทษให้ฉัน ขอบคุณ!


14
ภาษาการเขียนโปรแกรมใช้สำหรับอธิบายซอฟต์แวร์ภาษาอธิบายฮาร์ดแวร์ใช้สำหรับอธิบายฮาร์ดแวร์
Ignacio Vazquez-Abrams

1
คุณไม่ได้เขียนเฟิร์มแวร์ด้วย Verilog หรือ VHDL - คุณใช้ Verilog หรือ VHDL เพื่อออกแบบชิปโปรแกรม FPGA และมาเธอร์บอร์ดออกแบบ คุณใช้ C หรือแอสเซมบลีเพื่อเขียนเฟิร์มแวร์ คุณยังสามารถใช้ C / C ++ ในการออกแบบมาเธอร์บอร์ด - มีไลบรารีชื่อ SystemC ที่สามารถคอมไพล์โดยคอมไพเลอร์ C เพื่อสร้างโปรแกรมที่จำลองการออกแบบของคุณ แต่ยังสามารถคอมไพล์โดยคอมไพเลอร์ SystemC ในวงจร
slebetman

FWIW เนื่องจากคุณมีประสบการณ์เกี่ยวกับ Arduino การเขียนซอฟต์แวร์สำหรับ Arduino จึงเรียกว่าการเขียนเฟิร์มแวร์ เฟิร์มแวร์สามารถเป็นระบบปฏิบัติการที่สมบูรณ์ - ตัวอย่างลินุกซ์ใช้ในเฟิร์มแวร์ของเราเตอร์ส่วนใหญ่และ Windows ใช้ในเฟิร์มแวร์ของตู้เอทีเอ็มส่วนใหญ่
slebetman

คำตอบ:


28

อะไรคือแรงจูงใจในการใช้ภาษาคำอธิบายฮาร์ดแวร์ (HDL) เช่น Verilog และ VHDL เหนือภาษาการเขียนโปรแกรมเช่น C หรือแอสเซมบลีบางส่วน

C และแอสเซมบลีเป็นภาษาที่ดีสำหรับบอก CPU ว่าต้องทำอย่างไร พวกเขาอธิบายการกระทำที่จะต้องทำตามลำดับโดยเครื่องรัฐเดียว

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

ฉันรู้สึกประหลาดใจที่เห็นการอภิปรายแสดงความสงสัยว่าจะเขียนเฟิร์มแวร์ใน C หรือ Assembly (Assembly มีความเหมาะสมอย่างไรถ้าคุณไม่จำเป็นต้องมี CPU)

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

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

เฟิร์มแวร์สามารถเขียนได้ทั้งใน HDL หรือในภาษาโปรแกรมซอฟต์แวร์หรือเป็นอีกวิธีหนึ่งในการทำภารกิจเดียวกัน

ขึ้นอยู่กับว่าคุณมีฮาร์ดแวร์ชนิดใด หากคุณมี CPU ให้ใช้ภาษาการเขียนโปรแกรม หากคุณมี FPGA หรือคุณกำลังออกแบบ ASIC ให้ใช้ HDL หากคุณกำลังออกแบบตรรกะดิจิทัลจำนวนมากคุณสามารถดูหนึ่งในภาษาระหว่างเช่น SystemVerilog

ฉันอ่านแล้วว่าเฟิร์มแวร์ส่วนใหญ่เขียนบน ROM หรือแฟลช มันถูกแสดงในที่นั้นได้อย่างไร? ในบิตเช่นซอฟต์แวร์? ถ้าเป็นเช่นนั้นความแตกต่างที่ลึกซึ้งคืออะไร? ความพร้อมใช้งานของวงจรดัดแปลงในกรณีของเฟิร์มแวร์หรือไม่?

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

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

ไม่ว่าในกรณีใดเฟิร์มแวร์จะถูกจัดเก็บเป็นบิตใน eeprom (หรือบนดิสก์บนเครื่องโฮสต์ที่จะไม่โหลดเมื่อใดก็ตามที่ระบบฝังตัวเริ่มต้นใหม่) แต่นั่นไม่ได้ทำให้พวกเขาคล้ายกัน


เมื่อคุณเขียนใน VHDL / Verilog มันเป็นเรื่องง่ายมากที่จะเห็นภาพตรรกะที่จะดำเนินการและเพิ่มประสิทธิภาพ ไม่สามารถบอกได้เหมือนกันสำหรับ C. แม้ SystemC จะยังคงหย่ากันเพียงพอจากการใช้งานจริงที่ผลการสังเคราะห์ที่ไม่คาดคิดสามารถเกิดขึ้นได้
JonRB

@JonRB หากคุณเขียนโปรแกรมสำหรับ uC หรือ uP ฉันไม่ทราบว่าจะทำสิ่งใดกับ HDL ฉันยอมรับว่าเมื่อการเขียนโปรแกรมลอจิก SystemVerilog หรือ SystemC สำหรับระบบที่มีขนาดใหญ่จนไม่สามารถใช้ออกแบบทุกอย่างในระดับเกท
โฟตอน

2
โปรดทราบว่า VHDL และ Verilog จะใช้เมื่อคุณไม่มีฮาร์ดแวร์เลย พวกเขาสามารถรวบรวมโดยตรงไปยังวงจรแทน FPGA บิตสตรีม ตัวอย่างเช่น Apple ใช้ในการออกแบบมาเธอร์บอร์ดโดยใช้ Verilog แทนที่จะเป็น GUI schematic เนื่องจากมีการรองรับการควบคุมเวอร์ชันดีขึ้น grepping และแยกวิเคราะห์โดยใช้สคริปต์เมื่อการออกแบบของคุณเป็นข้อความธรรมดาแทนที่จะเป็นเลขฐานสองแบบกรรมสิทธิ์
slebetman

10

สำหรับส่วนแรกของคำถามของคุณเกี่ยวกับแรงจูงใจของการใช้หนึ่งหรืออื่น ๆ ที่มีความแตกต่างพื้นฐานระหว่างซีและ HDLs (VHDL / Verilog) C เป็นภาษาโปรแกรมซอฟต์แวร์ (ตามชุดประกอบ), VHDL / Verilog เป็นภาษาคำอธิบายฮาร์ดแวร์ พวกเขาไม่ได้มีวัตถุประสงค์เพื่อวัตถุประสงค์เดียวกัน

C จะแปลเป็นรหัสการชุมนุม (ในรูปแบบไบนารีคือภาษาเครื่อง) เมื่อรวบรวม รหัสนี้เป็นชุดคำสั่งที่บอกให้ CPU ทำชุดการทำงานพื้นฐาน (เปลี่ยนค่าการลงทะเบียนทำการเพิ่มเป็นต้น)

ในทางตรงกันข้าม HDL ถูกสังเคราะห์กับฮาร์ดแวร์ ใน VHDL คุณสามารถเขียนสิ่งที่ชอบ:

output <= input1 + input2;

(ดูตัวอย่างที่สมบูรณ์ยิ่งขึ้นที่นี่ ) นี้จะถูกสังเคราะห์ไปยัง adder (ฮาร์ดแวร์) หากมีการสังเคราะห์รหัสสำหรับFPGAนี่จะหมายถึงบิตสตรีมที่สามารถกำหนดค่า FPGA เฉพาะเพื่อใช้ adder (เป็นตรรกะเชิงผสม )

ที่จริงแล้วคุณสามารถออกแบบ CPU ใน VHDL (ดูตัวประมวลผลหลักของ Soft core VS ตัวประมวลผลหลักของฮาร์ดคอร์ ) และเขียนซอฟต์แวร์สำหรับมันใน C ...

เกี่ยวกับเฟิร์มแวร์: จริง ๆ แล้วมันทั้งหมดขึ้นอยู่กับวิธีที่คุณกำหนดคำว่า เฟิร์มสามารถเป็นโปรแกรม (ซอฟต์แวร์) ที่วิ่งในไมโครคอนโทรลเลอร์ (เขียนจึงยกตัวอย่างเช่นใน C หรือประกอบ) หรืออาจจะ bitstream การกำหนดค่าโปรแกรมได้ (ฮาร์ดแวร์) อุปกรณ์ตรรกะ (CPLD หรือ FPGA บริการ) บางครั้งอาจเป็นแพคเกจที่บรรจุทั้งสองอย่าง: ถ้าคุณใช้เฟิร์มแวร์สำหรับ FritzBox (โมเด็ม ADSL) บางรุ่นพวกเขามีระบบลีนุกซ์ทั้งตัว (เขียนในแอสเซมเบลอร์, C, และภาษาโปรแกรมอื่น ๆ อีกมากมาย) กำหนดค่า FPGA (น่าจะสังเคราะห์จาก VHDL หรือ Verilog)


3
  1. ขึ้นอยู่กับสถาปัตยกรรมของคุณ หากคุณมี CPU (หรือโดยปกติคือ Microcontroller) คุณจะต้องเขียนเฟิร์มแวร์ในภาษาการเขียนโปรแกรมปกติ (รวมถึงชุดประกอบ) หากคุณมีบางอย่างเช่น FPGA เฟิร์มแวร์ของคุณจะต้องเขียนใน HDL HDL ไม่สามารถสร้างโปรแกรมที่สามารถทำงานได้อย่างมีประสิทธิภาพโดยซีพียูทั่วไปและ FPGA ไม่สามารถรันโปรแกรมแบบเดิมได้นอกกรอบ อย่างไรก็ตามคุณสามารถกำหนดค่า FPGA ของคุณเป็นซีพียูจากนั้นเรียกใช้โปรแกรมทั่วไปด้วย สิ่งนี้จะต้องใช้เฟิร์มแวร์สองเลเยอร์เลเยอร์ที่ต่ำกว่าที่เขียนใน HDL เพื่อสร้างซีพียูและเลเยอร์ที่สูงกว่าที่เขียนในภาษาการเขียนโปรแกรมทั่วไปเพื่อดำเนินการกับ CPU นั้น
  2. ไม่มีความแตกต่างอย่างหนักระหว่างเฟิร์มแวร์และซอฟต์แวร์ ในอุปกรณ์หลายตัวเฟิร์มแวร์จะถูกเก็บไว้ในหน่วยความจำแฟลชเช่น แต่ในโทรศัพท์รุ่นใหม่เกือบทุกอย่างจะถูกเก็บไว้ในหน่วยความจำแฟลชและความแตกต่างระหว่างเฟิร์มแวร์และซอฟต์แวร์ไม่ชัดเจน (คนส่วนใหญ่อาจพิจารณารหัส และคนส่วนใหญ่จะพิจารณาซอฟต์แวร์แอปพลิเคชันโปรแกรม แต่ขอบเขตที่แน่นอนอยู่ที่ไหน?)
  3. อย่างที่ฉันพูดใน 2 ไม่มีความแตกต่างที่ชัดเจนนอกจากความคิดที่ว่าเฟิร์มแวร์นั้นค่อนข้างถาวร

3

การทำงานพร้อมกันของฮาร์ดแวร์เป็นแรงจูงใจที่สำคัญ

อิเล็กตรอนสามารถไหลในเวลาเดียวกันในสายคู่ขนานดังนั้นเราจึงต้องคำนึงถึงเรื่องนี้เมื่อออกแบบฮาร์ดแวร์

ใน VHDL ถ้าคุณเขียนสิ่งที่ชอบ:

x <= a or b;
y <= a and b;
z <= x xor y;

(นอกprocessหรือfunctionที่ทำเครื่องหมายอย่างชัดเจนว่าเป็นลำดับ) จากนั้นคุณได้เข้ารหัสความจริงที่ว่า:

  • x, y, z, aและbสายไฟ
  • aและbเป็นสัญญาณอินพุต
  • xเชื่อมต่อกับเอาท์พุทของorวงจรซึ่งใช้aและbเป็นอินพุต
  • และอื่น ๆ สำหรับบรรทัดอื่น ๆ

เป็นการง่ายที่จะดูว่าจะถูกสังเคราะห์เป็นฮาร์ดแวร์จริงอย่างไรxและyจะได้รับการประเมินและในเวลาเดียวกัน

        +-----+
A--+----+     |  X
   |    | OR  +-----+
B----+--+     |     |  +-----+
   | |  +-----+     +--+     |
   | |                 | XOR +-- Z
   | |  +-----+     +--+     |
   | +--+     |  Y  |  +-----+
   |    | AND +-----+
   +----+     |
        +-----+

จากนั้นเมื่อถึงเวลาต้องจำลองวงจรตัวจำลอง (ซึ่งโดยปกติจะเป็นโปรแกรมต่อเนื่อง) ได้จำลองฟิสิกส์ของวงจรดังนี้:

  • มีaหรือbเปลี่ยนแปลง? ใช่? Hey, ขึ้นอยู่กับx aมาอัพเดทxกัน
  • yaยังขึ้นอยู่กับ อัปเดตเช่นกัน
  • zxขึ้นอยู่กับ อัปเดตเพราะxได้รับการอัปเดต
  • มีอะไรที่xขึ้นอยู่กับ ( aหรือb) ได้รับการปรับปรุง? ไม่มี? เดียวกันและy zตกลงเราทำตามขั้นตอนนี้แล้ว

สิ่งนี้นำไปสู่ผลลัพธ์ที่ "น่าสนใจ" ที่เป็นไปได้ซึ่งไม่มีอนาล็อกแบบต่อเนื่อง แต่เป็นตัวแทนของสถานการณ์ทางกายภาพที่เป็นไปได้:

  • x <= not xจะนำไปสู่การวนซ้ำแบบไม่มีที่สิ้นสุดของการจำลอง เครื่องจำลองสามารถตัดได้หลังจากความลึกระดับหนึ่ง
  • x <= 0; x <= 1นำไปสู่ข้อผิดพลาด (ลัดวงจร) นี่คือหนึ่งในเหตุผลที่ว่าทำไมstd_logicมีอยู่

ถึงแม้ว่าฮาร์ดแวร์รุ่น VHDL จะมีความใกล้ชิดมากกว่า C แต่ก็ไม่ได้เป็นคำอธิบายโดยละเอียดอย่างสมบูรณ์:

  • เฉพาะชุดย่อยของ VHDL ที่สามารถสังเคราะห์ได้
  • มีการสร้างความเรียบง่ายทางกายภาพหลายอย่างโดยเฉพาะอย่างยิ่งที่สัญญาณแพร่กระจายอย่างรวดเร็วอย่างไม่ จำกัด ดูhttps://en.wikipedia.org/wiki/Static_timing_analysis TODO บางทีมันอาจเป็นไปได้ที่จะจำลองความล่าช้าใน Verilog: http://www.asic-world.com /verilog/gate3.html#Gate_and_Switch_delays

ในตอนท้าย VHDL ให้ความสมดุลที่ดีระหว่างการทำงานของวงจรมนุษย์ที่เข้าใจได้ในระดับที่สูงขึ้นและการสังเคราะห์ระดับที่ต่ำกว่า

ในทางกลับกัน C มุ่งเน้นไปที่การพูดคุยกับ CPU ตามลำดับ

แน่นอนคุณสามารถเข้ารหัสวงจรด้วย C structs, enums และอาร์เรย์จากนั้นจำลองมันเหมือน VHDL (สิ่งนี้ดูเหมือนมากหรือน้อยกว่าที่ระบบ Cทำ แต่ฉันไม่เคยลองเลย)

แต่คุณจะต้องติดตั้งเครื่องมือจำลอง VHDL อีกครั้งและใช้ภาษาที่ละเอียดยิ่งขึ้น เครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสมฉันเดา

นอกจากนี้ยังมีเครื่องมือที่แปลง C เป็น VHDL /programming/8988629/can-you-program-fpgas-in-c-like-languagesแต่คาดว่าประสิทธิภาพที่ต่ำลงเนื่องจากเป็น Conversion ระดับที่สูงขึ้นอย่างหนัก


0

HDLs ใช้เพื่ออธิบายฮาร์ดแวร์ (synthesize) ซึ่งเป็นภาษาการเขียนโปรแกรมใช้ในการเขียนโปรแกรมฮาร์ดแวร์ที่สังเคราะห์แล้วเช่น cpu

คุณสามารถรับซีพียูรุ่นซอฟต์คอร์เป็น VHDL หรือบิตสตรีมเพื่อสังเคราะห์ซีพียูนั้นใน FPGA


-1

โปรเซสเซอร์ใช้วงจรจำนวนเล็กน้อยในการทำงานจำนวนมากตามลำดับโดยการอนุญาตให้ใช้ส่วนประกอบส่วนใหญ่ในการดำเนินการต่างๆในเวลาต่างกัน

FPGA ประกอบด้วยวงจรจำนวนหนึ่งที่ไม่สามารถดำเนินการอย่างซับซ้อนเป็นพิเศษได้ แต่อย่างน้อยสามารถแยกแยะได้พร้อมกันและเป็นอิสระ

สมมติว่าหนึ่งต้องการมีชิปที่ทำงานหลายอย่างโดยมีการตรวจสอบ 15 อินพุตและ:

  • การตั้งค่าเอาต์พุตให้สูงตลอดเวลาอินพุตทั้งหมดมีความเสถียรเป็นเวลาอย่างน้อย 21 มิลลิวินาทีและจำนวนอินพุตที่สูงเป็นทวีคูณของสาม
  • การตั้งค่าเอาต์พุตให้ต่ำทุกครั้งที่อินพุตทั้งหมดมีความเสถียรเป็นเวลาอย่างน้อย 21 มิลลิวินาทีและจำนวนอินพุตที่สูงไม่ได้เป็นหลายเท่าของสาม
  • การเปลี่ยนแปลงเอาท์พุทตามอำเภอใจระหว่างเวลาที่อินพุตเปลี่ยนแปลงและเวลาอินพุตทั้งหมดมีความเสถียรเป็นเวลาอย่างน้อย 20 มิลลิวินาที

หากมีไมโครคอนโทรลเลอร์ที่ทำสิ่งอื่น ๆ แต่สามารถสำรองไมโครวินาทีได้ทุก ๆ 20 มิลลิวินาทีเพื่อตรวจสอบอินพุตและตั้งค่าเอาท์พุทดังนั้นวงจรส่วนใหญ่ที่ไมโครคอนโทรลเลอร์ใช้ในการทำงานอื่น ๆ ก็จะสามารถใช้งานได้ตามที่ระบุไว้ ด้านบนดังนั้นวงจรเล็ก ๆ น้อย ๆ (นอกเหนือจาก ROM และ RAM บางตัว) จะต้องได้รับการทุ่มเทให้กับงานนั้น ในทางกลับกันอาจใช้เวลาสักครู่ระหว่างเวลาที่อินพุตเปลี่ยนและเวลาที่เอาต์พุตแสดงอย่างถูกต้อง

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


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

@ChrisStratton: บางทีฉันควรจะแนะนำว่าสิ่งต่าง ๆ อาจมีการเปลี่ยนแปลงหากความต้องการเวลาที่เข้มงวดมากขึ้น? ต้องการให้ CPU มี microseconds สองสามตัวพร้อมใช้งานทุก ๆ 20ms อาจไม่ต้องการการเปลี่ยนแปลงใด ๆ กับระบบพื้นฐาน แต่ถ้าเวลาตอบสนองที่ต้องการคือ 200us ความต้องการดังกล่าวอาจทำให้ CPU เร็วกว่าที่ต้องการ ภายใต้ 20us อาจจำเป็นต้องเพิ่ม CPU เพิ่มเติมเพื่อจัดการและถ้าภายใต้ 200ns อาจเป็นไปไม่ได้เลยที่จะทำได้ด้วย CPU
supercat

นั่นเป็นเพราะคุณไม่ได้ใช้ประโยชน์จากความสามารถของ MCU ในการเปลี่ยนการขัดจังหวะพินเริ่มตัวจับเวลาฮาร์ดแวร์ที่จะตั้งค่าผลลัพธ์ 20 ms ในภายหลัง จากนั้นตัดสินใจในเวลาว่างหากมีการรับประกันจริงและหากไม่ยกเลิกให้ยกเลิก มันไม่ใช่ตัวอย่างที่ยอดเยี่ยมที่จะทำให้จุด FPGA ของคุณเป็นจริงเพราะมันมีการพึ่งพาซึ่งกันและกัน - ส่วนเดียวที่ทำงานแบบขนานจริงๆคือการตรวจจับเหตุการณ์และ MCU ที่ทันสมัยนั้นให้คุณในฮาร์ดแวร์แบบขนาน ในขณะที่ส่วนที่เหลือนั้นเรียงตามลำดับได้อย่างมีประสิทธิภาพดังนั้นคุณจึงสร้างเครื่องจักรรัฐที่เร็วเป็นพิเศษที่คอยจับนาฬิกาช้ามาก?
Chris Stratton

@ChrisStratton: หากมีคุณสมบัติการขัดจังหวะการเปลี่ยนพินที่เหมาะสมและยังไม่ได้ใช้งานอย่างอื่นอาจหลีกเลี่ยงความจำเป็นในการทำโพลอย่างต่อเนื่อง แต่ถ้ามีหลายสิ่งเกิดขึ้นในครั้งเดียวพวกเขาจะต้องประมวลผลตามลำดับ CPU สามารถจัดการได้
supercat

การประมวลผลแบบต่อเนื่องไม่ใช่ปัญหาเนื่องจากความล่าช้าอย่างมากในการแก้ไขปัญหาของคุณเรียกเก็บระหว่างอินพุตและการตอบกลับ และแม้ว่าMCU ปัจจุบันยุ่งเกินไปการเพิ่มหนึ่งสำหรับวัตถุประสงค์นี้จะเป็นเศษส่วนของต้นทุนในการเพิ่ม FPGA วิธีเดียวที่จะแก้ปัญหานี้ได้ใน FPGA ที่เป็นจริงนั้นเป็นเพราะมีอยู่แล้วที่มีชิ้นส่วนสำรองและสัญญาณที่ส่งไปหรือเป็นโครงการประดิษฐ์ในบริบททางการศึกษาหรืองานอดิเรก
Chris Stratton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.