【FPGA】學習筆記—{Verilog}—{一、Verilog設計初步}

1.1 Verilog簡介

   Verilog是一種硬件描述語言。
   Idea→行爲級描述→RTL描述→門(Gate)級網表→物理版圖

1.2 Verilog模塊的結構

1.2.1 Verilog程序的特點

  1. ●Verilog程序的基本設計單元是“模塊”(module);
    ●每個模塊的內容都嵌在moduleendmodule之間;
    ●每個模塊實現特定的功能。
  2. ●每個模塊首先要進行端口定義;
    ●並說明輸入和輸出口(inputoutputinout);
    ●再對模塊的功能進行定義。
  3. ● 除endmodule等少數語句外,每個語句的最後必須有分號 。
  4. 註釋:
    //······
    /*······*/

1.2.2 Verilog程序的4個主要部分

 1、模塊聲明

  1、模塊聲明包括:模塊名字,模塊輸入、輸出端口列表。
  2、格式:

module  模塊名(端口1,端口2,端口3,……) 

  3、模塊結束的標誌爲關鍵字 endmodule

 2、端口(Port)定義

  1、端口分類:

端口是模塊與外界連接和通信的信號線

   ● input:輸入端口
   ● output:輸出端口
   ● inout:雙向端口
  2、格式:

input     端口名1,端口名2,…………端口名n;  //輸入端口 
output    端口名1,端口名2,…………端口名n;  //輸出端口 
inout     端口名1,端口名2,…………端口名n;  //雙向端口 

  3、注意:!!!
   ● 每個端口需要進行端口類型聲明(輸入、輸出還是雙向端口)和數據類型聲明(wire型、reg型還是其他類型)
   ● 輸入和雙向端口不能聲明爲寄存器型
   ●在測試模塊中不需要定義端口。

 3、信號類型聲明

   ●模塊中所有用到的信號(包括端口信號、節點信號等)都必須進行數據類型的定義。
   ●Verilog語言提供的各種信號類型,分別模擬實際電路中的 各種物理連接和物理實體。
   ●若信號的數據類型沒有定義,則綜合器將其默認爲是wire型。
   ●在Verilog-2001標準中,規定可以將端口聲明和信號類型聲明放在一條語句中完成。
   ●端口聲明和信號類型聲明可以都放在模塊列表中,而不是模塊內部。

 4、邏輯功能定義

  1、用assign持續賦值語句定義。
   ●assign語句一般用於組合邏輯的賦值,稱爲持續賦值方式
   ●格式:assign 結果信號名=表達式;
   例:assign f=~((a&b)|(~(c&d)));
  2、用always過程塊定義。
   ●格式:

always @(敏感信號列表)
	begin
		//過程賦值
		//if-else,case語句;for循環語句
		//task,function調用
	end

   ●例:見 描述3,4

  3、調用元件(元件例化)。
  
  
  

  F=ab+cdF=\overline{ab+\overline{cd}}
在這裏插入圖片描述
用Verilog對該電路描述:
描述1:

module aoi(a,b,c,d,f);         //模塊名爲aoi,端口列表a,b,c,d,f
input a,b,c,d;                 //模塊輸入端爲a,b,c,d
output f;                     //模塊輸出端爲f
wire a,b,c,d,f;               //定義信號的數據類型 
assign f=~((a&b)|(~(c&d)));   //邏輯功能描述
endmodule

描述2:

module aoi                   //將端口類型和信號類型的聲明都放在模塊列表
		(input  wire a,b,c,d,   //在Verilog-2001標準中,規定可以將端口聲明和信號類型聲明放在一條語句中完成。   
		output wire f);
assign f=~((a&b)|(~(c&d)));   
endmodule

描述3:

module aoi(a,b,c,d,f);         
input a,b,c,d;               
output f; 
reg f;                             //在always過程塊中賦值的變量應定義爲reg型
always @(a or b or c or d)         //always過程塊及敏感信號列表
	begin
	     f=~((a&b)|(~(c&d)));      //邏輯功能描述
	end
endmodule               

描述4:

module aoi                           //模塊聲明採用Verilog-2001格式
		(input a,b,c,d,             
		  output reg f); 
always @(*)              //通配符,等價於a or b or c or d
	begin
	     f=~((a&b)|(~(c&d)));      //邏輯功能描述
	end
endmodule               

1.3 Verilog基本組合電路設計

1.4 Verilog基本時序電路設計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章