FPGA • Tang Nano 20K • Verilog • Digital Logic
Tang Nano 20K: เริ่ม FPGA ด้วย Verilog ตั้งแต่ Logic ถึง Bitstream
ถ้าเคยเขียน Arduino หรือ ESP32 มาก่อน สิ่งแรกที่ต้องเปลี่ยนวิธีคิดเมื่อเข้ามาเล่น FPGA คือ: Verilog ไม่ได้ถูก CPU อ่านแล้ว Execute ทีละบรรทัดเหมือนโปรแกรมทั่วไป แต่มันกำลังอธิบายว่าเราต้องการให้ Hardware ข้างใน FPGA ถูกต่อขึ้นมาเป็น Logic แบบไหน
Hackaday จึงหยิบ Sipeed Tang Nano 20K มาเป็น Platform หลักของ FPGA Chronicles รุ่นใหม่ เพราะบอร์ดเล็กตัวนี้มีทั้ง Logic Fabric, RAM, SDR SDRAM, Multiplier, HDMI, LCD, microSD และ Programmer อยู่ใน Platform ที่เหมาะกับการเริ่มทดลอง FPGA โดยไม่ต้องเริ่มจาก Board ขนาดใหญ่
- Tang Nano 20K ใช้ GOWIN GW2AR-LV18QN88C8/I7
- มี 20,736 LUT4 และ 15,552 Flip-Flops
- มี Block SRAM 828 Kbits และ SDR SDRAM 64 Mbits หรือ 8 MB
- มี 48 ตัวคูณแบบ 18×18 สำหรับงานคำนวณที่เหมาะกับ DSP Block
- FPGA ไม่มี “Clock Speed เดียว” ที่บอก Performance ของทุก Design ได้
- Verilog ใช้อธิบาย Hardware Logic ไม่ใช่ลำดับ Instruction แบบ MCU
- Workflow หลักคือ HDL → Constraints → Synthesis → Place & Route → Bitstream
- ตัวอย่างแรกใช้ Switch 2 ตัวสร้าง AND / OR Logic แล้วแสดงผ่าน Active-low LED
- Pin Constraint เป็นตัวเชื่อมชื่อ Signal ใน Verilog กับ Physical Pin บน FPGA
- นอกจาก GOWIN IDE ปัจจุบันยังมี Open-source Toolchain สำหรับ Tang Nano 20K ด้วย
FPGA คืออะไร?
FPGA ย่อมาจาก Field-Programmable Gate Array หรือชิป Logic ที่ผู้ใช้สามารถกำหนดโครงสร้างการเชื่อมต่อภายในได้ภายหลัง แทนที่จะผลิตวงจรขึ้นมาให้มีหน้าที่เดียวตั้งแต่โรงงาน
ภายในไม่ได้มี CPU เพียงตัวเดียว ที่รออ่าน Instruction ตามลำดับ แต่มีทรัพยากร Logic จำนวนมาก ที่สามารถถูก Configure ให้ทำงานต่างกันและทำงานพร้อมกัน
Microcontroller = เขียน Software ให้ Processor ทำงาน
FPGA = อธิบายว่าอยากสร้าง Digital Hardware แบบไหน
แน่นอนว่า FPGA สามารถสร้าง CPU แบบ Soft Core ขึ้นมาได้เช่นกัน และ FPGA บางตระกูลก็มี Processor รวมอยู่ด้วย แต่ประเด็นของ FPGA คือเราสามารถเลือกได้ว่า งานใดควรเป็น Software และงานใดเหมาะกับ Hardware Logic
FPGA ต่างจาก Microcontroller ยังไง?
ตัวอย่างคลาสสิกในห้องเรียนคือ Traffic Light เพราะ State Machine เหมาะมากกับการสอน FPGA แต่ในชีวิตจริง Microcontroller ราคาถูกก็ทำไฟจราจรได้สบาย
ความต่างเริ่มชัดเมื่อโจทย์ต้องการ Parallelism และ Timing ที่กำหนดด้วย Hardware
| แนวคิด | Microcontroller | FPGA |
|---|---|---|
| การทำงานหลัก | Processor Execute Instruction | Logic Blocks ทำงานพร้อมกันตามวงจรที่ Configure |
| Concurrency | อาศัย Peripheral, Interrupt, RTOS หรือหลาย Core | สร้าง Logic หลายชุดทำงานพร้อมกันได้โดยตรง |
| State Machine | ทำใน Software ได้ง่าย | Implement เป็น Hardware State Machine ได้ |
| Sequential Algorithm | มักเขียนง่ายกว่า | ต้องออกแบบ Data Path / State / Timing ให้เหมาะ |
| เหมาะกับงาน | Control, UI, Protocol, General Software | Parallel Logic, Custom Timing, Data Path, Digital Interfaces |
งานแบบไหน FPGA เริ่มได้เปรียบ?
Hackaday ยกตัวอย่างว่า สมมติมี Digital Sensor จำนวนมากบนระบบหนึ่ง และ Sensor ตัวใดตัวหนึ่งต้องสามารถ Raise Alarm ได้ภายในเวลาไม่กี่ Microseconds
Processor อาจต้อง:
- Polling Input
- แบ่ง Inputs เป็นกลุ่ม
- ใช้ Interrupt
- พึ่ง Peripheral เพิ่ม
FPGA สามารถสร้าง Logic ที่เทียบได้กับ OR Gate ขนาดใหญ่ ซึ่ง Monitor ทุก Input พร้อมกันตลอดเวลา
Logic ส่วนอื่นใน FPGA สามารถทำงานของตัวเองต่อ โดยไม่ต้องแย่ง Execution Time จาก Logic ตรวจ Alarm ชุดนี้
Tang Nano 20K ใช้ FPGA ตัวไหน?
Tang Nano 20K ใช้:
GOWIN GW2AR-LV18QN88C8/I7
| Resource | ข้อมูลที่ยืนยันได้จากหน้า Tang Nano 20K |
|---|---|
| LUT4 | 20,736 |
| Flip-Flops | 15,552 |
| Shadow SRAM | 41,472 bits |
| Block SRAM | 828 Kbits / 46 blocks |
| SDR SDRAM | 64 Mbits หรือ 8 MB, 32-bit |
| 18×18 Multipliers | 48 |
| PLLs | หน้าเฉพาะ Tang Nano 20K ระบุ 2 |
20,736 LUT หมายถึงอะไร?
ชื่อ “20K” ไม่ได้หมายถึง RAM 20 KB แต่สะท้อนขนาดของ Logic Fabric ซึ่ง FPGA ตัวนี้มี 20,736 LUT4
LUT ย่อมาจาก Look-Up Table
สมมติเราต้องการ Logic:
Z = A OR (B AND C) OR (A XOR D)
Tool ไม่จำเป็นต้องหยิบ AND Gate, OR Gate และ XOR Gate แบบชิ้นส่วนแยกมาต่อให้เหมือน Schematic ที่เราวาดด้วยมือ
มันสามารถหาค่า Output สำหรับ Combination ของ Input แล้ว Mapping Function นั้นลงใน LUT ตาม Architecture ของ FPGA
FPGA ข้างในไม่ได้มีแค่ Logic
Project FPGA ที่ใหญ่ขึ้น ต้องใช้มากกว่า LUT และ Flip-Flop เช่น Buffer, Framebuffer, FIFO หรือ Memory สำหรับ Soft CPU
Distributed / Shadow SRAM
ใช้ทรัพยากรภายใน Logic Fabric สำหรับ Memory ขนาดเล็กตาม Architecture ของ Device
Block SRAM
Tang Nano 20K Documentation ระบุ Block SRAM รวม 828 Kbits จำนวน 46 Blocks
SDR SDRAM 8 MB
GW2AR Platform ที่ใช้บนบอร์ดนี้ มี SDR SDRAM 64 Mbits หรือ 8 MB แบบ 32-bit
Memory ส่วนนี้ไม่ใช่ Block RAM และการใช้งานยังต้องมี Controller / Logic สำหรับสื่อสารกับ SDRAM
Hardware Multipliers
Device ยังมี 18×18 Multipliers จำนวน 48 ชุด ซึ่งสามารถใช้กับงานคำนวณ ที่เหมาะกับ Dedicated Arithmetic Resource แทนการสร้างทุกอย่างจาก LUT
บน Tang Nano 20K มีอะไรติดมาให้บ้าง?
นอกจาก FPGA Fabric ตัวบอร์ดยังมี Peripheral ที่ช่วยให้ทดลอง Project ได้หลายแนว
| Hardware | หน้าที่ / ข้อมูลจาก Source |
|---|---|
| BL616 | JTAG Programmer, USB-UART และงานสื่อสาร/ควบคุมบางส่วนของบอร์ด |
| MS5351 | Programmable Clock Generator |
| HDMI | Display Interface บนบอร์ด |
| 40-pin RGB LCD | Connector สำหรับ RGB LCD |
| TF / microSD | Storage Interface |
| MAX98357A | PCM Audio Amplifier |
| Monochrome LEDs | 6 ดวง แบบ Active-low |
| RGB LED | WS2812 จำนวน 1 ดวง |
| User Keys | 2 ปุ่ม |
| Board Size | 22.55 × 54.04 mm |
แต่การมี HDMI หรือ RAM อยู่บนบอร์ด ไม่ได้หมายความว่า FPGA “รู้วิธีใช้” ให้เอง เราต้องมี Logic, IP หรือ Controller ที่เหมาะสมกับ Peripheral นั้น
Workflow FPGA ตั้งแต่ HDL ถึง Bitstream
Main Source สรุป Workflow พื้นฐานไว้เป็นขั้น ๆ ซึ่งต่างจากการเขียน Arduino Sketch แล้ว Compile ลง MCU อยู่พอสมควร
อธิบาย Logic ด้วย Verilog หรือ VHDL
ระบุ Interface ระหว่าง Design กับโลกภายนอก
Mapping Port ไปยัง Physical Pin และกำหนดข้อจำกัดที่เกี่ยวข้อง
แปลง HDL ไปเป็น Logic / Primitive ที่ FPGA รองรับ
เลือกว่าจะวาง Logic ที่ไหนและเดิน Routing อย่างไร
สร้างข้อมูล Configuration สำหรับ FPGA
โหลด Configuration ไปยัง FPGA / Configuration Storage
สำหรับ Design ที่มี Clock ขั้นตอน Place & Route และ Timing Analysis มีความสำคัญมาก เพราะ Logic ที่ถูกต้องเชิง Boolean อาจยังไม่ทำงานที่ Clock Frequency ที่ต้องการ หากเส้นทางสัญญาณช้าเกินไป
Verilog ไม่ได้รันทีละบรรทัด
ตัวอย่างแรกของ Hackaday มี Input จาก Switch สองตัว แล้วสร้าง Output สองชุด:
- OR
- AND
module top(output led1, output led, input sw0, input sw1);
assign led = ~(sw0 | sw1);
assign led1 = ~(sw0 & sw1);
endmodule
สิ่งสำคัญคือสองบรรทัด assign ไม่ได้ทำงานแบบ:
“ทำ OR ก่อน → แล้วค่อยทำ AND”
แต่ Synthesis Tool จะสร้าง Logic Path สำหรับทั้งสอง Output และหลัง FPGA ถูก Configure แล้ว Logic ทั้งสองชุดก็อยู่ใน Hardware พร้อมกัน
ทำไมต้องมีเครื่องหมาย ~?
LED บน Tang Nano 20K ที่ใช้ใน Example เป็นแบบ Active-low
กล่าวคือ:
Output Logic 0 → LED ติด
การ Invert ด้วย ~ จึงเกี่ยวกับวิธีต่อ LED บน Board ไม่ใช่กฎว่า AND หรือ OR บน FPGA ต้อง Invert เสมอ
Constraint File เชื่อม “ชื่อใน Code” กับ “Pin จริง” ยังไง?
Verilog รู้ว่ามี Signal ชื่อ led, led1, sw0 และ sw1
แต่ HDL ไม่รู้เองว่า LED จริงของ Tang Nano 20K ถูกต่อกับ Pin หมายเลขอะไร
Constraint File จึงทำหน้าที่ Mapping:
Logical Port → Physical FPGA Pin
| Signal ใน Example | FPGA Pin | หน้าที่ |
|---|---|---|
| led | 15 | LED Output |
| led1 | 16 | LED Output |
| sw0 | 87 | Switch Input |
| sw1 | 88 | Switch Input |
IO_LOC "led" 15;
IO_PORT "led" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "led1" 16;
IO_PORT "led1" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "sw1" 88;
IO_PORT "sw1" IO_TYPE=LVCMOS33 PULL_MODE=NONE BANK_VCCIO=3.3;
IO_LOC "sw0" 87;
IO_PORT "sw0" IO_TYPE=LVCMOS33 PULL_MODE=NONE BANK_VCCIO=3.3;
Tool เห็น Logic ของเราเป็นอะไร?
GOWIN Tool สามารถแสดง Schematic ของ Logic ที่ได้จาก Design แม้ Workflow หลักจะไม่ได้เน้นการลาก Gate ด้วยมือทีละตัว
สำหรับ Design เล็ก Schematic ยังอ่านง่าย แต่เมื่อ Design ใหญ่ขึ้น การเขียน HDL จะ Scale ได้ดีกว่าการวาด Gate จำนวนมากด้วยมือ
Bitstream คืออะไร และทำไมปิดไฟแล้ว FPGA อาจลืม?
หลัง Synthesis และ Place & Route Tool จะสร้าง Bitstream สำหรับ Configure FPGA
Main Source อธิบายว่า เราสามารถโหลด Configuration ไปยัง FPGA เพื่อทดลองแบบ Volatile หรือเขียนลง Configuration Storage เพื่อให้ Board สามารถ Configure ใหม่ หลังเปิดเครื่องครั้งต่อไป
ดู Workflow ตั้งแต่สร้าง Project ถึงรันบน Breadboard
Video ประกอบของ Hackaday เดินตั้งแต่การสร้าง Project, เขียน Logic, ใส่ Constraints, Build และทดสอบบน Hardware จริง
GOWIN IDE ใช้ทำอะไร?
Vendor Tool สามารถครอบคลุม Workflow หลัก ตั้งแต่ Project Setup ไปจนถึง:
- HDL Editing
- Synthesis
- Constraint / FloorPlanner
- Place & Route
- RTL / Schematic View
- Bitstream Generation
- Programming Flow
Hackaday ใช้ GOWIN Tool เป็นฐานของตอนเริ่มต้น ก่อนจะไปดู Open-source Tools ในตอนอื่นของ Series
สำหรับ Beginner Vendor Flow มีข้อดีตรงที่ Pin Planning, Report และ Device Support อยู่ใน Environment เดียวกัน
Linux Installation: ปัญหาที่ผู้เขียน Hackaday เจอ
ผู้เขียนระบุว่า GOWIN Software สามารถรันบน Linux ได้ แต่เครื่องของเขาใช้ Distribution ที่ไม่ได้อยู่ใน Supported Distro จึงเจอปัญหา Dependency และ Library
ปัญหาที่เขาเจอรวมถึง:
- libfreetype.so.6
- Library จาก GOWIN ชนกับ System Library
- ต้องปรับ LD_LIBRARY_PATH
- FTDI Driver ของ Linux จับ Interface ที่ Programmer ต้องการใช้
SUBSYSTEM=="usb", DRIVER=="ftdi_sio", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTR{bInterfaceNumber}=="00", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/usb/drivers/ftdi_sio/unbind'"
ไม่อยากใช้ Vendor IDE อย่างเดียว มี Open-source FPGA Tools ไหม?
มี ปัจจุบัน Project Apicula มี TangNano20K-specific Flow และ Open-source Toolchain สามารถประกอบจากเครื่องมืออย่าง:
- Yosys
- nextpnr-himbaechel
- Project Apicula / gowin_pack
- openFPGALoader
openFPGALoader Documentation ยังมี Board Flag:
tangnano20k
สำหรับ Tang Nano 20K โดยตรง
แล้ว Tang Nano 20K “วิ่งกี่ MHz”?
นี่เป็นคำถามที่ตอบแบบ CPU ไม่ได้
Main Source อธิบายว่า Maximum Clock Rate ของ FPGA Design ขึ้นกับ Logic และ Routing อย่างมาก
ปัจจัยที่เกี่ยวข้อง เช่น:
- Logic Depth
- Routing Delay
- Fan-out
- Pipeline Design
- Placement
- Timing Constraints
ผู้เขียนกล่าวในภาพรวมว่า Device ทำงานในระดับ Low Hundreds of MHz ได้กับ Design ที่ Pipeline เหมาะสม แต่ไม่ได้ระบุ Guaranteed Fmax สำหรับ Project ทุกแบบ
ยังไม่มี FPGA ก็เริ่ม Digital Logic ได้
Hackaday ยังแนะนำ FPGA Bootcamp 0 สำหรับคนที่อยากทบทวน:
- Boolean Logic
- Combinational Logic
- State Machine
- แนวคิด Digital Design
ส่วนนี้เหมาะกับคนที่ยังไม่มี FPGA เพราะ Material เดิมบางส่วน สามารถเรียน Concept ผ่านเครื่องมือใน Browser ได้
Maker ได้อะไรจาก Tang Nano 20K และบทเรียนนี้?
1. เปลี่ยนจาก “เขียน Code” เป็น “ออกแบบ Hardware”
Syntax ของ Verilog ดูคล้าย Programming Language แต่ Mental Model ต่างกันมาก เพราะ Statement หลายชุดอธิบาย Hardware ที่ทำงานพร้อมกัน
2. Pinout เป็นส่วนหนึ่งของ Design
HDL ที่ถูกต้อง ยังไม่พอถ้า Constraint Mapping ผิด เพราะ Logic อาจไปออก Physical Pin ที่ไม่ได้ต่อกับอุปกรณ์ที่เราต้องการ
3. Build ผ่านยังไม่เท่ากับ Timing ผ่าน
Design ใหญ่ขึ้น ต้องสนใจ Place & Route และ Timing Closure ไม่ใช่เพียง Syntax Error
4. FPGA มี Memory หลายชนิด
Distributed RAM, Block RAM และ SDRAM ไม่ได้แทนกันได้แบบตรง ๆ ต้องเลือกตาม Capacity, Interface และ Timing ของ Design
5. MCU กับ FPGA ไม่จำเป็นต้องเป็นคู่แข่งกัน
งานจำนวนมากเหมาะกับการใช้ Software จัดการ Control Flow แล้วให้ FPGA ทำ Data Path หรือ Parallel Logic ที่ Hardware ทำได้ดีกว่า
FAQ: คำถามที่พบบ่อย
1. Tang Nano 20K คืออะไร?
เป็น FPGA Development Board ของ Sipeed ที่ใช้ GOWIN GW2AR-LV18QN88C8/I7
2. เลข 20K หมายถึง RAM 20 KB หรือไม่?
ไม่ ตัว FPGA มี Logic Resource ระดับ 20,736 LUT4 ไม่ได้หมายถึง RAM 20 KB
3. Tang Nano 20K มี LUT เท่าไร?
20,736 LUT4 ตามหน้าเฉพาะ Tang Nano 20K ของ Sipeed
4. มี Flip-Flop เท่าไร?
15,552 Flip-Flops
5. มี RAM เท่าไร?
Source ระบุ Shadow SRAM 41,472 bits, Block SRAM 828 Kbits และ SDR SDRAM 64 Mbits หรือ 8 MB ซึ่งเป็น Memory คนละประเภทกัน
6. 8 MB SDRAM คือ Block RAM หรือไม่?
ไม่ เป็น SDR SDRAM แยกจาก Block SRAM ภายใน FPGA Fabric
7. Tang Nano 20K มี CPU ใน FPGA หรือไม่?
Source ที่ใช้ในบทความนี้ไม่ได้ระบุ Hard CPU Core ใน GW2AR-18 ของ Tang Nano 20K แต่ FPGA สามารถใช้ Soft CPU Design ได้หากมี Implementation ที่เหมาะสม
8. Verilog คือ Programming Language หรือ Hardware Description Language?
ในบริบทนี้ใช้เป็น Hardware Description Language เพื่ออธิบาย Logic ที่ FPGA Tool จะนำไป Synthesize
9. assign สองบรรทัดทำงานทีละบรรทัดหรือไม่?
ไม่ Continuous Assignments อธิบาย Logic ที่อยู่และทำงานพร้อมกันใน Hardware หลัง Configure FPGA
10. Synthesis คืออะไร?
เป็นขั้นตอนที่แปลง HDL ไปเป็น Logic / Primitive ที่ FPGA Architecture รองรับ
11. Place & Route คืออะไร?
เป็นขั้นตอนวาง Logic ลง Resource จริงของ FPGA และกำหนดเส้นทางสัญญาณระหว่าง Resource เหล่านั้น
12. Constraint File จำเป็นไหม?
สำหรับ Design ที่ต่อกับ Hardware ภายนอก ต้องมีข้อมูล Mapping Logical Ports ไปยัง Physical Pins และข้อกำหนดที่เกี่ยวข้อง
13. ทำไม LED Example ต้องใช้เครื่องหมาย ~?
เพราะ LED ที่ใช้ใน Example เป็น Active-low จึงติดเมื่อ Output เป็น Logic Low
14. Tang Nano 20K วิ่งสูงสุดกี่ MHz?
Source ไม่ให้ Clock Speed เดียวสำหรับทุก Design เพราะ Fmax ขึ้นกับ Logic, Routing และ Timing ของ Project
15. ใช้ GOWIN IDE อย่างเดียวหรือไม่?
ไม่ ปัจจุบันมี Open-source Flow เช่น Yosys, nextpnr-himbaechel, Project Apicula และ openFPGALoader สำหรับ Tang Nano 20K ด้วย
16. Linux ทุกเครื่องต้องเพิ่ม udev Rule ตาม Hackaday ไหม?
ไม่ ผู้เขียนระบุว่าเป็น Workaround สำหรับ Environment ของเขา และเครื่องอื่นอาจไม่ต้องใช้เลย
17. Tang Nano 20K มี HDMI และ microSD ไหม?
มี HDMI Interface, 40-pin RGB LCD Connector และ TF / microSD Slot ตาม Sipeed Documentation
18. ยังไม่มี FPGA สามารถเริ่มเรียนได้ไหม?
ได้ Hackaday แนะนำ FPGA Bootcamp 0 สำหรับทบทวน Digital Logic โดย Material บางส่วนใช้เครื่องมือใน Browser และไม่ต้องมี FPGA จริง
FPGA มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
หากเพิ่งเริ่ม FPGA แนะนำเปิดบทความ Hackaday, Sipeed Documentation และ Video ควบคู่กัน เพราะแต่ละ Source ช่วยคนละด้าน: Concept, Board-specific Information และ Workflow จริงใน Tool
References / แหล่งข้อมูลต้นฉบับ
- Hackaday — The FPGA Chronicles: Exploring The Tang Nano 20K
- Sipeed Wiki — Tang Nano 20K
- Sipeed Wiki — Tang Nano 20K LED Example
- Sipeed Wiki — Tang FPGA Board Comparison
- YosysHQ — Project Apicula
- Project Apicula — openFPGALoader Board Support
- The FPGA Chronicles: Getting Started with the Tang Nano 20K
- Hackaday.io — FPGA Bootcamp 0
FPGA ยากตรงวิธีคิด ไม่ใช่เพราะต้องเริ่มจากวงจรใหญ่
ตัวอย่าง AND / OR เพียงไม่กี่บรรทัด อาจดูง่ายมาก แต่ช่วยให้เข้าใจแนวคิดสำคัญที่สุดของ FPGA: HDL กำลังอธิบาย Hardware, Constraints เชื่อม Hardware นั้นกับ Board จริง และ Toolchain เปลี่ยน Design ไปเป็น Configuration ที่ FPGA ใช้งานได้
หากกำลังเริ่ม FPGA, Digital Logic หรือ Embedded Project สามารถสอบถามทีม Globalbyte เรื่อง Development Board, Module และ Maker Accessories ที่เหมาะกับ Project ได้