เส้นทางการสร้างวงจร FPGA: สังเคราะห์ ทำแผนผัง จัดวางและกำหนดเส้นทาง

สํารวจการเดินทางผ่านการสังเคราะห์และกําหนดเส้นทางในการเตรียมใช้งาน FPGA

เส้นทางการสร้างวงจร FPGA: สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง

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

บทนำ 

ตอนที่เราเขียนโค้ดเสร็จ แล้วกดปุ่ม Compile โปรแกรมจะขึ้นคำว่า Implementation Completed ใครเคยแอบนึกในใจกันบ้างไหมว่า มันไปทำอะไรกับโค้ดของเราบ้างนะ? โดยเฉพาะ เวลาใช้งาน FPGA หลายคนโฟกัสที่การเขียน Verilog หรือ VHDL ให้ถูกต้อง แต่ไม่ได้ตระหนักว่า การที่โค้ดไม่กี่ร้อยบรรทัดจะกลายเป็นวงจรจริงในชิปได้ต้องผ่านกระบวนการอะไรบ้าง หลายคน อาจคิดแค่ว่า FPGA ก็แค่แปลโค้ดแล้วรันเหมือนโปรแกรมทั่วไป แต่ความจริงแล้วมันซับซ้อน กว่านั้น เพราะ FPGA ไม่ได้รันคำสั่งแค่ทีละบรรทัด แต่มันเปลี่ยนโค้ดของเราให้กลายเป็น วงจรฮาร์ดแวร์ภายในชิปเลย ซึ่งกว่าที่ไอเดียในไฟล์ HDL จะกลายเป็นสัญญาณไฟฟ้าที่วิ่งอยู่บน ซิลิคอน มันต้องผ่านกระบวนการที่เรียกว่า Implementation Flow ซึ่งเป็นเส้นทางสำคัญตั้งแต่ การแปลลอจิก จัดสรรทรัพยากร จัดวางตำแหน่ง ไปจนถึงการเชื่อมสายสัญญาณทั้งหมดเข้าด้วยกัน การเข้าใจ Flow นี้ทำให้เราใช้งาน FPGA ได้ เข้าใจว่าเบื้องหลังวงจรทำงานอย่างไร หากระบบขึ้น Error แปลกๆ พวกเราก็จะเข้าใจสาเหตุของปัญหา และแก้ไขได้ตรงจุดแบบมืออาชีพ

รู้จัก FPGA แบบเข้าใจง่าย

ลองจินตนาการว่า เรามีที่ดินเปล่าที่เต็มไปด้วยชิ้นส่วน Lego เล็กๆ เชื่อมต่อกันทั้งหมด มีสายไฟที่สามารถเชื่อมโยงบล็อกแต่ละก้อนได้อย่างอิสระ ที่ดินเปล่าผืนนั้นก็คือ FPGA โดย

FPGA ย่อมาจาก Field-Programmable Gate Array เป็นชิปที่เราสามารถออกแบบวงจร ลงไปได้เองหลังจากผลิตเสร็จแล้ว ต่างจากชิปทั่วไปที่ถูกกำหนดหน้าที่ตายตัวมาตั้งแต่โรงงาน เราสามารถเขียนโค้ดฮาร์ดแวร์ด้วยภาษาอย่าง Verilog หรือ VHDL แล้วแปลงมันให้กลายเป็นวงจร ดิจิทัลจริงที่ทำงานแบบขนาน ความเร็วสูง และปรับแต่งได้ละเอียดระดับบิต กระบวนการที่ทำให้ โค้ดที่เราพิมพ์เข้าไปกลายเป็นวงจรจริงในชิปนี้ คือ FPGA Implementation Flow นั่นเอง มี4 ช่วงสำคัญคือ สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง เปรียบเทียบให้เข้าใจง่ายขึ้น กระบวนการนี้คล้ายกับการสร้างเมือง ที่เริ่มจากสถาปนิกออกแบบสถานที่ ไปจนถึงการวางอาคาร และลากถนนเชื่อมทุกอย่างเข้าด้วยกันนั่นเอง

การสังเคราะห์: จากตัวหนังสือสู่โครงสร้างวงจร

เมื่อเขียนโค้ด HDL เสร็จ ขั้นตอนแรกที่จะเกิดขึ้นก็คือ การแปลโค้ดให้กลายเป็นโครงสร้าง วงจรพื้นฐาน ให้ลองนึกภาพว่า คุณเขียนเงื่อนไขง่าย ๆ เช่น ถ้า A และ B เป็นจริง ให้ C เป็นจริง สำหรับมนุษย์ นี่อาจจะดูเป็นแค่ประโยคธรรมดา  แต่สำหรับชิป มันต้องถูกแปลงให้กลายเป็นวงจร AND จริง ๆ ที่มีสายสัญญาณเชื่อมต่อกัน มันถึงจะสามารถทำความเข้าใจได้ 

ขั้นตอนสังเคราะห์จึงช่วยทำหน้าที่แปลงคำอธิบายเชิงตรรกะพวกนี้ให้กลายเป็นลอจิกและ วงจรเก็บข้อมูล เช่น AND, OR, XOR หรือ Flip-Flop พร้อมทั้งปรับแต่งให้วงจรมีประสิทธิภาพ มากขึ้นเช่น ตัดส่วนที่ซ้ำซ้อนออก หรือ จัดรูปแบบให้ทำงานได้เร็วขึ้น ผลลัพธ์ที่ออกมาก็จะไม่ใช่ ไฟล์โค้ดแบบเดิมอีกต่อไป แต่มันจะกลายเป็นรายการเชื่อมต่อของวงจรทั้งหมด เรียกว่า Netlist  ขั้นตอนนี้เลยเปรียบเสมือนเหมือนการสร้างโครงกระดูกของวงจร

การทำแผนผัง- จับคู่กับทรัพยากรจริงในชิป

หลังจากได้โครงกระดูกของวงจรแล้ว ขั้นตอนต่อไปคือ การผูกกับฮาร์ดแวร์จริงใน FPGA

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

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

การจัดวาง – จัดวางในพื้นที่จริงของชิป

หลังวางแผนผัง เราจะรู้แล้วว่าจะใช้ LUT ไหน Flip-Flop ตัวไหน และ DSP กี่ตัว แต่ยังไม่รู้ว่าทุกอย่างจะไปอยู่ตรงไหนบนแผ่นซิลิคอนจริง ขั้นตอนถัดมานี้ก็คือ การกำหนด ตำแหน่งจริงในชิป (Placement FPGA) ที่ดูเหมือนตารางขนาดใหญ่ที่บล็อกแต่ละตัว มีตำแหน่งของมันเอง การจัดวางตำแหน่งมีผลอย่างมากต่อความเร็วในการทำงาน เพราะสัญญาณ ไฟฟ้าไม่ได้เดินทางมาได้ทันที มันต้องใช้เวลาเช่น ถ้าวงจรสองส่วนที่ต้องสื่อสารกันบ่อย ๆ ถูกวางห่างกันมาก สัญญาณจะใช้เวลาเดินทางนานขึ้น ซึ่งอาจทำให้ระบบทำงานไม่ทัน จังหวะคล็อกที่กำหนด ดังนั้นขั้นตอนการจัดวางจะใช้ Algorithm ขั้นสูง เช่น Simulated Annealing หรือ Heuristic Optimization ค้นหาการจัดวางที่ดีที่สุด เพื่อให้วงจรมีความหนาแน่น พอดี ไม่กระจุกตัวเกินไป และยังคงเส้นทางสัญญาณสั้นที่สุดเท่าที่ทำได้ ลองนึกภาพว่า คุณกำลัง จัดวางร้านค้าในห้าง ถ้าร้านที่ต้องส่งของถึงกันบ่อยอยู่คนละชั้น คนทำงานจะเหนื่อย และเสียเวลา กันไปเปล่า ๆ  FPGA ก็เหมือนกัน ขั้นตอนการจัดวางที่ดีจะทำให้ทั้งระบบทำงานเร็วขึ้น แบบเห็นผลจริง

การกำหนดเส้นทาง - เชื่อมสายสัญญาณให้ทุกอย่างทำงานร่วมกัน

จากขั้นตอนก่อนหน้านี้ แม้จะทำให้ทุกบล็อกมีตำแหน่งแล้ว แต่มันยังไม่มีสายเชื่อม ดังนั้นเลยต้องมีการกำหนดเส้นทางมาเป็นตัวช่วยตอนสุดท้ายของ Implementation Flow ทำหน้าที่ในการกำหนดเส้นทางการเชื่อมต่อระหว่างบล็อกต่าง ๆ ผ่านโครงข่ายสายสัญญาณภายใน FPGA ที่ซับซ้อน ไม่ว่าจะเป็นสายสั้น สายยาว สายแนวตั้ง สายแนวนอน และสวิตช์จำนวนมหาศาล ที่คอยควบคุมการเชื่อมต่อ การกำหนดเส้นทางต้องเลือกเส้นทางที่ไม่ชนกับวงจรอื่น และต้องทำให้ ดีเลย์ต่ำพอจะผ่านข้อกำหนด Timing ได้ 

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

จากการออกแบบสู่ความจริงในซิลิคอน

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

ทั้งหมดนี้คือภาพรวมของ FPGA Implementation Flow ที่ไม่ได้เป็นแค่กระบวนการ ทางเทคนิค แต่คือ การเปลี่ยนความคิดให้กลายเป็นฮาร์ดแวร์จริง การเข้าใจขั้นตอนเหล่านี้ ทำให้เราไม่รู้สึกว่าการกดปุ่ม Compile เป็นเรื่องลึกลับอีกต่อไป แต่เป็นกระบวนการสร้าง สิ่งใหม่ในระดับซิลิคอนอย่างแท้จริง

บทสรุป 

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

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

เส้นทางการสร้างวงจร FPGA: สังเคราะห์ ทำแผนผัง จัดวางและกำหนดเส้นทาง

สํารวจการเดินทางผ่านการสังเคราะห์และกําหนดเส้นทางในการเตรียมใช้งาน FPGA

นักเขียนบทความ
by 
นักเขียนบทความ
เส้นทางการสร้างวงจร FPGA: สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง

เส้นทางการสร้างวงจร FPGA: สังเคราะห์ ทำแผนผัง จัดวางและกำหนดเส้นทาง

สํารวจการเดินทางผ่านการสังเคราะห์และกําหนดเส้นทางในการเตรียมใช้งาน FPGA

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

บทนำ 

ตอนที่เราเขียนโค้ดเสร็จ แล้วกดปุ่ม Compile โปรแกรมจะขึ้นคำว่า Implementation Completed ใครเคยแอบนึกในใจกันบ้างไหมว่า มันไปทำอะไรกับโค้ดของเราบ้างนะ? โดยเฉพาะ เวลาใช้งาน FPGA หลายคนโฟกัสที่การเขียน Verilog หรือ VHDL ให้ถูกต้อง แต่ไม่ได้ตระหนักว่า การที่โค้ดไม่กี่ร้อยบรรทัดจะกลายเป็นวงจรจริงในชิปได้ต้องผ่านกระบวนการอะไรบ้าง หลายคน อาจคิดแค่ว่า FPGA ก็แค่แปลโค้ดแล้วรันเหมือนโปรแกรมทั่วไป แต่ความจริงแล้วมันซับซ้อน กว่านั้น เพราะ FPGA ไม่ได้รันคำสั่งแค่ทีละบรรทัด แต่มันเปลี่ยนโค้ดของเราให้กลายเป็น วงจรฮาร์ดแวร์ภายในชิปเลย ซึ่งกว่าที่ไอเดียในไฟล์ HDL จะกลายเป็นสัญญาณไฟฟ้าที่วิ่งอยู่บน ซิลิคอน มันต้องผ่านกระบวนการที่เรียกว่า Implementation Flow ซึ่งเป็นเส้นทางสำคัญตั้งแต่ การแปลลอจิก จัดสรรทรัพยากร จัดวางตำแหน่ง ไปจนถึงการเชื่อมสายสัญญาณทั้งหมดเข้าด้วยกัน การเข้าใจ Flow นี้ทำให้เราใช้งาน FPGA ได้ เข้าใจว่าเบื้องหลังวงจรทำงานอย่างไร หากระบบขึ้น Error แปลกๆ พวกเราก็จะเข้าใจสาเหตุของปัญหา และแก้ไขได้ตรงจุดแบบมืออาชีพ

รู้จัก FPGA แบบเข้าใจง่าย

ลองจินตนาการว่า เรามีที่ดินเปล่าที่เต็มไปด้วยชิ้นส่วน Lego เล็กๆ เชื่อมต่อกันทั้งหมด มีสายไฟที่สามารถเชื่อมโยงบล็อกแต่ละก้อนได้อย่างอิสระ ที่ดินเปล่าผืนนั้นก็คือ FPGA โดย

FPGA ย่อมาจาก Field-Programmable Gate Array เป็นชิปที่เราสามารถออกแบบวงจร ลงไปได้เองหลังจากผลิตเสร็จแล้ว ต่างจากชิปทั่วไปที่ถูกกำหนดหน้าที่ตายตัวมาตั้งแต่โรงงาน เราสามารถเขียนโค้ดฮาร์ดแวร์ด้วยภาษาอย่าง Verilog หรือ VHDL แล้วแปลงมันให้กลายเป็นวงจร ดิจิทัลจริงที่ทำงานแบบขนาน ความเร็วสูง และปรับแต่งได้ละเอียดระดับบิต กระบวนการที่ทำให้ โค้ดที่เราพิมพ์เข้าไปกลายเป็นวงจรจริงในชิปนี้ คือ FPGA Implementation Flow นั่นเอง มี4 ช่วงสำคัญคือ สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง เปรียบเทียบให้เข้าใจง่ายขึ้น กระบวนการนี้คล้ายกับการสร้างเมือง ที่เริ่มจากสถาปนิกออกแบบสถานที่ ไปจนถึงการวางอาคาร และลากถนนเชื่อมทุกอย่างเข้าด้วยกันนั่นเอง

การสังเคราะห์: จากตัวหนังสือสู่โครงสร้างวงจร

เมื่อเขียนโค้ด HDL เสร็จ ขั้นตอนแรกที่จะเกิดขึ้นก็คือ การแปลโค้ดให้กลายเป็นโครงสร้าง วงจรพื้นฐาน ให้ลองนึกภาพว่า คุณเขียนเงื่อนไขง่าย ๆ เช่น ถ้า A และ B เป็นจริง ให้ C เป็นจริง สำหรับมนุษย์ นี่อาจจะดูเป็นแค่ประโยคธรรมดา  แต่สำหรับชิป มันต้องถูกแปลงให้กลายเป็นวงจร AND จริง ๆ ที่มีสายสัญญาณเชื่อมต่อกัน มันถึงจะสามารถทำความเข้าใจได้ 

ขั้นตอนสังเคราะห์จึงช่วยทำหน้าที่แปลงคำอธิบายเชิงตรรกะพวกนี้ให้กลายเป็นลอจิกและ วงจรเก็บข้อมูล เช่น AND, OR, XOR หรือ Flip-Flop พร้อมทั้งปรับแต่งให้วงจรมีประสิทธิภาพ มากขึ้นเช่น ตัดส่วนที่ซ้ำซ้อนออก หรือ จัดรูปแบบให้ทำงานได้เร็วขึ้น ผลลัพธ์ที่ออกมาก็จะไม่ใช่ ไฟล์โค้ดแบบเดิมอีกต่อไป แต่มันจะกลายเป็นรายการเชื่อมต่อของวงจรทั้งหมด เรียกว่า Netlist  ขั้นตอนนี้เลยเปรียบเสมือนเหมือนการสร้างโครงกระดูกของวงจร

การทำแผนผัง- จับคู่กับทรัพยากรจริงในชิป

หลังจากได้โครงกระดูกของวงจรแล้ว ขั้นตอนต่อไปคือ การผูกกับฮาร์ดแวร์จริงใน FPGA

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

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

การจัดวาง – จัดวางในพื้นที่จริงของชิป

หลังวางแผนผัง เราจะรู้แล้วว่าจะใช้ LUT ไหน Flip-Flop ตัวไหน และ DSP กี่ตัว แต่ยังไม่รู้ว่าทุกอย่างจะไปอยู่ตรงไหนบนแผ่นซิลิคอนจริง ขั้นตอนถัดมานี้ก็คือ การกำหนด ตำแหน่งจริงในชิป (Placement FPGA) ที่ดูเหมือนตารางขนาดใหญ่ที่บล็อกแต่ละตัว มีตำแหน่งของมันเอง การจัดวางตำแหน่งมีผลอย่างมากต่อความเร็วในการทำงาน เพราะสัญญาณ ไฟฟ้าไม่ได้เดินทางมาได้ทันที มันต้องใช้เวลาเช่น ถ้าวงจรสองส่วนที่ต้องสื่อสารกันบ่อย ๆ ถูกวางห่างกันมาก สัญญาณจะใช้เวลาเดินทางนานขึ้น ซึ่งอาจทำให้ระบบทำงานไม่ทัน จังหวะคล็อกที่กำหนด ดังนั้นขั้นตอนการจัดวางจะใช้ Algorithm ขั้นสูง เช่น Simulated Annealing หรือ Heuristic Optimization ค้นหาการจัดวางที่ดีที่สุด เพื่อให้วงจรมีความหนาแน่น พอดี ไม่กระจุกตัวเกินไป และยังคงเส้นทางสัญญาณสั้นที่สุดเท่าที่ทำได้ ลองนึกภาพว่า คุณกำลัง จัดวางร้านค้าในห้าง ถ้าร้านที่ต้องส่งของถึงกันบ่อยอยู่คนละชั้น คนทำงานจะเหนื่อย และเสียเวลา กันไปเปล่า ๆ  FPGA ก็เหมือนกัน ขั้นตอนการจัดวางที่ดีจะทำให้ทั้งระบบทำงานเร็วขึ้น แบบเห็นผลจริง

การกำหนดเส้นทาง - เชื่อมสายสัญญาณให้ทุกอย่างทำงานร่วมกัน

จากขั้นตอนก่อนหน้านี้ แม้จะทำให้ทุกบล็อกมีตำแหน่งแล้ว แต่มันยังไม่มีสายเชื่อม ดังนั้นเลยต้องมีการกำหนดเส้นทางมาเป็นตัวช่วยตอนสุดท้ายของ Implementation Flow ทำหน้าที่ในการกำหนดเส้นทางการเชื่อมต่อระหว่างบล็อกต่าง ๆ ผ่านโครงข่ายสายสัญญาณภายใน FPGA ที่ซับซ้อน ไม่ว่าจะเป็นสายสั้น สายยาว สายแนวตั้ง สายแนวนอน และสวิตช์จำนวนมหาศาล ที่คอยควบคุมการเชื่อมต่อ การกำหนดเส้นทางต้องเลือกเส้นทางที่ไม่ชนกับวงจรอื่น และต้องทำให้ ดีเลย์ต่ำพอจะผ่านข้อกำหนด Timing ได้ 

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

จากการออกแบบสู่ความจริงในซิลิคอน

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

ทั้งหมดนี้คือภาพรวมของ FPGA Implementation Flow ที่ไม่ได้เป็นแค่กระบวนการ ทางเทคนิค แต่คือ การเปลี่ยนความคิดให้กลายเป็นฮาร์ดแวร์จริง การเข้าใจขั้นตอนเหล่านี้ ทำให้เราไม่รู้สึกว่าการกดปุ่ม Compile เป็นเรื่องลึกลับอีกต่อไป แต่เป็นกระบวนการสร้าง สิ่งใหม่ในระดับซิลิคอนอย่างแท้จริง

บทสรุป 

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

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

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.

เส้นทางการสร้างวงจร FPGA: สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง

เส้นทางการสร้างวงจร FPGA: สังเคราะห์ ทำแผนผัง จัดวางและกำหนดเส้นทาง

สํารวจการเดินทางผ่านการสังเคราะห์และกําหนดเส้นทางในการเตรียมใช้งาน FPGA

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

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

บทนำ 

ตอนที่เราเขียนโค้ดเสร็จ แล้วกดปุ่ม Compile โปรแกรมจะขึ้นคำว่า Implementation Completed ใครเคยแอบนึกในใจกันบ้างไหมว่า มันไปทำอะไรกับโค้ดของเราบ้างนะ? โดยเฉพาะ เวลาใช้งาน FPGA หลายคนโฟกัสที่การเขียน Verilog หรือ VHDL ให้ถูกต้อง แต่ไม่ได้ตระหนักว่า การที่โค้ดไม่กี่ร้อยบรรทัดจะกลายเป็นวงจรจริงในชิปได้ต้องผ่านกระบวนการอะไรบ้าง หลายคน อาจคิดแค่ว่า FPGA ก็แค่แปลโค้ดแล้วรันเหมือนโปรแกรมทั่วไป แต่ความจริงแล้วมันซับซ้อน กว่านั้น เพราะ FPGA ไม่ได้รันคำสั่งแค่ทีละบรรทัด แต่มันเปลี่ยนโค้ดของเราให้กลายเป็น วงจรฮาร์ดแวร์ภายในชิปเลย ซึ่งกว่าที่ไอเดียในไฟล์ HDL จะกลายเป็นสัญญาณไฟฟ้าที่วิ่งอยู่บน ซิลิคอน มันต้องผ่านกระบวนการที่เรียกว่า Implementation Flow ซึ่งเป็นเส้นทางสำคัญตั้งแต่ การแปลลอจิก จัดสรรทรัพยากร จัดวางตำแหน่ง ไปจนถึงการเชื่อมสายสัญญาณทั้งหมดเข้าด้วยกัน การเข้าใจ Flow นี้ทำให้เราใช้งาน FPGA ได้ เข้าใจว่าเบื้องหลังวงจรทำงานอย่างไร หากระบบขึ้น Error แปลกๆ พวกเราก็จะเข้าใจสาเหตุของปัญหา และแก้ไขได้ตรงจุดแบบมืออาชีพ

รู้จัก FPGA แบบเข้าใจง่าย

ลองจินตนาการว่า เรามีที่ดินเปล่าที่เต็มไปด้วยชิ้นส่วน Lego เล็กๆ เชื่อมต่อกันทั้งหมด มีสายไฟที่สามารถเชื่อมโยงบล็อกแต่ละก้อนได้อย่างอิสระ ที่ดินเปล่าผืนนั้นก็คือ FPGA โดย

FPGA ย่อมาจาก Field-Programmable Gate Array เป็นชิปที่เราสามารถออกแบบวงจร ลงไปได้เองหลังจากผลิตเสร็จแล้ว ต่างจากชิปทั่วไปที่ถูกกำหนดหน้าที่ตายตัวมาตั้งแต่โรงงาน เราสามารถเขียนโค้ดฮาร์ดแวร์ด้วยภาษาอย่าง Verilog หรือ VHDL แล้วแปลงมันให้กลายเป็นวงจร ดิจิทัลจริงที่ทำงานแบบขนาน ความเร็วสูง และปรับแต่งได้ละเอียดระดับบิต กระบวนการที่ทำให้ โค้ดที่เราพิมพ์เข้าไปกลายเป็นวงจรจริงในชิปนี้ คือ FPGA Implementation Flow นั่นเอง มี4 ช่วงสำคัญคือ สังเคราะห์  ทำแผนผัง จัดวางและกำหนดเส้นทาง เปรียบเทียบให้เข้าใจง่ายขึ้น กระบวนการนี้คล้ายกับการสร้างเมือง ที่เริ่มจากสถาปนิกออกแบบสถานที่ ไปจนถึงการวางอาคาร และลากถนนเชื่อมทุกอย่างเข้าด้วยกันนั่นเอง

การสังเคราะห์: จากตัวหนังสือสู่โครงสร้างวงจร

เมื่อเขียนโค้ด HDL เสร็จ ขั้นตอนแรกที่จะเกิดขึ้นก็คือ การแปลโค้ดให้กลายเป็นโครงสร้าง วงจรพื้นฐาน ให้ลองนึกภาพว่า คุณเขียนเงื่อนไขง่าย ๆ เช่น ถ้า A และ B เป็นจริง ให้ C เป็นจริง สำหรับมนุษย์ นี่อาจจะดูเป็นแค่ประโยคธรรมดา  แต่สำหรับชิป มันต้องถูกแปลงให้กลายเป็นวงจร AND จริง ๆ ที่มีสายสัญญาณเชื่อมต่อกัน มันถึงจะสามารถทำความเข้าใจได้ 

ขั้นตอนสังเคราะห์จึงช่วยทำหน้าที่แปลงคำอธิบายเชิงตรรกะพวกนี้ให้กลายเป็นลอจิกและ วงจรเก็บข้อมูล เช่น AND, OR, XOR หรือ Flip-Flop พร้อมทั้งปรับแต่งให้วงจรมีประสิทธิภาพ มากขึ้นเช่น ตัดส่วนที่ซ้ำซ้อนออก หรือ จัดรูปแบบให้ทำงานได้เร็วขึ้น ผลลัพธ์ที่ออกมาก็จะไม่ใช่ ไฟล์โค้ดแบบเดิมอีกต่อไป แต่มันจะกลายเป็นรายการเชื่อมต่อของวงจรทั้งหมด เรียกว่า Netlist  ขั้นตอนนี้เลยเปรียบเสมือนเหมือนการสร้างโครงกระดูกของวงจร

การทำแผนผัง- จับคู่กับทรัพยากรจริงในชิป

หลังจากได้โครงกระดูกของวงจรแล้ว ขั้นตอนต่อไปคือ การผูกกับฮาร์ดแวร์จริงใน FPGA

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

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

การจัดวาง – จัดวางในพื้นที่จริงของชิป

หลังวางแผนผัง เราจะรู้แล้วว่าจะใช้ LUT ไหน Flip-Flop ตัวไหน และ DSP กี่ตัว แต่ยังไม่รู้ว่าทุกอย่างจะไปอยู่ตรงไหนบนแผ่นซิลิคอนจริง ขั้นตอนถัดมานี้ก็คือ การกำหนด ตำแหน่งจริงในชิป (Placement FPGA) ที่ดูเหมือนตารางขนาดใหญ่ที่บล็อกแต่ละตัว มีตำแหน่งของมันเอง การจัดวางตำแหน่งมีผลอย่างมากต่อความเร็วในการทำงาน เพราะสัญญาณ ไฟฟ้าไม่ได้เดินทางมาได้ทันที มันต้องใช้เวลาเช่น ถ้าวงจรสองส่วนที่ต้องสื่อสารกันบ่อย ๆ ถูกวางห่างกันมาก สัญญาณจะใช้เวลาเดินทางนานขึ้น ซึ่งอาจทำให้ระบบทำงานไม่ทัน จังหวะคล็อกที่กำหนด ดังนั้นขั้นตอนการจัดวางจะใช้ Algorithm ขั้นสูง เช่น Simulated Annealing หรือ Heuristic Optimization ค้นหาการจัดวางที่ดีที่สุด เพื่อให้วงจรมีความหนาแน่น พอดี ไม่กระจุกตัวเกินไป และยังคงเส้นทางสัญญาณสั้นที่สุดเท่าที่ทำได้ ลองนึกภาพว่า คุณกำลัง จัดวางร้านค้าในห้าง ถ้าร้านที่ต้องส่งของถึงกันบ่อยอยู่คนละชั้น คนทำงานจะเหนื่อย และเสียเวลา กันไปเปล่า ๆ  FPGA ก็เหมือนกัน ขั้นตอนการจัดวางที่ดีจะทำให้ทั้งระบบทำงานเร็วขึ้น แบบเห็นผลจริง

การกำหนดเส้นทาง - เชื่อมสายสัญญาณให้ทุกอย่างทำงานร่วมกัน

จากขั้นตอนก่อนหน้านี้ แม้จะทำให้ทุกบล็อกมีตำแหน่งแล้ว แต่มันยังไม่มีสายเชื่อม ดังนั้นเลยต้องมีการกำหนดเส้นทางมาเป็นตัวช่วยตอนสุดท้ายของ Implementation Flow ทำหน้าที่ในการกำหนดเส้นทางการเชื่อมต่อระหว่างบล็อกต่าง ๆ ผ่านโครงข่ายสายสัญญาณภายใน FPGA ที่ซับซ้อน ไม่ว่าจะเป็นสายสั้น สายยาว สายแนวตั้ง สายแนวนอน และสวิตช์จำนวนมหาศาล ที่คอยควบคุมการเชื่อมต่อ การกำหนดเส้นทางต้องเลือกเส้นทางที่ไม่ชนกับวงจรอื่น และต้องทำให้ ดีเลย์ต่ำพอจะผ่านข้อกำหนด Timing ได้ 

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

จากการออกแบบสู่ความจริงในซิลิคอน

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

ทั้งหมดนี้คือภาพรวมของ FPGA Implementation Flow ที่ไม่ได้เป็นแค่กระบวนการ ทางเทคนิค แต่คือ การเปลี่ยนความคิดให้กลายเป็นฮาร์ดแวร์จริง การเข้าใจขั้นตอนเหล่านี้ ทำให้เราไม่รู้สึกว่าการกดปุ่ม Compile เป็นเรื่องลึกลับอีกต่อไป แต่เป็นกระบวนการสร้าง สิ่งใหม่ในระดับซิลิคอนอย่างแท้จริง

บทสรุป 

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

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