作者:奔跑的小鳥 在最初開始確定一顆芯片的需求之后,需要進行系統分析,確定系統的架構。這個過程的方法,我相信是很多系統架構設計者苦苦思索,一直追求的事情。一般從學習標準開始,了解協議,研究算法,確定整個系統的框架,然后分析各個模塊可能存在的行為模式,模塊之間可能發生的通信與同步關系。最后逐步落實到可能用以實現該系統的芯片的架構是什么樣的。 有很多問題需要在這個過程中,確定下來。如果越精確,對于芯片的設計者來說就越能做出精確無誤的,經濟實用的芯片。例如,cache需要多大,內存需要如何分布多大的空間,模塊之間的互聯關系如何,互聯關系網絡里面的數據流量有多大等等……不是所有的模塊都需要互相訪問,于是為增加吞吐量,系統分析的過程需要精確地得出哪些模塊之間需要互聯,否則會多出成倍的互聯關系,使得最后系統的實現非常復雜,且面積很大,功耗很大,不可以被市場接受。 但就是這個過程本身要求蠻高,系統架構師設計者們可能都會尋求一些方法來完成。曾經,我也了解過synopsys的類似這方面的系統仿真工具。這樣的工具使用的過程,需要基于它已有的模塊庫來搭建你可能設計出的芯片原型,基于systemC等工具。例如模塊庫里面內核是ARMXX就選擇之,然后matrix是什么version,也選擇之,然后有usb之類的模塊等等。這樣搭建處理的系統,其實有了很多前提條件,就是系統仿真的行為其實是你選擇的這些模塊的行為的集合體。跟真正你希望設計的系統并不一定能對應上。 那么,用通用的芯片搭建一個系統原型如何。例如,TI的6XXX的芯片如此強大,能用軟件實現很多的系統原型機了。這個主意其實比上面那個要接近實際情況很多。但同樣的問題是6XXX芯片的內核,例如可以同時發射8條指令,總線,以及他本身芯片所擁有的資源很大程度上確定了這個系統運行的行為模式。當然,確實的一個系統實現后,很多數據已經是可以參考的了,雖然他們存在誤差。 所以,在最初的系統分析,架構設計階段,其實借助與已經存在的仿真工具或者芯片原型機,會獲得一些參考數據,但都存在各種誤差,例如內核的pipeline不同,中斷響應的速度不同,內存訪問的速度不同,cache的效率不同等等,誤差來自各個方面,精確是很難,只能做個范圍。但事實上,我認為這個階段的評估與分析,確實也不需要特別特別的精確。有一些基礎數據做參考即可開始架構設計了。只要不是數量級上的錯誤就行。那么既然是這樣,為什么要花昂貴的代價去購買仿真工具,并花很大的力氣在仿真環境上去搭建系統,同樣都是成本的。關鍵是系統架構師是否有足夠的經驗,知識與技能,包括信心來完成此項工作。 看來這個話題,說起來確實很長。FPGA是否為一個好的方法呢?其實FPGA的驗證已經不屬于架構設計階段的內容了,屬于芯片驗證階段的內容了。且通常FPGA的作用在于功能驗證,性能驗證希望在FPGA上做得很完整也是徒勞的。簡言之,FPGA上要把完整的復雜的一顆SOC映射上去,可能就做不到;要運行到足夠高的頻率也存在問題。于是,FPGA能幫助的是已經基本完成設計的芯片的功能驗證工作。全系統是不能通過FPGA來得以充分的仿真實現的,這并不是否則FPGA平臺在芯片設計和驗證過程中的作用,他是不可替代的,但他不是架構設計的工具。 所以,經過幾年的學習和嘗試,我弄明白了一件事,每個系統設計之初的分析與構建過程,需要的就是你的經驗,知識與你自己的建模分析方法,行之有效,且不必付出太大的代價。 |