iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Software Development

數位 IC 設計起手式系列 第 27

Day 27: Synthesizable Verilog

  • 分享至 

  • xImage
  •  

我們認識了數位電路設計的組合電路、循序電路,也學習了 Verilog 的語法和實際練習撰寫 Verilog 的程式碼。學習他們的最終目標到底是什麼?就是設計出 IC 裡面的電路嘛!

在繼續之前,我必須丟出一顆震撼彈:不是所有的 Verilog 程式碼都可以被合成成硬體電路。合成的英文是 Synthesis ,意思是將程式碼轉換成硬體電路,如果程式碼可以被合成為電路,則我們會稱它為 Synthesizable Code 。

你可能會好奇,不能被合成為電路的程式碼,存在的意義是什麼? Verilog 除了用於設計電路,還包含驗證電路,就是 Testbench 啦!Testbench 相對來說,需要使用的軟體設計思維還是比較高的。

在 Testbench 中,我們會使用到如 #3, initial 等關鍵字,其實他們都不是 Synthesizable 的。可以想看看如果一個電路終其一生只被執行過一次,他的意義在哪裡?因此 initial 是不可以被合成為電路的。那麼延遲呢?#n 的出現是為了「模擬」電路在實際狀況中的延遲,我們沒有理由讓 #n 合成為的電路。

另外,Verilog 中使用迴圈也是很常見的!舉例來說:

always@* begin
    for (integer i=0; i<k; i=i+1) 
        // some code
end

但是迴圈需要特別注意 k 是變數還是常數?如果 k 不為常數,這組程式碼是不能被合成為電路的 (Unsynthesizable) 。可以試著思考看看,電路是一旦做出來之後,就不會再新增或減少的,如果 k 是變數,也許電路在執行的過程中,會要求增減一組加法器電路,怎麼想都不合理對吧!因此如果電路需要被合成, k 必須為常數。


上一篇
Day 26: Compiler Directive
下一篇
Day 28: FPGA & ASIC
系列文
數位 IC 設計起手式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言