蘿蔔實驗室

LoboLab

IC x AI x Code

什麼!台灣國高中生就會寫晶片模擬軟體!?

(2024年1月APCS大學程式設計先修檢測題目:Netlist Simulator)

󠀠

▌晶片模擬軟體是什麼?重要嗎?

模擬是設計晶片時非常關鍵的環節

主要是用軟體來驗證所設計電路的正確性

試想,要是手機晶片出錯、遊戲打到一半當機心情一定很糟吧

因此,模擬軟體是十分重要的!

󠀠

業界常見的晶片電路模擬軟體為:NC-Verilog、VCS、Spice等

個人則可以使用一些開源軟體,如:Verilator、iverilog等

󠀠

󠀠󠀠

▌APCS:大學入學程式加分題

APCS全名為「大學程式設計先修檢測」,由台師大執行、教育部指導

󠀠

近來台灣有越來越多大學校系都採計APCS成績,是國家層級認可的考試

例如:台清交資工系都有APCS組、成大電機系也有APCS組

󠀠

在APCS考得好,可有效對審查委員證明自己的程式能力

󠀠󠀠󠀠

▌APCS 2024/1 實作第三題:Netlist Simulator

這題給定一個數位電路的設計Netlist與輸入數值,希望求出:

1) 電路對應會輸出的結果 (Output results)

2) 算出從輸入到輸出最多會經過幾個邏輯閘 (Number of gates on critical path)

󠀠

這題蘿蔔真的覺得很有趣

寫出來的軟體可以用來執行晶片設計流程中的 Gate-level Simulation

因此我們認為題目的實用性蠻高,出得很好!

󠀠

Zero Judge連結:https://reurl.cc/YVq5p0

也歡迎大家利用空閒時間一起來玩玩看!

󠀠󠀠

▌演算法思路提示

Hint:可以用DFS or BFS or Topological Sort來解

󠀠

簡單說,可以想成要把值從輸入「傳播」到輸出

剛開始某個邏輯閘的輸入可能是沒有值的,此邏輯閘就「不能傳播」輸入值到輸出

當邏輯閘的所有的輸入都有值了,此邏輯閘就「可傳播」輸入值到輸出

󠀠

具體有三步:

1) 將「可傳播」的邏輯閘存到一個Queue裡

2) 每次取出其中一個邏輯閘,算出對應的輸出值 (e.g., 1 AND 0 = 0)

3)把輸出值傳播給下一級邏輯閘的輸入,對應更新最長邏輯路徑長度

󠀠

當這個Queue是空的時候,答案就會找出來了!

󠀠

▌索取免費圖像化詳解

筆者自己也嘗試解過這一題,有通過Online Judge了

但真心覺得國高中就寫的出這題好厲害,給讚!

󠀠

如果對於這題的免費詳解有興趣,或之後也想考APCS的同學家長們

歡迎到以下的Google表單填寫email,領取我們精心準備的圖像化詳解以及對應的程式碼:

https://forms.gle/ZkRPeddT3kDmRHaR9

我們會盡快寄出!(蘿蔔最近較忙,若慢了一些請見諒

▌參考資料

  1. APCS採計大學校系:https://apcs.csie.ntnu.edu.tw/index.php/apcs-introduction/gradeschool/
  2. APCS檢定是什麼:https://reurl.cc/eLybpW
  3. 政大資訊系 Gate-level Simulation:https://www.cs.nccu.edu.tw/~whliao/ds2003/VHDL.htm

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