FPGA知識大梳理(二)verilogHDL語法入門(1)


  此文是寫給0基礎學習者,也是對自己知識點總結水平的考驗。  

  對於有C基礎的人來說,學習verilog應該是輕而易舉 —— 類比法學習。

  第一步:格式。

  對於C來說我們前面會寫   

‘include“stdio.h”

int main {.....};

  直接轉化到verilog中是 

module   module_name (....);

........

endmodule 

  對於C 的意思就是告訴編輯器,我要在有這個庫的前提下,建立這么一個函數,它實現的功能是......。而對於Verilog來說就是告訴編輯器,我要建立一個數字模塊,這個模塊實現..... 功能。OK 我們再討論省略部分的內容。

 

  第二步:運算符

  大家知道HDL 是數字電路的描述性語言,所以需要一點點數字電路的基礎就行了,數字電路中三個最小最基本的邏輯是 與,或,非。在verilog中的運算符就是 &,|,! 。OK ,知道這么多就可以開始我們的verilog程序設計了。

  現在我們要實現一個下圖所示的電路功能,這是一個a和b輸入,c輸出,內部實現與功能的電路圖

設計開始和C一樣先寫格式,取一個工程的名字叫project_a .

  module  project_a  ();

endmodule 

好了,我們要想想看,我們拿到一個芯片做top view的時候我們看到的是什么? 是pin腳。所以我們要把pin腳的信息告訴編輯器,那么代碼就變成了

  module  project_a  (
                                 input   a,
                                  input  b,
                                  output c
                                  );
  
endmodule

格式很靈活,還可以是

 1   module  project_a  (
 2                                   a,
 3                                    b,
 4                                    c
 5                                   );
 6   input  a ;
 7   input  b;
 8   output c ; 
 9 
10 
11 
12 endmodule 

或者是將6,7 兩行合並成 input a ,b ; 

個人比較推薦第二種,原因以后再說。格式問題,不用糾結。只是要注意一下哪里是 “;” 哪里是 “,”  就可以了。

現在整個top view 已經做完了,現在要說說具體實現了。在C語言中賦值是直接給的,在Verilog中賦值要借助兩個關鍵字  always 和assign才可以把值賦過去。先說assign 的格式

assign  c = a&b ;

 意思就是左邊變量c 這根線上的信號結果等於右邊信號運算的結果。那么最終的程序就是

 1 module digtal_HDL_test (
 2                          a ,
 3                          b ,
 4                          c 
 5                         );
 6 input  a;
 7 input  b ; 
 8 output  c ; 
 9 
10  assign c = a&b ;  
11 
12 endmodule 

 

再看always ,因為語法要求always里面所有賦值等式左邊的變量都必須是reg,所以得把c的類型改一下,就是在always的前面加上一條語句  : reg c ;那么最終的程序就是

 1 module digtal_HDL_test (
 2                          a ,
 3                          b ,
 4                          c 
 5                         );
 6 input  a;
 7 input  b ; 
 8 output  c ; 
 9 
10 reg  c ; 
11 
12  always @ (a or b)
13     c = a&b ; 
14 
15 endmodule 

第12行的意思是  “經常(always)在(@) a或者b (a or b)發生變化的時候去執行下面的語句”

好了,現在我們程序設計就完畢了。現在讓我們來回顧一下我們的程序包含了哪些東西

1,模塊的結構和端口。端口還有inout 雙向口(這個高級一點,http://www.cnblogs.com/sepeng/p/5126424.html 里面有介紹,可以先不追究)

2,運算符。verilog的運算符分為單目運算和雙目運算符,以及三目運算符。部分和C的是一樣的。

3,常量及變量。分為,數字,參數,變量(wire,reg ,memory)

4,連續賦值語句assign 以及過程賦值語句always。

具體說明就是念書了,請參照 夏宇聞老師的《Verilog數字系統設計教程》

練習流水燈實驗,熟悉設計流程以及工具的使用,下板看到效果才行。

(流水燈實驗中要貫穿,三目運算符,拼接移位操作,數字,常量,變量)

 

作業:硬件抽獎小模型。

  一共有16個號碼,其中有兩個號碼是中獎號碼(具體號碼是機密,程序內部定義),輸入一個數字,按下使能鍵。如果不正確兩個燈一直是亮的,如果正確,對應的那個燈就會滅。

   附加功能:1,如果必須先中第一個才能中第二個該如何設計

      2,如果先中了第一個,后中了第二個。第三盞燈亮。如果是先中第二個,后中第一個第四盞燈亮。

 

(提示行為建模,號碼輸入使用key,使能使用button。)

 

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM