High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

ค้นพบว่า High-Level Synthesis ช่วยให้คุณออกแบบฮาร์ดแวร์โดยใช้ภาษา C/C++ ได้อย่างไร

High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

High-Level Synthesis (HLS) คือเทคโนโลยีที่แปลงโค้ด C/C++ ให้เป็น RTL สำหรับ FPGA และ ASIC อัตโนมัติ มันช่วยลดความซับซ้อนในการออกแบบฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสไปที่อัลกอริทึมมากกว่าการเขียนวงจรระดับล่าง โดย HLS ใช้เทคนิคอย่าง Scheduling และ Resource Allocation เพื่อเพิ่มประสิทธิภาพวงจร จึงช่วยลดเวลาในการพัฒนาและเชื่อมโลกของซอฟต์แวร์กับฮาร์ดแวร์เข้าด้วยกันได้อย่างมีประสิทธิภาพ

บทนำ

ลองนึกภาพว่าคุณเป็นโปรแกรมเมอร์คนหนึ่งที่เขียนภาษา C หรือ C++ มาหลายปี คุณสามารถสร้างโปรแกรมคำนวณข้อมูล จัดการไฟล์ หรือแม้แต่พัฒนา AI ขนาดเล็กได้อย่างคล่องแคล่ว แล้วถ้าวันหนึ่งมีคนบอกคุณว่า ช่วยเอาอัลกอริทึมนี้ไปใส่ใน FPGA ให้หน่อย มันอาจจะฟังดูเหมือนไม่ยาก แต่ปัญหาก็คือ FPGA ไม่เข้าใจภาษา C หรือ C++ โดยตรง มันเข้าใจภาษาที่ใช้บรรยายวงจรอิเล็กทรอนิกส์ เช่น Verilog หรือ VHDL ตรงนี้เองที่หลายคนเริ่มเกาหัว เพราะการเขียนโปรแกรมทั่วไปคือ การบอกคอมพิวเตอร์ว่าให้ทำอะไรทีละขั้นตอน แต่การเขียน RTL หรือ Register Transfer Level คือ การบอกว่าในวงจรมีอะไรอยู่บ้าง สัญญาณเดินทางแบบไหน และในแต่ละจังหวะข้อมูลจะถูกส่งต่อระหว่างรีจิสเตอร์ได้อย่างไร พูดง่าย ๆ คือ จากเดิมที่เราคิดตามลำดับการทำงาน เราต้องเปลี่ยนมาคิดในแบบโครงสร้างของฮาร์ดแวร์ ต้องบอกเลยว่าสำหรับวิศวกรซอฟต์แวร์หลายคน นี่คงเป็นกำแพงใหญ่ยักษ์ที่ทำให้การพัฒนา FPGA ดูเป็นเรื่องยากที่ไกลตัว และด้วยเหตุผลนี้เอง High-Level Synthesis หรือ HLS จึงถือกำเนิดขึ้น

HLS คืออะไร

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยแปลงโค้ดระดับสูง เช่น C, C++ หรือ SystemC ให้กลายเป็น RTL ได้อัตโนมัติ เลือกได้ว่าแทนที่จะนั่งเขียน Verilog หลายพันบรรทัด วิศวกรสามารถเขียนอัลกอริทึมในภาษาที่คุ้นเคย แล้วปล่อยให้ซอฟต์แวร์ HLS สร้าง RTL ออกมา เช่น ถ้า Compiler ทั่วไปจะเปลี่ยน C ให้กลายเป็น Machine Code สำหรับ CPU ส่วนเจ้า HLS จะเปลี่ยน C ให้กลายเป็นวงจรดิจิทัลสำหรับ FPGA หรือ ASIC นั่นเอง ซึ่งแนวคิดแบบนี้ทำให้การพัฒนาฮาร์ดแวร์ใกล้เคียงกับการพัฒนาซอฟต์แวร์มากขึ้น ทำให้นักพัฒนาไม่จำเป็นต้องคิดถึง Flip-Flop ทุกตัว หรือเขียน State Machine ทุกสถานะเอง แต่สามารถไปโฟกัสกับอัลกอริทึมและตรรกะของระบบแทนได้เลย

เบื้องหลังการแปลงภาษา C ให้กลายเป็นวงจร

ใครหลาย ๆ คนอาจจะเกิดคำถามขึ้นในหัวว่า แล้วโปรแกรม HLS รู้ได้อย่างไรว่าโค้ด C ควรถูกเปลี่ยนเป็นวงจรแบบไหน คำตอบก็คือ HLS จะวิเคราะห์โค้ดทีละส่วน ตัวอย่างเช่น 

y = a + b 

ในสายตาของโปรแกรมเมอร์ นี่คือการบวกเลขธรรมดา แต่ในมุมมองของ HLS มันคือการสร้างวงจร Adder หนึ่งตัว หรือถ้าเราเขียน 

y = a * b

HLS จะมองว่าเราต้องการ Multiplier หนึ่งตัว และเมื่อโค้ดมีการคำนวณมากขึ้น HLS ก็จะสร้างวงจรที่ซับซ้อนขึ้นตามไปด้วย แต่สิ่งที่สุดยอดก็คือ HLS ไม่ได้แค่แปลโค้ดตรง ๆ เท่านั้น แต่มันยังพยายามปรับแต่งวงจรให้มีประสิทธิภาพมากขึ้นด้วย เหมือนกับ Compiler ที่พยายามทำให้โปรแกรมทำงานเร็วขึ้นนั่นเอง

Scheduling หรือการจัดตารางการทำงานของวงจร

บอกได้เลยว่าหนึ่งในขั้นตอนสำคัญที่สุดของ HLS คือ Scheduling นั่นเอง คุณลองนึกภาพว่าคุณมีงานที่ต้องทำ 10 อย่าง แต่มีพนักงานแค่ 2 คน คุณจำเป็นต้องวางแผนก่อนว่าจะให้ใครจะทำอะไรก่อนหรือหลัง เจ้า HLS ก็ต้องทำงานแบบนั้น แต่กล่าวคือ มันต้องตัดสินใจว่าการคำนวณแต่ละอย่างจะเกิดขึ้นใน Clock Cycle ไหน ยกตัวอย่างเช่น

a = b + c 

d = a + e 

บรรทัดที่สองต้องรอผลจากบรรทัดแรกก่อน ดังนั้น HLS อาจจัดให้การบวกครั้งแรกเกิดใน Cycle ที่ 1 และการบวกครั้งที่สองเกิดใน Cycle ที่ 2 ขั้นนี้เองที่เรียกว่า Scheduling ที่จะมีผลโดยตรงกับความเร็วของวงจร

Resource Allocation จัดสรรทรัพยากรให้คุ้มค่า

เมื่อ HLS รู้แล้วว่าต้องทำอะไรตอนไหน ขั้นตอนต่อไปก็คือการตัดสินใจว่าจะใช้ฮาร์ดแวร์กี่อัน สมมติว่ามีการคูณเลขเกิดขึ้น 20 ครั้ง คำถามก็คือ มันควรสร้าง Multiplier 20 ตัวเลยหรือไม่ ถ้าสร้างทั้งหมด วงจรจะเร็วมาก แต่ก็ต้องใช้พื้นที่บน FPGA จำนวนมากเหมือนกัน แต่ในทางกลับกัน ถ้าใช้ Multiplier เพียงตัวเดียวแล้ววนใช้งานซ้ำ พื้นที่ก็จะน้อยลง แต่ความเร็วก็จะลดลงด้วย เจ้า HLS จะช่วยหาจุดสมดุลระหว่างความเร็วและทรัพยากรให้ได้ นี่คือเหตุผลว่าทำไมโค้ดเดียวกันจะสามารถสร้างฮาร์ดแวร์ได้หลายรูปแบบเลยทีเดียว ขึ้นอยู่กับการตั้งค่าของนักออกแบบนั่นเอง

ทำไม AI และ Machine Learning ถึงชอบใช้ HLS

ไม่กี่ปีที่ผ่านมา HLS ได้รับความนิยมอย่างมากในงาน AI ต่าง ๆ เพราะอัลกอริทึมของ Machine Learning มักจะประกอบไปด้วยการคูณและบวกจำนวนมหาศาล ตัวอย่างเช่น Neural Network การจะคำนวณแต่ละ Layer อาจจะมีการดำเนินการเป็นล้าน ๆ ครั้ง เพราะอย่างนั้นการจะเขียน RTL ด้วยมือคงแทบจะเป็นไปไม่ได้เลย แต่ถ้าเรามีโมเดลที่เขียนใน C++ อยู่แล้ว เราก็จะสามารถเอามันมาผ่าน HLS เพื่อสร้าง Accelerator บน FPGA ได้รวดเร็วกว่าเดิมมาก บริษัทเทคโนโลยีหลาย ๆ ที่เลยเริ่มใช้ HLS มาเป็นเสมือนกาวที่ช่วยเชื่อมระหว่างโลกของ Software และ Hardware

ข้อดีของ HLS

แน่นอนว่าสิ่งที่ทำให้ HLS ได้รับความนิยมอย่างมากเลยก็คือการที่มันช่วยลดเวลาในการพัฒนางาน เพราะจากที่งานเคยใช้เวลาหลายเดือนในการเขียน RTL มันอาจจะทำให้งานเสร็จได้ภายในไม่กี่อาทิตย์ และมันยังช่วยให้คนที่ไม่ใช่วิศวกรฮาร์ดแวร์สามารถเข้ามาพัฒนา FPGA ได้ง่ายขึ้น เรียกได้ว่า นักวิจัยด้าน AI พวกนักวิทยาศาสตร์ข้อมูล หรือโปรแกรมเมอร์ทั่วไป ก็จะสามารถใช้ความรู้ C/C++ ที่มีอยู่ได้เลย และอีกหนึ่งข้อดีที่ไม่พูดถึงลยไม่ได้คือ การทดลองไอเดียใหม่ๆ สามารถทำได้เร็วมากยิ่งขึ้น เพราะในกรณี ถ้าอัลกอริทึมเปลี่ยน เราแค่เข้าไปแก้ไขโค้ดต้นฉบับแล้วแปลงออกมาใหม่ ไม่ต้องลำบากไปแก้ RTL จำนวนมากเองให้เหนื่อยอีกต่อไป

ข้อจำกัดของ HLS

แม้ HLS จะช่วยเราได้มาก แต่ก็ใช่ว่ามันจะเป็นเวทมนตร์ที่แก้ปัญหาได้ทุกอย่าง เราต้องเข้าใจก่อนว่าโค้ด C ทุกแบบไม่ได้เหมาะกับการสร้างฮาร์ดแวร์ บางฟังก์ชันที่ใช้ได้บน CPU และอาจจะไม่สามารถแปลงเป็นวงจรได้ง่ายขนาดนั้น อีกทั้งในบางครั้ง RTL ที่สร้างขึ้นมาอัตโนมัติอาจจะมีประสิทธิภาพต่ำกว่าการออกแบบด้วยมือคน โดยเฉพาะกับงานที่ต้องการประสิทธิภาพสูง วิศวกรระดับมืออาชีพต้องมีการปรับแต่ง RTL ในส่วนสำคัญ ๆ ด้วยตนเองบ้าง และในการจะกระทำนั้น ผู้ใช้งานเองก็ยังต้องเข้าใจฮาร์ดแวร์อยู่ดี เพราะเนื่องจาก ถึงแม้จะเขียน C ได้ แต่ถ้าไม่เข้าใจแนวคิดเรื่อง Clock, Latency, Pipeline หรือ Memory Architecture ผลที่ออกมาก็อาจจะได้วงจรที่ทำงานช้ากว่าที่คิดไว้ สรุปก็คือ HLS ไม่ได้ทำให้ความรู้ฮาร์ดแวร์หมดความสำคัญไป แต่ช่วยลดความซับซ้อนของการลงรายละเอียดต่างหาก

อนาคตของ HLS

ทางเดินของเจ้า HLS ในอนาคตดูจะโรยไปด้วยกลีบกุหลาบ ตอนนี้ FPGA ถูกนำไปใช้ในศูนย์ข้อมูล ระบบ AI รถยนต์อัตโนมัติ ระบบสื่อสาร 5G และอุปกรณ์ IoT จำนวนมาก และความต้องการนักพัฒนาฮาร์ดแวร์เองก็เพิ่มขึ้นเรื่อย ๆ ในขณะที่จำนวนคนที่เชี่ยวชาญ RTL มีอยู่น้อย HLS เลยกลายเป็นเครื่องมือสำคัญในการลดช่องว่างตรงนี้ หลาย ๆ คนเลยมองว่าอนาคตของการออกแบบฮาร์ดแวร์จะค่อย ๆ เปลี่ยนจากการเขียน RTL ด้วยมือ ไปสู่การออกแบบในระดับอัลกอริทึมมากขึ้นแทน เหมือนกับในอดีตที่โปรแกรมเมอร์เคยเขียนภาษา Assembly มาก่อนแล้วเปลี่ยนมาใช้ภาษา C นั่นเอง

บทสรุป

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยเปลี่ยนโค้ด C/C++ ให้กลายเป็น RTL สำหรับ FPGA และ ASIC มันเข้ามาเป็นเหมือนสะพานเชื่อมระหว่างโลกของซอฟต์แวร์และฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสกับอัลกอริทึมแทนการเขียนวงจรระดับล่างที่ซับซ้อนได้และเบื้องหลังของ HLS ก็มีทั้งการวางตารางการทำงาน การจัดสรรทรัพยากร และการปรับแต่งลูปเพื่อดึงศักยภาพของฮาร์ดแวร์ออกมาให้มากที่สุด แต่ถึงอย่างนั้นมันก็ยังมีข้อจำกัดอยู่บ้าง และยังไม่สามารถแทนที่การออกแบบ RTL ด้วยมือได้ทั้งหมด แต่มันก็ช่วยลดเวลาในการพัฒนา เพิ่มความยืดหยุ่น และเปิดประตูให้คนจำนวนมากเข้ามาสู่โลกของ FPGA ได้ง่ายกว่าเดิม

High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

ค้นพบว่า High-Level Synthesis ช่วยให้คุณออกแบบฮาร์ดแวร์โดยใช้ภาษา C/C++ ได้อย่างไร

นักเขียนบทความ
by 
นักเขียนบทความ
High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

ค้นพบว่า High-Level Synthesis ช่วยให้คุณออกแบบฮาร์ดแวร์โดยใช้ภาษา C/C++ ได้อย่างไร

High-Level Synthesis (HLS) คือเทคโนโลยีที่แปลงโค้ด C/C++ ให้เป็น RTL สำหรับ FPGA และ ASIC อัตโนมัติ มันช่วยลดความซับซ้อนในการออกแบบฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสไปที่อัลกอริทึมมากกว่าการเขียนวงจรระดับล่าง โดย HLS ใช้เทคนิคอย่าง Scheduling และ Resource Allocation เพื่อเพิ่มประสิทธิภาพวงจร จึงช่วยลดเวลาในการพัฒนาและเชื่อมโลกของซอฟต์แวร์กับฮาร์ดแวร์เข้าด้วยกันได้อย่างมีประสิทธิภาพ

บทนำ

ลองนึกภาพว่าคุณเป็นโปรแกรมเมอร์คนหนึ่งที่เขียนภาษา C หรือ C++ มาหลายปี คุณสามารถสร้างโปรแกรมคำนวณข้อมูล จัดการไฟล์ หรือแม้แต่พัฒนา AI ขนาดเล็กได้อย่างคล่องแคล่ว แล้วถ้าวันหนึ่งมีคนบอกคุณว่า ช่วยเอาอัลกอริทึมนี้ไปใส่ใน FPGA ให้หน่อย มันอาจจะฟังดูเหมือนไม่ยาก แต่ปัญหาก็คือ FPGA ไม่เข้าใจภาษา C หรือ C++ โดยตรง มันเข้าใจภาษาที่ใช้บรรยายวงจรอิเล็กทรอนิกส์ เช่น Verilog หรือ VHDL ตรงนี้เองที่หลายคนเริ่มเกาหัว เพราะการเขียนโปรแกรมทั่วไปคือ การบอกคอมพิวเตอร์ว่าให้ทำอะไรทีละขั้นตอน แต่การเขียน RTL หรือ Register Transfer Level คือ การบอกว่าในวงจรมีอะไรอยู่บ้าง สัญญาณเดินทางแบบไหน และในแต่ละจังหวะข้อมูลจะถูกส่งต่อระหว่างรีจิสเตอร์ได้อย่างไร พูดง่าย ๆ คือ จากเดิมที่เราคิดตามลำดับการทำงาน เราต้องเปลี่ยนมาคิดในแบบโครงสร้างของฮาร์ดแวร์ ต้องบอกเลยว่าสำหรับวิศวกรซอฟต์แวร์หลายคน นี่คงเป็นกำแพงใหญ่ยักษ์ที่ทำให้การพัฒนา FPGA ดูเป็นเรื่องยากที่ไกลตัว และด้วยเหตุผลนี้เอง High-Level Synthesis หรือ HLS จึงถือกำเนิดขึ้น

HLS คืออะไร

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยแปลงโค้ดระดับสูง เช่น C, C++ หรือ SystemC ให้กลายเป็น RTL ได้อัตโนมัติ เลือกได้ว่าแทนที่จะนั่งเขียน Verilog หลายพันบรรทัด วิศวกรสามารถเขียนอัลกอริทึมในภาษาที่คุ้นเคย แล้วปล่อยให้ซอฟต์แวร์ HLS สร้าง RTL ออกมา เช่น ถ้า Compiler ทั่วไปจะเปลี่ยน C ให้กลายเป็น Machine Code สำหรับ CPU ส่วนเจ้า HLS จะเปลี่ยน C ให้กลายเป็นวงจรดิจิทัลสำหรับ FPGA หรือ ASIC นั่นเอง ซึ่งแนวคิดแบบนี้ทำให้การพัฒนาฮาร์ดแวร์ใกล้เคียงกับการพัฒนาซอฟต์แวร์มากขึ้น ทำให้นักพัฒนาไม่จำเป็นต้องคิดถึง Flip-Flop ทุกตัว หรือเขียน State Machine ทุกสถานะเอง แต่สามารถไปโฟกัสกับอัลกอริทึมและตรรกะของระบบแทนได้เลย

เบื้องหลังการแปลงภาษา C ให้กลายเป็นวงจร

ใครหลาย ๆ คนอาจจะเกิดคำถามขึ้นในหัวว่า แล้วโปรแกรม HLS รู้ได้อย่างไรว่าโค้ด C ควรถูกเปลี่ยนเป็นวงจรแบบไหน คำตอบก็คือ HLS จะวิเคราะห์โค้ดทีละส่วน ตัวอย่างเช่น 

y = a + b 

ในสายตาของโปรแกรมเมอร์ นี่คือการบวกเลขธรรมดา แต่ในมุมมองของ HLS มันคือการสร้างวงจร Adder หนึ่งตัว หรือถ้าเราเขียน 

y = a * b

HLS จะมองว่าเราต้องการ Multiplier หนึ่งตัว และเมื่อโค้ดมีการคำนวณมากขึ้น HLS ก็จะสร้างวงจรที่ซับซ้อนขึ้นตามไปด้วย แต่สิ่งที่สุดยอดก็คือ HLS ไม่ได้แค่แปลโค้ดตรง ๆ เท่านั้น แต่มันยังพยายามปรับแต่งวงจรให้มีประสิทธิภาพมากขึ้นด้วย เหมือนกับ Compiler ที่พยายามทำให้โปรแกรมทำงานเร็วขึ้นนั่นเอง

Scheduling หรือการจัดตารางการทำงานของวงจร

บอกได้เลยว่าหนึ่งในขั้นตอนสำคัญที่สุดของ HLS คือ Scheduling นั่นเอง คุณลองนึกภาพว่าคุณมีงานที่ต้องทำ 10 อย่าง แต่มีพนักงานแค่ 2 คน คุณจำเป็นต้องวางแผนก่อนว่าจะให้ใครจะทำอะไรก่อนหรือหลัง เจ้า HLS ก็ต้องทำงานแบบนั้น แต่กล่าวคือ มันต้องตัดสินใจว่าการคำนวณแต่ละอย่างจะเกิดขึ้นใน Clock Cycle ไหน ยกตัวอย่างเช่น

a = b + c 

d = a + e 

บรรทัดที่สองต้องรอผลจากบรรทัดแรกก่อน ดังนั้น HLS อาจจัดให้การบวกครั้งแรกเกิดใน Cycle ที่ 1 และการบวกครั้งที่สองเกิดใน Cycle ที่ 2 ขั้นนี้เองที่เรียกว่า Scheduling ที่จะมีผลโดยตรงกับความเร็วของวงจร

Resource Allocation จัดสรรทรัพยากรให้คุ้มค่า

เมื่อ HLS รู้แล้วว่าต้องทำอะไรตอนไหน ขั้นตอนต่อไปก็คือการตัดสินใจว่าจะใช้ฮาร์ดแวร์กี่อัน สมมติว่ามีการคูณเลขเกิดขึ้น 20 ครั้ง คำถามก็คือ มันควรสร้าง Multiplier 20 ตัวเลยหรือไม่ ถ้าสร้างทั้งหมด วงจรจะเร็วมาก แต่ก็ต้องใช้พื้นที่บน FPGA จำนวนมากเหมือนกัน แต่ในทางกลับกัน ถ้าใช้ Multiplier เพียงตัวเดียวแล้ววนใช้งานซ้ำ พื้นที่ก็จะน้อยลง แต่ความเร็วก็จะลดลงด้วย เจ้า HLS จะช่วยหาจุดสมดุลระหว่างความเร็วและทรัพยากรให้ได้ นี่คือเหตุผลว่าทำไมโค้ดเดียวกันจะสามารถสร้างฮาร์ดแวร์ได้หลายรูปแบบเลยทีเดียว ขึ้นอยู่กับการตั้งค่าของนักออกแบบนั่นเอง

ทำไม AI และ Machine Learning ถึงชอบใช้ HLS

ไม่กี่ปีที่ผ่านมา HLS ได้รับความนิยมอย่างมากในงาน AI ต่าง ๆ เพราะอัลกอริทึมของ Machine Learning มักจะประกอบไปด้วยการคูณและบวกจำนวนมหาศาล ตัวอย่างเช่น Neural Network การจะคำนวณแต่ละ Layer อาจจะมีการดำเนินการเป็นล้าน ๆ ครั้ง เพราะอย่างนั้นการจะเขียน RTL ด้วยมือคงแทบจะเป็นไปไม่ได้เลย แต่ถ้าเรามีโมเดลที่เขียนใน C++ อยู่แล้ว เราก็จะสามารถเอามันมาผ่าน HLS เพื่อสร้าง Accelerator บน FPGA ได้รวดเร็วกว่าเดิมมาก บริษัทเทคโนโลยีหลาย ๆ ที่เลยเริ่มใช้ HLS มาเป็นเสมือนกาวที่ช่วยเชื่อมระหว่างโลกของ Software และ Hardware

ข้อดีของ HLS

แน่นอนว่าสิ่งที่ทำให้ HLS ได้รับความนิยมอย่างมากเลยก็คือการที่มันช่วยลดเวลาในการพัฒนางาน เพราะจากที่งานเคยใช้เวลาหลายเดือนในการเขียน RTL มันอาจจะทำให้งานเสร็จได้ภายในไม่กี่อาทิตย์ และมันยังช่วยให้คนที่ไม่ใช่วิศวกรฮาร์ดแวร์สามารถเข้ามาพัฒนา FPGA ได้ง่ายขึ้น เรียกได้ว่า นักวิจัยด้าน AI พวกนักวิทยาศาสตร์ข้อมูล หรือโปรแกรมเมอร์ทั่วไป ก็จะสามารถใช้ความรู้ C/C++ ที่มีอยู่ได้เลย และอีกหนึ่งข้อดีที่ไม่พูดถึงลยไม่ได้คือ การทดลองไอเดียใหม่ๆ สามารถทำได้เร็วมากยิ่งขึ้น เพราะในกรณี ถ้าอัลกอริทึมเปลี่ยน เราแค่เข้าไปแก้ไขโค้ดต้นฉบับแล้วแปลงออกมาใหม่ ไม่ต้องลำบากไปแก้ RTL จำนวนมากเองให้เหนื่อยอีกต่อไป

ข้อจำกัดของ HLS

แม้ HLS จะช่วยเราได้มาก แต่ก็ใช่ว่ามันจะเป็นเวทมนตร์ที่แก้ปัญหาได้ทุกอย่าง เราต้องเข้าใจก่อนว่าโค้ด C ทุกแบบไม่ได้เหมาะกับการสร้างฮาร์ดแวร์ บางฟังก์ชันที่ใช้ได้บน CPU และอาจจะไม่สามารถแปลงเป็นวงจรได้ง่ายขนาดนั้น อีกทั้งในบางครั้ง RTL ที่สร้างขึ้นมาอัตโนมัติอาจจะมีประสิทธิภาพต่ำกว่าการออกแบบด้วยมือคน โดยเฉพาะกับงานที่ต้องการประสิทธิภาพสูง วิศวกรระดับมืออาชีพต้องมีการปรับแต่ง RTL ในส่วนสำคัญ ๆ ด้วยตนเองบ้าง และในการจะกระทำนั้น ผู้ใช้งานเองก็ยังต้องเข้าใจฮาร์ดแวร์อยู่ดี เพราะเนื่องจาก ถึงแม้จะเขียน C ได้ แต่ถ้าไม่เข้าใจแนวคิดเรื่อง Clock, Latency, Pipeline หรือ Memory Architecture ผลที่ออกมาก็อาจจะได้วงจรที่ทำงานช้ากว่าที่คิดไว้ สรุปก็คือ HLS ไม่ได้ทำให้ความรู้ฮาร์ดแวร์หมดความสำคัญไป แต่ช่วยลดความซับซ้อนของการลงรายละเอียดต่างหาก

อนาคตของ HLS

ทางเดินของเจ้า HLS ในอนาคตดูจะโรยไปด้วยกลีบกุหลาบ ตอนนี้ FPGA ถูกนำไปใช้ในศูนย์ข้อมูล ระบบ AI รถยนต์อัตโนมัติ ระบบสื่อสาร 5G และอุปกรณ์ IoT จำนวนมาก และความต้องการนักพัฒนาฮาร์ดแวร์เองก็เพิ่มขึ้นเรื่อย ๆ ในขณะที่จำนวนคนที่เชี่ยวชาญ RTL มีอยู่น้อย HLS เลยกลายเป็นเครื่องมือสำคัญในการลดช่องว่างตรงนี้ หลาย ๆ คนเลยมองว่าอนาคตของการออกแบบฮาร์ดแวร์จะค่อย ๆ เปลี่ยนจากการเขียน RTL ด้วยมือ ไปสู่การออกแบบในระดับอัลกอริทึมมากขึ้นแทน เหมือนกับในอดีตที่โปรแกรมเมอร์เคยเขียนภาษา Assembly มาก่อนแล้วเปลี่ยนมาใช้ภาษา C นั่นเอง

บทสรุป

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยเปลี่ยนโค้ด C/C++ ให้กลายเป็น RTL สำหรับ FPGA และ ASIC มันเข้ามาเป็นเหมือนสะพานเชื่อมระหว่างโลกของซอฟต์แวร์และฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสกับอัลกอริทึมแทนการเขียนวงจรระดับล่างที่ซับซ้อนได้และเบื้องหลังของ HLS ก็มีทั้งการวางตารางการทำงาน การจัดสรรทรัพยากร และการปรับแต่งลูปเพื่อดึงศักยภาพของฮาร์ดแวร์ออกมาให้มากที่สุด แต่ถึงอย่างนั้นมันก็ยังมีข้อจำกัดอยู่บ้าง และยังไม่สามารถแทนที่การออกแบบ RTL ด้วยมือได้ทั้งหมด แต่มันก็ช่วยลดเวลาในการพัฒนา เพิ่มความยืดหยุ่น และเปิดประตูให้คนจำนวนมากเข้ามาสู่โลกของ FPGA ได้ง่ายกว่าเดิม

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

High-Level Synthesis (HLS): พลิกโฉมการออกแบบฮาร์ดแวร์ด้วยการสร้าง RTL จาก C/C++

ค้นพบว่า High-Level Synthesis ช่วยให้คุณออกแบบฮาร์ดแวร์โดยใช้ภาษา C/C++ ได้อย่างไร

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

High-Level Synthesis (HLS) คือเทคโนโลยีที่แปลงโค้ด C/C++ ให้เป็น RTL สำหรับ FPGA และ ASIC อัตโนมัติ มันช่วยลดความซับซ้อนในการออกแบบฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสไปที่อัลกอริทึมมากกว่าการเขียนวงจรระดับล่าง โดย HLS ใช้เทคนิคอย่าง Scheduling และ Resource Allocation เพื่อเพิ่มประสิทธิภาพวงจร จึงช่วยลดเวลาในการพัฒนาและเชื่อมโลกของซอฟต์แวร์กับฮาร์ดแวร์เข้าด้วยกันได้อย่างมีประสิทธิภาพ

บทนำ

ลองนึกภาพว่าคุณเป็นโปรแกรมเมอร์คนหนึ่งที่เขียนภาษา C หรือ C++ มาหลายปี คุณสามารถสร้างโปรแกรมคำนวณข้อมูล จัดการไฟล์ หรือแม้แต่พัฒนา AI ขนาดเล็กได้อย่างคล่องแคล่ว แล้วถ้าวันหนึ่งมีคนบอกคุณว่า ช่วยเอาอัลกอริทึมนี้ไปใส่ใน FPGA ให้หน่อย มันอาจจะฟังดูเหมือนไม่ยาก แต่ปัญหาก็คือ FPGA ไม่เข้าใจภาษา C หรือ C++ โดยตรง มันเข้าใจภาษาที่ใช้บรรยายวงจรอิเล็กทรอนิกส์ เช่น Verilog หรือ VHDL ตรงนี้เองที่หลายคนเริ่มเกาหัว เพราะการเขียนโปรแกรมทั่วไปคือ การบอกคอมพิวเตอร์ว่าให้ทำอะไรทีละขั้นตอน แต่การเขียน RTL หรือ Register Transfer Level คือ การบอกว่าในวงจรมีอะไรอยู่บ้าง สัญญาณเดินทางแบบไหน และในแต่ละจังหวะข้อมูลจะถูกส่งต่อระหว่างรีจิสเตอร์ได้อย่างไร พูดง่าย ๆ คือ จากเดิมที่เราคิดตามลำดับการทำงาน เราต้องเปลี่ยนมาคิดในแบบโครงสร้างของฮาร์ดแวร์ ต้องบอกเลยว่าสำหรับวิศวกรซอฟต์แวร์หลายคน นี่คงเป็นกำแพงใหญ่ยักษ์ที่ทำให้การพัฒนา FPGA ดูเป็นเรื่องยากที่ไกลตัว และด้วยเหตุผลนี้เอง High-Level Synthesis หรือ HLS จึงถือกำเนิดขึ้น

HLS คืออะไร

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยแปลงโค้ดระดับสูง เช่น C, C++ หรือ SystemC ให้กลายเป็น RTL ได้อัตโนมัติ เลือกได้ว่าแทนที่จะนั่งเขียน Verilog หลายพันบรรทัด วิศวกรสามารถเขียนอัลกอริทึมในภาษาที่คุ้นเคย แล้วปล่อยให้ซอฟต์แวร์ HLS สร้าง RTL ออกมา เช่น ถ้า Compiler ทั่วไปจะเปลี่ยน C ให้กลายเป็น Machine Code สำหรับ CPU ส่วนเจ้า HLS จะเปลี่ยน C ให้กลายเป็นวงจรดิจิทัลสำหรับ FPGA หรือ ASIC นั่นเอง ซึ่งแนวคิดแบบนี้ทำให้การพัฒนาฮาร์ดแวร์ใกล้เคียงกับการพัฒนาซอฟต์แวร์มากขึ้น ทำให้นักพัฒนาไม่จำเป็นต้องคิดถึง Flip-Flop ทุกตัว หรือเขียน State Machine ทุกสถานะเอง แต่สามารถไปโฟกัสกับอัลกอริทึมและตรรกะของระบบแทนได้เลย

เบื้องหลังการแปลงภาษา C ให้กลายเป็นวงจร

ใครหลาย ๆ คนอาจจะเกิดคำถามขึ้นในหัวว่า แล้วโปรแกรม HLS รู้ได้อย่างไรว่าโค้ด C ควรถูกเปลี่ยนเป็นวงจรแบบไหน คำตอบก็คือ HLS จะวิเคราะห์โค้ดทีละส่วน ตัวอย่างเช่น 

y = a + b 

ในสายตาของโปรแกรมเมอร์ นี่คือการบวกเลขธรรมดา แต่ในมุมมองของ HLS มันคือการสร้างวงจร Adder หนึ่งตัว หรือถ้าเราเขียน 

y = a * b

HLS จะมองว่าเราต้องการ Multiplier หนึ่งตัว และเมื่อโค้ดมีการคำนวณมากขึ้น HLS ก็จะสร้างวงจรที่ซับซ้อนขึ้นตามไปด้วย แต่สิ่งที่สุดยอดก็คือ HLS ไม่ได้แค่แปลโค้ดตรง ๆ เท่านั้น แต่มันยังพยายามปรับแต่งวงจรให้มีประสิทธิภาพมากขึ้นด้วย เหมือนกับ Compiler ที่พยายามทำให้โปรแกรมทำงานเร็วขึ้นนั่นเอง

Scheduling หรือการจัดตารางการทำงานของวงจร

บอกได้เลยว่าหนึ่งในขั้นตอนสำคัญที่สุดของ HLS คือ Scheduling นั่นเอง คุณลองนึกภาพว่าคุณมีงานที่ต้องทำ 10 อย่าง แต่มีพนักงานแค่ 2 คน คุณจำเป็นต้องวางแผนก่อนว่าจะให้ใครจะทำอะไรก่อนหรือหลัง เจ้า HLS ก็ต้องทำงานแบบนั้น แต่กล่าวคือ มันต้องตัดสินใจว่าการคำนวณแต่ละอย่างจะเกิดขึ้นใน Clock Cycle ไหน ยกตัวอย่างเช่น

a = b + c 

d = a + e 

บรรทัดที่สองต้องรอผลจากบรรทัดแรกก่อน ดังนั้น HLS อาจจัดให้การบวกครั้งแรกเกิดใน Cycle ที่ 1 และการบวกครั้งที่สองเกิดใน Cycle ที่ 2 ขั้นนี้เองที่เรียกว่า Scheduling ที่จะมีผลโดยตรงกับความเร็วของวงจร

Resource Allocation จัดสรรทรัพยากรให้คุ้มค่า

เมื่อ HLS รู้แล้วว่าต้องทำอะไรตอนไหน ขั้นตอนต่อไปก็คือการตัดสินใจว่าจะใช้ฮาร์ดแวร์กี่อัน สมมติว่ามีการคูณเลขเกิดขึ้น 20 ครั้ง คำถามก็คือ มันควรสร้าง Multiplier 20 ตัวเลยหรือไม่ ถ้าสร้างทั้งหมด วงจรจะเร็วมาก แต่ก็ต้องใช้พื้นที่บน FPGA จำนวนมากเหมือนกัน แต่ในทางกลับกัน ถ้าใช้ Multiplier เพียงตัวเดียวแล้ววนใช้งานซ้ำ พื้นที่ก็จะน้อยลง แต่ความเร็วก็จะลดลงด้วย เจ้า HLS จะช่วยหาจุดสมดุลระหว่างความเร็วและทรัพยากรให้ได้ นี่คือเหตุผลว่าทำไมโค้ดเดียวกันจะสามารถสร้างฮาร์ดแวร์ได้หลายรูปแบบเลยทีเดียว ขึ้นอยู่กับการตั้งค่าของนักออกแบบนั่นเอง

ทำไม AI และ Machine Learning ถึงชอบใช้ HLS

ไม่กี่ปีที่ผ่านมา HLS ได้รับความนิยมอย่างมากในงาน AI ต่าง ๆ เพราะอัลกอริทึมของ Machine Learning มักจะประกอบไปด้วยการคูณและบวกจำนวนมหาศาล ตัวอย่างเช่น Neural Network การจะคำนวณแต่ละ Layer อาจจะมีการดำเนินการเป็นล้าน ๆ ครั้ง เพราะอย่างนั้นการจะเขียน RTL ด้วยมือคงแทบจะเป็นไปไม่ได้เลย แต่ถ้าเรามีโมเดลที่เขียนใน C++ อยู่แล้ว เราก็จะสามารถเอามันมาผ่าน HLS เพื่อสร้าง Accelerator บน FPGA ได้รวดเร็วกว่าเดิมมาก บริษัทเทคโนโลยีหลาย ๆ ที่เลยเริ่มใช้ HLS มาเป็นเสมือนกาวที่ช่วยเชื่อมระหว่างโลกของ Software และ Hardware

ข้อดีของ HLS

แน่นอนว่าสิ่งที่ทำให้ HLS ได้รับความนิยมอย่างมากเลยก็คือการที่มันช่วยลดเวลาในการพัฒนางาน เพราะจากที่งานเคยใช้เวลาหลายเดือนในการเขียน RTL มันอาจจะทำให้งานเสร็จได้ภายในไม่กี่อาทิตย์ และมันยังช่วยให้คนที่ไม่ใช่วิศวกรฮาร์ดแวร์สามารถเข้ามาพัฒนา FPGA ได้ง่ายขึ้น เรียกได้ว่า นักวิจัยด้าน AI พวกนักวิทยาศาสตร์ข้อมูล หรือโปรแกรมเมอร์ทั่วไป ก็จะสามารถใช้ความรู้ C/C++ ที่มีอยู่ได้เลย และอีกหนึ่งข้อดีที่ไม่พูดถึงลยไม่ได้คือ การทดลองไอเดียใหม่ๆ สามารถทำได้เร็วมากยิ่งขึ้น เพราะในกรณี ถ้าอัลกอริทึมเปลี่ยน เราแค่เข้าไปแก้ไขโค้ดต้นฉบับแล้วแปลงออกมาใหม่ ไม่ต้องลำบากไปแก้ RTL จำนวนมากเองให้เหนื่อยอีกต่อไป

ข้อจำกัดของ HLS

แม้ HLS จะช่วยเราได้มาก แต่ก็ใช่ว่ามันจะเป็นเวทมนตร์ที่แก้ปัญหาได้ทุกอย่าง เราต้องเข้าใจก่อนว่าโค้ด C ทุกแบบไม่ได้เหมาะกับการสร้างฮาร์ดแวร์ บางฟังก์ชันที่ใช้ได้บน CPU และอาจจะไม่สามารถแปลงเป็นวงจรได้ง่ายขนาดนั้น อีกทั้งในบางครั้ง RTL ที่สร้างขึ้นมาอัตโนมัติอาจจะมีประสิทธิภาพต่ำกว่าการออกแบบด้วยมือคน โดยเฉพาะกับงานที่ต้องการประสิทธิภาพสูง วิศวกรระดับมืออาชีพต้องมีการปรับแต่ง RTL ในส่วนสำคัญ ๆ ด้วยตนเองบ้าง และในการจะกระทำนั้น ผู้ใช้งานเองก็ยังต้องเข้าใจฮาร์ดแวร์อยู่ดี เพราะเนื่องจาก ถึงแม้จะเขียน C ได้ แต่ถ้าไม่เข้าใจแนวคิดเรื่อง Clock, Latency, Pipeline หรือ Memory Architecture ผลที่ออกมาก็อาจจะได้วงจรที่ทำงานช้ากว่าที่คิดไว้ สรุปก็คือ HLS ไม่ได้ทำให้ความรู้ฮาร์ดแวร์หมดความสำคัญไป แต่ช่วยลดความซับซ้อนของการลงรายละเอียดต่างหาก

อนาคตของ HLS

ทางเดินของเจ้า HLS ในอนาคตดูจะโรยไปด้วยกลีบกุหลาบ ตอนนี้ FPGA ถูกนำไปใช้ในศูนย์ข้อมูล ระบบ AI รถยนต์อัตโนมัติ ระบบสื่อสาร 5G และอุปกรณ์ IoT จำนวนมาก และความต้องการนักพัฒนาฮาร์ดแวร์เองก็เพิ่มขึ้นเรื่อย ๆ ในขณะที่จำนวนคนที่เชี่ยวชาญ RTL มีอยู่น้อย HLS เลยกลายเป็นเครื่องมือสำคัญในการลดช่องว่างตรงนี้ หลาย ๆ คนเลยมองว่าอนาคตของการออกแบบฮาร์ดแวร์จะค่อย ๆ เปลี่ยนจากการเขียน RTL ด้วยมือ ไปสู่การออกแบบในระดับอัลกอริทึมมากขึ้นแทน เหมือนกับในอดีตที่โปรแกรมเมอร์เคยเขียนภาษา Assembly มาก่อนแล้วเปลี่ยนมาใช้ภาษา C นั่นเอง

บทสรุป

High-Level Synthesis หรือ HLS คือเทคโนโลยีที่ช่วยเปลี่ยนโค้ด C/C++ ให้กลายเป็น RTL สำหรับ FPGA และ ASIC มันเข้ามาเป็นเหมือนสะพานเชื่อมระหว่างโลกของซอฟต์แวร์และฮาร์ดแวร์ ทำให้นักพัฒนาสามารถโฟกัสกับอัลกอริทึมแทนการเขียนวงจรระดับล่างที่ซับซ้อนได้และเบื้องหลังของ HLS ก็มีทั้งการวางตารางการทำงาน การจัดสรรทรัพยากร และการปรับแต่งลูปเพื่อดึงศักยภาพของฮาร์ดแวร์ออกมาให้มากที่สุด แต่ถึงอย่างนั้นมันก็ยังมีข้อจำกัดอยู่บ้าง และยังไม่สามารถแทนที่การออกแบบ RTL ด้วยมือได้ทั้งหมด แต่มันก็ช่วยลดเวลาในการพัฒนา เพิ่มความยืดหยุ่น และเปิดประตูให้คนจำนวนมากเข้ามาสู่โลกของ FPGA ได้ง่ายกว่าเดิม