เคยสงสัยกันมั๊ยว่าโปรโตคอลใหม่ ๆ หรือการประมวลผลสัญญาณแอนะล็อกที่ความเร็วสูง ๆ เค้าทำโปรโตไทป์ (prototype) กันอย่างไร? มองดูคอนโทรลเลอร์ในท้องตลาดก็ไม่น่าจะประมวลผลได้เร็วขนาดนั้น จะใช้ชิพ DSP (Digital Signal Processing) ก็ดูจะเฉพาะทางเกินไป หรือจะสร้าง ASIC (Application Specific Integrated Circuit) ก็มีค่าใช้จ่ายสูงมากและใช้เวลานาน จริง ๆ แล้วมีชิพประมวลผลอีกแบบที่เหมาะกับการทำโปรโตไทป์หรือบางครั้งก็ใช้สร้างผลิตภัณฑ์ในกรณีที่จำนวนผลิตไม่สูง ชิพดังกล่าวคือ FPGA (Field Programmable Gate Array)
การทำงานของ FPGA นั้นให้นึกถึงวิชา digital electronics ที่เราต้องทำการต่อวงจรลอจิคเพื่อให้ประมวลผลในรูปแบบที่เราต้องการ ภายในชิพ FPGA นั่นจะมีเซลล์ลอจิคจำนวนมากซึ่งทำหน้าที่เสมือนเกทลอจิคแต่ละตัวที่เราต่อเข้าหากันโดยใช้สายไฟแต่ในกรณีของ FPGA นั้นเราจะทำการเขียนโปรแกรมเพื่อควบคุมสวิทช์ภายใน FPGA เพื่อต่อเซลล์ลอจิคเหล่านี้เข้าด้วยกัน ซึ่งด้วยความสามารถในการเขียนโปรแกรมเพื่อควบคุมการเชื่อมต่อของวงจรนี่เองทำให้เราสามารถสร้างและแก้ไขโปรโตไทป์ได้อย่างรวดเร็วโดยไม่ต้องต่อวงจรเอง

เนื่องจากแต่ละเซลล์ลอจิคนั้นอยู่ใกล้กันมาก ๆ และสามาถทำงานพร้อมกันแบบขนานทำให้ชิพ FPGA สามารถประมวลผลได้ด้วยความเร็วสูงในระดับ 100 MHz ขึ้นไป ข้อได้เปรียบอีกอย่างของชิพ FPGA คือ เนื่องจากเป็นการต่อวงจรเพื่อประมวลผลเฉพาะแบบที่เราต้องการจริง ๆ ทำให้ไม่ต้องใช้ระบบปฏิบัติการ (operating system) ซึ่งช่วยให้หลีกเลี่ยงการแครช (crash) ที่เกิดจากระบบปฏิบัติการได้ นอกจากนี้ภายในชิพ FPGA ยังมีส่วนประกอบอื่น ๆ ซึ่งช่วยให้สามารถประมวลผลและสื่อสารได้หลากหลายรูปแบบ เช่น DSP, RAM, memory, PCIe interface และอื่น ๆ
แล้วข้อเสียของ FPGA คืออะไร? ข้อเสียหลัก ๆ ของ FPGA คือ การเขียนโปรแกรมนั้นค่อนข้างยุ่งยาก โดยภาษาที่ใช้ในการเขียนโปรแกรมหลัก ๆ นั้นจะมี 2 ภาษา คือ VHDL (VHSIC hardware description language) และ Verilog สำหรับ Digilent มีบอร์ดพัฒนา FPGA ให้เลือกใช้มากมายหลายรุ่น โดยจะแบ่งออกเป็น 2 แบบหลัก ๆ ได้แก่
– บอร์ดสำหรับเรียนรู้ (introductory board): บอร์ดเหล่านี้ถูกออกแบบมาเพื่อเริ่มต้นเรียนรู้การใช้งาน FPGA โดยเฉพาะ จึงสามารถเริ่มต้นใช้งานได้อย่างง่ายดายเหมาะสำหรับการเรียนรู้ ทั้งนี้ Pmod เป็นโมดูลสำหรับเพิ่มอินพุต/เอาท์พุตรูปแบบต่าง ๆ ให้กับบอร์ดพัฒนา
| Product | FPGA/SoC Part | Expansion Connectors | Multimedia Interfaces | Connectivity | User I/O | Programming Interface | Memory |
|---|---|---|---|---|---|---|---|
| Basys 3 | Artix-7 (XC7A35T) |
3x Pmod | VGA Output | • USB-UART • USB HID Host Port |
• Seven-Segment Display • 5 Buttons • 16 Switches • 16 LEDs |
• USB-JTAG • QSPI Flash • USB Drive |
• 1,800 Kb BRAM • 4 MB QSPI Flash |
| Nexys A7 | Artix-7 (XC7A100T/XC7A50T) |
5x Pmod (1 Digital/Analog) | • VGA Output • PWM Audio Output • PDM Microphone |
• USB-UART • 10/100 Ethernet • USB HID Host Port |
• Seven-Segment Display • 5 Buttons • 16 Switches • 16 LEDs • 2 RGB LEDs • Temperature Sensor |
• USB-JTAG • QSPI Flash • microSD • USB Drive |
• 128 MB DDR2 • 16 MB QSPI Flash • 4,860 Kb BRAM (A7-100T) / 2,700 Kb BRAM (A7-50T) • microSD card slot |
| ZedBoard | Zynq-7000 (XC7Z020) |
• 5x Pmod (1 connected to MIO) • 1x FMC LPC |
• HDMI Source • VGA Output |
• USB-UART • Gigabit Ethernet • USB 2.0 OTG |
• OLED Display • 7 Buttons • 8 Switches • 9 LEDs • Analog Mixed Signal Header |
• USB-JTAG • QSPI Flash • microSD |
• 512 MB DDR3 • 32 MB QSPI Flash • 4.9 Mb BRAM • microSD card slot |
| Zybo Z7 | Zynq-7000 (XC7Z020/XC7Z010) |
• 6x* Pmod Ports (1 Digital/Analog and 1 connected to MIO on both variants, *5x on Z7-10) | • HDMI Sink • HDMI Source • Pcam Camera Connector • Audio Codec with 3 Audio Jacks |
• USB-UART • Gigabit Ethernet • USB 2.0 Host/Device/OTG PHY |
• 6 Buttons • 4 Switches • 5 LEDs • 2 RGB LEDs |
• USB-JTAG • QSPI Flash • microSD |
• 1 GB DDR3L • 16 MB QSPI Flash • 4.9 Mb BRAM (Z7-20) / 2.1 Mb BRAM (Z7-10) • microSD card slot |
| Cora Z7 | Zynq-7000 (XC7Z010/XC7Z007S) |
• 2x Pmod • Arduino Shield Connector |
N/A | • USB-UART • Gigabit Ethernet • USB 2.0 Host PHY |
• 2 Buttons • 2 RGB LEDs |
• USB-JTAG • microSD card slot |
• 512 MB DDR3 • 2.1 Mb BRAM (Z7-10) / 1.8 Mb BRAM (Z7-07S) • microSD card slot |
| Arty A7 | Artix-7 (XC7A100T/XC7A35T) |
• 4x Pmod • Arduino Shield Connector |
N/A | • USB-UART • 10/100 Ethernet |
• 4 Buttons • 4 Switches • 4 LEDs • 4 RGB LEDs |
• USB-JTAG • QSPI Flash |
• 256 MB DDR3L • 16 MB QSPI Flash • 4,860 Kb BRAM (A7-100T) / 1,800 Kb BRAM (A7-35T) |
| Arty S7 | Spartan-7 (XC7S50/XC7S25) |
• 4x Pmod • Arduino Shield Connector |
N/A | USB-UART | • 4 Buttons • 4 Switches • 4 LEDs • 2 RGB LEDs |
• USB-JTAG • QSPI Flash |
• 256 MB DDR3L • 16 MB QSPI Flash • 2,700 Kb BRAM (S7-50) / 1,620 Kb (S7-25) |
| Cmod A7 | Artix-7 (XC7A35T/XC7A15T) |
• 48-pin DIP Connector • 1x Pmod |
N/A | USB-UART | • 2 Buttons • 2 LEDs • 1 RGB LED • 2 Analog Inputs |
• USB-JTAG • QSPI Flash |
• 512 KB SRAM • 1,800 Kb BRAM (A7-35T) / 900 Kb BRAM (A7-15T) • 4 MB QSPI Flash |
| Cmod S7 | Spartan-7 (XC7S25) |
• 48-pin DIP Connector • 1x Pmod |
N/A | USB-UART | • 2 Buttons • 4 LEDs • 1 RGB LED • 2 Analog Inputs |
• USB-JTAG • QSPI Flash |
• 1,620 Kb BRAM • 4 MB QSPI Flash |
-บอร์ดสำหรับพัฒนาระบบ (system board): จริง ๆ แล้วบอร์ดสำหรับเรียนรู้ก็สามารถใช้ในการพัฒนาระบบได้ แต่เราทำการแยกออกจากกันเนื่องจากบอร์ดสำหรับพัฒนาระบบนั้นจะมีความซับซ้อนในการใช้งานไม่กว่าจึงไม่เหมาะสำหรับการเริ่มต้นเรียนรู้ ทั้งนี้ Zmod เป็นโมดูลอินพุต/เอาท์พุตสำหรับเพิ่มฟังก์ชั่นการทำงานของเครื่องมือวัด เช่น Oscilloscope และ Waveform Generator ให้กับบอร์ดพัฒนา
| Product | FPGA/SoC Part | Expansion Connectors | Multimedia Interfaces | Connectivity | User I/O | Programming Interface | Memory |
|---|---|---|---|---|---|---|---|
| Arty Z7 | Zynq-7000 (XC7Z020/XC7Z010) |
• 2x Pmod • Arduino Shield Connector |
• HDMI Sink • HDMI Source • PWM Mono Audio Output Jack |
• USB-UART • Gigabit Ethernet • USB 2.0 Host PHY |
• 4 Buttons • 2 Switches • 4 LEDs • 2 RGB LEDs |
• USB-JTAG • QSPI Flash • microSD |
• 512 MB DDR • 16 MB QSPI Flash • 4.9 Mb BRAM (Z7-20) / 2.1 Mb BRAM (Z7-10) • microSD card slot |
| Nexys Video | Artix-7 (XC7A200T) |
• 4x Pmod (1 Digital/Analog) • 1x FMC LPC |
• HDMI Sink • HDMI Source • DisplayPort Source • Audio Codec with 4 Audio Jacks |
• USB-UART • Gigabit Ethernet • USB HID/MSD Host Port |
• OLED Display • 5 Buttons • 8 Switches • 8 LEDs |
• USB-JTAG • QSPI Flash • microSD • USB Drive |
• 512 MB DDR3 • 32 MB QSPI Flash • 13,140 Kb BRAM • microSD card slot |
| PYNQ-Z1 | ZYNQ-7000 (XC7Z020-1CLG400C) |
• 2x Pmod • Arduino Shield Connector |
• HDMI sink • HDMI source • PWM Mono Audio Output Jack • Electret microphone with PDM output |
• Gigabit Ethernet PHY • USB OTG PHY (supports host only) • USB-UART bridge |
• 4 Buttons • 2 Switches • 4 LEDs • 2 RGB LEDs |
• USB-JTAG • QSPI Flash • microSD |
• 512MB DDR3 • 16MB Quad-SPI Flash • MicroSD slot |
| Eclypse Z7 | Zynq-7000 (XC7Z020) |
• 2x Zmod • 2x Pmod |
N/A | • USB-UART • Gigabit Ethernet • USB 2.0 Host/Device/OTG PHY |
• 2 Buttons • 2 RGB LEDs |
• USB-JTAG • QSPI Flash • microSD |
• 1 GB DDR3L • 16 MB QSPI Flash • 4.9 Mb BRAM • microSD card slot |
| Genesys 2 | Kintex-7 (XC7K325T) |
• 1x Zmod • 4x Pmod (1 Digital/Analog) • 1x FMC LPC • 1x FMC Gigabit (ZU-5EV only) • dual-slot Mini PCIe/mSATA |
• 2x Pcam Camera Connectors • DisplayPort Source • HDMI Source and Sink (ZU-5EV only) • Audio Codec with 4 Audio Jacks |
• USB-UART • USB-C • 2.4 GHz Wi-Fi • Gigabit Ethernet • SFP+ 10G Ethernet (ZU-5EV only) • USB 2.0 Host PHY with 2x USB Type-A ports |
• 5 LEDs • 1 RGB LED • 7 Buttons • 4 Switches |
• USB-JTAG • QSPI Flash • microSD • USB |
• 4 GB DDR4 • 32 MB QSPI Flash • 7.6 Mb BRAM (ZU-3EG) / 5.1 Mb BRAM (ZU-5EV) • 18.0 Mb UltraRAM (ZU-5EV Only) • microSD card slot |
| Genesys ZU | Zynq UltraScale+ (XCZU5EV/XCZU3EG) |
• 1x Zmod • 4x Pmod (1 Digital/Analog) • 1x FMC LPC • 1x FMC Gigabit (ZU-5EV only) • dual-slot Mini PCIe/mSATA |
• 2x Pcam Camera Connectors • DisplayPort Source • HDMI Source and Sink (ZU-5EV only) • Audio Codec with 4 Audio Jacks |
• USB-UART • USB-C • 2.4 GHz Wi-Fi • Gigabit Ethernet • SFP+ 10G Ethernet (ZU-5EV only) • USB 2.0 Host PHY with 2x USB Type-A ports |
• 5 LEDs • 1 RGB LED • 7 Buttons • 4 Switches |
• USB-JTAG • QSPI Flash • microSD • USB |
• 4 GB DDR4 • 32 MB QSPI Flash • 7.6 Mb BRAM (ZU-3EG) / 5.1 Mb BRAM (ZU-5EV) • 18.0 Mb UltraRAM (ZU-5EV Only) • microSD card slot |
| USB104 A7 | Artix-7 (XC7A100T) |
• 1x Zmod • 3x Pmod |
N/A | • USB-UART • USB Data Transfer Interfaces |
• 2 Buttons • 4 LEDs |
• USB-JTAG • QSPI Flash |
• 512 MB DDR3 • 16 MB QSPI Flash • 4,860 Kb BRAM |
สำหรับการพัฒนาโปรแกรมนั้นเราจะต้องติดตั้ง Vivado และไฟล์ของบอร์ดพัฒนา Digilent เสียก่อนแล้วจึงเริ่มทำการพัฒนาโปรแกรมด้วย Vivado สุดท้ายเมื่อเราพัฒนาโปรแกรมเป็นที่เรียบร้อยแล้ว เราสามารถอัพโหลดโปรแกรมของเราไปยังชิพ FPGA ได้ทั้งหมด 4 วิธี ได้แก่
– ๋JTAG
– non-volatile quad SPI flash memory
– USB stick
– Micro SD Card
ซึ่งบอร์ดพัฒนาแต่ละรุ่นจะรองรับวิธีการที่แตกต่างกันไปโดยสามารถดูรายละเอียดเพิ่มเติมได้จากคู่มือของบอร์ดพัฒนาแต่ละรุ่น
หวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่กำลังเริ่มต้นเรียนรู้ใช้งาน FPGA หรือมองหาโซลูชั่นสำหรับประมวลผลด้วยความเร็วสูง ท่านสามารถติดต่อทีมงาน ติดต่อ ทีมงาน เทคสแควร์ เพื่อสอบถามข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานบอร์ดพัฒนา FPGA หรือผลิตภัณฑ์อื่น ๆ จาก Digilent และ NI ได้ครับ
บทความที่เกี่ยวข้อง
Installing Vivado, Xilinx SDK, and Digilent Board Files
การใช้งานบอร์ดพัฒนา FPGA ของ Digilent ร่วมกับ Python
การใช้งานบอร์ดพัฒนา FPGA ของ Digilent ร่วมกับ MATLAB HDL Coder
