FPGA คืออะไร


38

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

คำตอบ:


30

พวกเขาเป็นส่วนประกอบอิเล็กทรอนิกส์ที่เพิ่มตรรกะให้กับวงจรของคุณ (ดังนั้นพวกเขาจึงคล้ายกับไมโครคอนโทรลเลอร์) แต่วิธีการออกแบบนั้นแตกต่างจาก uC (micro controller) อย่างสิ้นเชิง ใน uC คุณไม่สามารถเปลี่ยนการออกแบบ uC ภายในได้ คุณสามารถเรียกใช้โปรแกรม "คลาสสิค" กับมันได้เท่านั้น การวางโปรแกรม FPGA นั้นเหมือนกับการสร้างฮาร์ดแวร์ใหม่ คุณสร้างการเชื่อมต่อใหม่ระหว่างโลจิคัลเกตและสร้างตัวประมวลผลพิเศษใหม่ และคุณสามารถทำได้ทุกอย่างในบ้านบนโต๊ะทำงานและพีซีของคุณ

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

ลิงค์ที่มีประโยชน์:

ตัวอย่างการใช้งาน: http://nsa.unaligned.org/


3
ฉันจะทราบว่า FPGA หลายตัวมีขนาดใหญ่พอที่จะมีแกนประมวลผลหลายแกนดังนั้นจึงอนุญาตให้ FPGA เป็นคอมพิวเตอร์ทั้งเครื่องด้วยตนเอง
Craig Trader

3
ตามที่ทราบมาฉันคิดว่าความเร็วสัญญาณนาฬิกาที่ต่ำลงอาจทำให้เข้าใจผิด เมื่อเทียบกับพีซีใช่ เมื่อเทียบกับ pic16 พวกมันอาจเร็วกว่า แต่ก็ขึ้นอยู่กับราคา ของที่ถูกกว่าส่วนใหญ่ที่ฉันมีในมือของฉันทำงานที่ 40MHz แต่อีกครั้งผลิตภัณฑ์เพื่อการเปลี่ยนแปลงผลิตภัณฑ์
Kortuk

23

FPGA เป็นอาร์เรย์ของประตูตรรกะที่สามารถตั้งโปรแกรมในสนามได้อย่างแท้จริง รองเท้าแตะ, มัลติเพล็กเซอร์, ตารางค้นหาแบบ 4 บิต ฯลฯ ที่สามารถเชื่อมต่อได้ทุกที่ที่คุณต้องการโดยใช้ภาษา C-like (Verilog)

uC เช่น AVR นั้นทำมาจากประตูตรรกะที่คล้ายกัน แต่จะถูกกำหนดค่าเมื่อสร้างอุปกรณ์ แน่นอนว่ามันมี RAM และ Flash เพื่อให้คุณสามารถเขียนซอฟต์แวร์เพื่ออ่านอินพุตและเอาต์พุตควบคุม แต่คุณไม่สามารถเปลี่ยนการจัดเรียงที่แท้จริงของประตูได้ ประตูจะถูกจัดเรียงไว้ใน ALU, ตัวควบคุมหน่วยความจำ, พอร์ตอนุกรม ฯลฯ เสมอ

ประโยชน์ของ uC คือคุณสามารถตั้งโปรแกรมในฟิลด์ (ที่โต๊ะทำงาน) ด้วยภาษาระดับสูงที่ใช้งานง่ายคุ้นเคยเช่น C ปัญหาคือซอฟต์แวร์ช้า หากต้องการให้อินพุตควบคุมเอาต์พุตในกรณีที่ง่ายที่สุดคุณอาจเขียน:

void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

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

ใน FPGA ฉันสามารถกำหนดค่าประตูให้มีการควบคุมอินพุตเอาต์พุตใน 1 นาฬิกา ดังนั้นเอาต์พุตจะตามอินพุตด้วยความล่าช้า 25 นาโนวินาที เร็วกว่า 40 เท่าโดยใช้ช่วงเวลาเท่ากัน และประตูที่เหลือใน FPGA นั้นมีให้ทำสิ่งอื่น ๆ อีกมากมายซึ่งจะไม่ส่งผลต่อความเร็วของฟังก์ชั่นเล็ก ๆ นี้

รหัสสำหรับ FPGA จะเป็นฟลิปง่าย ๆ :

always @ (นาฬิกา posedge) ledPin <= buttonPin;

นี่จะใช้เซลล์ FPGA เพียง 1 เซลล์ประมาณ 40 ประตูจากจำนวนหมื่น FPGA

ฉันสามารถ reprogram FPGA ของฉันเพื่อทำอย่างอื่นได้ตัวอย่างเช่นควบคุม led ที่อยู่บนพื้นฐานของการรวมสี่อินพุตยังคงอยู่ในนาฬิกาเดียวยังคงใช้เซลล์ FPGA 1 เซลล์ หรือควบคุมการนำโดยอ้างอิงจากสตรีมอนุกรมจากอินพุตในเซลล์ FPGA สองสามอันซึ่งจะเป็น 100 ประตู ดังนั้นฉันจึงสามารถควบคุมไฟ LED ตามข้อมูลอนุกรมพูดว่า "ON" หรือ "OFF" โดยที่สตรีมอนุกรมในอัตราที่สูงมาก (อย่างง่ายดาย 20MHz) และยังคงใช้ความจุของ FPGA เพียงเล็กน้อยเท่านั้น

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

ราคาไม่แตกต่าง ฉันสามารถซื้อ FPGA ที่สามารถใช้งานการออกแบบ Arduino ได้เกือบทุกอย่างที่ฉันเคยเห็นราคาประมาณ 5 เหรียญเหมือนกับชิป Arduino AVR นอกจากนี้ยังมี toolchains ฟรี (IDE, คอมไพเลอร์, ดีบั๊ก) สำหรับ FPGA

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

ข้อเสียที่ใหญ่ที่สุดของ FPGA ก็คือมันซับซ้อนและใช้เวลานานในการกำหนดเขียนโค้ดและดีบักการออกแบบ FPGA ที่ไม่สำคัญกว่าโปรแกรม uC โครงการ uC ทั่วไปที่คุณอาจทำในช่วงเย็นอาจใช้เวลาหลายวันใน FPGA

ปัญหาอื่น ๆ ที่อาจแก้ไขได้คือคนส่วนใหญ่ได้รับการฝึกอบรมเรื่องการเขียนโปรแกรมซอฟต์แวร์ แต่มีน้อยคนที่เข้าใจการเขียนโปรแกรมฮาร์ดแวร์ คุณสามารถเรียนรู้ Verilog ได้อย่างง่ายดาย แต่คุณต้องคิดในแง่ของการออกแบบฮาร์ดแวร์แทนการออกแบบซอฟต์แวร์ รูปแบบการออกแบบแตกต่างกันมาก

ปัญหาอีกข้อคือ FPGA ไม่ได้มาในแพ็คเกจ 8 ถึง 20 พินเล็กน้อย พวกเขามักจะมาใน 100-pin หรือแพคเกจติดพื้นผิวขนาดใหญ่ดังนั้นการสร้างบอร์ดเป็นเรื่องยาก

และปัญหาสุดท้ายคือโครงการที่น่าสนใจมากมายสามารถนำไปใช้งานได้จริงในยูซีซีที่ใช้งานง่ายดังนั้นทำไมต้องกังวลกับ FPGA


2
"ฉันสามารถซื้อ FPGA ที่สามารถใช้งานการออกแบบ Arduino ได้เกือบทุกอย่างที่ฉันเคยเห็นราคา $ 5" ฉันขอโทษ แต่hvæt? ที่ไหน?
medivh

9

หากคุณคุ้นเคยกับประตูตรรกะขั้นพื้นฐานคุณควรรู้ว่าประตูเหล่านั้นเป็นแบบทันทีทันใด การดำเนินงาน A และ B หรือ C เปลี่ยนทันทีเมื่อ A, B หรือ C เปลี่ยน

FPGA คือเมทริกซ์ของลอจิกที่ตั้งโปรแกรมได้ คุณสามารถกำหนดอินพุตและเอาต์พุต (เป็นการรวมกันของอินพุต)

ใน uC A + B / C * sqrt (D) จะใช้เวลาหลายรอบนาฬิกาและหน่วยความจำบางส่วน ใน FPGA ผลลัพธ์เกือบจะทันที

พวกมันยอดเยี่ยมสำหรับวิดีโอ, DSP, การเข้ารหัส ...

นั่นเป็นข้อได้เปรียบหลัก FPGA สมัยใหม่เหมาะกับหน่วยความจำในปัจจุบันและมีลูกผสม uC / FPGA


ฉันรู้ว่าฝึกฝน EEs จำนวนมากด้วยประสบการณ์หลายปีที่มักจะผ่าน FPGA ในการออกแบบแทนที่จะเป็นยูซีซีที่คุณเคยเห็นยูซี ฉันคิดว่าพวกเขายอดเยี่ยมสำหรับการจัดการอินเทอร์เฟซ
Kortuk

ใช่ครับผมคิดว่านี่เป็นตัวอย่างที่ดี: armadeus.com/english/index.html ที่น่าสนใจเป็นพิเศษสำหรับฉันคือตัวอย่างการควบคุมเซอร์โว: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki

2
สิ่งที่ควรทราบคือมีตัวแปลง "C เป็น VHDL" หรือ "C to Verilog" มากขึ้นเรื่อย ๆ ยังไม่ได้เป็นสิ่งที่มีประสิทธิภาพมากที่สุด แต่คุณสามารถแปลงรหัสที่เขียนไว้แล้วเป็นฮาร์ดแวร์ที่สามารถนำมาใช้เพื่อการปรับปรุงความเร็วได้ ค่อนข้างเย็นถ้าคุณถามฉัน (และถ้าคุณมีแป้งสำหรับมัน)
Chris Gammell

5

พวกเขาจะใช้สำหรับการถอดรหัสคีย์การเข้ารหัสเร็วกว่าคอมพิวเตอร์ที่ใช้งานทั่วไป : D


1
ฮ่าฮ่าฉันชอบคำอธิบายที่ใช้งานได้ดีมาก พวกมันยอดเยี่ยมมากในการประมวลผลแบบขนาน
Kortuk

โครงการถอดรหัสภาพ
hhh

2

เพื่อประหยัดเงินและความเสี่ยงเทียบกับ ASIC นอกเสียจากคุณ

  1. สนใจอย่างลึกซึ้งเกี่ยวกับพลังงานหรือ
  2. กำลังสร้างกลุ่มของพวกเขา (พูด> 10k หน่วย)

ค่าใช้จ่ายคงที่ (NRE) ในการทำ ASIC ทำให้ค่าใช้จ่ายต้องห้าม

เนื่องจากคุณสามารถเปลี่ยน FPGA ได้อย่างง่ายดายคุณสามารถจำลองการออกแบบให้น้อยลงและเข้าห้องปฏิบัติการได้เร็วขึ้น นอกจากนี้คุณยังสามารถออกแบบบางส่วนและสร้างมันได้เช่นเดียวกับในซอฟต์แวร์

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