→ ckmarkoh:不管是甚麼電路,用一個轉inverter and都可以變const0 01/17 00:18
→ BBSealion:是啊 但知道來源或許可以去想一下 我是怎麼掃這個電路 01/17 00:22
→ BBSealion:為什麼抓不到 01/17 00:22
推 ric2k1:他是 ISCAS 85 的一個 benchmark circuit, C432 & C432_r 01/17 00:42
→ ric2k1:將 7 組 outputs 分別 xor 起來在 OR 起來的電路. 01/17 00:44
→ ckmarkoh:我也遇到和原PO一樣的困擾... Gate多到難以 debug 01/17 00:44
推 ric2k1:Please note that C432_r is not created by trivial 01/17 00:45
→ ric2k1:conversions of C432. Instead, it is generated by a 01/17 00:45
推 ric2k1:"logic synthesis" (you can google it) process in which 01/17 00:46
→ ric2k1:complicated logic transformations and optimziations are 01/17 00:46
→ ric2k1:performed. As a result, both circuits are NOT quite 01/17 00:47
→ ric2k1:structurally similar. 01/17 00:47
→ ckmarkoh:我覺得寫fraig的投資報酬率超低... 占分很少但debug超難 01/17 00:47
推 ric2k1:Similar for sim14.aag, which is also a benchmark circui 01/17 00:47
→ BBSealion:難怪strash對他沒什麼用 XD ...好吧我再想想ORZ 01/17 00:53
→ ckmarkoh:我知道為何我的test case產生器弄出來的都可輕鬆過 01/17 00:54
→ ckmarkoh:因為全部都可用strash+trivil merge化減 不需要fraig 01/17 00:54
→ ckmarkoh:所以如果要單獨測fraig的話 要把strash和trivil merge 01/17 00:54
→ ckmarkoh:的功能關掉 這樣比較好抓出bug 01/17 00:55
推 ric2k1:logic synthesis 是個大學問,興趣可以來修EDA組研究所的課 01/17 00:55
→ BBSealion:我有關掉啊 所以都測過了 但sim10還是不過 才覺得很奇怪 01/17 00:57
推 ric2k1:sim10 如果跑不出來... 通常是你程式的邏輯有 bug... 01/17 01:00
推 ric2k1:其實像 fraig 這種難度的 code 就是要考驗你 SW engineerin 01/17 01:01
→ BBSealion:對fraig本身來說 trival case和複雜case 感覺上應該一樣 01/17 01:01
→ ric2k1:有沒有下足功夫,有沒有 make sure 你的 code 夠乾淨, 01/17 01:02
→ BBSealion:所以trival的大case能過 複雜case卻不行 很頭痛orz 01/17 01:02
→ ric2k1:functions 要切得很有條理,你的 debug 才會比較容易。 01/17 01:03
→ BBSealion:好吧確實CODE挺髒的...XDDD (重槍) 01/17 01:03
→ ric2k1:切忌寫了幾百行之後才測試。最好每寫幾個 function 都能 01/17 01:04
→ ric2k1:產生一些 testcases 來確保他的正確性。再慢慢把程式長大 01/17 01:04
推 ric2k1:每個人可以忍受 dirty code 的程度不同,我如果寫了一兩百 01/17 01:05
→ ric2k1:code 覺得有點亂的話,我一定就會停下來先整理一下再說 01/17 01:06
→ ric2k1:而且能夠不要有重複的 code 就不要有,記得把他們弄成 func 01/17 01:07
推 ric2k1:低調地說... 我的 fraig + sim 其實才 500 多行... 01/17 01:10
→ BBSealion:我有測啊... 因為50gate等級的 小case都順利過了 就一直 01/17 01:13
→ BBSealion:做下去... 等到測sim10才死了已經無可收拾QQ 01/17 01:13
→ BBSealion:算學到教訓吧...XDD 想辦法先來整理一下CODE 01/17 01:14
推 ric2k1:加油!! 01/17 01:14
推 ric2k1:@ckmarkoh, 這就是 80-20 理論啊... 花 80% 的力氣為了最後 01/17 01:15
→ ric2k1:的 20%, 就看你覺得值不值的囉! 01/17 01:15
→ BBSealion:其實我覺得 應該讓optimize佔一些分數 parsing減一點 01/17 01:17
→ BBSealion:parsing沒做完也能繼續下去 opt卻往往非常強大 XD 01/17 01:17
推 ric2k1:為了讓分數是 normal distribution, parsing還是得佔多一些 01/17 01:20
→ ckmarkoh:贊成 optimize要占分數 不然fraig沒做成 花那麼多時間搞 01/17 01:28
→ ckmarkoh:的optimize就變成廢物了 01/17 01:28
→ BBSealion:也不算廢物啦 自己看了還挺爽的XDD 01/17 01:29
推 ric2k1:optimize 會包含在 strash 以及 fraig 一起評分,只不過 01/17 01:30
→ ric2k1:因為沒有單獨的 command, 所以不會獨立計分。 01/17 01:31
推 TommyKSHS:請問每個 sim 檔不需要 simplify 就可以化簡成 0 or 1 01/17 01:33
→ TommyKSHS:了嗎?? 01/17 01:33
→ TommyKSHS:因為我不懂為什麼 ref 會出現 fraig 0 merge XXX ... 01/17 01:33
推 ric2k1:請見 3046 篇,當 SAT(XXX, 1) return UNSAT 的時候我就會 01/17 01:40
推 ric2k1:用 0 merge XXX... 01/17 01:41
推 ckmarkoh:老師那招真的很威 因為有Const 0出現的時候 就可以繼續 01/17 03:25
→ ckmarkoh:optimization 然後又可以少掉一堆gate 降低時間複雜度 01/17 03:25
推 TommyKSHS:嗯嗯 真的很感謝老師這招…真的… 01/17 03:37
→ ckmarkoh:不過這招有個陷阱 如果一開始就把PO下方的gate丟進SAT.. 01/17 03:54
→ ckmarkoh:那麼SAT會跑超久超久.. 所以一定要從PI往PO的方向做 01/17 03:55
→ ckmarkoh:按照dft list的方向... 01/17 03:58