蘿蔔實驗室

LoboLab

IC x AI x Code

一週評測使用ChatGPT設計數位IC (文末含數位IC專屬Verilog詠唱模板)

▌本文在幹嘛

生成式AI (如ChatGPT、Gemini)可以提高工程師的生產力,國內IC設計大廠聯發科也積極導入生成式AI「達哥DaVinci」來提昇IC設計工程師們的生產力。

按照此趨勢,未來很有機會每個IC設計工程師都會和ChatGPT一起合作開發晶片,早日學會怎麼跟生成式AI合作才能提高工作競爭力。

筆者身為電機系和數位IC設計領域的一份子,在網路上找不到評測ChatGPT在生成HDL (Verilog、VHDL)時會遇到什麼困難,所以我們決定跳下來自己評測。

ChatGPT真的已經搶走IC設計工程師的工作了嗎?該怎麼跟ChatGPT溝通互動?怎麼叫ChatGPT一步到位生出能用的程式碼?這些都是我們認為待解的重要挑戰。

因此,我準備了五個數位IC設計的代表性題目,由簡入難來測試ChatGPT的IC設計實力。

希望幫前輩、同行、同學先踩過一些坑,拋磚引玉,與社群一起增強用ChatGPT合作開發IC時的詠唱實力 (Prompting)。

▌測試項目

我們由簡而難精選五題測試,題目參考自Stanford Advanced VLSI Circuit Design課程,以及清大邏輯設計實驗、IC Lab、DSP IC設計、計算機算數等課程內的作業。

每題都要求ChatGPT要用Verilog寫出電路與對應的testbench,這兩個任務都是身為一個數位IC設計工程師在前端流程一定會做到的事情。

五題分別為:

Q1. 計數器設計與驗證 (Counter)

Q2. 算術邏輯單元的設計與驗證 (8-operand ALU)

Q3. 有線脈衝響應處理器設計與驗證 (FIR Digital Filter Processor)

Q4. 16×16有號數布斯乘法器 (16×16 Signed Booth Multiplier using type-0 adder)

Q5. 2×2脈動陣列設計與驗證 (2×2 Systolic Array)

▌如何評分

評分有4個項目,最低一顆星,最高5顆星,評分項目分別為:

C1. Verilog電路的正確性 (Function Correctness)

C2. Testbench測試的完整度 (Test Coverage)

C3. 語法是否正確 (Syntax Correctness)

C4. 重複問同樣問題是否有一致的答案 (Consistency) (因筆者時間有限,用五次來評價)

▌ChatGPT (GPT-3.5) 評測表現 (2023年12月評測)

Q1. 計數器設計與驗證 (Counter)

電路正確性⭐️⭐️⭐️⭐️⭐️ | 測試完整性⭐️⭐️⭐️ | 語法正確性⭐️⭐️⭐️⭐️⭐️ | 回答一制性⭐️⭐️⭐️⭐️⭐️

Q2. 算術邏輯單元的設計與驗證 (8-operand ALU)

電路正確性⭐️⭐️⭐️⭐️⭐️ | 測試完整性⭐️⭐️⭐️ | 語法正確性⭐️⭐️⭐️⭐️⭐️ | 回答一制性⭐️⭐️⭐️

Q3. 有線脈衝響應處理器設計與驗證 (FIR Digital Filter Processor)

電路正確性⭐️ | 測試完整性⭐️⭐️ | 語法正確性⭐️⭐️ | 回答一制性⭐️

Q4. 16×16有號數布斯乘法器設計與驗證 (16×16 Signed Booth Multiplier using type-0 adder)

電路正確性⭐️ | 測試完整性⭐️⭐️⭐️ | 語法正確性⭐️ | 回答一制性⭐️⭐️

Q5. 2×2脈動陣列設計與驗證 (2×2 Systolic Array)

電路正確性⭐️⭐️⭐️ | 測試完整性⭐️⭐️⭐️ | 語法正確性⭐️⭐️⭐️ | 回答一制性⭐️⭐️

▌IC設計工程師專屬的 Prompt模板

經過這週每天和ChatGPT朝夕相處,我們把踩過的坑都整理成下面的詠唱模板,實測產生Verilog的品質真的好了很多:

以下生成Verilog電路時:

– 要有輸入register和輸出寄存器,要有 clk、低位rst_n訊號 (0的時候reset)

– combination & sequential block 分開寫在同一個 module底下

– 註解簡潔用英文寫

– Integer不準宣告在 for迴圈中,像 for (int i = 0; i < 32; i = i + 1)就是錯誤的寫法

– Integer變數要宣告在always block外面

– 矩陣初始值要一行一行寫,不要寫成一個 list 或 array assignment,要全部寫出來

– 只能用 always block來寫,不准用initial begin

– reg 宣告不能用assign賦值

TASK1: 用Verilog生成一個ALU,要有八個 operand (ADD, SUBTRACT, ADD_1, SUBTRACT_1, COMPLEMENT, AND, OR, XOR)

以下生成testbench時:

– 測試的Coverage要高,至少使用一百種隨機測資測試,能窮舉完的要窮舉

– 並且要在testbench內用Verilog重新驗算,比對電路輸出結果,expected_result暫存器位寬要對應電路設計,每一筆顯示比對是否正確

– 最後要顯示所有測試對幾個、錯幾個

– Integer 要宣告在 initial block 外面

– 要接上待測模組

TASK2: 生成TASK1對應的testbench

但距離幫上工程師大忙仍然有一大段路要走,也歡迎大家試試看,跟我們分享屬於你的數位IC設計詠唱模板。

▌我們是誰

蘿蔔實驗室 – 與你分享晶片設計實用知識

Facebook: LoboLab 蘿蔔實驗室

IG: lobolab.semiconductor

歡迎到我們的IG看詳細實測,真的覺得蠻好玩的!歡迎追蹤!

註:IC為 integrated circuit的縮寫,也就是大眾熟知的電路

蘿蔔謝謝您的閱讀!歡迎聯繫我們:lobolab.service@gmail.com