FPGA Story — Part 1

<rawat.s>
6 min readMar 6, 2021

--

ผู้เขียนมีความตั้งใจว่า ในปีพ.ศ. 2564 อยากจะเริ่มเขียนบทความทางด้านเทคโนโลยีที่เรียกว่า FPGA ซึ่งเป็นประเภทของชิปที่โปรแกรมได้เชิงลอจิก โดยส่วนตัวก็ถือว่า จะได้เป็นการศึกษา ทบทวน และอัปเดตความรู้เกี่ยวกับเทคโนโลยีทางด้านนี้ แม้ว่าจะเคยได้ใช้งานในอดีตมาบ้างแต่ก็ผ่านมาหลายปีแล้ว… ก่อนอื่นก็ทบทวนคำศัพท์ที่เกี่ยวข้องกันก่อน

SoC, ASIC, Custom vs. Semi-Custom Design

ไอซี (IC: Integrated Circuit) หรือบางทีก็เรียกว่า ชิป (Chip) ถูกสร้างขึ้นโดยใช้สารกึ่งตัวนำ (Semiconductor) โดยทั่วไปแล้ว ก็คือการสร้างวงจรบนแผ่นซิลิกอน บาง ๆ (Silicon Wafer) เป็นวัสดุที่ทำจากธาตุซิลิกอน (Si Substrate) ไอซีแบ่งออกได้เป็นหลายประเภทที่นำมาใช้ได้ในการออกแบบและสร้างระบบบนแผงวงจรอิเล็กทรอนิกส์

Silicon Die (Source: Wikipedia)

ภายในตัวถังของไอซี (IC Package) ส่วนที่อยู่ภายในก็เรียกว่า Silicon Die มีลักษณะเป็นแผ่นสี่เหลี่ยมขนาดเล็ก ๆ ที่ถูกตัดออกมาจากแผ่นซิลิกอนที่ได้ผ่านขั้นตอนในการผลิตแล้ว ส่วนนี้เป็นบริเวณที่มีการสร้างวงจรรวมเอาไว้ ส่วนประกอบที่เล็กที่สุดก็คือ ทรานซิสเตอร์ (Transistors) โดยทั่วไปก็เป็นประเภท CMOS (Complementary Metal-Oxide Semiconductor)

เมื่อเทคโนโลยีในการผลิตมีความก้าวหน้า ขนาดของทรานซิสเตอร์ก็เล็กลง ทำให้ทรานซิสเตอร์ต่อหนึ่งหน่วยพื้นที่ (ตารางมิลลิเมตร: mm²) ที่สามารถผลิตได้ มีจำนวนมากขึ้น อาจอยู่ที่ระดับหนึ่งล้านตัว/mm² หรือมากกว่า

ลองศึกษาดูข้อมูลเกี่ยวกับจำนวนทรานซิสเตอร์ของชิปตัวอย่างในช่วงหลายสิบปีที่ผ่านมาจนถึงปัจจุบัน จากหน้าเว็บใน Wikipedia มีการระบุจำนวนทรานซิสเตอร์โดยประมาณ (Transistor Count) ขนาดหรือพื้นที่ (Area) ของชิปเหล่านั้น เทคโนโลยีการผลิตที่ใช้ (CMOS Process) เป็นต้น

ยกตัวอย่างประเภทของไอซีที่หลายคนคงรู้จักคือ “ไมโครคอนโทรลเลอร์” (Microcontrollers) และ “ไมโครโพรเซสเซอร์” (Microprocessors) ซึ่งอาจจะมีตัวประมวลผลหนึ่งตัว (Single-CPU Core) หรือมากกว่าก็ได้ (Multiple CPU Cores) และก็มีวงจรรอบข้างอื่น ๆ อีก (On-chip Peripherals) สำหรับฟังก์ชันต่าง ๆ และส่วนต่าง ๆ ทั้งหมดนี้ เชื่อมต่อกันด้วยระบบบัส (System Bus) แต่โดยทั่วไป เราก็จะเรียกว่า SoC (System-on-a-Chip) และสามารถหาซื้อได้จากผู้จำหน่าย (จึงเรียกว่า Off-the-shelf ICs)

Typical Block Diagram of an ARM based MCU (Source: https://en.wikipedia.org/wiki/ARM_architecture)
Die Photo of STM32F103VGT6 MCU (Source: https://en.wikipedia.org/wiki/ARM_architecture)

ไอซีที่ได้มีการออกแบบมาเพื่อใช้เฉพาะงานด้านใดด้านหนึ่งและมีการผลิตเผื่อจำหน่ายทั่วไป เราก็เรียกว่า Application-Specific Standard Products (ASSPs) ไมโครคอนโทรลเลอร์ และตัวประมวลผลสัญญาณดิจิทัล หรือ Digital Signal Processors (DSPs) ก็เป็นตัวอย่างของไอซีประเภทนี้

ในทางตรงข้าม ถ้ามีบริษัทหรือนักพัฒนา อยากจะออกแบบไอซีเอง (เช่น ตามความต้องการของลูกค้า หรือเพราะยังไม่มีขายตามที่ต้องการ หรือเป็นนวัตกรรมใหม่ ๆ) เราก็จะเรียกว่า Custom Chips หรือ ASIC (Application-Specific ICs) วงจรสำหรับ ASICs โดยส่วนใหญ่แล้ว ก็เป็นวงจรดิจิทัล แต่ถ้ามีส่วนที่เป็นวงจรแอนะล็อกด้วย ก็จะเรียกว่า Mixed-Signal ASICs

การออกแบบ ASICs มีต้นทุนสูง เช่น ค่าใช้จ่ายในส่วนที่เรียกว่า Non-Recurring Engineering (NRE) Cost เช่น ค่าจ้างสำหรับทีมออกแบบ ค่า License Fee ในการใช้ซอฟต์แวร์ที่เรียกว่า EDA (Electronic Design Automation) Toolchain / Software Design Suite สำหรับการออกแบบไอซีโดยเฉพาะ (ยกตัวอย่างเช่น ของบริษัท Synopsys, Cadence, Mentor Graphics เป็นต้น)

การออกแบบไอซี ก็ใช้เวลาค่อนข้างนาน และมีหลายขั้นตอน (ลำดับขั้นตอนเหล่านี้เรียกว่า ASIC Design Flow) และในขั้นตอนสุดท้ายต้องส่งไปผลิตที่โรงงาน (Semiconductor Fab / Foundry) เช่น TMSC, UMC, GlobalFoundries, Samsung, IBM เป็นต้น ใช้เวลาหลายเดือนในการผลิต และมีเงื่อนไขเกี่ยวกับจำนวนขั้นต่ำในการผลิต (เช่น ≥100K Units)

Typical ASIC Design Flow, Source: https://en.wikipedia.org/wiki/Physical_design_(electronics)
Raven RISC-V-based SoC: IC Layout by efabless (Source: Hackster.io)

ถ้าเป็นการออกแบบวงจรเองทั้งหมด หรือส่วนใหญ่ เช่น การวาดผังวงจรตั้งแต่ระดับทรานซิสเตอร์ (Transistor-Level Schematic Capture) เพื่อสร้างลอจิกเกตแบบต่าง ๆ (Logic Cells) และนำไปใช้ในการสร้างวงจรในระดับถัดไปที่มีความซับซ้อนและฟังก์ชันแตกต่างกันไปเฉพาะงาน ไปจนถึงการแปลงให้เป็น IC Layout การทำในลักษณะนี้ ก็เรียกว่า Full Custom Design

แต่ถ้าไม่อยากจะออกแบบวงจรเองทั้งหมด ก็ซื้อสิ่งที่เรียกว่า Semiconductor IP (Intellectual Property) Cores ซึ่งได้มีการพัฒนาไว้แล้วโดยบริษัทอื่น (เป็น Pre-defined, Reusable Building Blocks สำหรับการออกแบบ) ส่วนใหญ่ก็เป็นแบบ Silicon-proven Physical IP เช่น วงจรสำหรับตัวประมวลผล (Processor IP) วงจรสำหรับหน่วยความจำ (Memory IP) วงจรเชื่อมต่อ (Interface IP) หรือวงจรแบบแอนะล็อก (Analog IP) เป็นต้น และได้มีการนำไปสร้างเป็นไอซีจริง ผ่านกระบวนการผลิตจากโรงงาน และได้ผ่านการทดสอบการทำงานแล้ว

เมื่อได้ตกลงเรื่องค่าลิขสิทธิ์ หรือค่าใช้จ่ายที่เกิดจากการนำไปใช้งาน (Royalty Fee) นักพัฒนาก็สามารถเลือกคอมโพเนนต์เหล่านี้ มาใส่ไว้ในวงจร ใช้งานร่วมกับวงจรที่ออกแบบเอง และเชื่อมต่อทางสัญญาณภายในให้ถูกต้อง การทำแบบนี้ไม่ใช่การออกแบบเองทั้งหมด การออกแบบที่มีการใช้ IP Cores ก็เรียกว่า IP-based SoC / ASIC Design และช่วยให้การออกแบบทำได้เสร็จเร็วขึ้น แต่ก็จะต้องส่งไปผลิตชิปที่โรงงาน

แนวทางการออกแบบไอซีในรูปแบบที่เรียกว่า Semi-Custom IC Design Methodology มีอยู่หลายตัวเลือก ที่ช่วยลดระยะเวลา ลดความเสี่ยงและค่าใช้จ่าย เมื่อเปรียบเทียบกับ Full-Custom Design เช่น Standard-Cell ASICs (Cell-based ASICs), Mask-programmable Gate Arrays และ Structured ASICs เป็นต้น ซึ่งก็มีข้อดีข้อด้อยแตกต่างกันออกไป แต่ก็จะต้องส่งไปผลิตที่โรงงานเหมือนกัน ขั้นตอนในการผลิตอาจมีมากหรือน้อยแตกต่างกันไป

การออกแบบโดยใช้ไลบรารีของวงจรลอจิกพื้นฐานที่เรียกว่า Standard Cell Library รวมถึงการใช้ Physical IP โดยทั่วไปแล้ว ก็จะเจาะจงใช้กับกระบวนการผลิตไอซีและโรงงาน (Foundry and Process Specific) รวมถึงระดับที่เล็กที่สุดที่สามารถผลิตได้ อาจเรียกว่า Node Size (หน่วยเป็นนาโนเมตร) ซึ่งมีหลายระดับ เช่น 180nm, 65nm, 40nm, 28nm (ราคาจะสูงขึ้นเมื่อมีขนาดเล็กลง)

การออกแบบไอซีโดยใช้ Standard Cell Library จะใช้กับการออกแแบบวงจรดิจิทัลที่มีการใช้ภาษา HDL (Hardware Description Language) เช่น Verilog หรือ VHDL แล้วใช้ซอฟต์แวร์ในการคอมไพล์โค้ดและแปลงให้เป็นวงจรในระดับลอจิกเกต (HDL-based Logic Synthesis) และจากนั้นจึงใช้ซอฟต์แวร์ออกแบบวงจรในระดับ Physical IC Layout เป็นขั้นตอนถัดไป

ตัวอย่างของลอจิกเกตพื้นฐานที่มีให้เลือกใช้สำหรับ Standard Cell Library เช่น

  • Combinatorial
    - Inverter (NOT gate), non-inverting buffer
    - Simple Logic gates — NAND, OR, NOR, XNOR, XOR
    - AOI (AND-OR-INVERT) /OAI (OR-AND-INVERT)
    - Mux/Demux
  • Sequential
    - Flip-flops — with clear and preset
    - D-Type transparent latch
    - Scan flip-flops

ในระดับ Physical IC Layout ลอจิกเกตแต่ละประเภทที่อยู่ใน Standard Cell Library ตามที่ได้เลือกใช้ ได้ถูกออกแบบไว้แล้ว เช่น ลอจิกประเภท NOR2 (2-input NOR Gate) และ AOI31_X2N (AND-OR Gate) ตามรูปต่อไปนี้

NOR Logic Gate: Standard-Cell Physical Layout (Source: Wikipedia)
Source: ICCAD 2017 Tutorial: “Standard Cell Design and Optimization Methodology…” by Arm Ltd.
Open-source Klayout GDS / Mask Layout Viewer & Editor (Source: cornell-ece5745 tutorials)

ถ้าเลือกใช้ Structured ASICs ผู้ผลิตได้สร้างวงจรพื้นฐานตามโครงสร้างที่ได้ออกแบบและผลิตเตรียมไว้แล้ว เหลือแค่บางขั้นตอนสุดท้าย ลูกค้าจะต้องส่งไฟล์ที่ได้จากการออกแบบไปยังผู้ผลิต เพื่อให้โปรแกรมชิปในขั้นตอนสุดท้ายตามที่ลูกค้าต้องการ ทำให้ใช้เวลาในการผลิตสั้นลง เมื่อเปรียบเทียบกับตัวเลือก Semi-Custom ASICs แบบอื่น ๆ

การโปรแกรมในระดับฮาร์ดแวร์ เป็นขั้นตอนสุดท้ายที่เกี่ยวข้องกับการเชื่อมต่อสัญญาณทางไฟฟ้าของวงจรพื้นฐานต่าง ๆ ของไอซี เข้าด้วยกัน (Programmable Interconnect Layer) อาจจำแนกวิธีการได้เป็น Metal-Programmable และ Via-Programmable

บริษัท eASIC (ก่อตั้งขึ้นในปีค.ศ. 1999 และถูกบริษัท Intel ซื้อไปในเดือนกรกฎาคม ค.ศ. 2018) เป็นหนึ่งในผู้ออกแบบ Structured ASICs และเลือกใช้วิธี Via-Programmable ซึ่งก็คือ การทำให้เกิด Via ในส่วนต่าง ๆ ของวงจรรวม เป็นการสร้างจุดเชื่อมต่อกันระหว่างชั้นที่นำไฟฟ้าสำหรับกำหนดเส้นทางสัญญาณไฟฟ้าของวงจร โดยใช้เส้นทางเชื่อมต่อที่เป็นโลหะในแต่ละชั้น (Metal-Interconnect Layers / Stacks) ซึ่งมีอยู่หลาย ๆ ขั้น และอยู่บนชั้นของทรานซิสเตอร์ในระดับล่าง (Transistor Layer) บนแผ่นซิลิกอน

อีกตัวอย่างหนึ่ง บริษัท Intel มีตัวเลือกสำหรับ Structured ASICs (mask-programmable, single-mask custom layer) ไว้ให้บริการ เช่น Intel eASIC N3X / N3XS / N5X และถ้าต้องการผลิตชิปจำนวนมาก (High Volume Production) เพื่อให้ได้ราคาต่อหน่วยถูกลง ทาง Intel ก็มีบริการที่เรียกว่า Intel easicopy Device Migration โดยแปลงดีไซน์จาก eASIC ไปสู่ Cell-based ASIC

FPGA Technology

FPGA ย่อมาจาก Field-Programmable Gate Array ซึ่งโดยทั่วไปแล้ว ก็เป็นวงจรดิจิทัล (Digital Hardware Circuit) ที่โปรแกรมเชิงลอจิกได้ (Logic Programmable) และสามารถทำโอเปอร์เรชันทางลอจิกได้ (Logical Operations) ตั้งแต่ระดับพื้นฐานอย่างเช่น AND, OR, NAND, NOR และในระดับซับซ้อนขึ้นไป แต่ก็แตกต่างจากการทำงานของซีพียูที่โปรแกรมได้เชิงคำสั่ง (Instruction-Set Programmable) และทำคำสั่งไปตามลำดับ (Sequential Execution)

FPGA เป็นชิปที่ผลิตออกมาแล้ว ผู้ใช้ต้องมาออกแบบวงจรและโปรแกรมข้อมูลลงในชิปเพื่อกำหนดรูปแบบการทำงานภายใน ข้อมูลที่ใส่ลงไปเรียกว่า Configuration Data หรือ FPGA Bitstream (และก็คงจะไม่เรียกว่า FPGA Firmware)

อย่างไรก็ตาม ถ้าออกแบบวงจรดิจิทัลสำหรับฟังก์ชันการทำงานเหมือนกัน ถ้าสร้างเป็น ASIC ก็จะทำงานได้ความเร็ว ประหยัดพลังงานได้ดีกว่า และมีราคาต่อหน่วยต่ำกว่า (เมื่อผลิตจำนวนมาก) เมื่อเปรียบเทียบกับกรณีที่ใช้ FPGA แต่การใช้ FPGA จะเหมาะสมกับกรณีที่ต้องการออกแบบและพัฒนาระบบเพื่อนำไปผลิตสินค้าที่มีจำนวนไม่สูงมาก (Low-Volume Production) การทดลองทำชิปต้นแบบ และต้องการปรับเปลี่ยนฟังก์ชันในระดับวงจรได้ (Hardware Programmability)

เทคโนโลยีการผลิต FPGA ได้มีการพัฒนาอย่างต่อเนื่อง ในปัจจุบันขณะที่เขียนบทความนี้ ขอยกตัวอย่าง เทคโนโลยีที่ใช้ในการผลิต Intel Stratix 10 FPGAs ที่ระดับ 14nm และ Intel Agilex F-Series FPGAs ที่ระดับ 10nm (FinFET Process) เป็นต้น เพื่อตอบโจทย์งานทางด้าน 5G, AI, Data-Center FPGA Acceleration เป็นต้น

จากข้อมูลในการสำรวจและวิเคราะห์ตลาดโดย Grand View Research คาดการณ์ว่า FPGA Market เช่น ใน USA จะเติบโตขึ้นในอนาคต ตามรูปบาร์กราฟต่อไปนี้

Source: https://www.grandviewresearch.com/industry-analysis/fpga-market

รายงานการสำรวจและวิเคราะห์ตลาดสำหรับ FPGA โดย Global Market Insights ก็แสดงให้เห็นแนวโน้มการเติบโตในยุโรป เช่นกัน

Source: https://www.gminsights.com/industry-analysis/field-programmable-gate-array-fpga-market-size

FPGA Structure & Internals

หน่วยย่อยของวงจรดิจิทัลที่โปรแกรมได้ใน FPGA เรียกว่า Logic Cells (LCs) หรือ Logic Elements (LEs) แล้วก็มีการจัดกลุ่มเข้าด้วยกันเรียกว่า Programmable Logic Blocks (PLBs) บางทีก็เรียกว่า Configurable Logic Blocks (CLBs)

หลาย ๆ บล็อกเหล่านี้ ถูกนำมาจัดวางอยู่ในลักษณะอาร์เรย์สองมิติ และเชื่อมต่อกันด้วยเส้นทางที่เป็นโลหะสำหรับนำสัญญาณไฟฟ้าและก็สามารถโปรแกรมเส้นทางได้ (Programmable Interconnects / Routing Fabric)

นอกจากส่วนที่เป็นวงจรสำหรับลอจิกและการเชื่อมต่อสัญญาณภายในแล้ว ก็ยังมีส่วนที่เป็น I/O Blocks เพื่อเชื่อมต่อกับวงจรภายนอก

Traditional FPGA Structure (Array-based)

ถ้าเจาะลึกเข้าไปข้างในบล็อกสำหรับลอจิก (LC / LE) ก็มักพบว่า มีวงจรที่เรียกว่า n-input LUT (Look-Up Table) ซึ่งแต่ละตัวมีเอาต์พุตหนึ่งบิต แต่มีอินพุตจำนวน n บิต เช่น n=4,5,6 เป็นต้น และสามารถสร้างวงจรประเภท Combinational Logic ใด ๆ ก็ได้ที่มีจำนวนอินพุตไม่เกิน n บิต

นอกจาก LUT แล้วยังมีวงจร D-Flip-Flop (DFF) และวงจรพื้นฐานอื่นอีก เช่น วงจร Multiplexer (MUX) และวงจร XOR (Exclusive OR) เป็นต้น อย่างไรก็ตามองค์ประกอบภายใน ก็มีรายละเอียดแตกต่างกันไปขึ้นอยู่กับการออกแบบโดยผู้ผลิตชิป FPGA แต่ละราย และบางรายก็มีการจดสิทธิบัตรเอาไว้ด้วย (ลองสืบค้นด้วยได้จาก US Patents)

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

ในปัจจุบัน สถาปัตยกรรมสำหรับ FPGA มีความซับซ้อนมากขึ้น เช่น มีการใส่วงจรหรือบล็อกสำหรับฟังก์ชันต่าง ๆ ที่เรียกว่า Embedded IP Blocks เช่น

  • Embedded Block RAMs
  • Embedded Multipliers
  • Embedded PLLs & Clock Management Units
  • Embedded DSP (Digital Signal Processing) Blocks
  • Embedded Processor Subsystem Blocks
  • Embedded Gigabit/Serial Transceiver Blocks

ในบางตระกูลของชิป FPGA ได้มีการใส่ตัวประมวลผลหรือซีพียูไว้ภายใน อาจมีมากกว่าหนึ่งแกน (Multi-CPU Cores) และวงจรอื่น ๆ นอกเหนือจากวงจรหรือทรัพยากรในระดับฮาร์ดแวร์ที่โปรแกรมได้เชิงลอจิก ดังนั้นเราก็อาจเรียกชิป FPGA ว่าเป็น SoC ก็ได้

FPGA สามารถจำแนกได้ตามเทคโนโลยีในการโปรแกรมข้อมูลภายใน (FPGA Configuration / Programming Technology) เช่น ใช้หน่วยความจำแบบไหน ข้อมูลที่เขียนลงไปนั้นสูญหายหรือไม่ เมื่อหยุดจ่ายไฟเลี้ยง เขียนหน่วยความจำซ้ำได้หรือไม่ หรือได้แค่ครั้งเดียว เป็นต้น

  • SRAM (volatile, re-programmable, run-time reconfigurable)
  • Antifuse (non-volatile/instant-on, one-time-programmable)
  • Flash / EEPROM (non-volatile/instant-on, re-programmable)

ในปัจจุบัน เราอาจจำแนก FPGA ได้เป็นประเภทย่อย เช่น

  • Stand-alone FPGA: เป็นชิป FPGA ที่เราสามารถซื้อมาใช้งานกับแผ่น PCB ได้เหมือนไอซีแบบ SMD ทั่วไป
  • Embedded FPGA (eFPGA) IP: ไม่ได้เป็นไอซีสำเร็จรูป แต่เป็น Hard IP ของ FPGA Vendors เช่น บริษัท Intel, QuickLogic, Efinix, Achronix, Flex Logic Technologies เป็นต้น และจะต้องนำไปใส่ลงในวงจรที่เราออกแบบแล้วส่งไปผลิตกับโรงงาน

ผู้ผลิตชิป FPGA มีบริษัทใดบ้าง (FPGA Vendors) ?

นอกจาก Xilinx/AMD และ Altera/Intel สองบริษัทนี้ที่มี Market Share มากที่สุดแล้ว ก็ยังมีบริษัทอื่นอีก

บริษัทเหล่านี้ตั้งอยู่ในประเทศสหรัฐอเมริกา ยกเว้น GOWIN Semiconductor ซึ่งเป็นบริษัทที่ได้มีการก่อตั้งขึ้นในประเทศจีน

กล่าวสรุป

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

--

--