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