ความสำคัญของวงจรรวมอิเล็กทรอนิกส์ในยุคดิจิทัล
ในโลกของยุคดิจิทัล เราใช้อุปกรณ์และระบบต่าง ๆ ที่ทำงานด้วยวงจรอิเล็กทรอนิกส์เป็นองค์ประกอบสำคัญ มักเห็นอยู่ในรูปของไอซี (Integrated Circuit: IC) หรือ ชิป (Chip) ภายในมีสิ่งที่เป็นองค์ประกอบพื้นฐาน เรียกว่า ทรานซิสเตอร์ (Transistors) จำนวนหลายล้านตัว มีหลายประเภท แต่ที่นิยมใช้กันคือ CMOS
โดยทั่วไป เราก็จำแนกวงจรอิเล็กทรอนิกส์ได้เป็น 1) ประเภทแอนะล็อก (ประมวลผลแบบสัญญาณแอนะล็อก) และ 2) ประเภทดิจิทัลหรือลอจิก (ประมวลผลด้วยสัญญาณหรือข้อมูลแบบดิจิทัล) หรือ มีทั้งสองแบบ ทำงานร่วมกันได้ (Mixed-Signal) โดยมีวงจรเช่น AD/DC (Analog-to-Digital) / (Digital-to-Analog) Converters เป็นตัวทำหน้าที่แปลงประเภทของสัญญาณ เป็นต้น
เราสามารถจำแนกประเภทของวงจรรวมลอจิกได้หลายชนิด ตามวัตถุประสงค์ในการใช้งาน เช่น ตัวประมวลผลที่ใช้งานทั่วไป (General-Purpose Processors) หน่วยความจำ (Memories) ชิปที่ได้ออกแบบมาสำหรับใช้งานตามมาตรฐานบางอย่าง (ASSP: Application-Specific Standard Product) เหล่านี้สามารถหาซื้อมาใช้งานหรือใส่รวมในระบบของเราได้ แต่มีอีกประเภทหนึ่งคือ ชิปเฉพาะงาน (ASIC: Application-Specific IC) ที่บริษัทใดบริษัทหนึ่งได้ออกแบบแล้วไปจ้างผลิต (แต่อาจไม่นำมาขายทั่วไป) เป็นต้น
ในปัจจุบันความก้าวหน้าด้านเทคโนโลยีการออกแบบและผลิตวงจรจากสารกึ่งตัวนำ (Semiconductor Fabrication Technologies) ทำให้ขนาดของทรานซิสเตอร์เล็กลงไป จนถึงระดับนาโนเมตร (ประมาณหลักสิบหรือต่ำกว่า เช่น เทคโนโลยี FinFET CMOS) จำนวนทรานซิสเตอร์ที่สร้างได้บนแผ่นสารกึ่งตัวนำ (Silicon Wafer) ต่อหนึ่งหน่วยพื้นที่จึงมากขึ้น
เราอาจจำแนกประเภทของวงจรรวมตามความจุของลอจิก หรือจำนวนของทรานซิสเตอร์ต่อชิปได้เช่นกัน เรียงจากน้อยไปมากดังนี้
- SSI (Small-Scale Integration)
- MSI (Medium-Scale Integration)
- VLSI (Very-Large Scale Integration)
- ULSI (Ultra-Large Scale Integration)
- GSI (Giga-Scale Integration)
วงจรดิจิทัลในรูปแบบของไอซีวงจรรวมนั้น ถ้าใช้จำนวนทรานซิสเตอร์มากขึ้น (ระดับของการรวมไว้ในวงจรต่อหนึ่งชิป) ก็สามารถสร้างระบบบนชิป (System-on-a-Chip) ที่มีความซับซ้อนสูงมากได้ ไอซีประเภท SoC มักรวมวงจรที่เป็นตัวประมวลผลหรือซีพียู (CPU) หน่วยความจำ (เช่น ประเภท SRAM, Flash) และวงจรรอบข้าง (Peripheral Units) เช่น สำหรับการเชื่อมต่อI I/O กับภายนอกในรูปแบบต่าง ๆ วงจรสื่อสารแบบใช้สายหรือแบบไร้สาย เป็นต้น
ขอยกตัวอย่างการออกแบบ ASIC / SoC ที่น่าสนใจกรณีหนึ่ง คือ PicoSoC เป็นการใช้ PicoRV32 CPU Core สำหรับนำไปผลิตได้จริง (ใช้ X-Fab XH018 Process, 0.18 micron) และมีการใช้ซอฟต์แวร์ประเภท EDA (Electronic Design Autoamation) Tools ที่เป็น Open Source ในการออกแบบ เช่น “qflow” (Synthesis Toolchain), “iverilog” (Verilog Simulation Tool) และ “magic” (IC Layout & DRC tool)
การออกแบบวงจรลอจิก
ในระดับมหาวิทยาลัย ก็มีการเรียนการสอนเกี่ยวกับพื้นฐานดิจิทัล และการออกแบบวงจรดิจิทัล (Logic Circuit Design) อาจใช้วิธีดั้งเดิม โดยการสร้างจากลอจิกเกต (Logic Gates) เช่น NAND2 (two-input NAND) หรือชนิดอื่น เป็นต้น
ลอจิกเกตประเภท NAND นี้ (หรือจะใช้ NOR แทนก็ได้) ถือว่าเป็น “Universal Logic Building Blocks” เมื่อนำมาต่อกัน ก็จะได้เป็นวงจรที่มีฟังก์ชันการทำงานในรูปแบบต่าง ๆ ได้
วิธีการออกแบบโดยการใช้ลอจิกเกต นำมาวาดเป็นวงจรลอจิก เชื่อมต่อขาสัญญาณ (เรียกวิธีนี้ว่า Schematic Capture) มีข้อจำกัด และเพื่อเป็นการเพิ่ม หรือยกระดับความสามารถในการออกแบบวงจรดิจิทัล (Logic Design Productivity) จึงมีการใช้วิธีการอื่นและเครื่องมือที่เกี่ยวข้องสำหรับนักออกแบบวงจร เช่น
- การใช้ภาษาประเภท HDLs (Hardware Description Languages) เช่น VHDL, Verilog, SystemVerilog เป็นต้น มาใช้อธิบายฟังก์ชันหรือโครงสร้างการทำงานของวงจร สร้างแบบจำลองของวงจรในระดับลอจิกเกต และระดับที่สูงกว่า โดยมองว่า การเปลี่ยนแปลงสถานะลอจิกของรีจิสเตอร์และสัญญาณภายในวงจรเกิดขึ้นอย่างไร เราเรียกระดับในการมองนี้ว่า (Level of Abstraction) Register-Transfer Level (RTL)
- ในระดับที่สูงขึ้นมา มีการใช้ภาษา C/C++ หรือ OpenCL ในการออกแบบแล้วแปลงให้เป็นโค้ดในภาษา HDL (ระดับ RTL) ได้โดยอัตโนมัติ ซอฟต์แวร์ที่ใช้ในการแปลงลักษณะนี้ เราเรียกว่า High-Level Synthesis (HLS) / Compilation Tools
จากที่กล่าวไป เราพอจะเห็นความสำคัญของซอฟต์แวร์ หรือเครื่องมือช่วยสำหรับนักออกแบบ เช่น การใช้ซอฟต์แวร์เพื่อแปลงโค้ดระดับ RTL ให้เป็นวงจรในระดับลอจิกเกตในระดับต่ำลงมาได้โดยอัตโนมัติ (ให้อยู่ในรูปของสิ่งที่เรียกว่า Design Netlist) การทำงานในขั้นตอนนี้ เป็นการสังเคราะห์วงจรลอจิก (Logic Synthesis) และนำไปประมวลผลในขั้นตอนต่อไปตามผังของ Design Flow
ตัวอย่างซอฟต์แวร์ (Commercial Software) สำหรับการสังเคราะห์วงจรและจำลองการทำงานของโมเดลที่เขียนด้วยภาษา HDL (เพื่อนำไปสร้างวงจรประเภท ASIC / FPGA)
- HDL Simulators: Aldec Active HDL & Riviera-PRO, Cadence Incisive, Mentor Graphics ModelSim & Questa, Synopsys VCS
- HDL Synthesis Tools: Synopsys Synplify Pro, Synopsys Design Compiler, Mentor Graphics Precision RTL
ถ้าเปรียบเทียบกับการพัฒนาซอฟต์แวร์ หรือโปรแกรมคอมพิวเตอร์: เราสามารถเขียนโค้ดในระดับ Assembly ได้ แต่จะใช้เวลาในการเขียนโค้ดและอาจดูยุ่งยากกว่าการใช้ภาษาที่มีระดับสูงขึ้นมาเช่น ภาษา C เป็นต้น
แต่ในปัจจุบัน ก็มีภาษาคอมพิวเตอร์ที่อื่นอีกที่ไม่ใช่ C สำหรับการพัฒนาซอฟต์แวร์หรือโปรแกรมที่มีความซับซ้อนสูง ทำได้ง่ายและได้ผลเร็ว (ในแง่ของ Software Quality และ Software Development Productivity) และยังมีเครื่องมือที่ช่วยในการทดสอบอัตโนมัติ (Automated Software Build & Tests)
ปลายทางของการออกแบบวงจรดิจิทัลหรือวงจรรวมของ IC Design Flow ก็จะต้องให้ได้เป็นฮาร์ดแวร์จริงออกมา เช่น ถ้าต้องการออกแบบและสร้างชิปประเภท ASIC เมื่อได้ออกแบบวงจรเองโดยใช้ซอฟต์แวร์คอมพิวเตอร์ (เรียกว่า ASIC Design Software Tools) แล้วจะได้ไฟล์ที่สามารถนำไปใช้ในขั้นตอนการสร้างหรือผลิตวงจรหรือชิปจริงได้ (เช่น GDSII format) โดยจะต้องส่งไฟล์ไปยังผู้ผลิตในโรงงาน และมีค่าใช้จ่ายที่สูงมาก ต้องมีจำนวนขั้นต่ำในการผลิตชิป เป็นต้น
ในเชิงเปรียบเทียบ ถ้าเราออกแบบแผ่น PCB (Printed Circuit Board) เราเริ่มต้นการออกแบบ (Design Entry) ด้วยการวาดผังวงจร (Schematic Capture) จากนั้นจึงแปลงให้เป็น PCB Layout ซึ่งอาจทำขั้นตอนนี้โดยอัตโนมัติโดยซอฟต์แวร์ หรือทำบางส่วนโดยนักออกแบบ เอง เช่น การเลือกวางตำแหน่งของอุปกรณ์ และการหาเส้นทางสัญญาณเชื่อมต่อ (Component Placement & Signal Routing)
นอกจากนั้นยังต้องมีการตรวจสอบความถูกต้องในประเด็นต่าง ๆ เช่น PCB Design Rule Check (DRC) การวิเคราะห์วงจรของแผ่น PCB ที่อาจเกิดปัญหาสัญญาณรบกวนกัน เช่น Crosstalk (PCB Design Signal Integrity) เป็นต้น ไฟล์ที่ได้จากขั้นตอนสุดท้าย จะต้องถูกส่งไปยังผู้ผลิตแผ่น PCB ในลำดับถัดไป
การตรวจสอบความถูกต้องของดีไซน์ (Design Verification)
ถ้าบริษัทใดได้ออกแบบวงจรเพื่อนำไปสร้างชิปประเภท ASIC / SoC นอกจากจะมีต้นทุนที่สูงแล้ว (เช่น ค่าใช้จ่าย Software License ของซอฟต์แวร์ที่ใช้ในการออกแบบ ASIC/SoC เช่น ซอฟต์แวร์ของบริษัท Cadence, Synopsys และ Mentor Graphics และมักมีราคาแพง) ก็จะมีความเสี่ยงสูง เพราะถ้าไปจ้างโรงงานผลิตแล้วทดสอบชิปที่ได้ผลิตมา (Post-Silicon Testing) แล้วพบความผิดพลาดจากการออกแบบ จะทำให้สูญเงินไป และแก้ไขได้ยากหรือทำไม่ได้ (ไม่เหมือนการแก้ไข Software Bugs)
ในกรณีที่ต้องการผลิต แต่จำนวนวงจรไม่มาก (เช่น หลักร้อยหรือหลักพันต่อปี) ก็อาจจะใช้ชิปประเภท FPGA (Field-Programmable Gate Array) เป็นตัวเลือก ที่ได้มีการผลิตมาออกจำหน่าย โดยบริษัท FPGA Vendors เช่น Xilinx, Intel/Altera, Lattice Semiconductor เป็นต้น แม้ว่าจะมีต้นทุนต่อชิ้นสูงกว่า ASIC แต่ก็สามารถสร้างวงจรดิจิทัลได้เองโดยใช้ชิปสำเร็จรูป (ไม่ต้องส่งไปผลิดที่โรงงาน) ลดความเสี่ยงและลดระยะเวลาผลิตเข้าสู่ตลาด (Time to market)
เมื่อความซับซ้อนของการออกแบบวงจรรวมสูงขึ้น การตรวจสอบความถูกต้องในการออกแบบ หรือดีไซน์นั้น ก็จะมีความสำคัญเพิ่มมากขึ้นเช่นกัน
Verification หมายถึง การตรวจสอบดูว่า สิ่งที่ออกแบบนั้น ถูกต้องตามข้อกำหนดไม่ (System Specification) ถ้าเป็นวงจรดิจิทัล ก็แบ่งเป็นสองประเด็นหลักคือ
- มีฟังก์ชันการทำงานถูกต้องหรือไม่ (Functional Verification) ยกตัวอย่างเช่น ถ้าป้อนอินพุตแบบนี้ จะต้องได้เอาต์พุตตามที่กำหนดไว้เป็นกรณีทดสอบ (Test Input Vectors, Test Patterns)
- สามารถทำงานเชิงเวลาได้ถูกต้องหรือไม่ (Timing Verification) เช่น ถ้าทำงานด้วยความถี่ของสัญญาณ Clock สูงสุดที่กำหนดไว้ใน Spec จะต้องไม่เกิดความผิดพลาด เช่น อาจใช้วิธีการวิเคราะห์วงจรแบบ Static Timing Analysis (STA) สำหรับวงจรดิจิทัลที่ทำงานด้วย Clock แบบ Synchronous เพื่อตรวจสอบการทำงานในเบื้องต้นก่อน
ข้อสังเกต: อีกคำหนึ่งที่คล้ายกันคือ Validation ซึ่งเป็นการตรวจสอบและยืนยันว่า สิ่งที่กำหนดไว้ในข้อกำหนดของระบบ และได้ออกแบบระบบตามนั้น เป็นไปตามความต้องการของลูกค้าจริงหรือไม่ (ได้ออกแบบและสร้าง “สิ่งที่ใช่” หรือไม่ ?)
การตรวจสอบความถูกต้อง (Verification Tests) มักทำในระดับบล็อก (ฺFunctional Block Level) เหมือนในกรณีของ Unit or Component Level Software Testing ยกตัวอย่างเช่น การทดสอบวงจรดิจิทัลประเภท IP (Intellectual Properties) Cores ที่สามารถนำไปใส่รวมไว้ระบบตามที่เราต้องการออกแบบได้
วิธีการตรวจสอบความถูกต้องของวงจรรวมหรือระบบดิจิทัล มีหลายวิธี
- การจำลองการทำงาน (Software-based Simulation) เป็นหนึ่งวิธีที่ใช้ซอฟต์แวร์ประเภท Simulator ตรวจสอบสิ่งที่ได้ออกแบบไว้ โดยการป้อนหรือกำหนดอินพุตในช่วงเวลาต่าง ๆ หรือกำหนดเหตุกาณ์จากภายนอก และตรวจสอบสถานะภายในหรือเอาต์พุตของวงจรหรือระบบ อาจแบ่งได้หลายระดับ เช่น ระดับลอจิกเกต (Logic Gate Level) ระดับ RTL และระบบโดยรวม (System Level)
- การใช้วิธีการทางคณิตศาสตร์ (Formal / Static Verification = Mathematical Proving of the Correctness of Systems) เป็นวิธีที่ใช้ซอฟต์แวร์ช่วยในการวิเคราะห์ มีหลายเทคนิคทางคณิตศาสตร์หรืออัลกอริทึมที่ใช้ เช่น การตรวจสอบความถูกต้องของโมเดลที่ได้จากวงจร (Model Checking) โดยพิจารณาตามคุณสมบัติที่ได้กำหนดไว้ (Formal Properties)
- การใช้ฮาร์ดแวร์พิเศษที่เรียกว่า Emulator มาช่วยในการตรวจสอบและลดระยะเวลาเมื่อเปรียบเทียบกับการใช้ซอฟต์แวร์ Simulator โดยทั่วไป Emulation Platform ก็ประกอบด้วยฮาร์ดแวร์และซอฟต์แวร์ที่ใช้งานร่วมกัน ระบบประเภทนี้มักมีราคาแพง (อาจจะเหมาะสำหรับบริษัทในเชิงอุตสาหกรรม) เราอาจเรียกวิธีนี้ว่า Hardware-accelerated Design Verification
- การสร้างวงจรต้นแบบโดยใช้ทรัพยากรของชิป FPGA (FPGA Prototyping) อาจจะใช้มากกว่าหนึ่งชุด (Multi-FPGA Boards)
การตรวจสอบโดยใช้ Simulator มีข้อจำกัด เช่น ความสามารถในการตรวจสอบฟังก์ชันการทำงาน ขึ้นอยู่กับคุณภาพของอินพุต หรือกรณีทดสอบที่ป้อนให้ระบบ จะสามารถครอบคลุม และตรวจหาบักได้หรือไม่ (ประเด็นนี้เรียกว่า Functional Coverage) อีกทั้งอาจต้องใช้เวลานานสำหรับระบบที่มีความซับซ้อน แต่ก็มีข้อดี เช่น ความสามารถในการควบคุม (Controllability) และมองเห็น (Observability) สิ่งที่เกิดขึ้นในวงจรหรือระบบ ทำได้ง่าย
ตัวอย่างความสามารถในการสังเกตหรือมองเห็น ได้แก่ การตรวจสอบหรือดูค่าลอจิกของสัญญาณต่างๆ หรือสถานะของระบบ การอ่านค่าหน่วยความจำ เป็นต้น ถ้าเป็นความสามารถในการควบคุม ได้แก่ การสั่งให้รันหรือหยุดการจำลองการทำงานของโดยวงจรชั่วคราว การกำหนดค่าลอจิกของสัญญาณ (ภายในหรือภายนอกวงจร) การเขียนค่าเริ่มต้นให้รีจิสเตอร์หรือหน่วยความจำภายในวงจร เป็นต้น
การตรวจสอบความถูกต้องของวงจรลอจิก โดยการจำลองการทำงาน จะต้องสร้างหรือเขียนโค้ดทดสอบที่เรียกว่า Testbench (เช่น ใช้ภาษา SystemC, SystemVerilog) เราจำแนกระดับในการตรวจสอบและสร้าง Testbench ได้ดังนี้
- Cycle-accurate tests: เป็นการตรวจสอบไปการทำงานไปตามไซเคิลของสัญญาณนาฬิกา (Clock Cycles) ของวจร (สำหรับ Synchronous Design)
- Event-driven tests: ไม่ได้ตรวจสอบทีละไซเคิล แต่เน้นที่เหตุการณ์ของระบบ เช่น เมื่อเกิดสัญญาณอินเทอร์รัพท์ (Interrupts) แล้วมีการตอบสนองอย่างไรในวงจร
- Transaction-driven tests: เป็นการทดสอบในรูปแบบของ Transactions ที่เกิดขึ้นในระบบ (Transaction-Based Verification) และใช้เวลาหลายไซเคิลในการทำงาน ยกตัวอย่างเช่น การเขียนหรืออ่านชุดข้อมูลผ่านระบบบัส โดยใช้สิ่งที่เรียกว่า BFM (Bus Functional Model) หรือ TVM (Transaction Verification Model) เป็นต้น เพื่อสร้างสัญญาณบัส (เช่น Address, Data, R/W, CE, …) ตัวอย่างบัสภายในของระบบ (On-Chip Bus) ได้แก่ AMBA AHB/APB Bus และ Wishbone Bus เป็นต้น
Hardware Emulation
Hardware Emulation หมายถึง การใช้ฮาร์ดแวร์พิเศษ หรือคอมพิวเตอร์ชนิดอื่น (หลายชุดที่ทำงานแบบขนานกัน) เพื่อ “จำลองการทำงาน” ของวงจรที่ต้องการสร้าง และใช้ในการตรวจสอบฟังก์ชันการทำงานของวงจร ASIC ที่ได้ออกแบบไว้ สามารถทำงานได้จริง แต่ความเร็วในการทำงานหรือประมวลผล จะได้ต่ำกว่าที่ออกแบบไว้ แต่ก็ยังเร็วกว่ากรณีที่ใช้ซอฟต์แวร์จำลองการทำงานสำหรับคอมพิวเตอร์ทั่วไป
เราสามารถจำแนกประเภทของ Emulator สำหรับวงจร ASIC ได้ดังนี้
- ระบบที่ทำงานโดยใช้ตัวประมวลผลเพื่อจำลองการทำงานของวงจร (Simulation-specific Processors) จำนวนหลายชุด เช่น ระบบ Cadence Palladium Z1 Emulation Platform
- ระบบที่ทำงานโดยใช้ FPGA (FPGA-based) จำนวนหลายชุด เช่น ระบบ Synopsys ZeBu Server
- ระบบที่ใช้ทั้งสองแบบร่วมกัน (Hybrid approach) เช่น ระบบ Mentor Graphics Veloce Emulation Platform
การใช้งาน Emulator ประเภทนี้ จะต้องใช้ร่วมกับซอฟต์แวร์หรือคอมไพล์เลอร์ ที่แปลงโค้ดในระดับ RTL ที่เขียนในภาษา HDL ให้เป็นไบนารีสำหรับไปรันในระบบ Emulator ซึ่งสำหรับแต่ละบริษัท ก็แตกต่างกันไป
FPGA Prototyping
อีกตัวเลือกหนึ่งที่แตกต่างจาก Emulation คือ การใช้ FPGA สร้างวงจรต้นแบบที่มีฟังก์ชันการทำงานเหมือนวงจร ASIC ที่ได้ออกแบบไว้ แต่ใช้วงจรลอจิกระดับล่างสุดที่แตกต่างไป และที่นิยมใช้กันก็คือ ทรัพยากรที่มีอยู่ในชิป FPGA เราเรียกกรณีนี้ว่า FPGA-based ASIC Prototyping แต่ความเร็วในการทำงาน ก็จะได้ต่ำกว่า ASIC ถ้าสร้างจริง
ตัวอย่างของ FPGA-Based Prototyping Platform ได้แก่ Cadence Protium S1 และ Protium X1 (ใช้ชิป Xilinx UltraScale VU440 FPGA / 25M ASIC gates)
การสร้างวงจรต้นแบบโดยใช้ FPGA หรือจำลองการทำงานในฮาร์ดแวร์อย่าง Emulator ก็มีข้อดี ยกตัวอย่างเช่น ในกรณีที่ระบบมีตัวประมวลผล (ซีพียู) และทำงานด้วยซอฟต์แวร์-เฟิร์มแวร์ของระบบ เราก็สามารถทดลองการทำงานของซอฟต์แวร์ได้ก่อนที่จะสร้างวงจรรวมออกมาจริง
แต่ก็มีปัญหาที่ต้องใช้ซอฟต์แวร์ช่วยจัดการ ขอยกตัวอย่างเช่น ถ้าวงจรหรือดีไซน์ มีขนาดใหญ่ และต้องใช้ชิป FPGA มากกว่าหนึ่งชุด ดังนั้นจะต้องมีการแบ่งวงจรดังกล่าว ให้นำไปสร้างใน FPGA แต่ละตัวได้อย่างเหมาะสม เราเรียกขั้นตอนนี้ว่า Multi-FPGA Design Partitioning หรืออีกตัวอย่างหนึ่งคือ วงจรบางประเภทที่ใช้สำหรับ ASIC จะต้องถูกแทนที่ด้วยวงจรหรือทรัพยากรภายใน FPGA โดยอัตโนมัติ (ASIC-to-FPGA Resource Mapping)
โดยสรุป เทคโนโลยี FPGA เป็นตัวเลือกหนึ่งที่สำคัญและน่าสนใจสำหรับนักออกแบบหรือผู้ที่สนใจเรียนรู้ด้านการออกแบบและสร้างวงจรอิเล็กทรอนิกส์ในรูปแบบของวงจรรวม เช่น ASIC / SoC ที่มีต้นทุนสูงมาก เราสามารถใช้ FPGA สร้างวงจรต้นแบบ เพื่อตรวจสอบความถูกต้องในการทำงานของวงจรตามที่ออกแบบไว้