Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

เรียนรู้ว่าเกตติ้งแบบอัตโนมัติ (automated gating) ช่วยแปลงลอจิกของคุณให้กลายเป็นแลตช์ (latches) ที่มีประสิทธิภาพได้อย่างไร

Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

Automated Clock Gating คือเทคนิคที่ Synthesis Tool วิเคราะห์โค้ด Verilog เช่น if (enable) เพื่อค้นหาช่วงเวลาที่ Register ไม่จำเป็นต้องทำงาน จากนั้นแทรก Clock Gating Cell ที่มี Latch อยู่ภายในโดยอัตโนมัติ เพื่อหยุดส่ง Clock ไปยังวงจรที่ไม่ได้ใช้งาน มันช่วยลด Dynamic Power และลดการใช้พลังงานของ Clock Tree โดยที่ยังคงพฤติกรรมการทำงานเดิมของวงจรไว้เหมือนเดิมทุกอย่าง

บทนำ

เพื่อนๆ ลองนึกภาพเมืองในเวลากลางคืนที่ไฟทุกดวงบนถนนเปิดสว่าง ถึงแม้ว่าถนนบางเส้นจะไม่มีรถวิ่งผ่านเลยก็ตาม เพราะระบบไม่ได้รู้ว่าถนนเส้นไหนมีรถวิ่งผ่านหรือจุดไหนไม่มี มันเลยต้องจ่ายพลังงานให้ทุกส่วนเท่ากัน วงจรดิจิทัลในชิปเองก็เป็นเหมือนกัน โดยเฉพาะสัญญาณ Clock หรือสัญญาณนาฬิกา ที่เป็นเหมือนจังหวะกลางในการควบคุมการทำงานของทุกส่วนในระบบ ทุกครั้งที่ Clock เปลี่ยนสถานะจาก 0 เป็น 1 หรือจาก 1 เป็น 0 มันจะเกิดการใช้พลังงานขึ้นทันที แต่ปัญหาก็คือ Clock มักจะถูกกระจายไปยัง Register หรือ Flip-Flop ในชิปจำนวนมาก ถึงแม้ว่า Register พวกนั้นจะไม่มีข้อมูลใหม่ให้ประมวลผล แต่เจ้า Clock ก็ยังต้องวิ่งไปถึงทุกตัวอย่างสม่ำเสมอ เหมือนหัวหน้าที่ขยันเดินไปถามพนักงานทุกคนตลอดเวลา ว่ามีงานใหม่หรือยังถึงแม้ว่าคำตอบส่วนใหญ่จะเป็นยังไม่มีเหมือนๆ เดิม แต่เขาก็ยังถามวนซ้ำแบบนั้น วิศวกรเลยเริ่มตั้งคำถามว่า ถ้าส่วนหนึ่งของวงจรยังไม่จำเป็นต้องทำงาน ทำไมเราต้องส่ง Clock ไปหามันตลอดเวลา คำถามง่ายๆ นี้เองที่กลายเป็นจุดเริ่มต้นของแนวคิดที่เรียกว่า Clock Gating ที่เป็นหนึ่งในพระเอกสำคัญของการลดการใช้พลังงานในชิปยุคใหม่เลยก็ว่าได้

Clock Gating ก็เหมือนการปิดไฟในห้องที่ไม่มีคนใช้

แนวคิดของ Clock Gating ก็ไม่ได้ซับซ้อนอะไร พูดง่ายๆ มันก็เหมือนกับการปิดไฟในห้องที่ไม่มีคนใช้ แทนที่จะปล่อยให้ไฟเปิดไว้ตลอดเวลานั่นเอง แต่ในโลกของวงจรดิจิทัล เราไม่ได้ปิดไฟ แต่เราปิดการส่ง Clock ไปยังส่วนของวงจรที่ยังไม่ต้องทำงาน ตัวอย่าง Verilog ที่พบได้บ่อยคือ

always @(posedge clk)
begin

if (enable)

q <= d;

end 

สำหรับนักออกแบบทั่วไป โค้ดนี้หมายความว่าให้ Register อัปเดตค่าเฉพาะตอนที่ enable เป็น 1 แต่สำหรับ Synthesis Tool โค้ดเดียวกันนี้มีความหมายลึกกว่านั้น เพราะเมื่อ enable เป็น 0 ค่าใน Register จะไม่เปลี่ยนแปลงเลย เพราะอย่างนั้น Clock ที่ส่งเข้ามาในช่วงนั้นแทบไม่มีประโยชน์ Tool เลยมองเห็นโอกาสในการลดพลังงาน และเริ่มคิดว่า ถ้าหยุดส่ง Clock ในช่วงที่ enable เป็น 0 ได้ก็น่าจะดีกว่า

ทำไมการ AND Clock ตรง ๆ ถึงไม่ใช่คำตอบ

ตอนที่กำลังเรียนเรื่อง Clock Gating หลายๆ คนอาจจะแอบคิดในใจเล่นๆ ว่าวิธีแก้ปัญหาน่าจะง่ายมาก ก็แค่เอา Clock ไป AND กับ Enable ก็น่าจะจบ 

เช่น assign gated_clk = clk & enable; 

จะคิดแบบนี้ก็ดูสมเหตุสมผลดี แต่ในความเป็นจริงมันจะอันตรายมาก เพราะ Clock เป็นสัญญาณที่ละเอียดอ่อนที่สุดตัวหนึ่งในระบบ ถ้า Enable เกิดเปลี่ยนสถานะในจังหวะที่ไม่เหมาะสม อาจจะทำให้เกิด Glitch หรือสัญญาณกระตุกสั้นๆ ขึ้นมาได้ และถึง Glitch จะมีความกว้างแค่ไม่กี่พิโควินาที แต่ Register บางตัวอาจจะคิดว่ามันคือ Clock Pulse จริง ทำให้ข้อมูลผิดพลาดทั้งระบบก็เป็นได้ เหมือนมีคนกระพริบไฟเตือนคนทำงาน ถึงจะกระพริบแค่แปปเดียว แต่พนักงานก็อาจจะเข้าใจผิดว่าเราสั่งให้เริ่มทำงานแล้วและอาจจะเกิดความเสียหายได้ เพราะแบบนี้ อุตสาหกรรมเซมิคอนดักเตอร์เลยไม่ค่อยสร้าง Clock Gating ด้วย Logic Gate ธรรมดา แต่จะเลือกใช้ Clock Gating Cell ที่ออกแบบมาโดยเฉพาะแทน

Latch ฮีโร่ตัวจิ๋วแต่แจ๋วที่คนมองข้าม

ใน Clock Gating Cell มักจะมีวงจรสำคัญซ่อนอยู่ นั่นคือ Latch แต่ก็คงมีหลายคนที่แอบสงสัยว่าทำไมต้องมี Latch เพราะดูเหมือนมันไม่เกี่ยวกับการเก็บข้อมูลหลักของระบบเลย คำตอบก็คือมันเกี่ยวกับการป้องกัน Glitch นั่นเอง Latch มันจะคอยจับค่า Enable ในช่วงเวลาที่ Clock อยู่ในสถานะ Low และเมื่อ Clock กำลังจะเปลี่ยนเป็น High ค่า Enable จะถูกล็อกไว้ชั่วคราว ทำให้ไม่เกิดการเปลี่ยนแปลงระหว่างที่ Clock Pulse กำลังเดินทางผ่านวงจรนั่นเอง มันเหมือนเจ้าหน้าที่รักษาความปลอดภัยที่คอยตรวจบัตรผ่านเข้าประตูก่อนเวลาเริ่มงาน การมีมันจะช่วยให้ Clock ที่ออกจาก Clock Gating Cell มีความสะอาดและปลอดภัยต่อการใช้งานมากขึ้น นี่เลยเป็นที่มาของชื่อบทความ How Synthesis Tools Turn Your Verilog Logic into Power-Saving Latchs เพราะในหลายๆ ครั้ง Tool จะเปลี่ยน Logic Enable ธรรมดาให้กลายเป็น Clock Gating Structure โดยอัตโนมัติที่มี Latch ซ่อนอยู่นั่นเอง

จากโค้ดไม่กี่บรรทัดสู่ฮาร์ดแวร์ที่ซับซ้อน

สมัยก่อนพวกวิศวกรต้องมานั่งเพิ่ม Clock Gating Cell ด้วยตัวเอง แต่เมื่อชิปเริ่มมีความซับซ้อนมากขึ้น วิธีนี้มันทำยากมาก ลองคิดกันเล่นๆ ว่าชิปหนึ่งมี Register อยู่ 50 ล้านตัว การไล่ตรวจทีละจุดว่าควรทำ Clock Gating หรือไม่เป็นคงเป็นงานที่กินเวลาสุดๆ เพราะแบบนั้น Synthesis Tool สมัยใหม่เลยถูกพัฒนามาให้มีความสามารถในการวิเคราะห์ RTL (Register-Transfer Level) ได้แบบอัตโนมัติ ถ้า Tool เจอรูปแบบที่บอกว่า Register ไม่จำเป็นต้องอัปเดตทุก Clock Cycle มันก็จะพิจารณาเลยว่าสามารถสร้าง Clock Gating ได้หรือไม่ 

ฉลาดแถมช่วยให้ประหยัดได้มากขึ้น

ความเจ๋งของ Synthesis Tool คือมันไม่ได้แค่ดู Register ทีละตัวเท่านั้น แต่ยังมองภาพรวมทั้งระบบด้วย เช่น ถ้าเกิดว่ามี Register 128 ตัวที่ถูกควบคุมด้วย Enable เดียวกัน ถ้า Tool ต้องสร้าง Clock Gating Cell แยกให้ทุกตัวก็อาจจะไม่ค่อยคุ้ม เพราะต้องเพิ่มวงจรจำนวนมากโดยไม่จำเป็น สิ่งที่ Tool ชอบทำคือมันจะรวม Register ให้อยู่ภายใต้ Clock Gating Cell ตัวเดียว และเมื่อ Enable เป็น 0 Register ทั้งกลุ่มจะหยุดรับ Clock พร้อมกัน วิธีนี้ช่วยลดพลังงานใน Register และยังลดพลังงานใน Clock Tree ที่เป็นโครงข่ายกระจาย Clock ทั่วทั้งชิปได้อีกด้วย เพราะในความเป็นจริง Clock Tree เป็นหนึ่งในส่วนที่ใช้พลังงานสูงที่สุดของชิป เพราะงั้นยิ่งเราหยุด Clock ได้ใกล้ต้นทางมากเท่าไร ก็จะยิ่งประหยัดพลังงานได้มากขึ้นเท่านั้น นี่แหละคือเหตุผลว่าทำไมชิปสำหรับสมาร์ตโฟน โน้ตบุ๊ก และ Data Center ถึงให้ความสำคัญกับ Clock Gating กันมากๆ

Clock Gating ไม่ได้เหมาะกับทุกที่

ถึง Clock Gating จะช่วยลดพลังงานได้ดี แต่ก็ไม่ได้หมายความว่าควรใช้กับทุก Register ในชิป เพราะการสร้าง Clock Gating Cell ก็มีต้นทุนทั้งในด้านของพื้นที่บนชิป การใช้พลังงานภายใน Cell และความซับซ้อนของ Timing ถ้ามี Register แค่ตัวเดียวที่ไม่ค่อยได้ใช้งาน การเพิ่ม Clock Gating Cell อาจจะทำให้สิ้นเปลืองทรัพยากรไปมากกว่าพลังงานที่ประหยัดซะอีก เพราะแบบนี้ Synthesis Tool เลยมีอัลกอริทึมสำหรับประเมินความคุ้มค่าอยู่ข้างหลังนั่นเอง

บทสรุป

เบื้องหลังแบตเตอรี่สมาร์ตโฟนที่อยู่ได้นานขึ้น เซิร์ฟเวอร์ที่ประหยัดไฟมากขึ้น หรือชิป AI ที่มีประสิทธิภาพสูงขึ้น ส่วนหนึ่งมาจากเทคนิคเล็กๆ ที่ผู้ใช้แทบไม่เคยเห็นอย่าง Clock Gating และด้วยเหตุนี้ Automated Clock Gating เลยเป็นตัวอย่างที่ดีสุดๆ เพราะถ้าอยากพูดถึงความฉลาดของเครื่องมือออกแบบชิปสมัยใหม่ นักออกแบบอาจจะเขียนแค่เงื่อนไขสั้นๆ อย่าง if(enable) แต่ Synthesis Tool ซึ่งมันจะมองเห็นโอกาสในการลดพลังงานที่ซ่อนตัวอยู่ภายในนั้นได้ มันจะสร้าง Clock Gating Cell เพิ่ม Latch ป้องกัน Glitch จัดการ Clock Tree และเพิ่มประสิทธิภาพของระบบได้เลยโดยอัตโนมัติ และนี่คือเสน่ห์ของงานออกแบบฮาร์ดแวร์ เพราะหลายๆ ครั้งการเปลี่ยนแปลงที่ยิ่งใหญ่ที่สุด ก็เริ่มต้นจากโค้ดแค่ไม่กี่บรรทัดนี่เอง

บทความที่เกี่ยวข้อง

Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

เรียนรู้ว่าเกตติ้งแบบอัตโนมัติ (automated gating) ช่วยแปลงลอจิกของคุณให้กลายเป็นแลตช์ (latches) ที่มีประสิทธิภาพได้อย่างไร

นักเขียนบทความ
by 
นักเขียนบทความ
Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

เรียนรู้ว่าเกตติ้งแบบอัตโนมัติ (automated gating) ช่วยแปลงลอจิกของคุณให้กลายเป็นแลตช์ (latches) ที่มีประสิทธิภาพได้อย่างไร

Automated Clock Gating คือเทคนิคที่ Synthesis Tool วิเคราะห์โค้ด Verilog เช่น if (enable) เพื่อค้นหาช่วงเวลาที่ Register ไม่จำเป็นต้องทำงาน จากนั้นแทรก Clock Gating Cell ที่มี Latch อยู่ภายในโดยอัตโนมัติ เพื่อหยุดส่ง Clock ไปยังวงจรที่ไม่ได้ใช้งาน มันช่วยลด Dynamic Power และลดการใช้พลังงานของ Clock Tree โดยที่ยังคงพฤติกรรมการทำงานเดิมของวงจรไว้เหมือนเดิมทุกอย่าง

บทนำ

เพื่อนๆ ลองนึกภาพเมืองในเวลากลางคืนที่ไฟทุกดวงบนถนนเปิดสว่าง ถึงแม้ว่าถนนบางเส้นจะไม่มีรถวิ่งผ่านเลยก็ตาม เพราะระบบไม่ได้รู้ว่าถนนเส้นไหนมีรถวิ่งผ่านหรือจุดไหนไม่มี มันเลยต้องจ่ายพลังงานให้ทุกส่วนเท่ากัน วงจรดิจิทัลในชิปเองก็เป็นเหมือนกัน โดยเฉพาะสัญญาณ Clock หรือสัญญาณนาฬิกา ที่เป็นเหมือนจังหวะกลางในการควบคุมการทำงานของทุกส่วนในระบบ ทุกครั้งที่ Clock เปลี่ยนสถานะจาก 0 เป็น 1 หรือจาก 1 เป็น 0 มันจะเกิดการใช้พลังงานขึ้นทันที แต่ปัญหาก็คือ Clock มักจะถูกกระจายไปยัง Register หรือ Flip-Flop ในชิปจำนวนมาก ถึงแม้ว่า Register พวกนั้นจะไม่มีข้อมูลใหม่ให้ประมวลผล แต่เจ้า Clock ก็ยังต้องวิ่งไปถึงทุกตัวอย่างสม่ำเสมอ เหมือนหัวหน้าที่ขยันเดินไปถามพนักงานทุกคนตลอดเวลา ว่ามีงานใหม่หรือยังถึงแม้ว่าคำตอบส่วนใหญ่จะเป็นยังไม่มีเหมือนๆ เดิม แต่เขาก็ยังถามวนซ้ำแบบนั้น วิศวกรเลยเริ่มตั้งคำถามว่า ถ้าส่วนหนึ่งของวงจรยังไม่จำเป็นต้องทำงาน ทำไมเราต้องส่ง Clock ไปหามันตลอดเวลา คำถามง่ายๆ นี้เองที่กลายเป็นจุดเริ่มต้นของแนวคิดที่เรียกว่า Clock Gating ที่เป็นหนึ่งในพระเอกสำคัญของการลดการใช้พลังงานในชิปยุคใหม่เลยก็ว่าได้

Clock Gating ก็เหมือนการปิดไฟในห้องที่ไม่มีคนใช้

แนวคิดของ Clock Gating ก็ไม่ได้ซับซ้อนอะไร พูดง่ายๆ มันก็เหมือนกับการปิดไฟในห้องที่ไม่มีคนใช้ แทนที่จะปล่อยให้ไฟเปิดไว้ตลอดเวลานั่นเอง แต่ในโลกของวงจรดิจิทัล เราไม่ได้ปิดไฟ แต่เราปิดการส่ง Clock ไปยังส่วนของวงจรที่ยังไม่ต้องทำงาน ตัวอย่าง Verilog ที่พบได้บ่อยคือ

always @(posedge clk)
begin

if (enable)

q <= d;

end 

สำหรับนักออกแบบทั่วไป โค้ดนี้หมายความว่าให้ Register อัปเดตค่าเฉพาะตอนที่ enable เป็น 1 แต่สำหรับ Synthesis Tool โค้ดเดียวกันนี้มีความหมายลึกกว่านั้น เพราะเมื่อ enable เป็น 0 ค่าใน Register จะไม่เปลี่ยนแปลงเลย เพราะอย่างนั้น Clock ที่ส่งเข้ามาในช่วงนั้นแทบไม่มีประโยชน์ Tool เลยมองเห็นโอกาสในการลดพลังงาน และเริ่มคิดว่า ถ้าหยุดส่ง Clock ในช่วงที่ enable เป็น 0 ได้ก็น่าจะดีกว่า

ทำไมการ AND Clock ตรง ๆ ถึงไม่ใช่คำตอบ

ตอนที่กำลังเรียนเรื่อง Clock Gating หลายๆ คนอาจจะแอบคิดในใจเล่นๆ ว่าวิธีแก้ปัญหาน่าจะง่ายมาก ก็แค่เอา Clock ไป AND กับ Enable ก็น่าจะจบ 

เช่น assign gated_clk = clk & enable; 

จะคิดแบบนี้ก็ดูสมเหตุสมผลดี แต่ในความเป็นจริงมันจะอันตรายมาก เพราะ Clock เป็นสัญญาณที่ละเอียดอ่อนที่สุดตัวหนึ่งในระบบ ถ้า Enable เกิดเปลี่ยนสถานะในจังหวะที่ไม่เหมาะสม อาจจะทำให้เกิด Glitch หรือสัญญาณกระตุกสั้นๆ ขึ้นมาได้ และถึง Glitch จะมีความกว้างแค่ไม่กี่พิโควินาที แต่ Register บางตัวอาจจะคิดว่ามันคือ Clock Pulse จริง ทำให้ข้อมูลผิดพลาดทั้งระบบก็เป็นได้ เหมือนมีคนกระพริบไฟเตือนคนทำงาน ถึงจะกระพริบแค่แปปเดียว แต่พนักงานก็อาจจะเข้าใจผิดว่าเราสั่งให้เริ่มทำงานแล้วและอาจจะเกิดความเสียหายได้ เพราะแบบนี้ อุตสาหกรรมเซมิคอนดักเตอร์เลยไม่ค่อยสร้าง Clock Gating ด้วย Logic Gate ธรรมดา แต่จะเลือกใช้ Clock Gating Cell ที่ออกแบบมาโดยเฉพาะแทน

Latch ฮีโร่ตัวจิ๋วแต่แจ๋วที่คนมองข้าม

ใน Clock Gating Cell มักจะมีวงจรสำคัญซ่อนอยู่ นั่นคือ Latch แต่ก็คงมีหลายคนที่แอบสงสัยว่าทำไมต้องมี Latch เพราะดูเหมือนมันไม่เกี่ยวกับการเก็บข้อมูลหลักของระบบเลย คำตอบก็คือมันเกี่ยวกับการป้องกัน Glitch นั่นเอง Latch มันจะคอยจับค่า Enable ในช่วงเวลาที่ Clock อยู่ในสถานะ Low และเมื่อ Clock กำลังจะเปลี่ยนเป็น High ค่า Enable จะถูกล็อกไว้ชั่วคราว ทำให้ไม่เกิดการเปลี่ยนแปลงระหว่างที่ Clock Pulse กำลังเดินทางผ่านวงจรนั่นเอง มันเหมือนเจ้าหน้าที่รักษาความปลอดภัยที่คอยตรวจบัตรผ่านเข้าประตูก่อนเวลาเริ่มงาน การมีมันจะช่วยให้ Clock ที่ออกจาก Clock Gating Cell มีความสะอาดและปลอดภัยต่อการใช้งานมากขึ้น นี่เลยเป็นที่มาของชื่อบทความ How Synthesis Tools Turn Your Verilog Logic into Power-Saving Latchs เพราะในหลายๆ ครั้ง Tool จะเปลี่ยน Logic Enable ธรรมดาให้กลายเป็น Clock Gating Structure โดยอัตโนมัติที่มี Latch ซ่อนอยู่นั่นเอง

จากโค้ดไม่กี่บรรทัดสู่ฮาร์ดแวร์ที่ซับซ้อน

สมัยก่อนพวกวิศวกรต้องมานั่งเพิ่ม Clock Gating Cell ด้วยตัวเอง แต่เมื่อชิปเริ่มมีความซับซ้อนมากขึ้น วิธีนี้มันทำยากมาก ลองคิดกันเล่นๆ ว่าชิปหนึ่งมี Register อยู่ 50 ล้านตัว การไล่ตรวจทีละจุดว่าควรทำ Clock Gating หรือไม่เป็นคงเป็นงานที่กินเวลาสุดๆ เพราะแบบนั้น Synthesis Tool สมัยใหม่เลยถูกพัฒนามาให้มีความสามารถในการวิเคราะห์ RTL (Register-Transfer Level) ได้แบบอัตโนมัติ ถ้า Tool เจอรูปแบบที่บอกว่า Register ไม่จำเป็นต้องอัปเดตทุก Clock Cycle มันก็จะพิจารณาเลยว่าสามารถสร้าง Clock Gating ได้หรือไม่ 

ฉลาดแถมช่วยให้ประหยัดได้มากขึ้น

ความเจ๋งของ Synthesis Tool คือมันไม่ได้แค่ดู Register ทีละตัวเท่านั้น แต่ยังมองภาพรวมทั้งระบบด้วย เช่น ถ้าเกิดว่ามี Register 128 ตัวที่ถูกควบคุมด้วย Enable เดียวกัน ถ้า Tool ต้องสร้าง Clock Gating Cell แยกให้ทุกตัวก็อาจจะไม่ค่อยคุ้ม เพราะต้องเพิ่มวงจรจำนวนมากโดยไม่จำเป็น สิ่งที่ Tool ชอบทำคือมันจะรวม Register ให้อยู่ภายใต้ Clock Gating Cell ตัวเดียว และเมื่อ Enable เป็น 0 Register ทั้งกลุ่มจะหยุดรับ Clock พร้อมกัน วิธีนี้ช่วยลดพลังงานใน Register และยังลดพลังงานใน Clock Tree ที่เป็นโครงข่ายกระจาย Clock ทั่วทั้งชิปได้อีกด้วย เพราะในความเป็นจริง Clock Tree เป็นหนึ่งในส่วนที่ใช้พลังงานสูงที่สุดของชิป เพราะงั้นยิ่งเราหยุด Clock ได้ใกล้ต้นทางมากเท่าไร ก็จะยิ่งประหยัดพลังงานได้มากขึ้นเท่านั้น นี่แหละคือเหตุผลว่าทำไมชิปสำหรับสมาร์ตโฟน โน้ตบุ๊ก และ Data Center ถึงให้ความสำคัญกับ Clock Gating กันมากๆ

Clock Gating ไม่ได้เหมาะกับทุกที่

ถึง Clock Gating จะช่วยลดพลังงานได้ดี แต่ก็ไม่ได้หมายความว่าควรใช้กับทุก Register ในชิป เพราะการสร้าง Clock Gating Cell ก็มีต้นทุนทั้งในด้านของพื้นที่บนชิป การใช้พลังงานภายใน Cell และความซับซ้อนของ Timing ถ้ามี Register แค่ตัวเดียวที่ไม่ค่อยได้ใช้งาน การเพิ่ม Clock Gating Cell อาจจะทำให้สิ้นเปลืองทรัพยากรไปมากกว่าพลังงานที่ประหยัดซะอีก เพราะแบบนี้ Synthesis Tool เลยมีอัลกอริทึมสำหรับประเมินความคุ้มค่าอยู่ข้างหลังนั่นเอง

บทสรุป

เบื้องหลังแบตเตอรี่สมาร์ตโฟนที่อยู่ได้นานขึ้น เซิร์ฟเวอร์ที่ประหยัดไฟมากขึ้น หรือชิป AI ที่มีประสิทธิภาพสูงขึ้น ส่วนหนึ่งมาจากเทคนิคเล็กๆ ที่ผู้ใช้แทบไม่เคยเห็นอย่าง Clock Gating และด้วยเหตุนี้ Automated Clock Gating เลยเป็นตัวอย่างที่ดีสุดๆ เพราะถ้าอยากพูดถึงความฉลาดของเครื่องมือออกแบบชิปสมัยใหม่ นักออกแบบอาจจะเขียนแค่เงื่อนไขสั้นๆ อย่าง if(enable) แต่ Synthesis Tool ซึ่งมันจะมองเห็นโอกาสในการลดพลังงานที่ซ่อนตัวอยู่ภายในนั้นได้ มันจะสร้าง Clock Gating Cell เพิ่ม Latch ป้องกัน Glitch จัดการ Clock Tree และเพิ่มประสิทธิภาพของระบบได้เลยโดยอัตโนมัติ และนี่คือเสน่ห์ของงานออกแบบฮาร์ดแวร์ เพราะหลายๆ ครั้งการเปลี่ยนแปลงที่ยิ่งใหญ่ที่สุด ก็เริ่มต้นจากโค้ดแค่ไม่กี่บรรทัดนี่เอง

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.

บทความที่เกี่ยวข้อง

Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

Automated Clock Gating: เมื่อ Synthesis Tool เปลี่ยน Verilog ให้กลายเป็นวงจรประหยัดพลังงานได้แบบอัตโนมัติ

เรียนรู้ว่าเกตติ้งแบบอัตโนมัติ (automated gating) ช่วยแปลงลอจิกของคุณให้กลายเป็นแลตช์ (latches) ที่มีประสิทธิภาพได้อย่างไร

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

Automated Clock Gating คือเทคนิคที่ Synthesis Tool วิเคราะห์โค้ด Verilog เช่น if (enable) เพื่อค้นหาช่วงเวลาที่ Register ไม่จำเป็นต้องทำงาน จากนั้นแทรก Clock Gating Cell ที่มี Latch อยู่ภายในโดยอัตโนมัติ เพื่อหยุดส่ง Clock ไปยังวงจรที่ไม่ได้ใช้งาน มันช่วยลด Dynamic Power และลดการใช้พลังงานของ Clock Tree โดยที่ยังคงพฤติกรรมการทำงานเดิมของวงจรไว้เหมือนเดิมทุกอย่าง

บทนำ

เพื่อนๆ ลองนึกภาพเมืองในเวลากลางคืนที่ไฟทุกดวงบนถนนเปิดสว่าง ถึงแม้ว่าถนนบางเส้นจะไม่มีรถวิ่งผ่านเลยก็ตาม เพราะระบบไม่ได้รู้ว่าถนนเส้นไหนมีรถวิ่งผ่านหรือจุดไหนไม่มี มันเลยต้องจ่ายพลังงานให้ทุกส่วนเท่ากัน วงจรดิจิทัลในชิปเองก็เป็นเหมือนกัน โดยเฉพาะสัญญาณ Clock หรือสัญญาณนาฬิกา ที่เป็นเหมือนจังหวะกลางในการควบคุมการทำงานของทุกส่วนในระบบ ทุกครั้งที่ Clock เปลี่ยนสถานะจาก 0 เป็น 1 หรือจาก 1 เป็น 0 มันจะเกิดการใช้พลังงานขึ้นทันที แต่ปัญหาก็คือ Clock มักจะถูกกระจายไปยัง Register หรือ Flip-Flop ในชิปจำนวนมาก ถึงแม้ว่า Register พวกนั้นจะไม่มีข้อมูลใหม่ให้ประมวลผล แต่เจ้า Clock ก็ยังต้องวิ่งไปถึงทุกตัวอย่างสม่ำเสมอ เหมือนหัวหน้าที่ขยันเดินไปถามพนักงานทุกคนตลอดเวลา ว่ามีงานใหม่หรือยังถึงแม้ว่าคำตอบส่วนใหญ่จะเป็นยังไม่มีเหมือนๆ เดิม แต่เขาก็ยังถามวนซ้ำแบบนั้น วิศวกรเลยเริ่มตั้งคำถามว่า ถ้าส่วนหนึ่งของวงจรยังไม่จำเป็นต้องทำงาน ทำไมเราต้องส่ง Clock ไปหามันตลอดเวลา คำถามง่ายๆ นี้เองที่กลายเป็นจุดเริ่มต้นของแนวคิดที่เรียกว่า Clock Gating ที่เป็นหนึ่งในพระเอกสำคัญของการลดการใช้พลังงานในชิปยุคใหม่เลยก็ว่าได้

Clock Gating ก็เหมือนการปิดไฟในห้องที่ไม่มีคนใช้

แนวคิดของ Clock Gating ก็ไม่ได้ซับซ้อนอะไร พูดง่ายๆ มันก็เหมือนกับการปิดไฟในห้องที่ไม่มีคนใช้ แทนที่จะปล่อยให้ไฟเปิดไว้ตลอดเวลานั่นเอง แต่ในโลกของวงจรดิจิทัล เราไม่ได้ปิดไฟ แต่เราปิดการส่ง Clock ไปยังส่วนของวงจรที่ยังไม่ต้องทำงาน ตัวอย่าง Verilog ที่พบได้บ่อยคือ

always @(posedge clk)
begin

if (enable)

q <= d;

end 

สำหรับนักออกแบบทั่วไป โค้ดนี้หมายความว่าให้ Register อัปเดตค่าเฉพาะตอนที่ enable เป็น 1 แต่สำหรับ Synthesis Tool โค้ดเดียวกันนี้มีความหมายลึกกว่านั้น เพราะเมื่อ enable เป็น 0 ค่าใน Register จะไม่เปลี่ยนแปลงเลย เพราะอย่างนั้น Clock ที่ส่งเข้ามาในช่วงนั้นแทบไม่มีประโยชน์ Tool เลยมองเห็นโอกาสในการลดพลังงาน และเริ่มคิดว่า ถ้าหยุดส่ง Clock ในช่วงที่ enable เป็น 0 ได้ก็น่าจะดีกว่า

ทำไมการ AND Clock ตรง ๆ ถึงไม่ใช่คำตอบ

ตอนที่กำลังเรียนเรื่อง Clock Gating หลายๆ คนอาจจะแอบคิดในใจเล่นๆ ว่าวิธีแก้ปัญหาน่าจะง่ายมาก ก็แค่เอา Clock ไป AND กับ Enable ก็น่าจะจบ 

เช่น assign gated_clk = clk & enable; 

จะคิดแบบนี้ก็ดูสมเหตุสมผลดี แต่ในความเป็นจริงมันจะอันตรายมาก เพราะ Clock เป็นสัญญาณที่ละเอียดอ่อนที่สุดตัวหนึ่งในระบบ ถ้า Enable เกิดเปลี่ยนสถานะในจังหวะที่ไม่เหมาะสม อาจจะทำให้เกิด Glitch หรือสัญญาณกระตุกสั้นๆ ขึ้นมาได้ และถึง Glitch จะมีความกว้างแค่ไม่กี่พิโควินาที แต่ Register บางตัวอาจจะคิดว่ามันคือ Clock Pulse จริง ทำให้ข้อมูลผิดพลาดทั้งระบบก็เป็นได้ เหมือนมีคนกระพริบไฟเตือนคนทำงาน ถึงจะกระพริบแค่แปปเดียว แต่พนักงานก็อาจจะเข้าใจผิดว่าเราสั่งให้เริ่มทำงานแล้วและอาจจะเกิดความเสียหายได้ เพราะแบบนี้ อุตสาหกรรมเซมิคอนดักเตอร์เลยไม่ค่อยสร้าง Clock Gating ด้วย Logic Gate ธรรมดา แต่จะเลือกใช้ Clock Gating Cell ที่ออกแบบมาโดยเฉพาะแทน

Latch ฮีโร่ตัวจิ๋วแต่แจ๋วที่คนมองข้าม

ใน Clock Gating Cell มักจะมีวงจรสำคัญซ่อนอยู่ นั่นคือ Latch แต่ก็คงมีหลายคนที่แอบสงสัยว่าทำไมต้องมี Latch เพราะดูเหมือนมันไม่เกี่ยวกับการเก็บข้อมูลหลักของระบบเลย คำตอบก็คือมันเกี่ยวกับการป้องกัน Glitch นั่นเอง Latch มันจะคอยจับค่า Enable ในช่วงเวลาที่ Clock อยู่ในสถานะ Low และเมื่อ Clock กำลังจะเปลี่ยนเป็น High ค่า Enable จะถูกล็อกไว้ชั่วคราว ทำให้ไม่เกิดการเปลี่ยนแปลงระหว่างที่ Clock Pulse กำลังเดินทางผ่านวงจรนั่นเอง มันเหมือนเจ้าหน้าที่รักษาความปลอดภัยที่คอยตรวจบัตรผ่านเข้าประตูก่อนเวลาเริ่มงาน การมีมันจะช่วยให้ Clock ที่ออกจาก Clock Gating Cell มีความสะอาดและปลอดภัยต่อการใช้งานมากขึ้น นี่เลยเป็นที่มาของชื่อบทความ How Synthesis Tools Turn Your Verilog Logic into Power-Saving Latchs เพราะในหลายๆ ครั้ง Tool จะเปลี่ยน Logic Enable ธรรมดาให้กลายเป็น Clock Gating Structure โดยอัตโนมัติที่มี Latch ซ่อนอยู่นั่นเอง

จากโค้ดไม่กี่บรรทัดสู่ฮาร์ดแวร์ที่ซับซ้อน

สมัยก่อนพวกวิศวกรต้องมานั่งเพิ่ม Clock Gating Cell ด้วยตัวเอง แต่เมื่อชิปเริ่มมีความซับซ้อนมากขึ้น วิธีนี้มันทำยากมาก ลองคิดกันเล่นๆ ว่าชิปหนึ่งมี Register อยู่ 50 ล้านตัว การไล่ตรวจทีละจุดว่าควรทำ Clock Gating หรือไม่เป็นคงเป็นงานที่กินเวลาสุดๆ เพราะแบบนั้น Synthesis Tool สมัยใหม่เลยถูกพัฒนามาให้มีความสามารถในการวิเคราะห์ RTL (Register-Transfer Level) ได้แบบอัตโนมัติ ถ้า Tool เจอรูปแบบที่บอกว่า Register ไม่จำเป็นต้องอัปเดตทุก Clock Cycle มันก็จะพิจารณาเลยว่าสามารถสร้าง Clock Gating ได้หรือไม่ 

ฉลาดแถมช่วยให้ประหยัดได้มากขึ้น

ความเจ๋งของ Synthesis Tool คือมันไม่ได้แค่ดู Register ทีละตัวเท่านั้น แต่ยังมองภาพรวมทั้งระบบด้วย เช่น ถ้าเกิดว่ามี Register 128 ตัวที่ถูกควบคุมด้วย Enable เดียวกัน ถ้า Tool ต้องสร้าง Clock Gating Cell แยกให้ทุกตัวก็อาจจะไม่ค่อยคุ้ม เพราะต้องเพิ่มวงจรจำนวนมากโดยไม่จำเป็น สิ่งที่ Tool ชอบทำคือมันจะรวม Register ให้อยู่ภายใต้ Clock Gating Cell ตัวเดียว และเมื่อ Enable เป็น 0 Register ทั้งกลุ่มจะหยุดรับ Clock พร้อมกัน วิธีนี้ช่วยลดพลังงานใน Register และยังลดพลังงานใน Clock Tree ที่เป็นโครงข่ายกระจาย Clock ทั่วทั้งชิปได้อีกด้วย เพราะในความเป็นจริง Clock Tree เป็นหนึ่งในส่วนที่ใช้พลังงานสูงที่สุดของชิป เพราะงั้นยิ่งเราหยุด Clock ได้ใกล้ต้นทางมากเท่าไร ก็จะยิ่งประหยัดพลังงานได้มากขึ้นเท่านั้น นี่แหละคือเหตุผลว่าทำไมชิปสำหรับสมาร์ตโฟน โน้ตบุ๊ก และ Data Center ถึงให้ความสำคัญกับ Clock Gating กันมากๆ

Clock Gating ไม่ได้เหมาะกับทุกที่

ถึง Clock Gating จะช่วยลดพลังงานได้ดี แต่ก็ไม่ได้หมายความว่าควรใช้กับทุก Register ในชิป เพราะการสร้าง Clock Gating Cell ก็มีต้นทุนทั้งในด้านของพื้นที่บนชิป การใช้พลังงานภายใน Cell และความซับซ้อนของ Timing ถ้ามี Register แค่ตัวเดียวที่ไม่ค่อยได้ใช้งาน การเพิ่ม Clock Gating Cell อาจจะทำให้สิ้นเปลืองทรัพยากรไปมากกว่าพลังงานที่ประหยัดซะอีก เพราะแบบนี้ Synthesis Tool เลยมีอัลกอริทึมสำหรับประเมินความคุ้มค่าอยู่ข้างหลังนั่นเอง

บทสรุป

เบื้องหลังแบตเตอรี่สมาร์ตโฟนที่อยู่ได้นานขึ้น เซิร์ฟเวอร์ที่ประหยัดไฟมากขึ้น หรือชิป AI ที่มีประสิทธิภาพสูงขึ้น ส่วนหนึ่งมาจากเทคนิคเล็กๆ ที่ผู้ใช้แทบไม่เคยเห็นอย่าง Clock Gating และด้วยเหตุนี้ Automated Clock Gating เลยเป็นตัวอย่างที่ดีสุดๆ เพราะถ้าอยากพูดถึงความฉลาดของเครื่องมือออกแบบชิปสมัยใหม่ นักออกแบบอาจจะเขียนแค่เงื่อนไขสั้นๆ อย่าง if(enable) แต่ Synthesis Tool ซึ่งมันจะมองเห็นโอกาสในการลดพลังงานที่ซ่อนตัวอยู่ภายในนั้นได้ มันจะสร้าง Clock Gating Cell เพิ่ม Latch ป้องกัน Glitch จัดการ Clock Tree และเพิ่มประสิทธิภาพของระบบได้เลยโดยอัตโนมัติ และนี่คือเสน่ห์ของงานออกแบบฮาร์ดแวร์ เพราะหลายๆ ครั้งการเปลี่ยนแปลงที่ยิ่งใหญ่ที่สุด ก็เริ่มต้นจากโค้ดแค่ไม่กี่บรรทัดนี่เอง

Related articles