pretty code

2025年7月5日 星期六

動態改變 Verilog 選項

很多時候,工作就是一連串的取捨。

以 Verilog 來說,`ifdef 是編譯時期決定的,可以用這個來決定 Verilog 的行為。

但如果我們想要增加功能,我們就必須重新 define 新的 macro 並重新編譯才行。

想要動態改變 Verilog 選項,就必須使用 $test$plusargs 或是 $value$plusargs,前者類似 `ifdef,我們想要知道的是某個值是否有定義,後者則是我們想知道某個值是什麼。

下面便是一個簡單的例子。


值得注意的是,使用 `ifef 或是 `$test$plusargs 並沒有什麼準則,端看你的需求是什麼?

動態改變某個選項,意味 simulation 必須一直做判斷求值的動作,我想這多少也會增加 simulation 的時間?

假設不考慮效能的話,動態一定是比 `ifdef 好,至少你可以一眼看出程式在幹嗎!


自己寫的 Verilog 還好搞,像是 vendor 的 Testbench,它的各個 define 散落各地,光要把他們集合起來餵給 iverilog 就是個大工程。

純軟的人真倒楣,走到哪都要看到爛 code,10 幾年前我看高通以及微軟的 AK 已經覺得夠爛了,沒想到現在看到 Synopsys 的 code,我才知道人外有人,天外有天。

一爛還有一爛爛,連文件跟 Testbench 都對不起來是怎樣?

沒有留言: