Z2PCBA@gmail.com +66-897725026
ทำความรู้จักกับ FPGA
Friday June 16th, 2017
0

FPGA คืออะไร?

      อธิบายอย่างง่ายๆ FPGA ก็คือ IC ที่มี Logic Gate จำนวนมากมายที่สามารถโปรแกรมลงไปได้ว่าจะมีการเชื่อมต่อการทำงานกันอย่างไรนั่นเอง ซึ่งเมื่อสามารถกำหนดการต่อ gate ได้ตามต้องการ เราก็สามารถสร้างวงจรทางด้านดิจิตอลอะไรก็ได้(ในทางทฤษฎี) ไม่เว้นแม้กระทั่ง MCU เพราะวงจรทางด้านดิจิตอลทั้งหลายก็คือการเอา gate มากต่อๆกัน
ซึ่งการออกแบบวงจรใน FPGA นั้น มีด้วยกัน 2 ทางก็คือ

  1. เขียนวงจรแบบ schematic และ
  2. การเขียนภาษา HDL (Hardware Description Language)

      โดยทั่วไปแล้วเราจะออกแบบวงจรด้วย การเขียน HDL เป็นหลัก เนื่องจาก เมื่อเราออกแบบวงจรใหญ่ๆ แล้ว ความซับซ้อนของวงจรจะมากขึ้น ทำให้การออกแบบด้วย schematic นั้นไม่เหมาะสม ดังนั้นต่อไปจะเป็นการพูดถึงเรื่องการเขียน HDL เป็นหลัก

      สำหรับภาษาที่ใช้ในการเขียนโปรแกรม HDL นั้น ส่วนใหญ่จะมีด้วยกัน 2 ภาษา คือ Verilog และ VHDL ซึ่งทั้ง 2 ภาษาต่างก็เป็นภาษาพื้นฐานในการออกแบบ FPGA แต่ทั้งนี้ ก็มีวิธีอื่นอีก ไม่ว่าจะเป็นใช้ C หรือ python ในการเขียนโปรแกรม แต่ผู้เขียนก็ยังคงแนะนำให้ใช้ภาษาพื้นฐานดังที่กล่าวไว้ตอนต้น เนื่องจาก การอ้างอิงและการออกแบบของภาษานั้นต่างกัน ทำให้ภาษาอื่นๆ แปลงเป็น HDL ได้ยังไม่ดีเท่าที่ควร แต่ไม่แน่อนาคตอาจจะดีขึ้นก็ได้นะครับ เนื่องจากผู้เขียนถนัดภาษา VHDL ดังนั้นในบทความต่อๆไป เราอาจจะมีการพูดถึงภาษานี้มากขึ้น

      ข้อดีอย่างอย่างหนึ่งของ FPGA ก็คือ เราสามารถ reprogram ได้ ทำให้ถึงแม้ว่าเราจะออกแบบวงจรมาผิด เราก็จะยังสามารถที่จะแก้ไขใหม่ได้เรื่อยๆนั่นเอง ซึ่งจะแตกต่างจากการออกแบบ Hardware PCB หรือ ASIC ที่ถ้าเกิดผิดพลาด ทางแก้ไขก็คือการสั่งทำใหม่ซึ่งจะมี cost ที่เพิ่มสูงมากนั่นเอง

      ส่วนข้อเสียที่จะพูดถึงก็คือ FPGA นั้นจะต้องมีไฟเลี้ยงตลอด ถ้าไม่มีไฟเลี้ยง วงจรที่ออกแบบไว้ก็จะหายไป เนื่องจาก สถาปัตยกรรมของ FPGA นั้นมีพื้นฐานมาจาก RAM โดยข้อมูลจะหายไปเมื่อไม่มีไฟเลี้ยง แต่ก็สามารถแก้ปัญหานี้ได้โดยการใช้ Flash memory ร่วมด้วยกับ FPGA ส่วนข้อดีข้อเสียอื่นๆจะสรุปในหัวข้อถัดไป

      จากที่ได้กล่าวมา ก็น่าจะพอนึกภาพออกว่า FPGA นั้นสามารถทำให้เราออกแบบวงจรดิจิตอลตามที่เราต้องการได้ อาจจะสงสัยกันว่า แล้ววงจรแบบ analog ละ FPGA นั้นทำได้หรือไม่ โดยพื้นฐานเลยไม่สามารถทำได้ครับ แต่ว่าในตลาดเดี๋ยวนี้ก็มีบางยี่ห้อได้ทำการปรับโดยการใส่วงจร analog เข้าไปใน FPGA ให้ แล้วทำให้สามารถรับ analog ได้แล้วครับ

ข้อดีและข้อเสียของ FPGA
คราวนี้เราจะมาดูข้อดีข้อเสียของ FPGA กันบ้าง ตามที่ผู้เขียนทราบ โดยจะแบ่งการเปรียบเทียบออกเป็น

  • ข้อดีข้อเสียเมื่อเปรียบเทียบระหว่าง FPGA กับ ASIC
  • ข้อดีข้อเสียเมื่อเปรียบเทียบระหว่าง FPGA กับ MCU

ข้อดีข้อเสียเมื่อเปรียบเทียบระหว่าง FPGA กับ ASIC

ข้อดี

  1. Time to market ของ FPGA นั้นเร็วกว่า
    เนื่องจาก ASIC นั้นหลังจากออกแบบวงจรเสร็จ ต้องมีขั้นตอนในการสั่งผลิตและการทดสอบวงจรที่ได้ออกแบบไปแล้วอีก
  2. ราคาถูกกว่า
    ในกรณีที่ไม่ได้สั่งเป็น mass production จะราคาถูกกว่า เนื่องจาก ASIC นั้นจะมี cost การผลิตและทดสอบ ซึ่งงานบางระบบนั้นต้องการเพียงแค่ 100 หรือ 1,000 ตัว การใช้ FPGA ก็จะถูกกว่า ASIC
  3. รองรับการเปลี่ยนเปลงได้ง่ายกว่า
    เนื่องจาก ASIC นั้นถ้ามีการแก้ไขเปลี่ยนแปลงนั้น หนทางก็คือการสั่งทำใหม่ซึ่งมี cost ที่สูง แต่การเปลี่ยนแปลงสำหรับ FPGA นั้นแค่เปลี่ยน code ก็สามารถแก้ไขได้ตามต้องการ
  4. การใช้งานในระยะยาวนั้นเหมาะสมมากกว่า
    เพราะว่า ASIC นั้นถ้าเลิกผลิตแล้ว การที่เปลี่ยนไปใช้อีกรุ่นนึง เราอาจจะต้องออกแบบวงจรใหม่ แต่สำหรับ FPGA นั้น ถ้า FPGA รุ่นที่ใช้อยู่เลิกผลิต เราก็สามารถเอา code ที่ออกแบบไว้มาใส่ FPGA ตัวอื่นได้ตามต้องการ

ข้อเสีย

  1. เสียพลังงานเยอะกว่า
    จะใช้พลังงานเยอะกว่าเมื่อเทียบกับแบบ ASIC
  2. มีขนาดใหญ่กว่า
    นอกจากตัว FPGA เองแล้ว ยังต้องมีตัว flash ภายนอกด้วย
  3. ราคาแพงกว่าถ้าเป็น mass production
  4. มี delay time ที่จำกัด
    Timing FPGA นั้นมี delay time ที่จำกัดในการออกแบบอยู่ ซึ่งมันจำกัดที่ FPGA นั้นออกแบบ base จาก RAM

ข้อดีข้อเสียเมื่อเปรียบเทียบระหว่าง FPGA กับ MCU

ข้อดี

  1. ทำงานได้เร็วกว่า
    เนื่องจาก FPGA นั้นสามารถออกแบบให้แต่ละส่วนทำงานเป็นอิสระต่อกันได้ เสมือนมี core มากมาย ซึ่งต่างจาก MCU ที่มีหน่วยประมวลผลจำนวนจำกัด ซึ่งข้อดีนี้สามารถนำ FPGA มาออกแบบการทำงานพวก real time ได้
  2. ความยืดหยุ่น(Flexible)
    โดย FPGA นั้นเราสามารถกำหนด pin input/output ให้ออกขาไหนได้ตามต้องการ ซึ่งต่างจาก MCU ที่จะถูก fix ไว้ว่าขา SPI ต้องเป็นขานี้เท่านั้น ดังนั้นถ้าออกแบบวงจร schematic เราก็จะแก้ไขลำบาก หรือต้องทำใหม่เลย
  3. ออกแบบ(design)วงจรได้ตามต้องการ
    เราสามารถให้มีวงจรได้ตามต้องการ ไม่เว้นแม้แต่ใส่ MCU ลงไปใน FPGA
  4. การใช้งานในระยะยาวเหมาะสมกว่า
    เพราะว่า MCU นั้นถ้ารุ่นเก่าเลิกผลิตแล้ว การที่เปลี่ยนไปใช้อีกรุ่นนึง เราอาจจะต้องออกแบบวงจรใหม่ แต่สำหรับ FPGA นั้น ถ้า FPGA รุ่นที่ใช้อยู่เลิกผลิต เราก็สามารถเอา code ที่ออกแบบไว้มาใส่ FPGA ตัวอื่นได้ตามต้องการ

ข้อเสีย

  1. ขนาดใหญ่กว่า
    นอกจากตัว FPGA เองแล้ว ยังต้องมีตัว flash ภายนอกด้วย
  2. ราคาแพง
    ราคา FPGA นั้นจะแพงกว่า MCU อยู่พอสมควร
  3. กินพลังงานมากกว่า
    FPGA จะกินพลังงานเยอะกว่า MCU
  4. ความซับซ้อน
    เนื่องจากต้องเป็นการออกแบบวงจรดิจิตอลเลยทำให้มันมีความซับซ้อนมากกว่าออกแบบ firmware มาก และนอกจากนั้น FPGA ยังมีเรื่อง delay time มาเกี่ยวข้องด้วย ซึ่งทำให้วงจรที่ออกแบบไว้แล้วเรียบร้อยทำงานได้ดี แต่ถ้ามีการแก้ไขบางอย่างไป สิ่งที่ออกแบบไว้ก็อาจจะมีผลกระทบจนทำงานไม่ได้ก็ได้

FPGA มีบริษัทไรบ้างให้เลือก?
      จริงๆแล้ว FPGA นั้นมีหลายบริษัทมาก แต่ในที่นี้ขอยกตัวอย่าง 4 บริษัทจาก market share 2016 ให้ดูนะครับ

market price 2016

      ผู้เขียนได้มีประสบการณ์ใช้ทั้ง Xilinx, Altera และ Lattice ถ้าเราออกแบบวงจรทั่วไป แต่ละยี่ห้อก็ใช้แทนกันได้ครับ