![Verilog HDL硬件描述語言_第1頁](http://file4.renrendoc.com/view/b5802655805a7f0ce5f637c7350c4ebc/b5802655805a7f0ce5f637c7350c4ebc1.gif)
![Verilog HDL硬件描述語言_第2頁](http://file4.renrendoc.com/view/b5802655805a7f0ce5f637c7350c4ebc/b5802655805a7f0ce5f637c7350c4ebc2.gif)
![Verilog HDL硬件描述語言_第3頁](http://file4.renrendoc.com/view/b5802655805a7f0ce5f637c7350c4ebc/b5802655805a7f0ce5f637c7350c4ebc3.gif)
![Verilog HDL硬件描述語言_第4頁](http://file4.renrendoc.com/view/b5802655805a7f0ce5f637c7350c4ebc/b5802655805a7f0ce5f637c7350c4ebc4.gif)
![Verilog HDL硬件描述語言_第5頁](http://file4.renrendoc.com/view/b5802655805a7f0ce5f637c7350c4ebc/b5802655805a7f0ce5f637c7350c4ebc5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
三、
VerilogHDL硬件描述語言大規(guī)??删幊唐骷夹g(shù)課程安排一、可編程邏輯器件基礎(chǔ)二、數(shù)字系統(tǒng)設(shè)計(jì)方法三、VerilogHDL硬件描述語言四、開發(fā)軟件介紹五、應(yīng)用實(shí)驗(yàn)六、考核方式三、VerilogHDL硬件描述語言1.VerilogHDL概述2.VerilogHDL建模概述3.VerilogHDL基本語法4.VerilogHDL的順序執(zhí)行與并發(fā)執(zhí)行5.條件語句使用要點(diǎn)6.設(shè)計(jì)的可綜合性7.基本電路的verilog描述-組合電路1.VerilogHDL概述1.1什么是VerilogHDL?Verilog
HDL(VerilogHardwareDiscriptionLanguage)一種硬件描述語言,用于從算法級(jí)、門級(jí)到開關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模??梢詫?duì)硬件的并發(fā)執(zhí)行過程進(jìn)行建模1.VerilogHDL概述1.2Verilog的歷史1983年由GatewayDesignAutomation公司(后被Cadence收購)首創(chuàng)1990年,Cadence公司成立OVI(Open
VerilogInternational)組織來推廣VerilogHDL1995年,IEEE制定了VerilogHDL標(biāo)準(zhǔn),即IEEEStd1364–1995(Verilog-1995)2001年,IEEE1364-2001(Verilog-2001)獲得通過1.VerilogHDL概述1.3Verilog與VHDL均為硬件描述語言,應(yīng)用都很普遍VHDL由美國國防部高級(jí)研究計(jì)劃署開發(fā)兩者的區(qū)別:VHDL側(cè)重于系統(tǒng)級(jí)描述,從而更多的為系統(tǒng)級(jí)設(shè)計(jì)人員所采用Verilog側(cè)重于電路級(jí)描述,從而更多的為電路級(jí)設(shè)計(jì)人員所采用1.VerilogHDL概述1.4VerilogHDL與C語言C語言:計(jì)算機(jī)程序設(shè)計(jì)語言,順序執(zhí)行VerilogHDL:語法與C語言接近,硬件描述語言,對(duì)硬件的并發(fā)執(zhí)行過程進(jìn)行建模利用VerilogHDL編程時(shí),要時(shí)刻記得VerilogHDL是硬件語言,要將VerilogHDL與硬件電路對(duì)應(yīng)起來1.VerilogHDL概述1.5四種抽象層次行為或算法級(jí):Verilog所支持的最高抽象層次。設(shè)計(jì)者只注重其實(shí)現(xiàn)的算法,不用關(guān)心其具體的硬件實(shí)現(xiàn)細(xì)節(jié)。與C語言編程類似。數(shù)據(jù)流級(jí):通過描述數(shù)據(jù)流在寄存器間如何傳輸以及如何處理這些數(shù)據(jù)來對(duì)設(shè)計(jì)進(jìn)行建模。門級(jí):從組成電路的邏輯門及其相互之間的互連關(guān)系的角度來設(shè)計(jì)模塊。類似于使用門級(jí)邏輯簡(jiǎn)圖來完成設(shè)計(jì)。開關(guān)級(jí):Verilog所支持的最低抽象層。通過使用開關(guān)、存儲(chǔ)節(jié)點(diǎn)及其互連關(guān)系來設(shè)計(jì)模塊。術(shù)語RTL級(jí)(寄存器傳輸級(jí)):通常指能夠被邏輯綜合工具接受的行為級(jí)和數(shù)據(jù)流級(jí)的混合描述在一個(gè)模塊中可以混合使用多個(gè)抽象層次2.VerilogHDL建模概述數(shù)字電路=線+器件線:器件管教之間的物理連接器件:組合邏輯(如與或非門等)和時(shí)序邏輯器件(如寄存器、鎖存器、RAM等)VerilogHDL建模:使用HDL語言對(duì)數(shù)字電路的兩種基本要素的特性及相互之間的關(guān)系進(jìn)行描述。2.1建模2.VerilogHDL建模概述是Verilog的基本描述單元,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu)及其與其他模塊通信的外部端口概念上可等同一個(gè)器件,如通用器件(與門、三態(tài)門等)或通用宏單元(計(jì)數(shù)器、ALU、CPU)等。模塊可被另一個(gè)模塊調(diào)用一個(gè)電路設(shè)計(jì)可由多個(gè)模塊組合而成。2.2模塊(module)2.VerilogHDL建模概述例1.加法器2.2模塊(module)簡(jiǎn)單實(shí)例module
adder
(a,
b,
cin,
cout,
sum);
input
[2:0]
a;
input
[2:0]
b;
input
cin;
output
cout;
output
[2:0]
sum;
assign
{cout,sum}
=
a
+b
+
cin;endmodule2.VerilogHDL建模概述例2.比較器2.2模塊(module)簡(jiǎn)單實(shí)例module
compare
(equal,a,b);
input
[1:0]
a,b;
//declaretheinputsignal;
output
equal
;
//declaretheoutputsignal;
assign
equal
=
(a
==
b)
?
1:0
;
/*ifa=b,output1,otherwise0;*/endmodule2.VerilogHDL建模概述例3.三態(tài)門驅(qū)動(dòng)器2.2模塊(module)簡(jiǎn)單實(shí)例module
mytri
(din,
d_en,
d_out);
input
din;
input
d_en;
output
d_out;
//--Enteryourstatementshere--//
assign
d_out
=
d_en
?
din
:'bz;endmodulemodule
trist
(din,
d_en,
d_out);
input
din;
input
d_en;
output
d_out;
//--statementshere--//
mytri
u_mytri(din,d_en,d_out);endmodule2.VerilogHDL建模概述模塊內(nèi)容位于module和endmodule兩個(gè)語句之間模塊包括接口描述部分和邏輯功能描述部分??膳c實(shí)際器件相類比每個(gè)模塊要進(jìn)行端口定義,并說明輸入、輸出口,然后對(duì)模塊的功能進(jìn)行邏輯描述(測(cè)試模塊例外)書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句可以分幾行寫。除endmodule與局外,每個(gè)語句后面需要有分號(hào)表示該語句結(jié)束2.3模塊的結(jié)構(gòu)2.VerilogHDL建模概述2.4模塊語法module
module_name
(port1,port2,
......)
;//Declarations:input,
output,
inout,reg,
wire,
parameter,function,
task,
.
.
.//Statements:Initial
statementAlways
statementModule
instantiationGate
instantiationContinuous
assignmentendmodule2.VerilogHDL建模概述一個(gè)模塊用一個(gè)文件模塊名與文件名要同名一行一句語句信號(hào)方向按輸入、輸出、雙向順序描述盡量采用參數(shù)化,提高設(shè)計(jì)的重用2.5書寫語法建議2.VerilogHDL建模概述信號(hào)在電路中傳輸會(huì)有傳播延時(shí),如線延時(shí)、器件延時(shí)等時(shí)延就是對(duì)延時(shí)特性的HDL描述所有時(shí)延都必須根據(jù)時(shí)間單位進(jìn)行定義,定義方式為在文件頭添加如下語句:是VerilogHDL提供的預(yù)編譯處理命令,1ns表示時(shí)間單位是1ns,100ps表示時(shí)間精度是100ps。2.6時(shí)延2.VerilogHDL建模概述表示B信號(hào)在2個(gè)時(shí)間單位后得到A信號(hào)的值。2.6時(shí)延時(shí)延舉例assign
#2
B
=
A;2.VerilogHDL建模概述結(jié)構(gòu)化描述方式數(shù)據(jù)流描述方式行為描述方式2.7三種建模方式2.VerilogHDL建模概述通過對(duì)電路結(jié)構(gòu)的描述來建模,即通過對(duì)器件的調(diào)用(HDL概念稱為“例化”),并使用線來連接各器件的描述方式器件包括:Verilog的內(nèi)置門(如與門and,異或門xor等),也可以是用戶的一個(gè)設(shè)計(jì)反映了一個(gè)設(shè)計(jì)的層次結(jié)構(gòu)2.7三種建模方式結(jié)構(gòu)化描述方式2.VerilogHDL建模概述2.7三種建模方式結(jié)構(gòu)化描述方式例1:一位全加器module
FA_struct
(A,B,Cin,Sum,Cout);
input
A;
input
B;
input
Cin;
output
Sum;
output
Cout;
wire
S1,
T1,
T2;
//--statements--//
xor
X1
(S1,
A,
B);
xor
X2
(Sum,
S1,
Cin);
and
A1
(T1,
S1,
Cin);
and
A2
(T2,A,
B);
or
O1
(Cout,
T1,
T2);endmodule2.VerilogHDL建模概述1.兩個(gè)異或門、兩個(gè)與門、一個(gè)或門2.S1、T1、T2是門與門之間的連線3.純結(jié)構(gòu)的建模方式4.Xor、and、or為Verilog內(nèi)置的門器件xor表明調(diào)用一個(gè)內(nèi)置的異或門,器件名稱xor,代碼實(shí)例化名X1;括號(hào)內(nèi)的S1,A,B表明該器件管腳的實(shí)際連接線的名稱,其中A、B是輸入,S1是輸出。其他相同一位全加器代碼2.VerilogHDL建模概述結(jié)構(gòu)化描述方式例2:兩位全加器兩位全加器結(jié)構(gòu)示意框圖module
Four_bit_FA
(FA,
FB,
FCin,
FSum,
FCout
)
;
parameter
SIZE
=
2;
input
[SIZE:1]
FA;
input
[SIZE:1]
FB;
input
FCin;
output
[SIZE:1]
FSum;
output
FCout;
wire
FTemp;
FA_struct
FA1(
.A
(FA[1]),
.B
(FB[1]),
.Cin
(FCin)
,
.Sum
(FSum[1]),
.Cout
(Ftemp)
);
2.VerilogHDL建模概述兩位全加器代碼注意:.A(FA[1])的含義
FA_struct
FA2(
.A
(FA[2]),
.B
(FB[2]),
.Cin
(FTemp)
,
.Sum
(FSum[2]),
.Cout
(FCout
)
);
endmodule通過對(duì)數(shù)據(jù)流在設(shè)計(jì)中的具體行為的描述來建模使用連續(xù)賦值語句。借助于Verilog提供的一些運(yùn)算符,如按位邏輯運(yùn)算,邏輯與(&),邏輯或(|)等assign
#delay
net_name
=
expression;如:assign
#2
A
=
B;2.VerilogHDL建模概述2.7三種建模方式數(shù)據(jù)流描述方式2.VerilogHDL建模概述2.7三種建模方式數(shù)據(jù)流描述方式例1:一位全加器`timescale
1ns/100ps
module
FA_flow(A,B,Cin,Sum,Cout)
input
A,B,Cin;
output
Sum,
Cout;
wire
S1,T1,T2;
assign
#
2
S1
=
A
^
B;
assign
#
2
Sum
=
S1
^
Cin;
assign
#
2
T1
=
S1
&
Cin;
assign
#
2
T2
=
A
&
B
;
assign
#
2
Cout
=
T1
|
T2;
endmodule2.VerilogHDL建模概述一位全加器代碼注意:各assign語句之間是并行執(zhí)行的,即各語句的執(zhí)行與語句之間的順序無關(guān)。如上,當(dāng)A有變化時(shí),S1、T2將同時(shí)變化,S1的變化又會(huì)造成Sum和T1的同時(shí)變化。2.VerilogHDL建模概述采用對(duì)信號(hào)行為級(jí)的描述(不是結(jié)構(gòu)級(jí)的描述)的方法來建模一般采用initial塊語句或always塊語句通常采用行為級(jí)的運(yùn)算符如加法(+),減法(-)運(yùn)算符等2.7三種建模方式行為描述方式module
FA_behav1(A,
B,
Cin,
Sum,
Cout
);
input
A,B,Cin;
output
Sum,Cout;
reg
Sum,
Cout;
reg
T1,T2;
always@
(
A
or
B
or
Cin
)
begin
Sum
=
(A
^
B)
^
Cin
;
T1
=
(A
^
B)
&
Cin;
T2
=
A
&
B
;
Cout
=
T1|
T2;
end
endmodule2.VerilogHDL建模概述行為描述方式例1:一位全加器行為建模注意:只有寄存器類型的信號(hào)才可以在always和initial語句中進(jìn)行賦值,類型定義通過reg語句實(shí)現(xiàn)always語句一直重復(fù)執(zhí)行,由敏感表中的變量觸發(fā)在begin和end之間的語句順序執(zhí)行,屬于串行語句module
FA_behav2(A,
B,
Cin,
Sum,
Cout
);
input
A,B,Cin;
output
Sum,Cout;
reg
Sum,
Cout;
always@
(
A
or
B
or
Cin
)
begin
{Cout
,Sum}
=
A
+
B
+
Cin
;
end
endmodule2.VerilogHDL建模概述行為描述方式例2:一位全加器行為建模采用更高級(jí)(更趨于行為級(jí))的描述方式,即直接采用“+”來描述加法{Cout,Sun}表述將兩個(gè)信號(hào)拼接成一個(gè)寬度更長(zhǎng)的信號(hào)。2.VerilogHDL建模概述實(shí)際設(shè)計(jì)中往往是多種設(shè)計(jì)模式的混合。一般,對(duì)頂層設(shè)計(jì)采用結(jié)構(gòu)描述方式;對(duì)底層模塊,可采用數(shù)據(jù)流、行為級(jí)或兩者的結(jié)合如上面的兩位全加器,對(duì)頂層模塊(Four_bit_FA)采用結(jié)構(gòu)描述方式進(jìn)行“例化”,對(duì)底層模塊(FA)可采用結(jié)構(gòu)描述、數(shù)據(jù)流描述或行為描述。2.7三種建模方式混合設(shè)計(jì)描述3.VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句標(biāo)識(shí)符定義:標(biāo)識(shí)符(identifier)用于定義模塊名、端口名、信號(hào)等??梢允且唤M字母、數(shù)字、$符號(hào)和_(下劃線)符號(hào)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是字母或者下劃線。另外,標(biāo)識(shí)符區(qū)分大小寫。例:CountCOUNT//與Count不同
R56_68FIVE$關(guān)鍵字,Verilog中的保留字。注意:只有小寫的關(guān)鍵字才是保留字書寫規(guī)范建議用有意義的有效的名字,如Sum、CPU_addr等用下劃線區(qū)分詞采用一些前綴或后綴,
時(shí)鐘采用Clk前綴:Clk_50,Clk_CPU
低電平采用_n后綴:Enable_n統(tǒng)一一定的縮寫,如全局復(fù)位信號(hào)Rst同一信號(hào)在不同層次保持一致性,如同一時(shí)鐘信號(hào)必須在各模塊中保持一致自定義的標(biāo)識(shí)符不能與保留字同名參數(shù)采用大寫,如SIZEVerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句Verilog中有兩種注釋的方式,一種是一“/*”符號(hào)開始,以“*/”符號(hào)結(jié)束,在兩個(gè)符號(hào)之間的語句都是注釋語句,因此可以擴(kuò)展到多行。如:以上n各語句都是注釋語句另一種是以“//”開頭的語句,它表示以//開始到本行的結(jié)束都屬于注釋語句注釋/*statement1,statement2,...
statementn*/VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句格式VerilogHDL是區(qū)分大小寫的,即大小寫不同的標(biāo)識(shí)符是不同的Verilog書寫格式自由,一條語句可多行書寫;一行可寫多個(gè)語句空白(新行、制表符、空格)沒有特殊意義如與是一樣的input
A;
input
Binput
A;input
B;書寫規(guī)范建議一個(gè)語句一行采用空四格的TAB鍵進(jìn)行縮進(jìn)VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句數(shù)字值集合值的集合常量(整型、實(shí)型、字符型)變量值集合四種基本的值類型0:邏輯0或“假”1:邏輯1或“真”X:未知值Z:高阻四種值得解釋內(nèi)置于語言中與門的輸入或表達(dá)式中的“z”的值通常解釋為“x”X值與z值不區(qū)分大小寫,及0x1z和0X1Z相同常量整型、實(shí)型、字符串型下劃線符號(hào)“_”可隨意用在整數(shù)或?qū)崝?shù)中,用來提高易讀性。注:下劃線不能作為首字符。整型書寫格式:簡(jiǎn)單的十進(jìn)制數(shù)格式;基數(shù)格式字符串型:雙引號(hào)內(nèi)的字符系列。整型-簡(jiǎn)單的十進(jìn)制格式帶有一個(gè)可選的“+”或“-”操作符的數(shù)字序列例如:32十進(jìn)制數(shù)32-15十進(jìn)制數(shù)-15整型-基數(shù)表示法(一)格式:[size]’basevalueSize定義以位計(jì)的常量的位長(zhǎng);base為o或O(表示八進(jìn)制),b或B(表示二進(jìn)制),d或D(表示十進(jìn)制),h或H(表示十六進(jìn)制)之一;value是基于base的值的數(shù)字序列。值x和z以及十六進(jìn)制中的a到f不區(qū)分大小寫整型-基數(shù)表示法(二)合法例子:非法例子:5‘o37
//5位常量,值為八進(jìn)制數(shù)37(和5'b11111等效)4
'd2
//4位常量,值十進(jìn)制數(shù)2(和4'b0010等效)4
'b1x_01
//4位常量,各位的狀態(tài)依次為1x_017
'hx
//7位常量,每位的狀態(tài)均為未知(和7'bxxxxxxx等效)4
'hz
//4位常量,每位的狀態(tài)均為高阻(和4'bzzzz等效)8
'h
2A
//位長(zhǎng)和單引號(hào)之間以及基數(shù)和數(shù)字之間允許出現(xiàn)空格3'
b
001
//非法:'和基數(shù)b之間不允許出現(xiàn)空格(2+3)
'b10
//非法:位長(zhǎng)不能為表達(dá)式4
'd-4
//非法:數(shù)值不能為負(fù),符號(hào)應(yīng)放在最左邊注意:x(或z)在十六進(jìn)制中代表4位x(或z),在八進(jìn)制中代表3位x(或z),在二進(jìn)制中代表1位x(或z)。整型數(shù)的長(zhǎng)度定義是可選的,如沒有定義長(zhǎng)度,數(shù)的長(zhǎng)度為相應(yīng)值中定義的位數(shù),如:如果定義的長(zhǎng)度比常量制定的長(zhǎng)度長(zhǎng),通常在左邊填0補(bǔ)位。但是如果數(shù)最左邊一位為“x”或“z”,就相應(yīng)地用x或z在左邊補(bǔ)位。如:如果長(zhǎng)度定義的要小,最左邊的位相應(yīng)地被截?cái)?。如?o
721
//9位八進(jìn)制數(shù)'h
AF
//8位十六進(jìn)制數(shù)整型-基數(shù)表示法(三)10'b10
//左邊填0占位,等價(jià)于10'b000000001010'bx0x1
//左邊填X占位,等價(jià)于10'bxxxxxxx0x13'b1001_0011
//與3'b011等價(jià)5'H0FF
//與5'H1F等價(jià)字符串型雙引號(hào)內(nèi)的字符序列。字符串不能分成多行書寫。例:整數(shù)型常量是可以綜合的,而實(shí)數(shù)型和字符串型常量都是不可綜合的"INTERNALERROR""thisisanexampleforVerilogHDL"VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符和表達(dá)式條件語句Case語句數(shù)據(jù)類型線網(wǎng)類型(nettype)寄存器類型(regtype)數(shù)據(jù)類型-線網(wǎng)類型(nettype)常用wire定義用于對(duì)結(jié)構(gòu)化器件之間的物理連線建模代表物理連接線,不存儲(chǔ)邏輯值,必須由器件驅(qū)動(dòng),通常由assign進(jìn)行賦值,如:當(dāng)一個(gè)wire類型的信號(hào)沒有被驅(qū)動(dòng)時(shí),缺省值為z(高阻)信號(hào)非有定義數(shù)據(jù)類型時(shí),缺省為wire類型語法:assign
A
=
B
^
C;wire
[msb:lsb]
wire1,
wire2,
...
,
wireN;數(shù)據(jù)類型-寄存器類型(regtype)reg是最常用的寄存器類型,用于對(duì)存儲(chǔ)單元的描述,如D觸發(fā)器,ROM。在某種觸發(fā)機(jī)制下分配一個(gè)值,在分配下一個(gè)值之前保留原值reg類型的變量,不一定是存儲(chǔ)單元,如在always語句中進(jìn)行描述的必須用reg類型的變量。語法:例:reg
[msb:lsb]
reg1,
reg2,
...
,
regN;reg
[3:0]
Sat;
//Sat為4位寄存器類型信號(hào)reg
Cnt;
//1位寄存器類型reg[1:32]
Kisp,
pisp,
lisp;
//3個(gè)32位寄存器類型信號(hào)數(shù)據(jù)類型-寄存器類型(regtype)建模舉例:用寄存器類型構(gòu)建兩位的D觸發(fā)器:用寄存器數(shù)組類型來建立存儲(chǔ)器的模型,如對(duì)2個(gè)8位的RAM建模如下:存儲(chǔ)單元必須一個(gè)一個(gè)地賦值reg
[1:0]
Dout;...always@(posedge
clk)
Dout
<=
Din;...reg[7:0]
Mem[0:1];Mem[0]
=
'h55;Mem[1]
=
'haa;VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符條件語句Case語句運(yùn)算符關(guān)系運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符按位邏輯運(yùn)算符條件運(yùn)算符連接運(yùn)算符移位運(yùn)算符運(yùn)算符-算術(shù)運(yùn)算符常用算術(shù)運(yùn)算符:加法(二元運(yùn)算符):“+”減法(二元運(yùn)算符):“-”乘法(二元運(yùn)算符):“*”除法(二元運(yùn)算符):“/”求余(二元運(yùn)算符):“%”運(yùn)算符-關(guān)系運(yùn)算符(一)包括:> 大于< 小于>= 不小于<= 不大于== 等于=== 全等!= 不等!== 不全等結(jié)果為True(1)或False(0)。如果操作數(shù)中有一位為x或z,那么結(jié)果為x運(yùn)算符-關(guān)系運(yùn)算符(二)例:如果操作數(shù)長(zhǎng)度不同,長(zhǎng)度較短的操作數(shù)在左方填0補(bǔ)齊。例:邏輯相等與不等的比較中,只要一個(gè)操作數(shù)含有x或z,比較結(jié)果為未知(x)。如:23>45
//結(jié)果為False(0);52<8'hxFF
//結(jié)果為x'b1000>='b01110;
//等價(jià)于'b01000>='b01110;結(jié)果為假(0)Data
=
'b11x0;Addr
=
'b11x0;Data
==
Addr
//比較結(jié)果不定,也就是說值為x運(yùn)算符-邏輯運(yùn)算符(一)包括:&& 邏輯與|| 邏輯或! 邏輯非語法:(表達(dá)式1)邏輯運(yùn)算符(表達(dá)式2)運(yùn)算結(jié)果為0或1,例:Crd='b0;
//0為假Dgs='b1;
//1為真Crd&&Dgs
//結(jié)果為0(假)Crd||Dgs
//結(jié)果為1(真)!Dgs
//結(jié)果為0(假)運(yùn)算符-邏輯運(yùn)算符(二)邏輯與(&&)的真值表:邏輯或(||)的真值表:運(yùn)算符-按位邏輯運(yùn)算符(一)包括:~ 一元非,相當(dāng)于非門運(yùn)算& 二元與,相當(dāng)于與門運(yùn)算| 二元或,相當(dāng)于或門運(yùn)算^ 二元異或,相當(dāng)于異或門運(yùn)算~^,^~ 二元異或非,即同或,相當(dāng)于同或門運(yùn)算
在輸入操作數(shù)的對(duì)應(yīng)位上按位操作,產(chǎn)生向量結(jié)果。運(yùn)算符-按位邏輯運(yùn)算符(二)按位邏輯運(yùn)算符真值表:運(yùn)算符-按位邏輯運(yùn)算符(三)例:如果操作數(shù)長(zhǎng)度不相等,長(zhǎng)度較小的操作數(shù)在最左端填0補(bǔ)位。例如:A
=
'b0110;B
=
'b0100;A|B
//結(jié)果為'b0110A&B
//結(jié)果為'b0100'b0110^'b10000//與下式的操作相同'b00110^'b10000//結(jié)果為:'b10110運(yùn)算符-條件運(yùn)算符根據(jù)條件表達(dá)式的值選擇表達(dá)式語法:cond_expr?expr1:expr2;如果cond_expr為真(1),選項(xiàng)expr1,如果cond_expr為假(0),選擇expr2.如果cond_expr為x或z,結(jié)果是按以下邏輯expr1和expr2按位操作的值:0與0得1,1與1得1,其余情況為x例:wire
[2:0]
Student
=
Marks>18
?
Grade_A
:
Grade_C;//計(jì)算表達(dá)式Marks>18,如果為真,Grade_Aa賦值給Stuent;//如果為假,Grade_c賦值給Student運(yùn)算符-連接運(yùn)算符將小表達(dá)式合并形成大表達(dá)式語法:{expr1,expr2,…,exprN}例:wire
[7:0]
Dbus;assign
Dbus[7:4]
=
{Dbus[0],
Dbus[1],
Dbus[2],
Dbus[3]};//以反轉(zhuǎn)的順序?qū)⒌投?位賦給高端4位assign
Dbus
=
{Dbus[3:0},
Dbus[7:4]};//高4位與低4位交換運(yùn)算符:移位運(yùn)算符<<左移位運(yùn)算符>>右移位運(yùn)算符語法:a>>n或a<<na代表要進(jìn)行移位的操作數(shù),n代表要移幾位。邏輯移位,移出的位用0填補(bǔ)例1:若A=5’b11001,則:
A>>2的值為5’b00110A<<2的值為5’b00100VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符If_else語句Case語句If_else語句用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。三種形式:If_else語句的三種形式(1):if(condition)
procedural_statement;
(2):if(condition)
procedural_statement_1;
//語句1else
procedural_statement_2;
//語句2
(3):if(condition_1)
procedural_statement_1;
//語句1else
if(condition_2)
procedural_statement_2;
//語句2
.
.
.else
if(condition_m)
procedural_statement_m;
//語句melse
procedural_statement_n;
//語句n說明:1.if語句后面都有表達(dá)式,一般為邏輯表達(dá)式或關(guān)系表達(dá)式。0、x、z按“假”處理,1按“真”處理。2.注意分號(hào)的使用,if、else合起來是一條語句,else不能單獨(dú)使用3.if、else后面如果有多個(gè)操作語句,必須用begin和end關(guān)鍵字包含起來組成為一個(gè)復(fù)合語句,例if(a>b)
begin
out1<=int1;
out2<=int2;
endelse
begin
out1<=int2;
out2<=int1;
end說明:4.允許一定形式的表達(dá)式簡(jiǎn)寫,例如:5.if語句的嵌套注意if和else的配對(duì)關(guān)系,else總是與它上面最近的if配對(duì)。if(expression)
等同于if(expression
==
1)if(!expression)
等同于if(expression
!=
1)if(condition_1)
if(condition_2)
procedural_statement_1;
else
procedural_statement_2;else
if(condition_3)
procedural_statement_3;
else
procedural_statement_4;例2:if(condition_1)
begin
if(condition_2)
procedural_statement_1;
endelse
procedural_statement_2;可以用begin、end塊語句來確定配對(duì)關(guān)系。例1:if(condition_1)
begin
if(condition_2)
procedural_statement_1;
else
procedural_statement_2;
end例:模為60的8421BCD碼加法計(jì)數(shù)器BCD碼——4位,0-9有進(jìn)位輸入,結(jié)果加1輸出,計(jì)數(shù)滿60之后產(chǎn)生一個(gè)進(jìn)位輸出VerilogHDL基本語法標(biāo)識(shí)符注釋格式數(shù)字值集合數(shù)據(jù)類型運(yùn)算符If_else語句Case語句case語句多分支選擇語句三種形式:1.case(表達(dá)式)<case分支項(xiàng)>endcase2.casez(表達(dá)式)<case分支項(xiàng)>endcase3.casex(表達(dá)式)<case分支項(xiàng)>endcase語法:case(case_expr)
case_item_expr_1
:
procedural_statement_1;
case_item_expr_2
:
procedural_statement_2;
.
.
.
case_item_expr_m
:
procedural_statement_m;
default:procedural_statement_n;endcase說明:1.case括號(hào)中的表達(dá)式稱為控制表達(dá)式,分支項(xiàng)中的表達(dá)式稱為分支表達(dá)式。2.當(dāng)控制表達(dá)式的值與分支表達(dá)式的值項(xiàng)相等時(shí),就執(zhí)行分支表達(dá)式后面的語句;如果所有的分支表達(dá)式的值都沒有與控制表達(dá)式的值相匹配,就執(zhí)行default后面的語句3.default項(xiàng)可有可無,一個(gè)case語句只能有一個(gè)default項(xiàng)4.每個(gè)分支表達(dá)式的值必須互不相同,否則會(huì)出現(xiàn)矛盾。5.所有表達(dá)式值的位寬必須相等。6.case、casez、casex的區(qū)別,case為全等比較,casez對(duì)表達(dá)式中出現(xiàn)z的相應(yīng)位不予比較,casex對(duì)表達(dá)式中出現(xiàn)x、z的相應(yīng)位均不予比較,見真值表例:BCD碼七段數(shù)碼顯示譯碼器三種建模方式詳解結(jié)構(gòu)建模數(shù)據(jù)流建模行為建模三種建模方式詳解結(jié)構(gòu)建模數(shù)據(jù)流建模行為建模結(jié)構(gòu)建模(一)描述語句主要是實(shí)例化語句實(shí)例化的對(duì)象主要是PLD廠家提供的宏單元和設(shè)計(jì)者已有的設(shè)計(jì)結(jié)構(gòu)建模(二)——實(shí)例化語句語法:module_name
instance_name(port_associations);端口關(guān)聯(lián)可通過位置或名稱關(guān)聯(lián),但兩者不能混用通過位置關(guān)聯(lián)(port_expr1,port_expr2,…,port_exprn);通過名稱關(guān)聯(lián)(.PortName(portexpr1),.PortName(port_expr2),….PortName(port_exprn));結(jié)構(gòu)建模(二)——實(shí)例化語句例:module
and_ins(DO,D1,D2);
input
D1,D2;
output
DO;
wire
T1,T2;
//采用位置關(guān)聯(lián),T1對(duì)應(yīng)輸出端口,D1、D2對(duì)應(yīng)兩個(gè)輸入端口
and
A1(T1,D1,D2);
//采用名稱關(guān)聯(lián),C是test模塊的端口,與信號(hào)T2相連
test
O1(
.C(T2),
.A(D1),
.B(D2));
assign
DO=T1^T2;
endmodule結(jié)構(gòu)建模(二)——實(shí)例化語句說明:port_expr可以是一下任何類型標(biāo)識(shí)符,reg或wire。如,上例中的T3為wire型位選項(xiàng)則。如,.c(D[0]),c端口接到D信號(hào)的第0位部分選擇。如,.Bus(Din[5:4])上述類型的合并。如,.Addr({A1,A2[1:0]})表達(dá)式(只適用于輸入端口),如,.A(wire
Zire=0)建議:盡量采用名稱關(guān)聯(lián)結(jié)構(gòu)建模(二)——實(shí)例化語句端口懸空的處理:實(shí)例化時(shí),可能有些管教沒有用到,可在映射中采用空白處理。對(duì)輸入管教懸空,則該管教輸入為高阻Z,輸入管教被懸空,該輸出管教廢棄不用。DFF
d1
(
.Q(QS),
.Qbar
(
),
.Data
(D)
,
.Preset
(
),
//該管腳懸空
.Clock
(CK));
//名稱對(duì)應(yīng)方式。三種建模方式詳解結(jié)構(gòu)建模數(shù)據(jù)流建模行為建模數(shù)據(jù)流建模(一)主要描述方式為持續(xù)性賦值語句數(shù)據(jù)流建模(二)——持續(xù)性賦值語句也稱連續(xù)賦值語句(continuousassignment)對(duì)線網(wǎng)類型變量賦值語法:主要用于組合邏輯的建模執(zhí)行過程:只要右邊表達(dá)式任一個(gè)變量有變化,表達(dá)式立即被計(jì)算,計(jì)算的結(jié)果立即賦給左邊信號(hào)為并行執(zhí)行語句,與書寫順序無關(guān)assign
net_type
=
expression;數(shù)據(jù)流建模(二)——持續(xù)性賦值語句舉例:wire
[3:0]
Z,
Preset,
Clear;
//線網(wǎng)說明assign
Z
=
Preset
&
Clear;
//連續(xù)賦值語句wire
Cout,
C
i
n
;wire
[3:0]
Sum,
A,
B;.
.
.assign
{Cout,
Sum}
=
A
+
B
+
Cin;assign
Mux
=
(S
=
=
3)?
D
:
'bz;三種建模方式詳解結(jié)構(gòu)建模數(shù)據(jù)流建模行為建模行為建模通過對(duì)設(shè)計(jì)的行為的描述來實(shí)現(xiàn)對(duì)設(shè)計(jì)建模一般采用過程語句(initial語句和always語句)行為建?!猧nitial語句語法1:initial
語句1;語法2:只執(zhí)行一次常用于產(chǎn)生激勵(lì)信號(hào)或寄存器變量的初始化常用于仿真中的初始化initial
begin
statement1;
statement2;
.
.
.
statementn;
end行為建模——initial語句例:用initial語句產(chǎn)生激勵(lì)信號(hào)`timescale
1ns/1nsmodule
test;
reg
A,B,C;
wire
D;
initial
begin
A=0;B=1;c=0;
#50
A=1;B=0;
#50
A=0;C=1;
#50
B=1;
#50
B=0;C=0;
end
and3
t1(D,A,B,C);
endmodule行為建?!猘lways語句語法1:always
時(shí)序控制語句1;語法2:always語句不斷重復(fù)執(zhí)行,即一直檢測(cè)時(shí)序控制條件,一旦滿足,其后的語句被執(zhí)行一次always
時(shí)序控制
begin
statement1;
statement2;
...
statementn;
end行為建?!猘lways語句例:時(shí)序控制通常為敏感信號(hào)表達(dá)式,當(dāng)表達(dá)式中變量的值改變時(shí),其后的語句被執(zhí)行一次,多個(gè)表達(dá)式之間用“or”連接,此時(shí)的語法為:敏感信號(hào)一般為兩種類型:邊沿敏感型和電平敏感型,兩者一般不要在一個(gè)always語句中同時(shí)使用
always
#5
areg
=
~areg;
always
@(敏感信號(hào)表達(dá)式)
begin
n條語句;
end行為建模——always語句邊沿觸發(fā)的always常常描述時(shí)序行為,綜合后生成的電路為寄存器加門級(jí)組合邏輯電平觸發(fā)的always常常描述組合邏輯行為,綜合后生成的電路為門級(jí)組合邏輯或帶鎖存器的組合邏輯例:always
@(posedge
clk
or
posedge
clr)
//兩個(gè)敏感信號(hào)都是邊沿型always
@(A
or
B)
//兩個(gè)敏感信號(hào)都是電平敏感型always
@(posedge
clk
or
clr)
//不建議使用,兩種敏感類型不要同時(shí)使用行為建?!猵osedge和negedge關(guān)鍵字對(duì)時(shí)序電路的建模(時(shí)序電路由時(shí)鐘邊沿觸發(fā))posedge表示上升沿;negedge表示下降沿注意同步、異步控制信號(hào)的描述方法行為建?!猵osedge和negedge關(guān)鍵字例1:同步置位、同步清零的計(jì)數(shù)器module
cout(out,data,load,reset,clk);
input[7:0]
data;
input
load,clk,reset;
output[7:0]
out;
reg[7:0]
out;
always
@(posedge
clk)
//clk上升沿觸發(fā)
begin
if(!reset)
out
<=
8'h00;
//同步清零,低電平有效
else
if(load)
out
<=
data;
//同步置位,高電平有效
else
out
<=
out+1;
//上升沿計(jì)數(shù)
endendmodule行為建?!猵osedge和negedge關(guān)鍵字上例中,敏感信號(hào)表達(dá)式中沒有列出輸入信號(hào),load和reset,因?yàn)樗鼈優(yōu)橥娇刂菩盘?hào),在時(shí)鐘的上升沿才檢測(cè)這些信號(hào)行為建?!猵osedge和negedge關(guān)鍵字例2:異步控制信號(hào)的描述方式always
@(posedge
clk
or
posedge
clear)
begin
if(clear)
語句1;
//clear信號(hào)上升沿到來時(shí),clear為高電平,
else
//執(zhí)行語句1,即高電平清零有效語句2;
//否則,在時(shí)鐘的上升沿執(zhí)行語句2;
end
always
@(posedge
clk
or
negedge
clear)
begin
if(!clear)
語句1;
//低電平有效清零
else
語句2;
end行為建?!猵osedge和negedge關(guān)鍵字注意塊內(nèi)的邏輯描述要與敏感信號(hào)表達(dá)式信號(hào)中的有效電平一致,如下錯(cuò)誤的描述:always@(posedge
clk
or
negedge
clear)
begin
if(clear)
//矛盾,應(yīng)改為:if(!clear)
out
<=
0;
else
out
<=
in;
end其他語法賦值語句持續(xù)性賦值與過程賦值阻塞賦值與非阻塞賦值參數(shù)定義:parameter編譯預(yù)處理宏定義`define文件包含處理`include時(shí)間尺度`timescale其他語法賦值語句持續(xù)性賦值與過程賦值阻塞賦值與非阻塞賦值參數(shù)定義:parameter編譯預(yù)處理宏定義`define文件包含處理`include時(shí)間尺度`timescale賦值語句持續(xù)性賦值語句(continuousassignment),主要用于對(duì)wire型變量賦值,用于數(shù)據(jù)流建模過程賦值語句(proceduralassignment),多用于對(duì)reg型變量賦值,用于行為建模。包括阻塞賦值(blockingassignment)和非阻塞賦值(non-blockingassignment)兩種。賦值語句——持續(xù)型賦值語句例:2選1多路選擇器module
MUX2_1(out,a,b,sel);
input
a,b,sel;
output
out;
assign
out
=
(sel==0)?a:b;
//持續(xù)型賦值,如果sel為0,則out=a,否則,out=bendmodule賦值語句——過程賦值語句非阻塞(non-blocking)賦值方式賦值符號(hào)為“<=”,如:b<=a;非阻塞賦值在整個(gè)過程塊結(jié)束時(shí)才完成賦值操作,即b的值并不是立即就改變的阻塞(blocking)賦值方式賦值符號(hào)為“=”,如:b=a;語句結(jié)束時(shí)立即完成賦值操作,即b的值在該條件語句結(jié)束后立即改變同一個(gè)塊語句中,如果有多個(gè)阻塞賦值語句,那么前面的賦值操作沒完成之前,后面的語句就不能被執(zhí)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度杭州環(huán)保產(chǎn)業(yè)勞務(wù)派遣勞動(dòng)合同規(guī)范范本
- 2025年度城市景觀照明工程施工作業(yè)合同
- 2025年度公章授權(quán)委托書定制版與電子化管理合同
- 2025年度智能倉儲(chǔ)貨物代理合同示范文本
- 2025年度汽車金融產(chǎn)品銷售代理合同范本正規(guī)范本
- 2025年度光伏發(fā)電站施工安裝合同005
- 2025年度大棚養(yǎng)殖場(chǎng)設(shè)計(jì)與環(huán)保設(shè)施建設(shè)合同
- 2025年度企業(yè)財(cái)務(wù)報(bào)表分析與評(píng)估合同
- 2025年度建筑工程景觀園林設(shè)計(jì)與承包合同
- 2025年度建筑光伏發(fā)電系統(tǒng)承包合同
- 蘇教版八年級(jí)數(shù)學(xué)上冊(cè)期末試卷及答案【完美版】
- 法院拍賣議價(jià)協(xié)議書
- 新能源充電站運(yùn)營(yíng)手冊(cè)
- 2024年蘭州新區(qū)實(shí)正鑫熱電有限公司招聘筆試沖刺題(帶答案解析)
- 血透室護(hù)士長(zhǎng)述職
- (正式版)JTT 1218.4-2024 城市軌道交通運(yùn)營(yíng)設(shè)備維修與更新技術(shù)規(guī)范 第4部分:軌道
- 2MW-5MWh微網(wǎng)儲(chǔ)能項(xiàng)目整體技術(shù)方案設(shè)計(jì)
- 圍手術(shù)期中醫(yī)護(hù)理
- 2024年漢中市行政事業(yè)單位國有資產(chǎn)管理委員會(huì)辦公室四級(jí)主任科員公務(wù)員招錄1人《行政職業(yè)能力測(cè)驗(yàn)》模擬試卷(答案詳解版)
- 客車交通安全培訓(xùn)課件
- 《地表水環(huán)境質(zhì)量標(biāo)準(zhǔn)》
評(píng)論
0/150
提交評(píng)論