Google XLS: เปิดตัวการออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ยุคใหม่ ให้วิศวกรซอฟต์แวร์สามารถ “คอมไพล์” ฮาร์ดแวร์ได้อย่างลื่นไหล

คำสำคัญ: Google XLS, การสังเคราะห์ระดับสูง (HLS), การออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ (Co-design), ภาษา DSLX, สถาปัตยกรรมคอมไพเลอร์, การคอมไพล์แบบทันที (JIT)

กฎของมัวร์กำลังเข้าใกล้ขีดจำกัดทางกายภาพ ความวิตกกังวลเรื่องพลังการคำนวณกำลังแพร่กระจายไปทั่วแวดวงเทคโนโลยี เมื่อ “อาหารฟรี” จากโปรเซสเซอร์อเนกประสงค์ใกล้จะหมดแล้ว ทางออกในอนาคตอยู่ที่ไหน? คำตอบชี้ไปที่ฮาร์ดแวร์เฉพาะทางและการออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ (Co-design)

อย่างไรก็ตาม ในความเป็นจริงยังมีช่องว่าง วิศวกรที่เชี่ยวชาญตรรกะฮาร์ดแวร์ระดับล่างมักถูกจำกัดด้วยชุดเครื่องมือ EDA แบบดั้งเดิมและภาษาที่ใช้บรรยายฮาร์ดแวร์ที่ยุ่งยาก ในขณะที่วิศวกรซอฟต์แวร์ที่เชี่ยวชาญการคิดเชิงนามธรรมระดับสูงกลับหวาดกลัวการออกแบบฮาร์ดแวร์ เป็นไปได้หรือไม่ที่จะให้นักพัฒนาสามารถ “คอมไพล์” วงจรฮาร์ดแวร์ระดับล่างออกมาได้อย่างสง่างาม ปลอดภัย และมีประสิทธิภาพ เหมือนกับการเขียนซอฟต์แวร์สมัยใหม่?

Google XLS: เปิดตัวการออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ยุคใหม่ ให้วิศวกรซอฟต์แวร์สามารถ "คอมไพล์" ฮาร์ดแวร์ได้อย่างลื่นไหล

เมื่อเร็วๆ นี้ Google ได้เปิดตัวโครงการโอเพนซอร์สชื่อ XLS (Accelerated HW Synthesis) ซึ่งเป็นชุดเครื่องมือการสังเคราะห์ระดับสูง (High Level Synthesis, HLS) ที่อยู่ในขั้นตอนการพัฒนาอย่างรวดเร็ว วิสัยทัศน์หลักของมันคือการเป็นชุดพัฒนาซอฟต์แวร์ (SDK) ฮาร์ดแวร์อเนกประสงค์ใน “ยุคหลังกฎของมัวร์” โดยมีเป้าหมายเพื่อเชื่อมช่องว่างการพัฒนาระหว่างซอฟต์แวร์และฮาร์ดแวร์

Google XLS: เปิดตัวการออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ยุคใหม่ ให้วิศวกรซอฟต์แวร์สามารถ "คอมไพล์" ฮาร์ดแวร์ได้อย่างลื่นไหล

เพื่อรับมือกับแนวโน้มการเชี่ยวชาญเฉพาะทางของฮาร์ดแวร์ในอนาคต วิศวกรซอฟต์แวร์และฮาร์ดแวร์ต้องก้าวข้ามขอบเขตของสาขาวิชา และดำเนินการออกแบบร่วมระหว่างซอฟต์แวร์และฮาร์ดแวร์ (Co-design) ที่แน่นแฟ้นยิ่งขึ้น XLS พยายามเร่งกระบวนการพัฒนาฮาร์ดแวร์ทั้งหมดโดยการยกระดับชั้นการคิดเชิงนามธรรม ใช้ประโยชน์จากข้อได้เปรียบด้านผลิตภาพของวิศวกรซอฟต์แวร์ และใช้เครื่องมืออัตโนมัติและพลังการคำนวณของเครื่องจักร

1. แนวคิดการออกแบบหลัก

XLS อนุญาตให้นักพัฒนาใช้ภาษาที่อธิบายฟังก์ชันระดับสูงที่ยืดหยุ่นในการเขียนโค้ด และสังเคราะห์ออกมาเป็นการออกแบบฮาร์ดแวร์ที่ใช้งานได้ (Verilog/SystemVerilog) โดยอัตโนมัติ คุณสมบัติหลักรวมถึง:

  • การพัฒนาฮาร์ดแวร์สไตล์ซอฟต์แวร์: โมดูลฮาร์ดแวร์ที่พัฒนาด้วย XLS สามารถทำงานเป็น “ซอฟต์แวร์โฮสต์” ที่มีประสิทธิภาพได้ในเวลาเดียวกัน นี่หมายความว่าคุณสามารถออกแบบฮาร์ดแวร์ด้วยนิสัยการเขียนซอฟต์แวร์ และโค้ดชุดเดียวกันไม่เพียงแต่สร้างฮาร์ดแวร์ได้เท่านั้น แต่ยังสามารถดำเนินการและดีบักด้วยความเร็วระดับเนทีฟในสภาพแวดล้อมซอฟต์แวร์หรือเครื่องจำลองได้อีกด้วย
  • ความสอดคล้องของฟังก์ชันที่เข้มงวด: XLSชุดเครื่องมือมีเครื่องมือเช่นการตรวจสอบความถูกต้องเชิงรูปนัย เพื่อรับประกันว่าพฤติกรรมของโค้ดในการจำลองซอฟต์แวร์สอดคล้องกับฟังก์ชันของวงจรฮาร์ดแวร์สุดท้ายที่สร้างขึ้นอย่างสมบูรณ์
  • ฟังก์ชันบริสุทธิ์และกระบวนการพร้อมกัน: XLS รองรับตรรกะแบบผสมผสานบริสุทธิ์หรือฟังก์ชันที่สามารถทำไปป์ไลน์ได้ และยังรองรับกระบวนการพร้อมกันที่มีสถานะ สำหรับอธิบายเครื่องสถานะที่เปลี่ยนแปลงตามเวลาและอินเทอร์เฟซการสื่อสารที่ซับซ้อนยิ่งขึ้น

2. สถาปัตยกรรมหลักและสแต็กเครื่องมือ

สถาปัตยกรรมภายในของ XLS แสดงเป็นสแต็กคอมไพล์ที่มีลำดับชั้นชัดเจน เส้นทางสมบูรณ์จากภาษาที่เฉพาะเจาะจงโดเมนระดับบนไปจนถึงการสร้างฮาร์ดแวร์ระดับล่างมีดังนี้:

A. ชั้นภาษาฟรอนต์เอนด์: DSLX

เพื่อให้สอดคล้องกับคุณลักษณะการไหลของข้อมูลของการออกแบบฮาร์ดแวร์มากขึ้น Google ได้ออกแบบภาษาที่เฉพาะเจาะจงโดเมนชื่อ DSLX

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

ตัวอย่างไวยากรณ์ DSLX: ตัวบวกฮาร์ดแวร์อย่างง่าย

ต่อไปนี้เป็นตัวอย่างตัวบวกฮาร์ดแวร์อย่างง่ายที่เขียนด้วยภาษา DSLX ซึ่งไวยากรณ์คล้ายกับ Rust มาก:

rust
// xls/examples/tiny_adder.x
// ส่งคืนผลลัพธ์การบวก ประเภทถูกขยายเพื่อสะท้อนบิตทด (carry bit)
fn tiny_adder(x: u1, y: u1) -> u2 {
let lhs = x as u2;
let rhs = y as u2;
lhs + rhs
}

[test]

fn test_exhaustive() {
assert_eq(tiny_adder(u1:0, u1:0), u2:0b00);
assert_eq(tiny_adder(u1:0, u1:1), u2:0b01);
assert_eq(tiny_adder(u1:1, u1:1), u2:0b10);
assert_eq(tiny_adder(u1:1, u1:0), u2:0b01);
}

โค้ดนี้สามารถทำงานเป็นหน่วยทดสอบซอฟต์แวร์ได้โดยตรง (ผ่านแอตทริบิวต์ #[test]) แต่ในชุดเครื่องมือ XLS มันจะถูกแยกวิเคราะห์และแปลงเป็นเน็ตลิสต์ฮาร์ดแวร์ระดับล่างในที่สุด

ชั้นการแทนค่ากลาง: XLS IR

โค้ด DSLX จะถูกแปลงเป็นการแทนค่ากลาง (IR) ของ XLS ก่อน XLS IR เป็นโครงสร้างกราฟรูปแบบการกำหนดค่าเดียวแบบสถิต (SSA) ที่บริสุทธิ์ งานเพิ่มประสิทธิภาพจำนวนมากของคอมไพเลอร์จะดำเนินการในชั้นนี้

ใน xls/ir/node.h ได้กำหนดแนวคิดโหนดพื้นฐานที่สุดใน IR ในเน็ตลิสต์ฮาร์ดแวร์ การดำเนินการแต่ละอย่าง (เช่น AND, OR, MUX) คือ Node หนึ่งตัว ซึ่งเชื่อมต่อกันผ่านตัวถูกดำเนินการ (operands_) และผู้ใช้ (users_)

cpp
// xls/ir/node.h
// ประเภทนามธรรมที่แสดงถึงโหนด (แทนนิพจน์) ใน IR ระดับสูง
class Node {
public:
virtual ~Node() = default;

// รูปแบบผู้เยี่ยมชม: สำรวจโหนดนี้
absl::Status Accept(DfsVisitor* visitor);

Type GetType() const { return type_; }
Op op() const { return op_; }
FunctionBase
function_base() const { return function_base_; }

// ส่งคืนลำดับตัวถูกดำเนินการที่โหนดนี้ใช้ (พอร์ตอินพุต)
absl::Span operands() const { return operands_; }

// … (ละเมธอดบางส่วน)

protected:
FunctionBase function_base_;
int64_t id_;
Op op_;
Type
type_;
SourceInfo loc_;
std::unique_ptr name_; // ไม่ว่างหากกำหนดชื่อแล้ว

// โหนดส่วนใหญ่มีตัวถูกดำเนินการ <= 2 ตัว ดังนั้นเราจึงใช้ InlineVector เพื่อจัดสรรบนสแต็กให้มากที่สุด
absl::InlinedVector operands_;

// ชุดผู้ใช้ของโหนดนี้ เรียงลำดับตาม node_id (ปลายทางของพอร์ตเอาต์พุต)
absl::InlinedVector users_;
};

จากโค้ดด้านบนจะเห็นได้ว่า XLS IR ถูกสร้างขึ้นอย่างเข้มงวดด้วย C++ และใช้วิธีการเพิ่มประสิทธิภาพเช่น absl::InlinedVector เพื่อปรับปรุงประสิทธิภาพของหน่วยความจำและแคช

การเพิ่มประสิทธิภาพและการจัดตารางเวลา

  • Passes (อยู่ที่ xls/passes/): คล้ายกับ LLVM หลังจากสร้าง IR แล้ว XLS จะดำเนินการ Pass หลายชุดเพื่อเพิ่มประสิทธิภาพ เช่น การกำจัดโค้ดที่ตายแล้ว การพับค่าคงที่ เป็นต้น
  • Scheduling (อยู่ที่ xls/scheduling/): การออกแบบฮาร์ดแวร์ต้องพิจารณาเวลา อัลกอริทึมในโมดูลการจัดตารางเวลามีหน้าที่ตัดสินใจว่าการดำเนินการ IR แต่ละครั้งควรดำเนินการในขั้นตอนไปป์ไลน์ของรอบสัญญาณนาฬิกาใด

การสร้างโค้ด: Codegen และ VAST

IR ที่ได้รับการเพิ่มประสิทธิภาพและการจัดตารางเวลาแล้ว ในที่สุดจะถูกแปลเป็นภาษาที่ใช้บรรยายฮาร์ดแวร์ (เช่น Verilog) ที่เครื่องมือ EDA สามารถรับรู้ได้ XLS สร้างโครงสร้างต้นไม้ไวยากรณ์นามธรรมชื่อ VAST (Verilog AST) สำหรับจุดประสงค์นี้

ผ่านคอมโพเนนต์ Generator (เช่น PipelineGenerator ที่รับผิดชอบไปป์ไลน์และ SequentialGenerator ที่รับผิดชอบเครื่องสถานะ) XLS แปลง IR เป็น VAST และส่งออกไฟล์ .v หรือ .sv ในที่สุด การนำไปใช้นี้อยู่ที่ไดเรกทอรี xls/codegen/

ระบบนิเวศโดยรอบและเครื่องมือหลัก

นอกจากเส้นทางการคอมไพล์หลักแล้ว XLS ยังมีเครื่องมือทางวิศวกรรม การตรวจสอบความถูกต้อง และการจำลองที่สมบูรณ์:

  1. คอมไพเลอร์ JIT (xls/jit): คอมไพเลอร์แบบทันทีที่อิงตาม LLVM สามารถคอมไพล์ XLS IR เป็นโค้ดเครื่องระดับท้องถิ่นเพื่อทำงาน ทำให้การตรวจสอบความถูกต้องและการดำเนินการของ DSLX สามารถบรรลุความเร็วระดับเนทีฟ
  2. Fuzzer แบบเต็มสแต็ก (xls/fuzzer): เครื่องมือทดสอบแบบฟัซซิงหลายกระบวนการ ใช้เพื่อจับปัญหาที่อาจเกิดขึ้นในชุดเครื่องมือ มันจะสร้างโปรแกรม DSLX แบบสุ่ม และเปรียบเทียบผลลัพธ์การทำงานของอินเทอร์พรีเตอร์ DSLX, อินเทอร์พรีเตอร์ IR, คอมไพเลอร์ JIT และ Verilog ที่สร้างขึ้นสุดท้ายในเครื่องจำลองข้ามกัน ความไม่สอดคล้องใดๆ จะถูกค้นพบทันที
  3. การตรวจสอบความถูกต้องเชิงรูปนัย SMT (xls/solvers): ใช้เอ็นจิ้นตัวแก้ปัญหา Z3 สามารถแปลง IR เป็นนิพจน์ตรรกะ SMT เพื่อใช้ในการพิสูจน์เชิงรูปนัย เช่น ตรวจสอบความเท่าเทียมกันเชิงตรรกะระหว่าง XLS IR และเน็ตลิสต์
  4. ฟรอนต์เอนด์ C++ (xls/contrib/xlscc): ฟรอนต์เอนด์ C++ เชิงทดลอง สามารถแยกวิเคราะห์ไวยากรณ์ C++ เฉพาะส่วนย่อยและสร้าง XLS IR โดยตรง เพื่อความสะดวกในการย้ายไลบรารีโค้ดการสังเคราะห์ระดับสูง C++ ที่มีอยู่

ผ่าน DSLX ที่ให้ประสบการณ์การพัฒนาที่ปลอดภัยสไตล์ Rust จัดการการดำเนินการระดับล่างของเกตตรรกะด้วยต้นไม้ Node และใช้ JIT, Fuzzing และ SMT Solvers สร้างระบบทดสอบและตรวจสอบความถูกต้องแบบรอบด้าน

เมื่อมองไปทั่วโครงการ google/xls ทั้งหมด มันแสดงให้เห็นไม่เพียงแต่นวัตกรรมเครื่องมือ แต่ยังเป็นการเปลี่ยนแปลงกระบวนทัศน์การพัฒนา มันไม่ใช่แค่การสร้างเครื่องมือ HLS (การสังเคราะห์ระดับสูง) ขึ้นใหม่ แต่เป็นการนำระเบียบวิธีวิศวกรรมซอฟต์แวร์สมัยใหม่ที่ครบถ้วนมาใช้อย่างเป็นระบบในสาขาการออกแบบฮาร์ดแวร์ ตั้งแต่ฟรอนต์เอนด์ DSLX สไตล์ Rust ที่มีความปลอดภัยของประเภทข้อมูลสูง ไปจนถึงการแทนค่ากลาง XLS IR แบบ SSA ที่เข้มงวด และการคอมไพล์แบบทันที JIT ที่ผสานรวม การทดสอบแบบฟัซซิงแบบเต็มสแต็กอัตโนมัติ และการตรวจสอบความถูกต้องเชิงรูปนัย SMT XLS รวมองค์ประกอบทางวิศวกรรมหลักที่สุดของเทคโนโลยีคอมไพเลอร์สมัยใหม่เกือบทั้งหมด

ข้อคิดหลักคือ: การพัฒนาฮาร์ดแวร์กำลังพัฒนาไปในทิศทางที่คล่องตัว ในยุคที่ AI และชิปเร่งความเร็วเฉพาะทางกำลังระเบิด การทำให้วิศวกรซอฟต์แวร์ที่เชี่ยวชาญตรรกะธุรกิจสามารถมีส่วนร่วมหรือแม้แต่กำหนดฮาร์ดแวร์ได้อย่างปลอดภัย มีความหมายเชิงล่วงหน้าที่สำคัญ แม้ว่า XLS ยังอยู่ในขั้นตอนการทดลองที่พัฒนาอย่างรวดเร็วในปัจจุบัน แต่ก็ได้ร่างเส้นทางที่เป็นไปได้ของ “ซอฟต์แวร์กำหนดฮาร์ดแวร์” ไว้อย่างชัดเจนแล้ว


⚠️ หมายเหตุ: เนื้อหาได้รับการแปลโดย AI และตรวจสอบโดยมนุษย์ หากมีข้อผิดพลาดโปรดแจ้ง

☕ สนับสนุนค่ากาแฟทีมงาน

หากคุณชอบบทความนี้ สามารถสนับสนุนเราได้ผ่าน PromptPay

PromptPay QR
SCAN TO PAY WITH ANY BANK

本文来自网络搜集,不代表คลื่นสร้างอนาคต立场,如有侵权,联系删除。转载请注明出处:https://www.itsolotime.com/th/archives/27802

Like (0)
Previous 8 hours ago
Next 8 hours ago

相关推荐