看板 Soft_Job 關於我們 聯絡資訊
感謝你提供的網站http://www.visual6502.org 這提供非常多的訊息與實作的細節,也讓我有機會能更理解你的想法 我先稱它為virtual chip來做區別。 我看了FAQ與slide,裡面大致就回答這群作者能做到什麼程度, 我把我認為重要的條件列在下面: - if it has only one or two metal layers and was made before about 1985 - Before ~1980, chip design was a very manual process - MOS 6502: there are "3510" trnsistors - The simulator is running an idealized "digital" circuit based on our model of the chip's network of transistors and wires. - It does not account for "analog" behavior (resistance, capacitance, leakage), has no propagation delays, and transistors switch on and off instantaneously. 綜上所述,我覺得你會混用transister-level與gate-level真的不能怪你 因為這真的是時空背景不同,但照歷史脈絡來看也能稍微理解為什麼 TSMC/UMC晶圓代工與EDA產業的興起了:因為製程發展與電晶體數量大增 那如果你要照這群作者的方法做逆向工程在現今的晶片可行嗎? 我覺得人眼要識別現今的polygon(網頁所用的詞)及連接,可能要有寫輪眼 不過我layout學得很差,也許真的有能人可以做到,但那個數量級太大了 這網頁有提到他們想要自動化但是失敗(How did automatic vectorization fail?) 所以我推論目前人必須很大程度參與到這逆向工程中。 對這我有個想法,這個project是在2010左右的成果,而CNN(卷積神經網路)在 ImageNet 2012比賽取得壓倒性的勝利,時至今日computer vision已經很成功了 也許在這部分,CNN可以做到很好,然後把比較難辨識的再交給人類來做 可是呢,這又會需要foundry廠的know how了,因為你需要訓練用的資料與標籤 所以你想繼續這條路,我給的建議是看看有沒有人在做半導體的computer vision。 我知道S家有在做P&R的那方面的,也許C家做更多 然後拿他們的模型來做逆向工程並請專家幫你做最後的驗證 之後的工作基本都可以用程式來解決了 至於有無法律問題就看看有沒有人在你寫程式時來查水表了XD 我寫到這,我大概也能理解為什麼沒人做virtual chip emulator了 如果chip簡單人類可能還可以做,但是現在的chip真的太大太複雜了 還有3D IC這種多一個維度的,加上公司求快。除非是要偷設計, 不然成本太高了太不經濟了。 希望能給你一些幫助。 ※ 引述《expiate (彎曲屎殼郎)》之銘言: : 我有把你下面推文的兩個連結看了以確定我盡量能理解你的目的。 : 文中你提到transistor-level與邏輯閘層(gate-level)模擬, : 這兩個用詞在你的語境下所代表的意思有點模糊, : 我用我的理解以及上篇crossbar的觀點來定義一下: : - transistor-level: : 我認為你指的是電晶體電路,也就是layout或是spice : 模擬用來跑電氣特性,像是增益,匹配或是SNR : 裡面的基本元素就是半導體的材料物理模型(非我專長請專家補充) : - gate-level: : 邏輯閘電路,我這邊理解的話就會指cell-based design : 裡面的電路表示會由boolean operator或是更複雜的像是 : AOI (And-Or-Inverter),基本上世界上的IC design house : 的design flow主要都是走這條。 : /*** 我假設你有unlimited resources,要多快有多快的CPU,GPU和memory ***/ : 然後我只就數位電路作為我的目標,類比電路我是覺得更難就不深入了 : 基本上transistor-level的模擬我覺得要行得通,必須半導體物理材料模型要準 : 以及RC (resistance capacitance) model要準。也就是內部電氣特性與外部 : routing的特性都要有準確的模型去計算才有可能實現。 : 如果你只是對於前幾代製程的產品,我猜也許會有已經很成熟及準確的模型可以使用 : 但我很懷疑是否有公開的資訊你可以拿到,因為基本上這都是foundry的know how。 : 也許學校有資源可以讓你接觸,或是真的有很老亦或教學的的模型供你使用 : 假設你有了,其實就是把transistor-level的電路用這些模型表示 : 然後把彼此的輸入/輸出 接好跑模擬即可。最後在針對電氣數值判斷0/1 : 這是我覺得最困難的部分,完成後就都是0/1世界了。 : Gate-level的模擬跟對應的library有很深的相依性,也就是foundary所提供。 : 而且所需的電氣特性都包含在每個cell裡的table,所以像是slack或是slew : 都可以快速查表得知。而EDA公司提供的sign-off product就是保證他們的驗證 : 結果跟foundry廠生產出來的晶片會是一樣的。 : 這就間接的指出其實可以透過gate-level模擬來實現你的目標。 : 然後這也是為什麼FPGA會作為驗證工具的原因。只要在FPGA功能驗證完成, : 剩下的就是跑flow然後tapeout,不用太擔心會不一樣。而且跟模擬比起來快太多了 : 你可以試試用VCS或是NCVerilog跑個一百萬cycle就可以感覺為什麼唯快不破了 : 通常IC design house在tapeout之前都可以估自己只能跑幾次模擬。 : 也就是說bug或是timing issue如果不能在這幾次模擬中解決就等著被X吧 : 以上是我覺得可以實現你目標的方法,如果真的能reverse回來的話。 : 下面是我覺得為什麼GPU無法幫助太多的理由。 : 就我所知,目前沒有EDA公司的產品裡有使用GPU做加速,也許有功能但可能賣不出去XD : 大部分都還是仰賴CPU及memory作為計算的主力。 : 這是因為GPU主要的計算典範是SIMD (Single Instruction Multiple Data)。 : 拿現今最流行的深度學習做例子,訓練的步驟很明確feedforward,backpropagation : 底下的計算主要都是矩陣運算,只是每次要做運算的data不一樣。 : 回過頭看gate-level電路模擬,如果把電路看成神經網路不也可以用GPU加速? : 嗯其實GPU加速電路模擬真的是很容易想到,cuda已經出來十幾年了,所以我想 : 肯定有人嘗試但是沒成功或是效果不如預期。這也是大家噴這麼凶的原因。 : 不過我覺得大家太嚴苛了,難得有人正經問問題其實可以多點耐心分享所學的。 : 所以問題就該是為什麼GPU不能像神經網路一樣很好地加速電路模擬? : 我個人思考的結果是:大部分的電路模擬不是線性的 : 我的思路是把combinational logic電路當作是神經網路, : 而暫存器就是神經網路的layer。我能用矩陣來表示combinational logic嗎? : 我覺得光是處理gate個數與gate該在矩陣哪個位置我就覺得不好處理 : 當然你可能有別的思路,可是本質上你還是會受限於GPU計算的本質: : 不擅長做複雜(heavy control dependency)的計算。 : 這也是我覺的目前EDA公司還是以cpu為主要算力的原因。 : 如果你有興趣,你可以試著朝high performance computing/parallel computing : 做更深入的理解。 : 最後,我只是拋磚引玉吸引炮火。 : 大家不要為難原po,我其實很欣賞這樣願意花時間苦幹的人了 : 所以歡迎大家來噴我吧!最好發戰文,大家一起學習! : 也期許原po日後有什麼進展歡迎分享給大家。 : ※ 引述《erspicu (.)》之銘言: : : 不想走冤枉路.... 雖然有找過資料 : : 但找到的資料似乎是一些大學教授和硬體大廠的研界成果發表 論文也有 : : 感覺有很高的技術門檻 門檻高就算了 主要是怕結果實際上也沒如同想像中好 : : 想問看看有沒有已經走過這條路了 不知道通不通或是值不值得 : : 模擬器最傳統的做法是cpu指令層的模擬 這種模擬方式好實作 : : 但正確度要拉高到一個水準 就需要很高代價 : : 尤其是cycle accurate的模擬問題 : : 要100%正確 就要層邏輯閘層去模擬運算結果 : : 但邏輯閘層運算量遠大於指令模擬 主要是因為邏輯閘層運算都是同時間平行的 : : 這種特性很適合GPU 如果像是紅白機MOS 6502的話邏輯閘數大概有4千5百多 : : 目前看到用一般cpu去計算邏輯閘模擬計算 非常多秒才能算出一張frame : : 用指令集模擬的方式 每一秒可以算出好幾百張frame 差異非常巨大 : : 不知道用gpu來模擬FPGA那種陣列 先不提有沒有商用價值 : : 效率能不能提升到實用價值 不知道有沒有人公司剛好有做過這研究 : : 之前移植專案做到一半 想研究一下改用GPU平行處理來處理邏輯閘模擬 : : 寫一寫 還沒到改寫的部分 還在JS PORTING到C#的階段就丟著 : : 如過是死路 就算了 : : PS.我的理想是靠GPU模擬一張FPGA 拆晶片用放大鏡把內部邏輯描繪出來 : : 然後燒到FPGA上 有一些骨灰迷是有在做這事情 : : 像這網站 http://www.visual6502.org : : 但目前還沒看到靠GPU模擬FPGA 把電路燒進去的 : : 現在還在移植 http://www.visual6502.org/JSSim/index.html 到C#版本 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.101.195 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1609616648.A.04A.html
mmonkeyboyy: 其實用簡單數學算一下放下電路RAM大小就知道可行性了 01/03 04:28
Neistpoint: 分析得很透徹 01/03 10:22
erspicu: 這種拆磨晶片靠顯微鏡或是放大鏡看內部電路去描繪的事情 01/03 11:34
erspicu: 常理推斷只適合骨灰級的一些晶片 也不是我感興趣的事情 01/03 11:35
erspicu: 我目前在做的只是把這網站的專案從JS版移植到C# 01/03 11:35
erspicu: 內部邏輯閘.相連定義.接腳 他們都完全整理好了 01/03 11:36
erspicu: 可能是因為工作領域習慣性去預設的目的設想不同 01/03 11:37
erspicu: 即使我不只一次提及 只是一個在電腦上能夠更精確的紅白機 01/03 11:38
erspicu: 模擬器.. 還是有許多人會做發散式假設 01/03 11:39
erspicu: js版的速度可以算到大概10"Hz" 非常慢 01/03 11:44
erspicu: 有人用C++改寫優化後到達10000Hz 但還是太慢實機是3.5Mhz 01/03 11:46
erspicu: 看CODE內容初步來看主要是FOR迴圈處理一些陣列資料 01/03 11:47
erspicu: 以前有用過GPU處理影像 有前後次序性相依關係的 01/03 11:49
erspicu: 都會出問題 如果沒有這層問題 基本上就是把FOR迴圈改用 01/03 11:52
erspicu: parallel的方式去跑就有加速效果 但能不能拉到3.5Mhz 01/03 11:52
erspicu: 這我就不太清楚.. 01/03 11:54
mmonkeyboyy: 我想別人的推文你都沒看懂 你只是一直在講你的想法 01/03 11:55
mmonkeyboyy: 是很不錯的想法 加油呦~~~~好棒棒捏~ 01/03 11:55
mmonkeyboyy: 你也只是拿別人的c++來優化 看來你也不一定知道問題 01/03 11:56
mmonkeyboyy: 在那裡 另外gpu如果可以就這樣scale上去真的就是太 01/03 11:57
mmonkeyboyy: 美好了 至於到底gate-level simulation 在解什麼我 01/03 11:58
mmonkeyboyy: 猜你也不在意吧 01/03 11:59
erspicu: 可以避開前後相依次序性關係問題的話 多核就可以加速 01/03 11:59
mmonkeyboyy: ...........你以為只有你知道 ? 01/03 12:00
mmonkeyboyy: 你以為電路就不是要靠上一級輸入來做 01/03 12:01
erspicu: 然後這篇花很多篇幅在寫磨開晶片後的程式辨識 問題是 01/03 12:01
mmonkeyboyy: 你天真以為業界沒人知道沒人想過 沒人試過? 01/03 12:01
erspicu: 這個就不是我要做的事情 人家晶片內部定義檔都整個都幫你 01/03 12:01
Apache: 這篇沒有抓到原po的點,但是原po的推文也是... 01/03 12:01
erspicu: 輸出整理好好的了... 而且這種方式本來就只適合骨灰產品 01/03 12:02
mmonkeyboyy: 也不是我寫得啊 文主只是也就....他肯定是懂得人 01/03 12:02
mmonkeyboyy: 我第一個推文就告訴你了 你用數學算算就知道多快了 01/03 12:02
mmonkeyboyy: gate數可以推出data量&使用memory量 套上GPU硬體 01/03 12:04
mmonkeyboyy: 能力 還有你要計算的東西 就算是完美的平行運算 01/03 12:05
mmonkeyboyy: 你等於是一個原來的指令集 在一顆2GHz cpu上要跑2M 01/03 12:07
mmonkeyboyy: 你只有1000cycles可以解 01/03 12:07
mmonkeyboyy: 你說要做gate-level simulation 你可以自己看看有多 01/03 12:08
mmonkeyboyy: 少層要做 (每一層最少要1cycle) gate->gate就是一層 01/03 12:09
mmonkeyboyy: 其他的運算 搬資料的耗損什麼我就不說了 01/03 12:10
Apache: 他會說他只要變快就好 01/03 12:10
Apache: 我覺得前面那篇不錯 SIMD能加速的問題其實很少 01/03 12:11
erspicu: 我是真的不知道該怎麼算 你要不要分享一下你的算法 01/03 12:11
mmonkeyboyy: 我n年前就跟某廠在做這個事了 也沒看我賺到錢還在這 01/03 12:12
erspicu: 光靠單核C++ CODE可以到1萬 實機350萬 效率如果能改善到 01/03 12:12
mmonkeyboyy: 就知道沒用了啊XD 01/03 12:12
erspicu: 350倍也就算及格了... 當然也可能根本到不了 01/03 12:13
Apache: 還有而且code對架構非常敏感,還有開銷跟同步問題 01/03 12:13
mmonkeyboyy: 用ARM海快了點@_@~ 主要是你dataflow那個移出cache 01/03 12:14
erspicu: 記憶體從主機板那邊搬移到GPU的記憶體也是效能耗損拉 01/03 12:14
erspicu: 所以我當初處理影相 雖然是比多核電腦快但略快一點點而已 01/03 12:14
mmonkeyboyy: 那個對GPU太傷了@_@~ 成本太高 01/03 12:14
erspicu: 實際上得考慮到各種耗損 介面速度等等因素 我是真的 01/03 12:15
erspicu: 不知道該拿何種計算方式去做評估 01/03 12:15
mmonkeyboyy: GPU內部記憶就不用搬泥 ? 搬啊 搬死啊 跳著搬才是 01/03 12:15
mmonkeyboyy: 問題是吧 01/03 12:16
mmonkeyboyy: 都不用算這些 你就算有多少層logic gate要計算就好 01/03 12:16
erspicu: 不過骨灰級的東西 3.5Mhz 3.4千邏輯閘數 不是現代晶片 01/03 12:16
Apache: 這樣算明知故問嗎= = 01/03 12:16
Apache: 影像已經是GPU相對好解的問題了 其他通常更慢 01/03 12:17
mmonkeyboyy: 所以我沒有說沒有機會啊 這是上古產品數字這麼少 01/03 12:18
mmonkeyboyy: 硬塞GPU 採 greedy 方式邏輯用全放的可能可以哦@_@~ 01/03 12:20
Apache: 你很壞 01/03 12:20
mmonkeyboyy: 我換一個方式算給你看 這個種control dataflow型 01/03 12:21
erspicu: 是說mmonkeyboyy能分享"我n年前就跟某廠在做這個事了" 01/03 12:21
erspicu: 哪間公司做了啥相關GPU應用計畫?結果失敗 好奇想聽聽八卦 01/03 12:21
mmonkeyboyy: 的運算 要加速350倍 ..... 就算是單核比350核也難 01/03 12:23
mmonkeyboyy: 這沒什麼八卦 你文章多看就有了 01/03 12:23
mmonkeyboyy: 蠻多人在2010左右做過的 01/03 12:24
mmonkeyboyy: 我猜你要能拿顆普通GPU到1MHz就是一個大成就了 01/03 12:26
mmonkeyboyy: 我猜拿顆3990X可能還香點 尤其是 01/03 12:28
erspicu: 2010年老闆花了一筆錢養RD 結果全都失敗收場滿慘的 01/03 12:29
mmonkeyboyy: 我不知道你是從何得來上述結論的 反正不是我說的 01/03 12:30
erspicu: 因為如果我沒記錯當初相關宣傳未來願景等等說得滿多 01/03 12:30
mmonkeyboyy: 這我就不知道了 反正我現在沒做EDA&GPU 沒關我事 01/03 12:33
mmonkeyboyy: 不要說我沒啥建樹 你可以考慮看看用tensor core的方 01/03 12:52
mmonkeyboyy: 解解看logic array 說不定可以呢 不過這個做法我沒 01/03 12:53
mmonkeyboyy: 很仔細思考過 但我想這應該是少數還沒試過的方法 01/03 12:53
Neistpoint: 目前IC設計的流程是 C model(optional)-> RTL -> 01/03 13:15
Neistpoint: Gate level . 轉換之間都會作等效檢查。 如果覺得g 01/03 13:15
Neistpoint: atelevel 太慢,可以考慮 反向回RTL, 這樣估計可以 01/03 13:15
Neistpoint: 快2-3個數量級. 01/03 13:15
mmonkeyboyy: 他就不要啊XD 01/03 13:18
javatea: 對牛彈琴 浪費時間啊 01/03 13:30
erspicu: 一直都在說這顆骨灰級6502 哪來的c model RTL 不需要一 01/03 13:38
erspicu: 直擴大命題假設 01/03 13:38
freef1y3: 已經有C++source的話也許可以先試試加OpenMP pragma看 01/03 13:45
freef1y3: 能不能加速 01/03 13:45
erspicu: 專案移植完 會看看有沒有順序性相依關係,能處理掉的話再 01/03 13:49
erspicu: 看看怎麼做 01/03 13:49
erspicu: 能不能達到實機速度也無所謂 反正試試看 01/03 13:50
erspicu: 這顆已經是1975年的東西 3.4k邏輯閘數的老晶片了 01/03 13:52
mmonkeyboyy: openmp也有上限啦@_@~ 不過他原來說要放gpu啊 01/03 13:56
mmonkeyboyy: 不然放3990X 寫得好的快個幾十倍可能還是有的 01/03 13:57
GameGyu: (Synopsys VCS) In heterogeneous environments where 01/03 14:20
GameGyu: a mix of processors, GPUs and hybrid architectures a 01/03 14:20
GameGyu: re available, Cheetah technology can speed-up simulat 01/03 14:20
GameGyu: ion by up to 5X on RTL and up to 30X on gate-level de 01/03 14:20
GameGyu: signs. 01/03 14:20
expiate: 你所謂的更精確卻不用去考慮模型精確反而是加速部分? 01/03 15:36
expiate: 所以你到底是要做加速還是要更精確的模擬啊? 01/03 15:37
expiate: 用GPU要怎麼達到你所謂的更精確?我好像更不理解了 01/03 15:38
expiate: 拿如果是加速,最早的FPGA不就是最好的解嗎? 01/03 15:42
expiate: gate cout才3000多,寫Verilog也很快啊 01/03 15:42
expiate: 還是你就是要加速人家寫好的code而已? 01/03 15:50
Apache: 他想在電腦上讓一群情懷黨模擬晶片打紅白機吧 01/03 16:14
expiate: 所以問題應該就是該怎麼寫 cuda kernel來跑MOS 6502的循 01/03 16:26
expiate: 序電路模擬,使其加速350倍對吧? 01/03 16:26
erspicu: 差不多是這意思而已 01/03 17:11
SkyFluid: @GameGyu. 不管是S家的cheetah或C家的rocketsim, 用GPU 01/03 18:47
SkyFluid: 加速都只能跑特定設計, 無法大規模採用, 原因和我先前推 01/03 18:48
SkyFluid: 文的內容有關. 當然兩家都有想些新點子, 不過很難. 01/03 18:48
mmonkeyboyy: ex大 你得到他了 xd 01/04 01:33
GameGyu: GPU本來就很難做他原本功能以外的事啊 01/05 18:10
mmonkeyboyy: 讓我想起當年被唬弄去用早期的gpgpu....(眼神死) 01/07 08:47