學習筆記 Verilog語法(可綜合的語法子集)

2021-10-10 13:42:59 字數 3494 閱讀 2782

module my_first_prj(

埠訊號列 … )

;邏輯代 …

endmodule

input clk;

input wire rst_n;

input [7:0] data_in;

module 模組命

(埠命名 1>, 埠命名 2>, ...)

;// 輸入埠申明

input 埠命名 1>

;input wire 埠命名 2>

;input [

最高:最低

]埠命名 3>

;...

// 輸出埠申明

output 埠命名 4>

;output [

最高:最低

]埠命名 5>

;output reg [

最高:最低

]埠命名 6>

;...

// 雙向(輸入輸出)埠申明

inout 埠命名 7>

;inout [

最高:最低

]埠命名 8>

;...

// 引數定義

parameter 引數命名 1>

=預設值 1>

;parameter [

最高:最低

]引數命名 2>

=預設值 2>

;...

// 具體功能邏輯**

...endmodule

其中「//」後為注釋的內容。「<>」之間是各個引數以及埠的名稱命名,在實際**中不需要加「<>」。

// 定義乙個 wire 訊號

wire

;// 給乙個定義的 wire 訊號直接連線賦值

// 該定義等同於分別定義乙個 wire 訊號和使用 assign 語句進行賦值

wire

=常量或變數賦

;// 定義乙個多 bit 的 wire 訊號

wire [

最高:最低

];// 定義乙個 reg 訊號

reg

;// 定義乙個賦初值的 reg 訊號

reg

=初始;// 定義乙個多 bit 的 reg 訊號

reg [

最高:最低

];// 定義乙個賦初值的多 bit 的 reg 訊號

reg [

最高:最低

]=初始

;// 定義乙個二維的多 bit 的 reg 訊號

reg [

最高:最低

][最高:最低

];

由以上**可知:

// 含有命名的 begin 語句

begin :

塊// 可選申明部分

// 具體邏輯

end// 基本的 begin 語句

begin

// 可選申明部分

// 具體邏輯

end

// if 判斷語句

if(判斷條

) begin

// 具體邏輯

end// if…else 判斷語句

if(判斷條

)begin

// 具體邏輯 1

endelse

begin

// 具體邏輯 2

end// if…else if…else 判斷語句

if(判斷條件 1>

)begin

// 具體邏輯 1

endelse if(

判斷條件 2>

)

// for 語句

for(

變數=初

;判斷表達

;變數=新

)begin

// 具體邏輯

end

task 

;// 可選申明部分,如本地變數申明

begin

// 具體邏輯

endendtask

assign 

=變數或常

;

(判斷條件) ? (判斷條件為真時的邏輯處理)

:(判斷條件為假時的邏輯處理)

(1)組合邏輯:敏感表為電平、沿訊號posedge/negedge;通常用@連用。使用示例如下所示:

always@(*)

begin

// 具體邏輯

end

(2)時序邏輯:always後若有沿訊號(上公升沿posedge,下降沿negedge)宣告,則多為時序邏輯,使用示例如下所示:

// 單個沿觸發的時序邏輯

always@(

沿變)begin

//具體邏輯

end// 多個沿觸發的時序邏輯

always@(

沿變化 1> or 沿變化 2>

)begin

//具體邏輯

end

+ // 加 - // 減

! // 邏輯非

~ // 取反

& // 與

~& // 與非

| // 或

~| // 或非

^ // 異或

^~ // 同或

~^ // 同或

* // 乘,是否可綜合看綜合工具

/ // 除,是否可綜合看綜合工具

% // 取模

<< // 邏輯左移

>> // 邏輯右移

< // 小於

<= // 小等於

> // 大於

>= // 大等於

== // 邏輯相等

!= // 邏輯不等於

&& // 邏輯與

|| // 邏輯或

由上表可以看出來,這些和c語言中的是一樣的。

賦值的=與c語言中的運算一直,不同之處在於在verilog中有阻塞和非阻塞賦值。(有待了解,在具體的例項中感受他們之間的不同之從)

在學微控制器的初始階段,我寫**就超級亂,超級爛。其實我們在寫每個**程式的時候都應該遵守**書寫的規範。最起碼起到便於他人閱讀的效果。不然**一團亂,即使電腦執行的時候不會出錯但是也不便與別人交流合作。學fpga也是一樣的,verilog也是有**的書寫規範的。我們要從剛開始接觸verilog就養成好的習慣,盡力遵從比較規範的書寫方式。下面是也寫基本的可供遵循的規範。

1、識別符號:識別符號包括語法保留關鍵字、模組名稱、埠名稱、訊號名稱、各種變數或常量名稱等(注意後面的名稱不能和關鍵字一樣)

可綜合的verilog語法

1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,n...

FPGA學習筆記(二) verilog 語法講解

verilog語法介紹 數位電路中主要有組合邏輯和時序邏輯兩種電路。組合邏輯 多路選擇器 解碼器 加法器 乘法器等 時序邏輯 最基本的是計數器。verilog檔案的基本結構 乙個檔案中可以包含多個模組。方法1 模組宣告 模組名 埠列表 module mux2 a,b,sel,out,io 埠屬性定義...

學習日記 Verilog語法簡介

此經驗是從被人那裡學來的,一起跟著方法去做 1 需要同時掌握vhdl和verilog 2 和電路的關係 3 可綜合的語法與 行為級語法 4 hdl語言學習經驗 下面列出的是ve r i l o g硬體描述語言的主要能力 基本邏輯門,例如and o r和nand等都內建在語言中。使用者定義原語 u d...