數字集成電路設計前端就是用verilog寫寫代碼描述下我想要的功能嗎?

在圖書館翻了下《CPU自製入門》,裡面主要講了自製處理器的過程。書中前面大部分主要在講處理器設計之前如何用verilog寫出自己想要的功能代碼,這些可以看出數字前端設計吧。可是,這些就只是代碼啊,這些代碼如何綜合處想要的複雜電路呢(畢竟是硬體狗對電路更親切點)?這時候想起模擬方向的老師在課堂上說的話「整個世界真正懂得數字集成電路設計的公司只有2家——Synopsys和Mentor」,後面想想確實有一定道理。集成電路發展到現在,難道做數字晶元設計的廠商就只是用別人的EDA工具,學別人軟體綜合的一系列代碼來設計晶元嗎?這樣看來,開發EDA的公司豈不是凌駕於所有晶元設計公司之上,開發了所有的能用的硬體電路結構,名軟實硬嗎?


你說的某種程度上是對的,但是又完全不對。我當年面試朗迅的時候,面試官問了我一個問題,一直讓我印象深刻。當時的問題是:你覺得ASIC設計裡面最重要的是什麼?我說RTL設計,因為RTL寫的好壞直接決定了後續的所有。面試官說我錯了,他說應該是綜合,因為到了綜合這一步,往後的一切都不再是設計者可以控制的了。某種程度上說,過了綜合之後,後續designer所做的事情都是設約束和check,幹活的已經不再是設計者,而是EDA工具。所以確實可以認為EDA工具才真正懂ASIC設計,它們對設計者屏蔽了幾乎所有複雜的基礎理論和公式,讓大部分設計者可以從極其複雜的半導體基礎中解放出來,什麼短溝道效應,速度飽和,閂鎖效應等完全不用care,連寄生電容等都不需要計算,全部由EDA軟體求解你都不知道是什麼樣的公式,算出來後直接給你。很多設計者辛苦學會了VLSI的基礎知識,工作以後發現毫無用途,自己只是個碼農。從這方面說,EDA工具比所有designer更懂ASIC,更懂半導體。

————————分割線————————

但是,ASIC或者半導體的知識並不是做一款chip的原因,懂ASIC和半導體理論也不是設計者的核心競爭力。所有的ASIC晶元都面向一個領域,比如我們公司做得SSD主控制器晶元,面向SSD,那麼這款chip怎麼做就必須充分研究SSD的特性。SSD的讀寫延時是怎麼樣?SSD出錯率如何,怎麼樣進行糾錯恢復,什麼程度的糾錯是符合要求的?SSD壽命如何控制?我舉個簡單栗子,nand flash擦除寫入需要ms量級,還有可能擦除/寫入失敗,但是不可能等這麼久才給host報告寫入完成,那會導致host長期等待,吞吐量會變得極低。怎麼解決這個問題才是這款chip的真正核心技術之一。

所以,ASIC設計裡面什麼最重要?既不是RTL,也不是綜合,更不是EDA做的那些,而是這款chip需要解決什麼問題,做這款chip的目的是什麼,這才是真正的核心技術。依我所見,一款chip的設計團隊,掌握這個的大概只有5~10個人左右。


關於寫RTL必須心中有電路樓上已經很多人說過了,我就不重複了,我只補充2個用來駁斥樓主的例子。我之前在電路里設計過一個非常難以綜合通過的電路,後來反覆修改了RTL代碼和約束腳本後才終於通過了,我把最初和最終兩版RTL的核心代碼都發給你看看,你想想區別是什麼?(位寬是我捏造的,但是數量級差不多,如有計算錯誤請見諒,看個意思就行)

input wire[500*16*16-1:0] chn_reg_data,
input wire paen,
input wire[15:0] paddr,
output wire[15:0] pdata,
初版:
always@(posedge clk or negedge rstn) begin
if(!rstn) ...
else begin
...
if(!paen) begin
pdata &<= #1 chn_reg_data[paddr*16:+16]; end end end 終版: reg[15:0] iaddr; reg[500-1:0] chn_reg_rd; reg[15:0] chn_reg_data_out; reg[500*16-1:0] chn_reg_data_tmp; always@(posedge clk or negedge rstn) begin if(!rstn) ... else begin ... if(!paen) begin iaddr &<= paddr; end pdata &<= #1 chn_reg_data_out; end end always@(*) begin chn_reg_rd = iaddr[15:4] &<&< 1; end generate genvar gen_index; always@(*) begin for(gen_index = 0; gen_index &< 500; gen_index = gen_index + 1) begin if(chn_reg_rd[gen_index]) begin chn_reg_data_tmp[gen_index*16+:16] = chn_reg_data[gen_index*16*16+iaddr[3:0]*16:+16]; else chn_reg_data_tmp[gen_index*16+:16] = 0; end end endgenerate integer chn_index; always@(*) begin chn_reg_data_out = 0; for(chn_index = 0; chn_index &< 500; chn_index = chn_index + 1) begin chn_reg_data_out = chn_reg_data_out | chn_reg_data_tmp[chn_index*16:+16]; end end

除了寫行為描述的過程中需要心中有電路之外,很多時候一些關鍵電路甚至是直接調用標準單元庫里的單元來設計的,例如關鍵的時鐘門控,時鐘選擇器等等,這一類的電路你設計得越多就越不敢依賴於腦殘的綜合工具。


EDA公司和Design house之間是產業鏈上下游的關係,而不是凌駕與被凌駕的關係。Design house使用EDA公司提供的工具,設計出特定功能的晶元;EDA公司則為所有設計公司提供工具的服務與支持。這關係就像Google開發互聯網應用,需要使用Intel的編譯器來編譯自己的代碼,google和Intel只是產業鏈上分工不同罷了,沒有高下之分。

一個成熟的產業,一定是有明確的分工的,呈現金字塔形的結構,每個層級的參與者才能專註自己的工作而不必重新造輪子,你只需要搞清楚自己服務於誰和被誰服務就好,要了解上層需要什麼和下層能夠提供什麼,充分相信他們並能有效地和他們溝通就好,而不要去試圖成為上層和下層的專家。

在產業的金字塔的同一層級,大家是按照領域來劃分的,比如搞設計的可以分為做處理器的,做高速介面的,做通信的,做視頻編解碼的等等,搞EDA的可以分為搞數字設計EDA,模擬設計EDA,射頻設計EDA等等。你的競爭力在於domain knowledge,在於你對於該領域的演算法、協議的理解和實現的能力,而不是你使用工具的熟練程度。就像程序員一般分成搞計算機視覺的、搞UI的,搞網路開發的等等,而不是按照編程語言分成c程序員,java程序員。


本質上就是實現想要的功能啊 你還想怎樣。。。

但是其實你的代碼會告訴綜合工具最後的結果應該是什麼樣的

EDA 公司提供工具本來就是給設計公司用的啊

不用造輪子不是挺好的么

再說你不滿意某些功能或者需要某些功能的話

如果你是大客戶

根本地代表說基本上會讓你滿意的


難道在寫verilog時,不應該是想著電路碼出hdl么?

用fpga做design時,跑完綜合總是會去看看rtl原理圖和我在寫代碼時想的是否一樣。


首先,verilog是硬體描述語言,其實在你寫rtl的時候就對應了特定功能的電路,就算沒有綜合工具,也可以畫出電路的框圖。設計電路也不僅僅是描述功能那麼簡單,你要考慮這個代碼綜合出來是怎樣的電路(比如會不會綜合出latch,跨時鐘域傳輸的亞穩態問題,clock gating等等),這是verilog跟編程語言的本質性不同。

EDA工具更多是幫助設計者更快更好的實現物理設計的工具,它只是自動化輔助工具。


不是描述功能,而是把功能寫成可綜合的代碼。


數字前端設計=需求轉化成演算法和架構+RTL coding+STA+各個驗證階段debug。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

EDA凌駕於設計廠商之上?照這麼說,synopsys/cadence/mentor也都不是真正搞半導體的,他們還要基於TSMC等工藝廠給的庫去做工具,照這麼說,TSMC也不是真正搞半導體的,還是看ASML那幫搞納米技術的物理學家搞光刻機。

fabless的設計職位除了寫RTL代碼當然也要懂STA,一方面只有學校才可能會發出來論文說這個架構性能多麼好,但實際上根本跑不到高頻,一方面跑EDA的那套流程還得靠手動修PR呢,全部靠工具就能自動完成的架構在性能上能有什麼競爭力。

哦再說一點,EDA廠商一代一代地更新,還不是用工具的公司們替他們找出那麼多bug和需要的優化呢。


首先,我是一個小白,剛入門不久,我覺得題主應該也不是個資深的工程師,沒有冒犯的意思哈。

巧合的是,我一年前也問過我導師這個問題。我導師說,他當時剛工作的時候也問過一樣的問題,而且,他當時的想法是,數字前端和程序員好像沒有什麼區別,都是碼code。

首先最重要的一點是,EDA廠商不會定spec。EDA工具可以幫你把rtl變成真正的netlist,包括利用一堆複雜的原理,演算法幫你優化,檢查。但是他不會創造任何一個IP。規格,功能,應用,市場都是需要人來確定的。

其次,資深的工程師,是可以凌駕於EDA工具的,我是見識過的,曾經我有幸和一個10年的項目經理在一個組裡,同事做了一次ECO,修改過後,做LEC檢查,是通過的,但是網表模擬就是過不去,最後他用眼睛一行一行檢查,畫電路圖,發現了rtl和netlist的差別。工具不一定是任何時候都是可靠的。

還有一些類似於黑盒子的鎖存器,初級絕對不要碰的東西。很多東西是需要人來判斷的。

EDA廠商的著重點更傾向於演算法,和數字電路前端工程師方向不一樣。

最後,紮實而又豐富的理論基礎,一定是決定瓶頸的上層建築。


其實我覺得前端最重要的是演算法和架構。

verilog只是個工具


LS 說 ASIC 設計中最核心的步驟是綜合這講法是正確的。因為 RTL 設計儘管複雜,但也還是設計師能夠駕馭的,而綜合本身的複雜度已經遠超過人能夠掌控的範疇。

集成電路行業有兩個大 Boss,一個是 EDA 工具,一個是光刻機。這兩個之外的一切人和物都是可以隨便替換。


首先要搞清楚Verilog Coder和Architect的區別。Synopsys並不能告訴你牙膏廠的i7怎麼做。


首先你要知道verilog是屬於硬體描述性語言,重要字眼在於描述,而非硬體編程語言,所以verilog的作用在於幫你將心中的電路描述出來。所以硬體編程一定要做到心中有電路。


現在軟體是第一生產力,整個EDA的關鍵。Verilog語法容易,但做出有用的好的設計是需要積累的。


對電路設計來說,RTL描述的是電路,你想要的電路,你想要的電路行為,而不是功能。


推薦閱讀:

TAG:現場可編輯邏輯門陣列FPGA | EDA | 數字集成電路 | Synopsys | 晶元設計 |