如何從頭開始系統學習VHDL語言?

導師要求學習VHDL,之前沒有學過,如何系統學習?


1.

對於初學者學習 VHDL 還是 Verilog 的問題

我是這麼認為的

高校開設 VHDL 課

是從培養數字電路設計思想出發的

這是初學者最需要的

所以說就是因為 VHDL 繁瑣不自由

反而初學者才更應該學 VHDL

2. !rst_0

"0" 複位是為什麼成為標準寫法的

我覺得還是要和初學者說說的

"0" 複位是因為

"0" 被干擾弄成 "1" 比 "1" 被干擾弄成 "0" 容易的多

3. 引申一下

我覺得學 VHDL 主要是學習演算法

(小到 DFF 大到處理器里的大型 datapath)

和數字電路結構的對應關係

最終目的是看到演算法可以有能力轉換成相應的數字電路結構

正如它的名字所說的

HDL 只是數字電路結構的載體而已

所以學好 VHDL 就是要學好數字電路

4. 導師要求學習 VHDL

這樣的話我假設你在幫導師做一個數字電路的工程

(FPGA 或者 ASIC 都無所謂)

而導師希望你用 VHDL 開發(不管原因)

這樣的話其實找一個在線的 VHDL reference 就好了

腦子裡有清晰的電路結構

一個一個對應翻譯成 VHDL 就好了

最主要的是要考慮各種庫在各種工具中的可綜合性

比如你需要用定點數的時候

modelsim 支持

use ieee.fixed_float_types.all;

use ieee.fixed_pkg.all;

而 cadence rc 支持

library ieee_proposed;

use ieee_proposed.fixed_float_types.all;

use ieee_proposed.fixed_pkg.all;

這些問題遇到了網上一搜

stackoverflow 上一大把答案

加油


只要你有學過C語言之類的編程語言,自學VHDL以及Verilog一點問題沒有,基本語法非常簡單,進行軟體模擬也很隨意,但學硬體語言一般是要綜合的,也就是說最好要有硬體平台支持測驗來觀察感受。本人最近在攻堅FPGA,個人覺得硬體語言跟純軟體語言還是有差別的,在學習過程中要注意理解並行處理、時間延遲等內容,畢竟跟硬體息息相關,並不是把代碼測試過了就好了。

先看書看基本語法,完了學者抄點例子感受感受,再上一些論壇看大牛們怎麼說,慢慢進步,一口吃不了大胖子呢的。

/************************************************************************************************************

以上內容是前期寫的,剛打開知乎發現有人點贊,本著負責任的態度還是再多些幾行吧,寫在這裡給需要的人,希望你們能夠走得更快些。

************************************************************************************************************/

1. 首先明確編程語言問題。

VHDL和Verilog都是目前使用最多的兩種硬體語言(HDL),前者最開始是美國軍方的標準,後來慢慢普及,最早的硬體工程師使用的基本都是VHDL,這也是為什麼現在很多高校開設的也都是VHDL課而不是Verilog課程,因為那些老師最開始接觸的都是VHDL,所以他們教授起來比較熟練。Verilog 不是軍方開發的,所以代碼寫起來可能沒有VHDL那麼繁瑣,靈活性要高一點,但代價是出錯率會因為個人掌握情況而比VHDL要高,這也涉及到硬體本身問題。

就當前使用情況來看,很多編書的人都用的是平分秋色這個詞,但本人覺得Verilog用的較多一寫,畢竟現在開發軟體功能越來越強大,很多人為的不足軟體是可以發現而促使自己去認識到錯誤而做到改正或避免錯誤。所以建議初學者學習Verilog,語法簡單,語言天賦好的同學甚至可以在數個小時內簡單掌握。若基於某種要求,學習VHDL也不妨,二者大同小異。

2. 為什麼要學習HDL(HardwareDiscraptionLanguage)。

單純的學習VHDL語言是沒有意義的,本人最開始接觸的是VHDL,學的非常差勁,現在總結來主要是因為理解語言本身要實現的功能才是目的,所以不能為了學習一門HDL而去學習一門HDL。

舉個簡單的D觸發器的例子。

alway@(posedge clk or negedge rst_n) //檢測到時鐘上升沿或者複位信號;

begin

if(!rst_n) //初學者這裡注意(!rst_n)是一種很標準的寫法,表示複位信號為0時複位;

data_out &<= 1"b0;

else

data_out &<= data_in;

end

看到這行代碼其實腦子裡反應到的立馬應該是這種東西:

(上圖截自電腦里某工程里的一個小點點,沒改介面,C即clk,CLR 即rst_n,D、Q就不說了)

說簡單點,你要意識到你的每一個always語句或者assign語句都代表一條獨立的電路,而這些電路都是always@(……)裡面信號監控的,都是有實際意義的。這就說到我要說的第三個問題。

3. FPGA。

學HDL都是為了開發FPGA的,所以為了更好的理解自己所學的知識點,一定要熟悉FPGA硬體架構,像組成邏輯單元與邏輯塊、I/O特性、時鐘管理、存儲等,這就要求你去看一些資料書。最開始可能會覺得特別抽象,沒關係,多堅持堅持,到一定程度希望能自己閱讀FPGA供應商(主要是Xilinx和Altera)的器件手冊,他們官方網站都有下載,不同型號其實內容大同小異,堅持看完一套就差不多,英文讀起來非常枯燥,本人現在也沒有認真讀完過一個系列,不過用到某部分知識時還是會認真看的。另外說一點現在國內很多關於這方面的書基本都是翻譯那些資料的,很多其實翻譯的都很一般,比如昨天看的IP軟核資源Ram-based Shift Registers書里沒有翻譯清楚裡面的一個知識點,導致配置時不理解介面的作用,後來看了英文User Guider才知道,浪費好長時間。

4.學習軟體。

相信很多初學習VHDL的同學在書里看到的都是MAX-PlusⅡ的例子,我最開始學的時候老師只講語法,不教模擬,所以我不可避免的接受誘導去用了這個軟體,在這裡強烈不推薦這款老到牙都快掉的軟體。目前很多FPGA供應商都I有自己的開發軟體,如賽靈思(Xilinx)的ISE,Altera的QuartusⅡ,都是使用非常普遍也比較簡單的開發工具,功能相對比較齊全,基本滿足開發需求,據說賽靈思新一代開發平台Vivado很好,昨天下載了一個才裝上,還沒開始試用。

使用教程網上都有,下載幾個文檔,很快就能上手的。

5. 學習資料。

這是本人最近在圖書館借用的資料書,劉福奇那本挺好的。 祝硬體愛好的同學早點進入不歸路。


以下假設你熟悉Verilog,個人經驗是隨便找本VHDL的書,花幾個小時把大概概念了解一下,entity architecture等等;以Xilinx家的ISE為例,ISE的Edit-》Langrage Template裡面有VHDL寫各種module的例子,然後找個ISE裡面的實例工程跑一跑就上手了


隨便找本介紹VHDL的書 花個兩三天學一下語法 然後找點小工程自己寫一下 上手很快的


看語法,做設計,跑硬體(買個開發板)


想學好HDL,首先不要把HDL當成語言,而是應該把HDL當成一個電子電路設計工具,而後才去追求其作為一門設計語言的語法細節。 所以先去學學基礎的電子電路,CPU,介面。。。有了一堆基礎後再去學


剛接觸,希望能夠儘快上手,項目急著呢


推薦一本書《EDA技術與VHDL》(清華大學出版社 潘松 黃繼業),裡面先通過一些小例子讓你熟悉一下VHDL語言,之後再系統地講解VHDL語法,比較適合初學者。總之邊學邊練習就沒有問題。


推薦閱讀:

對於錢沒有一點概念的人是怎麼樣一種人?
你從遊戲里get過哪些道理?
怎樣自學轉筆?
如何選擇學校和導師?
如何評價「用不上就不學」這種想法?

TAG:學習 | 編程語言 | 現場可編輯邏輯門陣列FPGA |