ฉันเคยเห็นผู้คนมากมายพูดคุยเกี่ยวกับ FPGA มาก่อนและฉันรู้ว่ามันหมายถึงอาร์เรย์เกทที่ตั้งโปรแกรมได้ แต่มันทำงานอย่างไรและมีจุดประสงค์ในการใช้ FPGA อย่างไร
ฉันเคยเห็นผู้คนมากมายพูดคุยเกี่ยวกับ FPGA มาก่อนและฉันรู้ว่ามันหมายถึงอาร์เรย์เกทที่ตั้งโปรแกรมได้ แต่มันทำงานอย่างไรและมีจุดประสงค์ในการใช้ FPGA อย่างไร
คำตอบ:
พวกเขาเป็นส่วนประกอบอิเล็กทรอนิกส์ที่เพิ่มตรรกะให้กับวงจรของคุณ (ดังนั้นพวกเขาจึงคล้ายกับไมโครคอนโทรลเลอร์) แต่วิธีการออกแบบนั้นแตกต่างจาก uC (micro controller) อย่างสิ้นเชิง ใน uC คุณไม่สามารถเปลี่ยนการออกแบบ uC ภายในได้ คุณสามารถเรียกใช้โปรแกรม "คลาสสิค" กับมันได้เท่านั้น การวางโปรแกรม FPGA นั้นเหมือนกับการสร้างฮาร์ดแวร์ใหม่ คุณสร้างการเชื่อมต่อใหม่ระหว่างโลจิคัลเกตและสร้างตัวประมวลผลพิเศษใหม่ และคุณสามารถทำได้ทุกอย่างในบ้านบนโต๊ะทำงานและพีซีของคุณ
ฟังดูดีนะ? ใช่ แต่มีข้อเสียอยู่บ้าง ตัวอย่างเช่นราคา (แต่ฉันคิดว่ามันยากที่จะเปรียบเทียบ) การใช้พลังงานที่สูงขึ้นและความเร็วสัญญาณนาฬิกาที่ลดลง (แต่คุณสามารถออกแบบแอปพลิเคชันของคุณได้อย่างชาญฉลาดและทำงานได้มากขึ้นในหนึ่งรอบนาฬิกา)
ลิงค์ที่มีประโยชน์:
ตัวอย่างการใช้งาน: http://nsa.unaligned.org/
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
หากคุณคุ้นเคยกับประตูตรรกะขั้นพื้นฐานคุณควรรู้ว่าประตูเหล่านั้นเป็นแบบทันทีทันใด การดำเนินงาน A และ B หรือ C เปลี่ยนทันทีเมื่อ A, B หรือ C เปลี่ยน
FPGA คือเมทริกซ์ของลอจิกที่ตั้งโปรแกรมได้ คุณสามารถกำหนดอินพุตและเอาต์พุต (เป็นการรวมกันของอินพุต)
ใน uC A + B / C * sqrt (D) จะใช้เวลาหลายรอบนาฬิกาและหน่วยความจำบางส่วน ใน FPGA ผลลัพธ์เกือบจะทันที
พวกมันยอดเยี่ยมสำหรับวิดีโอ, DSP, การเข้ารหัส ...
นั่นเป็นข้อได้เปรียบหลัก FPGA สมัยใหม่เหมาะกับหน่วยความจำในปัจจุบันและมีลูกผสม uC / FPGA
พวกเขาจะใช้สำหรับการถอดรหัสคีย์การเข้ารหัสเร็วกว่าคอมพิวเตอร์ที่ใช้งานทั่วไป : D
เพื่อประหยัดเงินและความเสี่ยงเทียบกับ ASIC นอกเสียจากคุณ
ค่าใช้จ่ายคงที่ (NRE) ในการทำ ASIC ทำให้ค่าใช้จ่ายต้องห้าม
เนื่องจากคุณสามารถเปลี่ยน FPGA ได้อย่างง่ายดายคุณสามารถจำลองการออกแบบให้น้อยลงและเข้าห้องปฏิบัติการได้เร็วขึ้น นอกจากนี้คุณยังสามารถออกแบบบางส่วนและสร้างมันได้เช่นเดียวกับในซอฟต์แวร์