01. the Linux way to solve problems
這兩天在查一個上禮拜聽同事學習分享時所討論到的問題,為了查這個問題,我需要將 RTL module 分開成個別檔案,才不會用 vim search 時過了頭看到錯的地方XD
之前雖然知道可以在 module 第一行用 V + /endmodule 複製整個 module code,但需要用 :tabe 貼上並儲存下來,故我之前用 vim 時都省略儲存下來的步驟,反正要看的 module 數量也不多,每次重作即可。
不要小看每天這樣重複選取複製的時間,累積下來也很可觀,如果可以,我還是習慣在下班時關掉工作站的所有工作階段,故還是要有個機制快速來產生我要 trace 的檔案。
即使是這樣的需求,用 C 語言寫也是很簡單的,最主要 line array 要宣告夠大,畢竟我已經在 RTL 看到不只超過一行長度的 wire 宣告。
但是既然現在都在 Linux 工作站做事,我們就要用 the linux way 來解決問題!也就是善用組合的力量。
查了一下,用 sed 可以跨行尋找 pattern,指令如下:
sed -n '/module XXX /,/endmodule/p' RTL.v
注意 XXX module name 後面要空一格或是加上 port declaration 的左括號,這要看 RTL coding style,不然假設你有模組 XXX、XXX_1,則全部都會被複製下來。
感覺這個需求還蠻常用的,將整個 script 改寫成變數驅動並放進我的工作站工具箱中。注意,c shell 沒辦法宣告 array,故這裡還是建議使用 bash。
$@ 命令列參數
modules=("aa" "bb" "cc") bash array
${#modules[@]} 取得陣列個數
unset modules[0] 移除陣列第一個元素
2024/08/29 更新
前天話才說完,今天就遇到不同 coding style 的 module declaration。
這個有點棘手,但不是因為現在這個 case 棘手,而是隨著這個衍生而來的 case 棘手。
綜合我目前看過的 coding style 至少有 3 種:
module pattern (xxx, xxx)
module pattern(xxx,xxx)
module pattern
(
如果下 module pattern\s*\(* 並不能解決 pattern 及 pattern_x 在 sed 一起出現的問題,但我現在想不到更好的方式只用一個 regex 就可以解決的。
沒有留言:
張貼留言