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

Verilog HDL實(shí)驗(yàn)練習(xí)與語(yǔ)法手冊(cè)
常見(jiàn)的Verilog行為級(jí)描述語(yǔ)法

Verilog語(yǔ)法基礎(chǔ)
通過(guò)實(shí)例設(shè)計(jì)來(lái)加深Verilog描述語(yǔ)法理解

評(píng)論