概述
Verilog 是一種用于數(shù)字邏輯電路設(shè)計(jì)的硬件描述語言,可以用來進(jìn)行數(shù)字電路的仿真驗(yàn)證、時(shí)序分析、邏輯綜合。
既是一種行為級(可用于電路的功能描述)描述語言又是一種結(jié)構(gòu)性(可用于元器件及其之間的連接)描述語言
Verilog模塊基本概念
模塊是Verilog的基本單位,除了編譯指令,其他的所有的設(shè)計(jì)代碼都必須放在一個(gè)或多個(gè)模塊中
一個(gè)模塊內(nèi)部可以使用其他模塊,稱為實(shí)例。上層模塊可以引用底層任意層次模塊的變量
模塊內(nèi)部可以包含若干個(gè)“塊”
Verilog模塊總結(jié)
· Verilog中的標(biāo)示符可以是任意一組字母、數(shù)字、$符號和下劃線符號的組合,但標(biāo)示符的第一個(gè)字符必須是字母或者下劃線。標(biāo)示符區(qū)分大小寫。
· Verilog程序是有模塊組成的,每個(gè)模塊嵌套在module和endmodule聲明語句中。模塊是可以進(jìn)行層次嵌套的
· 每個(gè)Verilog源文件中只準(zhǔn)有一個(gè)頂層模塊,其他為子模塊
· 每個(gè)模塊要進(jìn)行端口定義,并說明輸入輸出端口,然后對模塊的功能進(jìn)行行為邏輯描述
· 程序書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句可以分幾行寫
· 除了endmodule語句,begin...end語句,fork...join語句外,每個(gè)語句和數(shù)據(jù)定義的最后必須有分號
· 可用/*...*/和//...對程序的任何部分做注釋,加上必要的注釋,以增強(qiáng)程序的可度性和可維護(hù)性。
Verilog用于模塊的測試
檢查程序的功能是否正確要求:
· 需要有測試激勵(lì)信號輸入到被測模塊
· 需要記錄被測模塊的輸出信號
· 需要把用功能和行為描述的Verilog模塊轉(zhuǎn)換為門級電路互連的電路結(jié)構(gòu)(綜合)
· 需要對已經(jīng)轉(zhuǎn)換為門級電路結(jié)構(gòu)的邏輯進(jìn)行測試(門級電路仿真)
· 需要對布局布線后的電路結(jié)構(gòu)進(jìn)行測試(布局布線后仿真)
何為仿真?為何要仿真?
仿真是對電路模塊進(jìn)行動態(tài)的全面測試,通過觀測被測試模塊的輸出信號是否符合要求可以調(diào)試和驗(yàn)證邏輯系統(tǒng)的設(shè)計(jì)和結(jié)構(gòu)是否準(zhǔn)確,并發(fā)現(xiàn)問題及時(shí)修改。
仿真可以在幾個(gè)層面上進(jìn)行?每個(gè)層面的仿真有什么意義?
仿真有:前(RTL)仿真,邏輯網(wǎng)表仿真,門級仿真和布線后仿真;
前仿真:前(RTL)仿真,邏輯網(wǎng)表仿真,門級仿真;可以調(diào)試和驗(yàn)證邏輯系統(tǒng)的設(shè)計(jì)和結(jié)構(gòu)準(zhǔn)確與否,并發(fā)現(xiàn)問題及時(shí)修改。
布線后仿真:分析設(shè)計(jì)模塊運(yùn)行是否正常;
模塊的結(jié)構(gòu)
Verilog 的基本設(shè)計(jì)單元是"模塊(block)"
verilog 模塊的結(jié)構(gòu)由在module和endmodule關(guān)鍵字之間的4個(gè)主要部分組成:
module block1(a,b,c,d); //端口定義 input a,b,c; output d; //I/O聲明 wirex;//信號類型聲明 assign d = a | x; assign x = (b &~c); //功能描述 endmodule
邏輯功能的定義
在Verilog中有3種方法可以描述電路的邏輯功能:
1. 用assign語句(連續(xù)賦值語句,常用于描述組合邏輯)
assign x = (b &~c);
2.用元件例化(instance 門元件例化)
and(門元件關(guān)鍵字) u_and3(例化原件名)(f,a,b,c);
注1:元件例化即是調(diào)用Verilog提供的元件;
注2:元件例化包括門元件例化和模塊元件例化;
注3:每個(gè)實(shí)例元件的名字必須唯一,以避免與其他調(diào)用元件的實(shí)例相混淆;
注4:例化元件名也可以省略。
3.用”always“塊語句
always @(posedge clk) //當(dāng)時(shí)鐘上升沿到來時(shí)執(zhí)行一遍塊內(nèi)語句 begin if(load) out = data; //同步預(yù)置數(shù)據(jù) else out = data + cin +1; //加1計(jì)數(shù) end
注1:”always“塊語句常用于描述時(shí)序邏輯,也可描述組合邏輯;
注2:”always“塊可用多種手段來表達(dá)邏輯關(guān)系,如用if...else語句或case語句;
注3:”always“塊語句與assign語句是并發(fā)執(zhí)行的,assign語句一定要放在”always“塊語句之外。
模塊結(jié)構(gòu)模板:
module <頂層模塊名> (<輸入輸出端口列表>); output 輸出端口列表; input 輸入端口列表; //更推薦 module <頂層模塊名> ( output 輸出端口列表, input 輸入端口列表 ); //1.使用assign語句定義邏輯功能 wire 結(jié)果信號名; assign <結(jié)果信號名> =表達(dá)式; //2.使用always塊定義邏輯功能 always@(<敏感信號表達(dá)式>) begin //過程賦值語句 //if語句 //case語句 //while,repeat,for循環(huán) //task,function調(diào)用 end //3.文件例化( );//模塊元件例化 ( );//門元件例化 endmodule
關(guān)鍵字
標(biāo)示符
任何用Verilog語言描述的東西都可以通過其名字來識別,這個(gè)名字被稱為標(biāo)示符;
如源文件名,模塊名,端口名,變量名,常量名,實(shí)例名等
標(biāo)示符可由字母,數(shù)字,$和下劃線組成,但第一個(gè)字符必須是字母或下劃線,不能是$和數(shù)字
在Verilog中標(biāo)示符是區(qū)分大小寫的,且不能與關(guān)鍵字同名。
語匯代碼編寫標(biāo)準(zhǔn)
綜合代碼編寫標(biāo)準(zhǔn)
-
邏輯電路
+關(guān)注
關(guān)注
13文章
492瀏覽量
42538 -
電路設(shè)計(jì)
+關(guān)注
關(guān)注
6660文章
2421瀏覽量
202890 -
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109931 -
時(shí)序分析
+關(guān)注
關(guān)注
2文章
127瀏覽量
22542 -
數(shù)字邏輯電路
+關(guān)注
關(guān)注
0文章
105瀏覽量
15790
原文標(biāo)題:IC學(xué)霸筆記 | Verilog基本語法概述
文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論