如何從零開始學精EDA技術(Verilog-HDL )?

本人大二學渣,頹廢多日,EDA技術只上課聽聽,半懂不懂的,先想學精EDA技術(verilog版),但無從下手,網上也找不到給力的教程資源,希望知乎能有大神解救,本人的逆襲之路就指望從EDA開始了


eda技術包含的含義太多了,晶元的前端(verilog, vhdl等rtl, 模擬驗證等等)還有後端(布局布線啊等等),甚至研究綜合布局布線等軟體演算法也都跟eda相關。

不過看你的意思,應該是指想學習verilog這個層面的,比較偏向於前端。

那麼就得回答怎麼樣才能成為一個比較精進的前端工程師。

首先學習verilog HDL方面,一定要知道HDL和c/c++ java等軟體語言的不同。HDL是hardware description language也就是硬體描述語言;再看看c,叫c/c++ programming language,程序設計語言。那verilog為什麼不叫硬體設計語言呢?這是因為兩種語言在思路上有很大不同,你用verilog的時候,其實是在描述一個數字電路,包括組合邏輯電路和時序邏輯電路;而c/c++是在指導計算機以一定過程執行指令,或者一些更好層次的抽象,例如對象啊等等。既然是這樣,學好verilog的基礎是,學好數字電路,其中最最主要的,是要弄清楚組合邏輯電路和時序邏輯電路,這是最基本最基本的了。然後學學verilog的語法。這個意思也就是,如何用verilog描述一個組合電路,如何用verilog描述一個時序電路,如何描述一個狀態機?這是非常非常具體而基本的問題,你肯定能找到答案的當你寫出一個模塊,基本就知道綜合器大概會綜合成什麼樣子之後,你的前端功力算是入了一點點門。

之後要更精進的話,一般是兩個方向,演算法和架構。

演算法在於你要有稍好的數學基礎,了解演算法。更重要的是,要知道有哪些重要的演算法結構,例如怎麼用verilog很高效的實現一個循環?什麼是流水線?如何給流水線定級?建議這方面可以看看xilinx的high level synthesis手冊,看看有哪些基本的演算法實現結構。

架構類的就是對整個設計,要麼是一個晶元,要麼是一個fpga設計,對他們整體設計方案、性能參數等等進行確定,相當於總體把關的一個角色。這個對人的整體水平要求很高的。

另外還有驗證方面,有一套驗證方法學。

上邊這些東西,都是和你的專業和項目經歷相關的。演算法和演算法是不同的,架構和架構是不同的,經過慢慢的積累,你就可以形成自己的競爭力。這些東西都要實際去做去實踐的,工作中,平時業餘愛好中。比方你是做通信方面,你可以整整通信的一些演算法啊;圖像方面的,你可以做做圖像處理的流水線啊,架構方面,可以先從一些小的、通用的開始,比方說DDR控制器啊神馬的,自己去找去發現。

還可以找一些實習,接觸實際項目,接觸實際的需求。

其實你看,verilog神馬的,就是一個工具,進階的都是對一個功能,一個系統有深刻的理解和把握,然後用verilog實現。verilog無非是一個工具而已。就像鎚子和鑿子一樣,是個工具,學會一個工具很簡單,但是能用鎚子和鑿子敲打出一個板凳和敲打出一個美麗的雕塑,甚至敲打出一個木屋,層次和境界都是不一樣的。


著作權歸作者所有,轉載請聯繫作者獲得授權。否則,禁止任何方式轉載。

---------------------------------------------------------------

1、首先,要明白髮明或者使用VerilogHDL的最主要的目的是什麼?

描述大規模的數字邏輯電路。

注意,「HDL」中的「D」全稱是「description」,而不是「design」。VerilogHDL的中文名稱也是硬體「描述」語言,而不是硬體「設計」語言。從這門語言的名字上就能看出,VerilogHDL是用來實現對硬體電路的描述。也就是說,先有了硬體電路,然後使用VerilogHDL對其進行描述,將其描述為文本形式。這裡最關鍵的是第一步,先設計好硬體電路,包括電路的具體結構等,哪怕只是腦海中的一個idea。第二步才是使用硬體描述語言完成電路到文本的轉換,那麼,一定要使用VerilogHDL嗎?VHDL也可以啊,有電路結構之後,語言只是一個實現手段。

為了確保VerilogHDL能夠完美地、準確無誤地描述已經構思好的硬體電路,誕生了「可綜合規範」,這個是晶元設計環節、語言編譯和優化環節經歷了無數試錯後得出經驗總結。因此,「VerilogHDL可綜合描述」和「如何設計電路結構」才是最應該掌握的。

(1)VerilogHDL可綜合描述

VerilogHDL的語法很簡單,如果有C語言的基礎,一兩周就可以熟悉語法,寫一些簡單的代碼了。然後就可以著手學習更為重要的「可綜合描述」,其實市面上並沒有特別好的書來闡述這方面的知識,大部分書都是純語法介紹,羅列了很多代碼,卻不見一個電路結構。

此處給大家推薦一本「可綜合描述」很好的書,入門時看,會對VerilogHDL的硬體本質更了解些:

輕鬆成為設計高手:Verilog HDL實用精解. EDA先鋒工作室 編. 北京航空航天大學出版社. 出版時間:2012-06-01.

《輕鬆成為設計高手:Verilog HDL實用精解》書中詳細說明了VerilogHDL與電路結構的一一對應關係,入門是幫助甚大。

EDA先鋒工作室還編寫過一本《Altera FPGA/CPLD設計(高級篇)(第2版)》,主要講述優化硬體性能的一些常用方法。注意是高級篇。這兩本書結合,相信讀者能夠熟悉和掌握VerilogHDL的硬體特性。除此之外,如果還想有更深入的了解,建議去閱讀下Synopsys DesignCompiler工具關於代碼綜合的手冊。最後,如何才能看到verilog,就知道綜合出來的電路呢?請參考我的這個回答:

https://www.zhihu.com/question/27579255/answer/37196173

(2)電路結構

在第(1)的基礎上,熟悉常見的電路結構,能夠熟練地使用VerilogHDL進行可綜合描述。常見的電路結構一般有:阻塞與非阻塞、非同步複位同步釋放、跨時鐘域電路、狀態機、FIFO等。這方面的最好的參考資料就是Clifford E Cummings的經典論文,這些論文在eetop等業界技術論壇中都能下載到。《輕鬆成為設計高手:Verilog HDL實用精解》這本書中對狀態機有一個很好的講解,也可以參考。對於FIFO,可以自己試著完成一個非同步FIFO的設計、驗證、綜合和後端實現,FIFO的功能可以和ISE中的IP核進行比對,看相同設置下,功能是否和IP核一致。

其次,熟練使用Synopsys DesignCompiler工具,將寫完的代碼綜合,檢查綜合結構是否和自己要描述的電路結構一致?如果不一致,為什麼?自己沒有寫對,還是Synopsys DesignCompiler對代碼進行了優化?如果是書寫錯誤,如何修改?是否能夠讀懂Synopsys DesignCompiler工具的log文件,檢查綜合過程中代碼中是否存在一定的問題?這個時候就要學習關於邏輯綜合和靜態時序分析的知識了。如此經歷一段時間的練習,VerilogHDL語言的使用就基本上沒有大問題了。關於電路的綜合和優化,請參考Synopsys DesignCompile的相關手冊,裡面有極其詳細的說明和介紹。關於靜態時序分析,請參考Synopsys primetime相關手冊,或者《Static Timing Analysis for Nanometer Designs: A Practical Approach》。

最後,學習在一定時序關係(時序圖)和約束(時鐘頻率、面積、功耗等)下,完成代碼的書寫和優化。

如果能夠完成以上內容,那麼在大的項目中也能得心應手,因為大項目拆解成小模塊之後,基本上也就是一些類似上面的小電路結構。

--------------------------給自己live做個廣告---------------------------

---即將進行的live

報名入口:如何成為一個優秀的電子信息類大學生

時間:2017.11.05 20:00

---我們的專欄

觀芯志:知乎專欄

---往期live

知乎live—Digital IC 設計職位筆試題分析(上):知乎 Live - 全新的實時問答

知乎live—Digital IC 設計職位筆試題分析(下):知乎 Live - 全新的實時問答

半導體先進工藝的器件結構和挑戰 : 知乎 Live - 全新的實時問答

你不了解的微電子行業 : 知乎 Live - 全新的實時問答

初學者在數字 IC 設計學習中易進入的誤區 : 知乎 Live - 全新的實時問答

從零學習 TCL 腳本 :知乎 Live - 全新的實時問答

TCL 腳本:數字 IC 設計應用篇:知乎 Live - 全新的實時問答


我從工作後才開始學的……

好教程沒有的,買個板子先從官方常式開始,需要什麼就學什麼,學到夠解決碰到的問題的程度就可以。然後繼續跑常式。常式跑完找實際用例,比如dma,視頻拼接做一做,熟了以後在學生這個群體里,算上道了。


針對這個問題我寫過一篇博客:The Knowledge Base of A Qualified Digital IC Design Engineer

基本上你把上面列的東西都掌握了就入門了。


謝邀。雖然混跡在這個行業,不過我本人是不精通Verilog的。用到的Verilog的功能都是最基本的賦值、if else之類的,因為我的職業不是coding。

在IC或者數字邏輯行業,重要的是對數字電路的理解和對系統結構的理解。語言只是表現形式。你只要能用HDL寫出任意你想表達的波形就可以了。

花更多的時間去理解常用的模塊,理解常用的協議,或者自己構建一個模塊再跟別人做的比較一下,可以從簡單的UART開始,慢慢加功能,考慮架構的靈活性,怎樣測試等等,然後再看看複雜的DMA、匯流排傳輸握手、封包解包等等。

在FPGA上搭建嵌入式系統可能是一個理解系統的快速的方式,因為很多模塊都已經現成地做好了,只需要把他們組裝起來,然後再添加一些自己所需要的模塊,用HDL實現,把他們組合到一起。有一個教程叫Learn MicroBlaze From Scratch不錯,講得很詳細,推薦初學者。


你沒學會的不是verilog,而是數字電路。如果你能熟練的把經典電路畫出來,學會寫它的代碼,一天都不用


EDA 的使用方法詳見隨軟體附贈的文檔。。。


——————以下廣告哈哈哈哈——————

國內知名的電路設計軟體~直接在瀏覽器畫電路圖。。。6層板,2000焊盤的板子杠杠的

國內版地址:https://lceda.cn/editor/?ref=zhihu

LCEDA是一個為中小用戶提供電路圖PCB設計模擬的軟體提供商,國內用戶免費。

致力於打造EDA體驗最好的輕量級雲端設計平台。


推薦閱讀:

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

TAG:EDA | Verilog | verilog-hdl |