pretty code

2024年9月22日 星期日

Google 已經慢慢成為微軟第 2 了嗎?

之前發現我一直在用的 DailyMoney App,有網友在爭求了原作者的同意後,使用原本的程式碼加上自己的修改並創建了另一個稱為 Financier 的軟體,還可以使用 Android Studio 來編譯。

今年第一次購買超過 6500 元的手機,故可以跟別人一樣同步使用最新版本的 Android OS!由於這個緣故,當初差點不能使用我自己編譯的 Daily Money

既然已經知道有網友做好的版本,應該要趁此機會更新一下開發環境才對,雖然看評論也已經不能用在新版 Android OS 了,但至少開發環境版本較新,理論上應該不難解決才對?沒想到下載了最新版的 AS 後,一堆 build error,沒有一個可以有效解決。

因此想試試之前開發的 KoboPageTurner 專案裡面的 Android App,看看是不是也會有編譯問題?當初開發的日期是 2020/08/15,AS 應該還不算太舊吧?

沒想到編譯時一樣會有一堆 error,Google 你真的太扯了!一個開發環境在更新時居然一點向後相容性都沒有?

雖然我不是專門寫 App 的,但無法在半個小時內收斂問題我還是覺得無法接受?

2024年9月17日 星期二

四天的努力終於有了點成果

從上星期三開始,使用一套之前沒用過的 EDA Tool 來驗證以前部門弟兄的 design,如果只是要讓他跑起來不是什麼難事,拿先前其他部門的設定修改一下即可。

但我的問題是要修掉 EDA 報出 Nonequivalent 的地方,感覺 EDA 好像告訴了你什麼,但是好像也沒個屁用,想要比照文件儲存 checkpoint 方便之後 debug 不用重跑,但文件就是沒講到如何在載入 checkpoint 後,重回 GUI 的方法,有稍微在 Command Reference 那份文件瀏覽一下指令,但那個貌似進入 GUI 的指令(open gui)居然是在已進入 GUI mode 的情況下使用?

今天早上終於在循序閱讀文件的別地方看到進入 GUI mode 的指令(set gui on),也看到 EDA Status Code 的地方,終於知道 make Error 24 是如何來的,原來是 status flag bit3 和 bit4 為 1 的緣故(16 + 8 = 24)。

快中午時,試著詢問部門非常有經驗很厲害的一位資深同事,嚴格來說應該是我的直屬主管,最近組織架構多了這層級後,我以後有人罩了XD

雖然前輩也沒用過這套軟體,但在跟他聊了快 10 分鐘的過程中,還是學到了不少東西。

下午不知道為什麼突然心血來潮去看之前 DC 的 log,確定了這 4 個暫存器確實在 DC 合成的過程中被優化,也用我之前寫的 split_rtl 小工具從 netlist 中複製出這 4 個暫存器的 module code,也確定確實被優化了。

但不知為什麼這套 EDA 卻只報出其中一個 2_2 register 無法 mapping?難怪網路上有看到某人提到,如果要用這套 Formality Tool,最好 Synthesis Tool 也用同一家的比較好 debug 問題,畢竟同一家的工具彼此間資訊比較容易互通有無。

最後又多加了第 5 個暫存器的 Constraint 後,終於解決 Nonequivalent 的問題,剩下的就是 Unmapped 裡面的 Extra 和 Unreachable 到底需不需要解決?我個人稍微閱讀文件的結論是不用。

對一個新手來說,這樣還算可以吧?放假回去後要來整理這幾天資料寫文件了。

2024/09/21 更新

在寫文件的過程中才發現,EDA Tool 只有報一個 register 是因為被 group 了,但當初以為統計表上的一個就是一個,故沒有特別去看單獨報表。

這告訴我們一件事,別人的專案也許用到的指令並不齊全,但只要他們有放的指令,一定有它們的目的,不管怎樣還是要看一眼才對。

2024/09/24 更新

這篇文章應該是我看過介紹 LEC 最好的簡介文章了。

為了不浪費這三個月買的授權,這兩天嘗試使用 Hier Comparision,但還是覺得有點怪怪的,感覺結果不符預期,重點是還跑得比 Flat Comparison 慢。

不管如何,還是更新了之前寫的文章,目前頁數已經來到 3 字頭XD

2024/09/26 更新

把 Hier Comparision 章節又看了一遍,把知道的參數都試了一輪,還是有 Non-equivalent 的問題。

再一次看了文章後,覺得最扯的是有一個 Add noblack box 指令,要下這個指令的前提是你必須已經知道要比較的子模組裡面的個別模組有因為優化被提出到個別模組外,也因為如此,兩個模組比較一定會不同,故必須使用這個指令讓個別模組不要成為 blackbox,這樣子模組在比較時,下面的所有模組會被攤平一起視為整體來比較,這樣才能得到一樣的答案。


問題是如果我對整個 design 都了然於心,我還需要 EDA 工具做啥?

感覺又是一個雞生蛋蛋生雞的問題?

2024/09/27 更新

看起來如果 DC 有下 -no_boundary_optimation 參數,應該就不會有上述情況發生?

2024年9月15日 星期日

我不喜歡輸的感覺

Web App 最讓人詬病的就是動態產生網頁內容,尤其是用 Javascript 動態產生的,某種程度上都會大大增加 parsing 的困擾。

有時候只想快速得到一個結果,我還得先用一個類瀏覽器的函式庫取得內容,這不是我喜歡的解決問題方式。

以前曾在網路上看到某位號稱新店寶橋路正規表示法第一的網友,我決定來效法他的作法。

先點選小老婆 Top 50 撥放清單任一首歌,接著使用 Chrome 檢查功能進到 Elements 頁面,在 html tag 處按下滑鼠右鍵 -> Copy -> Copy element,將複製內容另存檔案為 Top_50.txt。


然後就沒有然後了。  

grep -E 'h3 .*aria-label' Top_50.txt | sed -En 's/^\s*<h3.*aria-label="(.* )上傳者.*">/\1/p'


01.郭静 - 陨落(电影《大红包》告白推广曲) (动态歌词) 
02.郭靜 - 夢在遠方 
03.今天起 
04.【純享版】尤長靖/郭靜《氧氣》 治癒系嗓音隔空吟唱太好聽!《天賜的聲音》ep7 純享版no noice /浙江衛視官方hd/ 
05.郭靜 claire kuo - 在樹上唱歌 (官方版mv) 
06.郭靜 claire kuo - 軟綿綿 (官方版mv) 
07.郭靜 - 像我這樣 
08.郭靜 claire kuo - 還有什麼好在意 whatever (官方版mv) 
09.郭靜 claire kuo - 回憶的閣樓 memories of us (官方版mv) 
10.郭靜 claire kuo - 該忘的日子 i am moving on (官方歌詞版) - 韓劇《雲畫的月光》片尾曲 
11.郭靜 claire kuo【深呼吸 take a breath】official lyric video 
12.郭靜 claire kuo - 想個不停 (官方版mv) 
13.郭靜 claire kuo - 不想有遺憾 don’t wanna miss you (官方歌詞版) - 衛視中文台戲劇「長不大的爸爸」插曲 
14.相思弦 
15.逆行的減法 
16.触碰你 
17.在曾有你的地方 
18.郭靜《只為遇見你》【只為遇見你 nice to meet you ost電視劇片頭曲】官方動態歌詞mv (無損高音質) 
19.像风 
20.單身美好 
21.我的小森林 
22.郭靜 claire kuo - 簡單 (官方版mv) 
23.愛情模樣 
24.沙漏 (網劇ᐸ時光教會我愛你ᐳ插曲) 
25.類似快樂的信 (電視劇《戀戀小酒窩》片尾曲) 
26.又是艷陽天 
27.郭靜 claire kuo【消耗寂寞 leave me hanging】official lyric video 
28.悸動 
29.亲爱的你 郭静 [动态歌词/lyrics] 
30.我想要有人為我傷心 
31.算不算 
32.『溫柔女聲』郭靜(guo jing)-拜你所傷(bai ni shuo ci)【我就祝福你,幸福快樂。】#流行歌曲 #動態歌詞 #lyrics #高音質 #好聽 
33.郭靜《一個人勇敢》【我的時代, 你的時代 go go squid2 dt / appledog's time ost電視劇插曲】官方動態歌詞mv (無損高音質) 
34.郭靜 claire kuo - 何日君再來(官方歌詞版)- 電視劇《回家》插曲 
35.郭靜 claire kuo - 小聲音 (官方版mv) 
36.郭靜claire kuo《我非獨自生活》官方版mv 
37.郭靜 claire kuo - 可惜 (官方歌詞版) - 中天電視劇「何以笙蕭默 」片頭曲、 民視偶像劇「星座愛情」獅子女片尾曲 
38.郭靜 claire kuo - 我不是你的那首情歌 not meant to be together (官方版mv) 
39.郭靜 claire kuo - 拍檔 partners (官方版mv) - 電視劇《後菜鳥的燦爛時代》片頭曲 
40.郭靜 claire kuo - 別去問他好嗎 don't let him know (官方版mv) 
41.郭靜 claire kuo - 忘了如何遺忘 how to forget (官方版mv) - 電視劇《聶小倩》片尾曲 
42.郭靜 claire kuo - 每一天都不同 (官方版mv) 
43.郭靜 claire kuo - 明白 (官方版mv) 
44.他爱的梦 
45.《陪你逐風飛翔 to fly with you》郭靜 claire kuo - 越走越遠 farther and farther🥀(英繁中文歌詞 eng lyrics)🤍陪你逐風飛翔 情感插曲 ost 
46.郭靜  claire《慶幸遇見你》【我可能遇到了救星 hi venus ost 電視劇插曲】official lyric video 
47.(mv) 郭靜 (guo jing) - 月亮會記得(yue liang hui ji de) (the moon will remember) ost. 小女霓裳 aka ni chang 
48.最精彩的豔遇 
49.郭靜 claire kuo《暖橘》【我的助理不簡單 never too late ost 電視劇插曲】official lyric video 
50.DuDu好 

最後在聽到第 26 首歌《又是艷陽天》時,搞定此事並寫完更新 Blog

2024/09/15 洗完澡更新

洗澡時才想到忘記補上今天現學現賣的技巧,使用 VIM 在每列前面補上 index。

雖然我也可以都用 VIM 搞定,但我現在只能想到 .recording 2 種方法,操作起來沒有那麼漂亮,故我還是拆成三動來記錄。

01. 先把上面抓到的歌名另存一個檔案,比如 Final_50.txt。 
02. Sed -Ei 's/(.*)/1. \1/g' Final_50.txt
03. 從第 2 列開始,使用區塊模式選取 1 這一個 column,可以用 ctrl + v + G 一口氣選取,然後按下 g + ctrl + a,便會幫每一列的數字自動加 1。
04. Sed -Ei 's/^([0-9]+{1,1}\..*)/0\1/g' Final_50.txt,這裡是幫 1 ~ 9 前面補上 0。

現在就剩下如何都用 VIM 搞定,我猜應該是朝自動向下填入方向去找尋對應指令。

2024/09/16 更新

殘念,這個增加數字的技巧是從 VIM 7.4.754 版本才開始,我們家的工作站版本居然比這還舊?不支援 true color 也就算了,什麼都沒有是怎樣!

另外,對於我這種 parsing 需求來說,也許使用油猴也是個不錯的選擇,改天再來嘗試。

2024/09/21 更新

其實小老婆好聽的歌還可以再追加幾首,有 50 幾首合我口味的歌,真是不簡單呀。

昨天從下午 1:30 開始就邊聽 Top 50 邊 review 這幾天寫的文件,一直到下午 4:30 才聽到《在曾有你的地方》,3 個小時也還聽不到 40 首,不知道為什麼開車時卻覺得很快就輪回一輪了?要不是顧及老婆感受,我應該可以一直聽這歌單不會膩吧XD

另外一個撥放清單的歌混合了我從前到現在聽過覺得好聽的歌,各國語言都有,到目前也才 157 首,一樣可以用我上面 regex 的技巧取出歌名,但在複製 HTML 時,要記得自己用滑鼠拉到最後,不然預設好像只顯示 100 首,另外最後面可能會有幾首是 YouTube 推薦的,但因為是同 CSS 設定,故目前無法有效過濾,也許得用 VIM 手動砍掉推薦影片後面的 HTML 吧。

VIM 學習最後一哩路

除了工作站連線軟體不論,即使不連工作站,VIM 也算是我每天必開的軟體之一,雖然說辦公室也有安裝一套很久之前購買的 UltraEdit 13,但除了要跑 Verilog 外,我已經習慣不用 UltraEdit 的日子很久了。

當需要大量修改文字,可能會用 recording,比較不同 log 差異使用 vimdiff,另外簡易搜尋取代也算是每天必用功能之一。

感覺好像不是一般使用者了,但離鑽進 VIM 這顆蘋果的外皮也還差得很遠!

要說現在會的 VIM 技巧不夠用嗎?好像也不是!即使我的操作不是 VIM 打最少字的最佳範例,但要應付目前工作所需好像也還游刃有餘?

除了本來就有購買的《精通 vi 與 Vim 》第八版紙本書外,剛才又選了兩本英文電子書加入我的工具箱中,不到 300 的價錢真的是很超值,更別提這兩本書也是 DRM-Free。

有很多想看的書未看,但被生活與工作占領大半人生的現代人真的很悲哀,連想好好看本自己想看的書也沒時間。

明年的我還會有心情參加小老婆演唱會嗎?我很懷疑…

山不轉路轉

早上試著找出解決 YouTube Music 加入一個以上撥放清單的歌到待撥清單,按下隨機撥放卻只剩 25 首歌的問題。

想要試圖找出工程師的邏輯,將一些動作排列組合後情況依然無解,過程中還不小心將小老婆的歌單移除了幾首,害我想盡辦法找出來補回,本想將網頁存檔寫個 parser 找到這 50 首歌歌名備份,但這種 Web App 類的 code 都很髒,實在不想花時間做這種鳥事。

後來決定將救回來的歌單再備份一份取不同的名字,也順便將我開車想聽的不同播放清單音樂又另外儲存成一個播放清單,真是有你的 Google,數位垃圾就是這樣造成的。

除此之外,也把存的一些數學、3D 影像、數位邏輯等撥放清單刪一刪,順便把我喜歡的小老婆表情包變公開清單,就是喜歡小老婆也沒什麼好害羞的XD

目前暫時先用前導數字調整順序,改天再來好好安排規則。

YouTube Music、微軟新注音學習、無窮盡的網頁廣告,真是讓我越來越頭痛,這樣下去,只會讓人越來越不想用手機、用電腦以及上網。

3D 結構光撥放清單可刪,但電腦儲存的小老婆結構光檔案我可捨不得刪呀XD

想到去年的中秋、國慶連假還在家自行架設結構光環境學習,今年可真是人事已非…


2024/09/15 晚上更新

不就是正規表示法嗎?一片蛋糕罷了。

2024/10/02 更新

一樣的歌放兩個撥放清單真的很愚蠢!要新增可以一次勾選兩個清單新增,但要刪除只能兩邊清單個別點進去刪除。

不過有一個簡單的方法,點選不同撥放清單都有的歌,進去該首歌後,選擇儲存把原本勾選的按掉即可。

2024/11/09 更新

一切都是我想太多,單一個撥放清單的歌隨機還是會有問題,我到現在才明白XD

2024年9月14日 星期六

一些 sed 指令備忘

sed 還是有一些細微處不太明白,但現階段這樣就夠我用了,還是老樣子,不要太早最佳化!

什麼時候該鑽研,什麼時候又該無視,坦白說很難拿捏?

我想當覺得用起來不太順時,應該就是需要改進的時候了。

sed -i 取代檔案用
sed -e 直接對 stdin 

不管哪個都可以用一般取代跟 \1。

有多少愛可以重來

這星期中餐吃了好多次早餐店XD

一來是因為不用準備零錢,二來是因為天氣炎熱,實在不想搞到全身都是汗臭味,我已經從中午爬 10 層樓梯加走路,變成只有走路,到現在連路都不走了!

這星期某天吃午餐時,聽到一首還不錯聽的歌,使用聽聲搜尋後,得到的結果是趙乃吉的《有多少愛可以重來》,當時也未曾多想,便順勢的加入到 YouTube 的歌單中。

早上在聽該歌單的最後幾首時,剛好又聽到這首歌,不過老婆上完廁所後就把我正在聽的歌中斷,改去看我出錢訂閱的串流平台了?

剛好筆電是開機的狀態,因為當時還未記住歌名也未記住歌手,隨手用印象最深刻的歌詞『有多少愛可以重來』Google 了一下,才發現是迪克牛仔唱的,原本以為這就是原唱了,隨著無聊看了一下底下留言,才發現居然還有原主唱,最一開始居然是民國 83 年黃仲崑唱的,原來這是一首這麼老的歌呀,真是不查不知道。

只可惜人的第一印象很重要,我到現在還是覺得 Google 推薦給我的第三手歌手唱得比較好聽XD

連一首歌的原唱都這麼曲折離奇,如果不是我老婆強制中斷我正在聽的歌,如果我沒接著搜尋,如果看到迪克牛仔的影片後沒有繼續往下看留言,這三個條件只要一個不滿足,我到現在都還會以為原唱者是女生?

人還是不要太相信別人餵的資訊,凡事還是要自己思考後下判斷,不論判斷是對是錯,這都是一個避免有心人士操弄的最佳學習機會。

2024 week 37 新玩意

01. 不要太相信 EDA 文件

我是不知道 EDA 授權金額多少錢,但 EDA 文件普遍寫得不好倒是真的,看起來寫了很多,但對解決問題沒啥幫助,不然就是文件寫的跟指令實際行為有時候會對不起來。

不過前提是文件要先從頭到尾認真看一遍,最好要看 2 ~ 3 遍,如果還是覺得哪邊怪,那恭喜你,你不孤單XD

02. 除非特例,少用 GUI mode,不然容易當機

我們跑的設計應該很小,但我這星期就遇到當機 2 ~ 3 次了,原本都以為是該指令要跑很久,後來越想越不對勁,去 EDA license 頁面確認,果然該 license 已經沒有被占用,資源是已釋放的狀態。

我猜,EDA 應該有另一個 thread 定期回報授權主機,避免當機占用 license,畢竟授權不便宜。

因此,不管是在哪個模式下,如果覺得 EDA 好像當機了,給它個面子等個 30 分鐘左右,如果從授權主機看不到你的使用授權,就可以放心地使用 kill 砍掉該 process。

印象中,top 指令看到都還是 run,而不是 zombie?

03. EDA 相關工作要建立 SOP

EDA 動不動就要跑很久,錯了再來一次的時間成本很寶貴。

要做什麼之前最好先想好,檢查再檢查,最好有 check list 可以檢查。

VIM、Shell Script、grep 各種技巧要不斷精進,這都是可以提高工作效率的投資。

要建立自己的工作模式,比如開幾個工作視窗,要不要用分頁,視窗要擺在哪邊,養成下意識的動作,做起事來會比較流暢。

2024年9月13日 星期五

十三號星期五

這個星期都在跟某個 EDA 奮戰,明明照著文件下了幾個 debug command,結果都不符預期!連想要透過 check point 存檔進入 GUI mode 也無法隨心所欲。

還好我沒聽文件在唬爛,使用快失效 command 的 session 指令存檔進入 GUI mode 以避免重複執行的等待時間。

由於之前還不知道有這兩個 command,所以這星期至少打了 10 幾次 make 有,打久了對 make 每次都有 Error 也不免感到困惑?

原本以為是不是因為 makefile 是從別人的專案來的,故裡面有地方沒有用到 tab 字元?後來拿掉沒用的 target 後情況依舊,我才恍然大悟跟 makefile 本身無關。

網路上查了一下,那是 make 在執行指令時指令本身回傳的,也就是 EDA tool 回傳的。

剛寫了個測試程式試了一下,果然是這樣沒錯,現在只差不清楚為什麼 $? 永遠回傳 2 就是了?

以我的例子來說,make test 執行我的 test_make 時,因為不是回傳 0,故其實 make 也不會往下執行了,因此為了避免 make 不如預期浪費時間,畢竟 EDA 隨便都要跑一個小時以上,我的建議是在 makefile 要執行的指令前一律加上 -@,另外在 makefile 裡面要印出 $?,記得要變成 $$?

- ignore error
@ not display command


2024/09/14 更新

早上不死心繼續 Google 了一下,看到一篇之前就看過的文章,先前可能被 EDA 搞得很累,沒有很認真看那篇文章,但至少是從那篇文章知道 Error Code 是從指令來的。

原來 $? 之所以永遠回傳 2,那是因為對 GNU make 來說,這就表示 make 執行其他指令時有問題,故 make 遇到有錯一律會回傳 2

所以在執行 Shell Script 時,我們只需要關心 return code  是不是 0 就好了。

當然如果你的 Makefile 是在編譯執行檔,Error Code 還是多少有點用處,不過除錯這件事嗎,只能 case by case,沒有一個放諸四海皆準的道理。

另外,昨天建議加上 -@,睡過覺起來覺得似乎也不太對,約耳說,要讓錯出現在錯的地方,忽略它繼續往下走,其實也沒什麼幫助就是。

2024年9月8日 星期日

經營 Github 專案還真需要愛

當初開發了幾個 Kobo 專案,其中 KoboPageturner 已經不太用了,自從去年參考 KOReader issue 討論串後,已經可以直接用我的 Logitecn R500 在 KOReader 翻頁,再加上我的自製硬體翻頁器因為拙劣的焊接技術已經燒掉了,故這個專案可能只剩沒帶翻頁器時,臨時可以用手機充當翻頁器用。

至於其他兩個專案,Clare 2E or Libra 2 一定要上我的 patch 不然不能用藍牙,KoboFileServer 則是拿來 Wi-Fi 傳檔用,故還算是我還蠻常用的兩個專案。

今早收到 KoboFileServer 的 css patch,照該網友說法,似乎在小螢幕上會有問題?

由於我也不是專門寫網頁的人,故我也不太懂我原來的 css 哪邊會有問題,我猜應該是用 pixel 指定字型大小?

我這已經是夠冷門的專案了,到現在也才只有 3 個人發 patch,但想到還要回覆就有點懶XD

要回覆前,我得先自己測試,如果需要編譯我還得準備環境,畢竟這已經是兩年多前的專案了,我的電腦還有沒有環境我都不確定了?

結論就是,要經營 Github 專案還真需要愛呀,還好我不靠這個吃飯,有沒有 stars 我也不會很在意?

左邊是我原本的,右邊是網友改的,本想用抓圖方式,還要搞定無痕模式抓圖的限制,不然就是要裝另一套瀏覽器,想想就懶,直接開筆電相機抓圖就好XD


2024/09/12 更新

前天該網友有回信,原來所謂的小螢幕超出是指上下會出現 scroller bar,想了一下,既然有人有需求,乾脆加上 button 切換,馬上 Google 一番,搞定收工。

雖然我自己是比較喜歡原本的,但該網友有讓表格的字離邊框遠點,確實是比較好看,但預設畫面限縮在正中間導致字體變小,個人覺得是對老人比較不友善XD

2024年9月7日 星期六

消失的記憶

一直覺得有哪件事忘了記錄,剛剛終於想起來了。

我手上 Kobo Elipsa 裝的 Plato 版本似乎有問題,只要沒回到 Kobo 本身 OS,即使 Plato 有進入休眠,但隔天電就會被耗光,不知道是不是跟舊版有關就是了?

又或許進入 Plato 後,預設會開啟 Wi-Fi?導致電被耗光?

我也懶得深入追究了,目前先記得有這回事就好!

又是 Verilog

前幾天為了快速讓 DC 可以往後跑下去驗證環境是否正常,還沒等到樓上同事的回覆,我就已經先改好了,在我看了大神的幾篇 race conditon 文章後,個人覺得從 = 改成 <= 的結果是一樣的,畢竟在那個 T 中,外面取 signal 的其他 module,如果本身判斷處也是 sequential logic,勢必要在下一個 T 才能收到這個變化,不會因為這裡寫成 blocking assignment 就會有所改變,至少我個人目前的理解是這樣。

早上起床後有寫了支測試程式試了一下,看起來跟我想的一樣,但因為早上急著出門,一直到剛剛才有時間整理一下,馬上現學現賣早上學會的分割視窗功能,雖然這邊有點為用而用,畢竟 VIM 本身就可以分割視窗,但這裡真的是分割視窗,視窗分別各開一個 VIM。


畢竟我手上沒有 code,m1 module 是我憑大意寫出來的,但應該有還原出原模組的用意?

m1 out[1:0] 使用 Blocking assignment
m2 out[1:0] 使用 Non-blocking assignment

test1 使用 sequential logic 判斷 m1 out[1:0] 值用
test2 使用 sequential logic 判斷 m2 out[1:0] 值用

test3 使用 combinational logic 判斷 m1 out[1:0] 值用
test4 使用 combinational logic 判斷 m2 out[1:0] 值用


因為我 0ns 沒有拿來幹嗎,故 testbench 在這個時間點都用 blocking assignment。

為了避免 5ns 使用 blocking assignment 跟 clk assignment 產生 race condtion,我將 d 跟 flag 設值提早到 4ns 處,因為我 m1 和 m2 就是要在 5ns 開始判斷訊號做事,不要拖到下一個 posedge clok。  

10ns 雖然也是使用 Non-blocking assignment,但我沒有 negedge clk 的 case,故這裡即使用 blocking assignment 也不怕 race condtion。


從 waveform 可以看出,5ns 時,不管是 test1 或是 test2 在 testbench 那端,因為是用 sequential logic 去接 data 訊號,故輸出是 x。

相反的 test3 和 test4 因為是用 combinational logic 去接 data 訊號,故輸出是 1。

因此,截至目前為止,我對 Verilog 的理解是:

01. 在 testbench 那端使用 blocking assignment 設值,大部分情況在另一個 module 的循序邏輯都可以看到該訊號變化,但如果 testbench 那端的 data 設值是跟 clk 在同一個時間點,有可能 clk 會先改變(看各家 simulation 實作,Spec 這裡順序是不確定的,看誰先從 active region 被取出),這意味著在別的 module 的循序邏輯會看不到該訊號變化。

02. testbench non-blocking assignment 沒有異議,一定是別的 module 循序邏輯的下一個 clock 才能捕捉到。

03. 如果 module 組合邏輯的輸出,跟本身模組裡面的循序邏輯設值有關,即使是透過組合邏輯輸出,testbench 或是其他使用的 module 那端,也是要在下一個 clk 才會反映出來,除非使用端也是用組合邏輯接,但只要這個訊號有被其他循序邏輯用到,就是要等下一個 clk。

我的理解應該是對的吧?

眼球果真是兵家必爭之地

現代人娛樂太多但擁有的時間又太少,如何在有限的時間內盡量吸引民眾注意力,並將流量轉成紅利,我想應該是所有網紅、媒體業甚至是廣告業者等的必做功課吧?

雖然我很喜歡可愛的小老婆,但偶爾看到豆花妹的影片還是會稍微點一下,剛點的第一首歌曲是《迷人的危險》,副歌還不錯,但主歌就不是我會喜歡的旋律,真是可惜了這一首歌…

接下來又隨意點了 Youtube 下面推薦的另外一首歌《煙火》,這次就是我的菜,趕緊更新到我的歌單之中。

雖然推薦清單還有豆花妹其他的歌,但我已經懶得點了,即使對象是憑良心說比小老婆漂亮的豆花妹!因為一來我不喜歡受演算法主導,二來我是老人體力有限,沒有天大的吸引力我連點一下遙控器都懶,就像平常吹頭髮滑 Google Play Movie 或 Netflix 一樣,有時候從頭滑到尾,即使會考慮租借或是按下加入待看清單,但沒有一部電影真的會讓我願意花費體力以及時間去點下購買或撥放,我想我是真的老了,廉頗老矣XD

講到這裡,又想罵 Youtube Music 兩句,更新了一些歌曲,但一直沒機會將所有歌唱撥放清單好好地加入待撥歌單中並隨機撥放,老婆我也是不願意只聽小老婆的歌呀,都是 Google 害我的?

假設現在待撥歌單有 200 首歌,一點下隨機撥放按鈕後,可能只會剩下 20 首歌,這不知道是哪門子的隨機撥放,重點是看 Google Play 評論這個問題已經很久了,Google 真的已經不是我 20 幾年前認識的 Google 了,連我用左腳都能改的 bug 居然要拖那麼久?

逼得我只好將小老婆的歌單再取其精華另建新歌單(只是沒事找事做,順便讓小老婆好聽的歌在更好聽,同一個撥放清單的按下隨機是正常的,只有加了一個以上才有問題),原本只想要湊 23 首,畢竟劍聖最後也只有使出劍二十三,沒想到越加越多加到 Top 50,這樣也好,取其精華的好處就是每首歌聽了都開心XD

歌手除了唱歌好聽以及個人魅力有沒有觀眾緣外,歌曲好不好聽也是很重要滴,這樣算起來小老婆還算幸運,至少我個人覺得好聽的歌還真不少就是XD

唉,除了工作及家人外,要我願意花費時間的事情真的是不多了…

WSL 分割視窗

上一次頻繁使用 WSL 是為了搞定 Kobo Libra2 藍牙問題

今年換了新部門,工作時大幅使用 Linux 工作站,雖然我 20 幾年前就把 Linux 當個人電腦用,但也只限於上網,BBS,MSN 以及幫媽媽燒錄 VCD 給同事?

最近終於比較不用一直看文件,故也要趕快找時間熟悉 C Shell or Tcl 變專家,不然一有需求,為了不想浪費晚上時間的運用,勢必要趕在下班前把環境或 script 準備好,忙中容易出錯不說,也容易耽誤了下班時間。

WSL 就是一個很方便的東東,讓我不需要多重開機就可以使用 Linux,不過 spfdisk 我也 10 幾年沒用過就是了!

有時候想把心得抓圖放到 Blog,愚蠢的我居然是開兩個 WSL 並排來抓圖,早上終於想到要 Google 了XD

其實這很合理,一開始沒必要最佳化,但當重複事件不斷發生,就要開始優化工作流程了,畢竟我們可是聰明的工程師,數十年如一日不是吾輩該有的工作態度!

Alt + Shift + plus 開啟右邊視窗
Alt + Shift + minus 開啟下邊視窗

Power Shell 也適用

帥呀老皮

2024年9月6日 星期五

Tcl 變數邏輯

繼昨天了解 env var 如何判斷後,今天拿了之前買的一本 Tcl 紙本書去辦公室,放在辦公室應該比較有機會翻閱?

我在工作站建了兩支檔案,test.csh 以及 test.tcl,把練習過的語法寫在裡面,以後要找也方便。

不過,可能是看得還不夠多,到現在還是不太能抓到 Tcl 變數在不同 command 下,到底何時要加 $?


就拿常用的 for loop 來說,incr i 就不需要加 $,但是 llength 和 lindex 後面的 list 變數就要加 $,似乎不能單純看變數是否要改變來決定是否要加 $,又或者是 list 有它自己的規則?

2024/09/07 更新

昨天晚上想睡了,回頭看好像自打嘴巴,感覺以這裡來說,因為 incr 有改變值,所以才不加 $,好像還蠻合理,但 info exists command 確實是不用加 $,我印象中紙本書前幾頁也是有不用加 $ 的 command?

2024年9月5日 星期四

認真過每一天

下班前一個百思不解的問題,沒想到在洗澡時就讓我無意間想出來了?

前幾天在中央集權的框架中加入了一個地方自治的機制,雖然改動的不多,但我還真的蠻佩服我自己,當初只是為了不要大改別人家的專案才這樣設計,沒想到居然還有保留彈性的副作用,差點都以為自己是天才了,誰說一定要善用設計模式才是高手,只要認真過每一天,每天勤練感謝的正拳,總有一天,我們也能成為獵人協會會長XD

這個問題就是,雖然加入了地方自治的機制,但因為 DC license 有限,我也沒時間測試原本框架的功能是否正常,早上跑完自己想知道的頻率數據後,下午想說就來跑看看原始流程吧,沒想到還是出事了!

Tcl 變數其實跟 C 語言很像,使用前要先宣告。

前天為了兩者兼容,加了一段 if else 語法,下面是該語法示意:

if {"$::env(variable)" == "1") {
    set file_name "file_name_${varable}.log"
} else {
    set file_name "file_name.log"
}

殊不知當 variable 不存在時,此段語法會報錯,但不會影響 DC 繼續往下跑下去。

只要工作不會中斷,一切都好辦,將 else 往上提變成預設值,因為地方自治一定會有該變數,故不會有問題,而當跑中央集權框架時,因為有著預設值的關係,故變數不存在報錯也無妨。

雖然無妨,但那 Error 的字眼就掛在 DC log 中也是很礙眼,故下班前有稍微找一下如何檢查 Tcl 變數,但一直不懂為什麼要拿掉 $ 符號?

原來 info exists variable 的用法,variable 本來就不用加上 $,既然我們要檢查的是 env,當然就要從 $::env(variable) 變成 ::env(variable) 才行。

在曾有你的地方

小老婆歌迷也快滿兩年了,到現在還是覺得怎麼這麼可愛XD

一直以為我比較喜歡的是《夢在遠方》,但每當在車上聽到《在曾有你的地方》時,我都會跟老婆說我戀愛了!

不得不說,歌詞寫的也很棒,不需要看歌詞都知道在唱什麼,跟另外一首《七夕生蛋》不一樣?


不知不覺,距離人生第一次聽小老婆演唱會也過了一年有了,時間過得真快呀!

2024 week 36 新玩意

01. 跳板工作站顯目提醒

前幾天自己耍笨,以為工作站沒有安裝相關軟體,又麻煩老闆重傳一次檔案XD

但這樣下去不行,下次搞不好又會忘記跌股?年紀大了,不能依賴自己的記憶。

原本想要加一個 dispatcher,就是 shell 收到指令,都要先攔截進到這個 dispatcher,就可以趁機檢查工作站名稱並提醒自己,但不知道有沒有這種東西?

還好昨天突然想到可以用 prompt,就是那個 shell 提示。

Bash 要設定 $PS1,C Shell 則是要設定 $prompt,兩者顏色語法好像也不一樣?


02. DC 獨立男人

DC 可能因為一直改版,有些指令參數跟以前不一樣,一般都是進到 dc_shell,再用 man 指令查詢。不過,部門只有一套授權,所以當在 log 發現 Error 時,只能等到 DC 跑完才能查XD

前天因為沒什麼睡,昨天下午在完成老闆交代的任務後,就不勉強自己繼續看 Spec,而是上網查詢一下 csh 相關知識,終於讓我無意間看到好東東

alias dcman "man -M $SYNOPSYS/doc/syn/man"

之後就可以直接打 dcman create_clock 查詢了。

03. DC check tcl 語法

也是從同一個網站看來,前天加入自動化 build 不同參數 DC 時,很多錯誤都要等到執行到那邊才會知道,這也是將流程拆分成不同檔案的缺點,無法一目了然的看到並發現錯誤。我們可以用 DC 自帶的 tool 來檢查,只是不知道能不能從進入點 tcl 一直檢查到所有 tcl 檔案?早上進辦公室後在確認一下。

dcprocheck xxx.tcl

2024年9月4日 星期三

它抓得住我

我算是用 Blog 記錄一些瑣事的人,沒有它我都不會寫程式了,即使到今天,我寫任何程式沒有 Google 我都記不住函數的參數以及順序有哪些?

正所謂凡走過必留下痕跡,吾生平所為未嘗有不可對人言者XD

當然沒事還是不要去看謎片,看完真的空虛呀XD

儘管如此,當初居然未曾想到要替 Blog 搜尋留下統計資料?

沒關係,凡事都不嫌晚,只要開始就好!


老樣子,還是沒變,兵器榜排行第一還是大台北行政區圖?

第二名是很久以前,自己玩 Amazon VM 洗出來的XD

其他文章都是電子書相關的。

值得注意的是,Redfish 居然可以排進前十名,難道是我當初看走眼了嗎?這個東東已經要成為伺服器管理任務中的 Windows 嗎?

2024/09/24 更新

只有數字不會騙人,Redfish 根本沒有成為當紅炸子雞,一切只是我想太多!

2024年9月3日 星期二

天下大勢,分久必合,合久必分

之前將某 VLSI Synthesis 專案架構加到某個 Open Source 的框架當中,當時心裡就想,這樣其實會失去彈性,我個人是比較支持原本那樣的架構,不要走中央集權的模式。

果不其然,下午有個需求想知道某專案的上限在哪?這樣的需求還是要透過自動化處理比較 Smart,還好之前是用最低限度修改的方式將專案加入到框架當中,稍微想了一下,複製了幾個檔案,為了不要大改之前的東西並重複利用 config.mk 原本的內容,在某專案根目錄又加回了 Makefile,方便我在根目錄中觸發自動化流程。

此次修改最麻煩的是 C Shell 一些語法撰寫,我想一般人應該都比較熟悉 Bash,在不斷的 Google 下,終於順利將自動化流程跑起來,但也花了我一個半小時XD

本次快速重點

01. 不管是 Tcl or C Shell 變數都可以用 {} 包住,避免串接時失敗。
02. @ 是 C Shell 用來執行數學運算。
03. bc 是用來處理浮點數並格式化。


小專案單次合成雖然很快,但也要跑將近一個小時,本想晚上回到家吃完飯再用 VPN 連回公司確認一下是否有照我的想法一個接一個的自動化跑下去,無奈公司電腦網路在休眠時常常會無端斷線,只好明天再來看看結果如何?

經過這次事件,明白到自己還是缺少 C Shell 以及 Tcl 相關書籍,趕快買了 2 本書壓壓驚,Tcl 就算了,C Shell 的書還真是難找,只好找了一本快 30 年前的書XD

不得不說,O'Reilly 出版商真是有情有義,在 Google Play 買的書都沒有 DRM 保護,直接就可以下載,也算是節省了我一些時間。

有沒有人可以告訴我使用 Bash 跑商業 EDA tool 到底會不會有問題呀?我實在不想繼續考古下去了…

2024/09/04 更新

作夢都夢到自己在改 C Shell script,有沒有這麼可怕XD

害我半夜三點起來就沒睡了,趕緊把最近買的五本書使用自己開發的 kobofileserver 上傳到 Kobo Elipsa 電子書閱讀器上,然後就沒然後了XD

一直到剛剛都還在看著 PTT 追新聞,我也算是有情有義的男人吧XD


感謝網友 usimon 建議增加多檔上傳功能,原來這功能還真是好用,可能是我以前只會循序邏輯的執行事情吧XD

難道這就是傳說中的單核單執行緒先佔式多工老男人腦XD

2024/09/04 到公司後更新

恨呀,果然有問題,偏偏昨天 VPN 連不回來。

昨天犯了一個錯誤,都怪該死的 DC command 語法,害我不小心中招XD

{$clock} 因為在 Tcl 裡面,{} 就跟 Bash 的單引號一樣,是當純字串的,想單然爾,我昨天的心力都白費了。

解決方式也很簡單,跳脫大小括弧即可。

\{$clock\}

但是人生就是有那麼多 But,此招對 DC 這個聖鬥士無效,它就是需要 {},無奈之下,只好將該 command 改用 echo 自動化產生 Tcl script。

為了這個臭蟲,早上雖然提早來公司,但又花了我一個小時 debug,今天真不是我的天呀!

2024年9月1日 星期日

方恨少

我書讀得不多(學校的書),雜書倒是看了不少,要細數人生遺憾的幾件事情當中,以前不曾好好上學(認真唸書考試)應該可以算上一筆。

最近為了工作,買了幾本 VLSI 相關的電子書,才知道這類的書還真不是普通的貴,重點還有些年紀,有些書甚至還超過 20 年有!以前一直覺得 C/C++ 規格書已經夠貴了,這禮拜買的四本書,好幾本的價格都可以跟規格書比擬,我雖然沒細算,但應該介於 7,500 ~ 8,000 有吧?

有 3 本書在 Play 購買,一本在 Elsevier 購買 

有一本我可能只想看某幾節罷了,但還是買了下去,正所謂孩子的學習不能等,不過為了我這個學習的孩子,花的錢應該也可以買一部不錯的筆電了吧?這還只是 Blog 我有印象記錄下來的部分XD

早上無意間想到好讀網站,沒想到又開始繼續營運了,但我憑印象找了幾本看過的書都未曾看到下載處,我猜應該是熱心人士,憑著之前部分砍站的備份又讓他繼續下去吧?印象中 20 幾年前購買好讀 PDA 版 App 時,只需要台幣 500 元,還用電子郵件跟周劍輝博士聊了幾句查帳要翻一堆法規的需求,沒想到時光飛逝呀…

有時候不是讀者不支持正版,但就是有些書買不到正版電子書,即使除了車子之外,最大支出都在買書上的我(正常食衣住行不算),我猜也大概只有百分之九十幾以上是花錢購買的正版。

像我一直很想購買《黑豹列傳》電子書,每當人生低潮的時候,對話裡的一些大道理總會讓我再找到奮鬥的力量繼續下去,只可惜現在連漫畫書店都沒剩幾間了!

蝦皮等網站也不是買不到盜版 JPG 電子檔,重點還比隨便一本資訊電子書便宜,但個人還是想要支持正版,畢竟現在不是學生,只好放棄購買的念頭,改天寫信去出版社敲碗好了,估計 5 萬 ~ 10 萬內應該可以買到全 900 期?

無聊又抓了一下 Readmoo 和 Kobo 購書金額圖,順便看看 Kobo 網站開發團隊是否又無聊到去更改 CSS class name

Readmoo 最近五年購書金額統計

Kobo 最近五年購書金額統計

嗯,真是幹得好,這星期買的四本資訊電子書金額居然快跟 Kobo 今年目前已購書金額相當,真是錢到用時方恨少呀! 

2024/09/01 晚上更新

查了一下,原來是熱心讀者接手好讀網站,但我還是搞不懂為什麼找不到我以前看過的書?

剛才想要略表一點心意,一直以為是我哪裡操作錯誤,查了一下,原來是 Taiwan 不支持 Paypal?但我是用信用卡支持的不是?我還真有點搞混了!


2024/09/24 更新

信用卡帳單出來了,真是不忍直視呀!幸好 Google 匯出檔案還算容易,還是 Elsevier 比較乾脆,直接給電子檔。

要買資訊相關的電子書,我只推薦 manning,Elsevier 以及 O'Reilly 這三家。