星期五, 7月 18, 2008

EDA - Electric Design Automation

原先因為雨太大,索性不想參與今天的課程,看了公告才知道今天暫停 XD

EDA 這塊領域,很偏硬體設計,但卻是在做軟體,而不是硬體。

--


抽象的硬體描述之後,緊接而來的便是實作,然而在實作上,往往有手動與自動兩種方式。手動的優點是可以考量很多,做到最佳化;而自動的優點在於能在短時間內處理大量資料。

最早的電腦,內部所用的電晶體,可能只有數百,或一兩千個。這樣的數量,手動製作還在可接收的範圍之內;然而當數量增加到 4 千 2 百萬,甚至更多呢?

試問,4200 萬塊的拼圖,需要多少時間才排完,你願不願意去排?

所以,讓硬體製程自動化是必需的。然而,這塊領與上要處理的資料量,往往是 10 的 7、8 次方起跳,在加上問題往往是 NP﹝簡單來說,不是在多項式複雜度的時間內能完成﹞。

想想,光是 N 平方的複雜度,處理10的8次方的資料,就必須花上 100 多天,這樣的時間都不可能接受了,更何況是指數或 N! 的複雜度呢!

舉個最簡單的例子: F = (a + b)(b + ~c)(a + c) ﹝這是個邏輯式﹞是否衡等於 1,要如何才能最精確檢驗?是不是列出所有可能,也就是 2 的 3 次方種可能。這是指數複雜度的問題阿!!!!當變數數目擴大至 10 的 5 次個,會是什麼樣的情況?恐怕電腦一輩子也跑不完。

可是,還是存在能夠在短短一分鐘之內解掉這樣問題的方法,而這樣的方法,往往需要強大的演算法能力,將演算法變形、複雜化,進而達到解題的需求。

當演算法複雜化,首當其衝便是 code 的行數。處理這樣的問題,5、6 千行的 code 是很平常的,甚至上萬行都有。如果寫幾千行的程式就弄得一個頭兩個大,那又如何在專業上立足?﹝不止這個領域,其他領域也是一樣的,幾千行的程式就像家常便飯,看看魔獸爭霸就好,我想恐怕不只幾千行了。﹞

除此之外,這塊領域往往和幾何運算脫離不了關係。如何安排電晶體的位置,使 cost 最小?如何接線,彼此不會干擾,又要衡量 cost?等等...這些都是需要高度複雜得演算法才能做到的。

所以這塊領域,往往將所面臨到的困難轉成一道程式問題,而如何解開問題,就是主要的研究方向了。

沒有留言: