色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog的基本設計單元模塊介紹

FPGA之家 ? 來源:未知 ? 作者:劉勇 ? 2019-06-26 15:30 ? 次閱讀
3.1.模塊的結構

Verilog的基本設計單元是“模塊”(block)。一個模塊是由兩部分組成的,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。下面舉例說明:

圖1 模塊示例

m

請看上面的例子: 程序模塊旁邊有一個電路圖的符號。在許多方面,程序模塊和電路圖符號是一致的,這是因為電路圖符號的引腳也就是程序模塊的接口。而程序模塊描述了電路圖符號所實現的邏輯功能。以上就是設計一個簡單的Verilog程序模塊所需的全部內容。從上面的例子可以看出,Verilog結構位于在module和endmodule聲明語句之間,每個Verilog程序包括四個主要部分:端口定義、I/O說明、內部信號聲明、功能定義。

3.1.1、模塊的端口定義

模塊的端口聲明了模塊的輸入輸出口。其格式如下:

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

…….

endmodule

模塊的端口表示的是模塊的輸入和輸出口名,也就是它與別的模塊聯系端口的標識。在模塊被引用時,在引用的模塊中,有些信號要輸入到被引用的模塊中,有的信號需要從被引用的模塊中取出來。在引用模塊時其端口可以用兩種方法連接:

1)在引用時,嚴格按照模塊定義的端口順序來連接,不用標明原模塊定義時規定的端口名,舉例說明如下:

模塊名 實例化名( 連接端口1信號名, 連接端口2信號名,連接端口3信號名,….,,,);

2)在引用時用“.”標明原模塊定義時規定的端口名,舉例說明如下:

模塊名 實例化名(.端口1名( 連接信號1名),.端口2名( 連接信號2名),….,,,);

這樣表示的好處在于可以用端口名與被引用模塊的端口對應,不必嚴格按端口順序對應,提高了程序的可讀性和可移植性。

3.1.2、模塊內容

模塊的內容包括I/O說明、內部信號聲明、功能定義。

3.1.2.1、I/O說明的格式如下:

輸入口: input [信號位寬-1 :0] 端口名1;

input [信號位寬-1 :0] 端口名2;

………;

input [信號位寬-1 :0] 端口名i; //(共有i個輸入口)

輸出口: output [信號位寬-1 :0] 端口名1;

output [信號位寬-1 :0] 端口名2;

………;

output [信號位寬-1 :0] 端口名j; //(共有j個輸出口)

輸入/輸出口:

inout [信號位寬-1 :0] 端口名1;

inout [信號位寬-1 :0] 端口名2;

………;

inout [信號位寬-1 :0] 端口名k; //(共有k個雙向總線端口)

I/O說明也可以寫在端口聲明語句里。其格式如下:

module module_name(input port1,input port2,…

output port1,output port2… );

3.1.2.2、內部信號說明:

在模塊內用到的和與端口有關的wire 和 reg 類型變量的聲明。如:

reg [width-1 : 0] R變量1,R變量2 。。。。;

wire [width-1 : 0] W變量1,W變量2 。。。。;

………..

3.1.2.3、功能定義:

模塊中最重要的部分是邏輯功能定義部分。有三種方法可在模塊中產生邏輯。

1)用“assign”聲明語句,如: assign a = b & c;

2)實例化模塊,如: and u1( q, a, b );

3)用“always”塊

如:always @(posedge clk or posedge clr)

begin

if(clr) q <= 0;

else if(en) q <= d;

end

采用“assign”語句是描述組合邏輯最常用的方法之一。而“always”塊既可用于描述組合邏輯也可描述時序邏輯。上面的例子用“always”塊生成了一個帶有異步清除端的D觸發器。“always”塊可用很多種描述手段來表達邏輯,例如上例中就用了if...else語句來表達邏輯關系。如按一定的風格來編寫“always”塊,可以通過綜合工具把源代碼自動綜合成用門級結構表示的組合或時序邏輯電路。

3.1.3、理解要點:

如果用Verilog模塊實現一定的功能,首先應該清楚哪些是同時發生的,哪些是順序發生的。上面分別采用了“assign”語句、實例元件和“always”塊,描述的邏輯功能是同時執行的。也就是說,如果把這三項寫到一個 VeriIog 模塊文件中去,它們的次序不會影響邏輯實現的功能。這三項是同時執行的,也就是并發的。

然而,在“always”模塊內,邏輯是按照指定的順序執行的。“always”塊中的語句稱為“順序語句”,因為它們是順序執行,所以“always”塊也稱作“過程塊”。請注意,兩個或更多的“always”語句塊,它們是同時執行的,而模塊內部的語句是順序執行的。 看一下“always”塊內的語句,你就會明白它是如何實現功能的。 if..else… if必須順序執行,否則其功能就沒有任何意義。如果else語句在if語句之前執行,其功能就會不符合要求!為了能實現上述描述的功能,“always”語句塊內部的語句將按照書寫的順序執行。

在Verilog 模塊中所有過程塊(如:initial塊、always塊)、連續賦值語句、實例引用都是并行的。它們表示的是一種通過變量名互相連接的關系。在同一模塊中這三者出現的先后次序沒有關系。只有連續賦值語句assign 和實例引用語句可以獨立于過程塊而存在于模塊的功能定義部分。以上是與C語言有很大的不同。許多與C語言類似的語句只能出現在過程塊中,而不能隨意出現在模塊功能定義的范圍內。

3.2、數據類型及其常量、變量

Verilog HDL中總共有十九種數據類型,數據類型是用來表示數字電路硬件中的數據儲存和傳送元素的。先只介紹四個最基本的數據類型,它們是:reg型、wire型、integer型、parameter型。

其它數據類型也有很多:large型、medium型、scalared型、time型、small型、tri型、trio型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型。

3.2.1、常量

在程序運行過程中,其值不能被改變的量稱為常量。下面首先對在Verilog HDL語言中使用的數字及其表示方式進行介紹。

3.2.1.1、整數:

在Verilog HDL中,整型常量即整常數有以下四種進制表示形式:

  1. 二進制整數(b或B)

  2. 十進制整數(d或D)

  3. 十六進制整數(h或H)

  4. 八進制整數(o或O)

3.2.1.2、x和z值:

數字電路中,x代表不定值,z代表高阻值。一個x可以用來定義十六進制數的四位二進制數的狀態,八進制數的三位,二進制數的一位。z的表示方式同x類似。z還有一種表達方式是可以寫作?。在使用case表達式時建議使用這種寫法,以提高程序的可讀性。見下例:

4'b10x0 //位寬為4的二進制數從低位數起第二位為不定值

4'b101z //位寬為4的二進制數從低位數起第一位為高阻值

12'dz //位寬為12的十進制數其值為高阻值(第一種表達方式)

12'd? //位寬為12的十進制數其值為高阻值(第二種表達方式)

8'h4x //位寬為8的十六進制數其低四位值為不定值

3.2.1.3、負數:

一個數字可以被定義為負數,只需在位寬表達式前加一個減號,減號必須寫在數字定義表達式的最前面。注意減號不可以放在位寬和進制之間也不可以放在進制和具體的數之間。如下:

-8'd5 //這個表達式代表5的補數(用八位二進制數表示)

8'd-5 //非法格式

3.2.2、參數(Parameter)型

在Verilog HDL中用parameter來定義常量,即用parameter來定義一個標識符代表一個常量,稱為符號常量,即標識符形式的常量,采用標識符代表一個常量可提高程序的可讀性和可維護性。parameter型數據是一種常數型的數據,其說明格式如下:

parameter 參數名1=表達式,參數名2=表達式, …,參數名n=表達式;

parameter是參數型數據的確認符,確認符后跟著一個用逗號分隔開的賦值語句表。在每一個賦值語句的右邊必須是一個常數表達式。也就是說,該表達式只能包含數字或先前已定義過的參數。見下列:

parameter msb=7; //定義參數msb為常量7

parameter e=25, f=29; //定義二個常數參數

parameter r=5.7; //聲明r為一個實型參數

parameter byte_size=8, byte_msb=byte_size-1; //用常數表達式賦值

parameter average_delay = (r+f)/2; //用常數表達式賦值

3.2.3、 變量

3.2.3.1、wire型

wire型數據常用來表示用于以assign關鍵字指定的組合邏輯信號。Verilog程序模塊中輸入輸出信號類型缺省時自動定義為wire型。wire型信號可以用作任何方程式的輸入,也可以用作“assign”語句或實例元件的輸出。

wire型信號的格式同reg型信號的很類似。其格式如下:

wire [n-1:0] 數據名1,數據名2,…數據名i; //共有i條總線,每條總線內有n條線路

wire [n:1] 數據名1,數據名2,…數據名i;

wire是wire型數據的確認符,[n-1:0]和[n:1]代表該數據的位寬,即該數據有幾位。最后跟著的是數據的名字。如果一次定義多個數據,數據名之間用逗號隔開。聲明語句的最后要用分號表示語句結束。如下格式:

wire a; //定義了一個一位的wire型數據

wire [7:0] b; //定義了一個八位的wire型數據

wire [4:1] c, d; //定義了二個四位的wire型數據

3.2.3.2、reg型

寄存器是數據儲存單元的抽象。寄存器數據類型的關鍵字是reg。通過賦值語句可以改變寄存器儲存的值,其作用與改變觸發器儲存的值相當。reg類型數據的缺省初始值為不定值,x。reg型只表示被定義的信號將用在“always”塊內。

reg型數據常用來表示用于“always”模塊內的指定信號,常代表觸發器。通常,在設計中要由“always”塊通過使用行為描述語句來表達邏輯關系。在“always”塊內被賦值的每一個信號都必須定義成reg型。

reg型數據的格式如下:

reg [n-1:0] 數據名1,數據名2,… 數據名i;

reg [n:1] 數據名1,數據名2,… 數據名i;

reg是reg型數據的確認標識符,[n-1:0]和[n:1]代表該數據的位寬,即該數據有幾位(bit)。最后跟著的是數據的名字。如果一次定義多個數據,數據名之間用逗號隔開。聲明語句的最后要用分號表示語句結束。如下:

reg rega; //定義了一個一位的名為rega的reg型數據

reg [3:0] regb; //定義了一個四位的名為regb的reg型數據

reg [4:1] regc, regd; //定義了兩個四位的名為regc和regd的reg型數據

3.2.3.3、memory型

Verilog HDL通過對reg型變量建立數組來對存儲器建模,可以描述RAM型存儲器,ROM存儲器和reg文件。數組中的每一個單元通過一個數組索引進行尋址。在Verilog語言中沒有多維數組存在。 memory型數據是通過擴展reg型數據的地址范圍來生成的。其格式如下:

reg [n-1:0] 存儲器名[m-1:0];

或 reg [n-1:0] 存儲器名[m:1];

在這里,reg[n-1:0]定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器。存儲器名后的[m-1:0]或[m:1]則定義了該存儲器中有多少個這樣的寄存器。最后用分號結束定義語句。下面舉例說明:

reg [7:0] mema[255:0];

這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0到255。注意:對存儲器進行地址索引的表達式必須是常數表達式。

另外,在同一個數據類型聲明語句里,可以同時定義存儲器型數據和reg型數據。見下例:

parameter wordsize=16, //定義二個參數

memsize=256;

reg [wordsize-1:0] mem[memsize-1:0], writereg, readreg;

盡管memory型數據和reg型數據的定義格式很相似,但要注意其不同之處。如一個由n個1位寄存器構成的存儲器組是不同于一個n位的寄存器的。見下例:

reg [n-1:0] rega; //一個n位的寄存器

reg mema [n-1:0]; //一個由n個1位寄存器構成的存儲器組

一個n位的寄存器可以在一條賦值語句里進行賦值,而一個完整的存儲器則不行。見下例:

rega =0; //合法賦值語句

mema =0; //非法賦值語句

如果想對memory中的存儲單元進行讀寫操作,必須指定該單元在存儲器中的地址。下面的寫法是正確的。

mema[3]=0; //給memory中的第3個存儲單元賦值為0。

進行尋址的地址索引可以是表達式,這樣就可以對存儲器中的不同單元進行操作。表達式的值可以取決于電路中其它的寄存器的值。例如可以用一個加法計數器來做RAM的地址索引。

3.3、運算符及表達式

Verilog HDL語言的運算符范圍很廣,其運算符按其功能可分為以下幾類:

  1. 算術運算符(+,-,×,/,%)

  2. 賦值運算符(=,<=)

  3. 關系運算符(>,<,>=,<=)

  4. 邏輯運算符(&&,||,!)

  5. 條件運算符(?:)

  6. 位運算符(~,|,^,&,^~)

  7. 移位運算符(<<,>>)

  8. 拼接運算符({ })

  9. 其它

在Verilog HDL語言中運算符所帶的操作數是不同的,按其所帶操作數的個數運算符可分為三種:

  1. 單目運算符(unary operator):可以帶一個操作數,操作數放在運算符的右邊。

  2. 二目運算符(binary operator):可以帶二個操作數,操作數放在運算符的兩邊。

  3. 三目運算符(ternary operator):可以帶三個操作,這三個操作數用三目運算符分隔開。

clock = ~clock; // ~是一個單目取反運算符, clock是操作數。

c = a | b; // 是一個二目按位或運算符, a 和 b是操作數。

r = s ? t : u; // ?: 是一個三目條件運算符, s,t,u是操作數。

下面對常用的幾種運算符進行介紹。

3.3.1、基本的算術運算符

在Verilog HDL語言中,算術運算符又稱為二進制運算符,共有下面幾種:

  1. + (加法運算符,或正值運算符,如 rega+regb,+3)

  2. - (減法運算符,或負值運算符,如 rega-3,-3)

  3. × (乘法運算符,如rega*3)

  4. / (除法運算符,如5/3)

  5. % (模運算符,或稱為求余運算符,要求%兩側均為整型數據。如7%3的值為1)

3.3.2、位運算符

Verilog HDL作為一種硬件描述語言,是針對硬件電路而言的。在硬件電路中信號有四種狀態值1,0,x,z.在電路中信號進行與或非時,反映在Verilog HDL中則是相應的操作數的位運算。

3.3.2.1、"取反"運算符~

~是一個單目運算符,用來對一個操作數進行按位取反運算。

其運算規則見下圖:

取反運算

rega='b1010;//rega的初值為'b1010

rega=~rega;//rega的值進行取反運算后變為'b0101

3.3.2.2、“按位與”運算符 &

按位與運算就是將兩個操作數的相應位進行與運算,

其運算規則見下圖:

按位與運算

3.3.2.3、“按位或”運算符|

按位或運算就是將兩個操作數的相應位進行或運算。

其運算規則見下圖:

按位或運算

0

1

x

0

0

1

x

1

1

1

1

x

x

1

x

3.3.2.4、“按位異或”運算符^(也稱之為XOR運算符)

按位異或運算就是將兩個操作數的相應位進行異或運算。

其運算規則見下圖:

按位異或運算

3.3.2.5、“按位同或”運算符^~

按位同或運算就是將兩個操作數的相應位先進行異或運算再進行非運算。其運算規則見下圖:

按位同或運算

^~

0

1

x

0

1

0

x

1

0

1

x

x

x

x

x

3.3.2.6、不同長度的數據進行位運算

兩個長度不同的數據進行位運算時,系統會自動的將兩者按右端對齊。位數少的操作數會在相應的高位用0填滿,以使兩個操作數按位進行操作。

3.4、邏輯運算符

在Verilog HDL語言中存在三種邏輯運算符:

1) && 邏輯與

2) || 邏輯或

3) ! 邏輯非

“&&”和“||”是二目運算符,它要求有兩個操作數,如(a>b)&&(b>c),(a單目運算符,只要求一個操作數,如!(a>b)。下表為邏輯運算的真值表。它表示當a和b的值為不同的組合時,各種邏輯運算所得到的值。

邏輯運算符中“&&”和“||”的優先級別低于關系運算符,“!” 高于算術運算符。

3.5、關系運算符

關系運算符共有以下四種:

a < b a小于b

a > b a大于b

a <= b a小于或等于b

a >= b a大于或等于b

在進行關系運算時,如果聲明的關系是假的(false),則返回值是0,如果聲明的關系是真的(true),則返回值是1,如果某個操作數的值不定,則關系是模糊的,返回值是不定值。

3.6、等式運算符

在Verilog HDL語言中存在四種等式運算符:

  1. = = (等于)

  2. != (不等于)

  3. = = = (等于)

  4. != = (不等于)

注意:求反號、雙等號、三個等號之間不能有空格

這四個運算符都是二目運算符,它要求有兩個操作數。"=="和"!="又稱為邏輯等式運算符。其結果由兩個操作數的值決定。由于操作數中某些位可能是不定值x和高阻值z,結果可能為不定值x。而“===”和“!==”運算符則不同,它在對操作數進行比較時對某些位的不定值x和高阻值z也進行比較,兩個操作數必需完全一致,其結果才是1,否則為0“===”和“!==”運算符常用于case表達式的判別,所以又稱為“case等式運算符”。這四個等式運算符的優先級別是相同的。下面畫出==與===的真值表,幫助理解兩者間的區別。

下面舉一個例子說明“==”和“===”的區別。

例:

if(A==1‘bx) $display(“AisX”); (當A等于X時,這個語句不執行)

if(A===1‘bx) $display(“AisX”); (當A等于X時,這個語句執行)

3.7、移位運算符

在Verilog HDL中有兩種移位運算符:

<< (左移位運算符) 和 >>(右移位運算符)。

其使用方法如下:

a >> n 或 a << n

a代表要進行移位的操作數,n代表要移幾位。這兩種移位運算都用0來填補移出的空位。

3.8、位拼接運算符(Concatation)

在Verilog HDL語言有一個特殊的運算符:位拼接運算符{}。用這個運算符可以把兩個或多個信號的某些位拼接起來進行運算操作。其使用方法如下:

{信號1的某幾位,信號2的某幾位,..,..,信號n的某幾位}

即把某些信號的某些位詳細地列出來,中間用逗號分開,最后用大括號括起來表示一個整體信號。見下例:

{a,b[3:0], w, 3’b101}

也可以寫成為

{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}

在位拼接表達式中不允許存在沒有指明位數的信號。這是因為在計算拼接信號的位寬的大小時必需知道其中每個信號的位寬。

位拼接還可以用重復法來簡化表達式。見下例:

{4{w}} //這等同于{w,w,w,w}

位拼接還可以用嵌套的方式來表達。見下例:

{b,{3{a,b}}} //這等同于{b,a,b,a,b,a,b}

用于表示重復的表達式如上例中的4和3,必須是常數表達式。

3.9、縮減運算符(reduction operator)

縮減運算符是單目運算符,也有與或非運算。其與或非運算規則類似于位運算符的與或非運算規則,但其運算過程不同。位運算是對操作數的相應位進行與或非運算,操作數是幾位數則運算結果也是幾位數。而縮減運算則不同,縮減運算是對單個操作數進行或與非遞推運算,最后的運算結果是一位的二進制數。縮減運算的具體運算過程是這樣的:第一步先將操作數的第一位與第二位進行或與非運算,第二步將運算結果與第三位進行或與非運算,依次類推,直至最后一位。

例如:reg [3:0] B;

reg C;

C = &B;

相當于:

C =( (B[0]&B[1]) & B[2] ) & B[3];

由于縮減運算的與、或 運算規則類似于位運算符與、或 運算規則,這里不再詳細講述,請參照位運算符的運算規則介紹。

3.10、優先級別

下面對各種運算符的優先級別關系作一個總結。見下圖:

3.11、關鍵詞

在Verilog HDL中,所有的關鍵詞是事先定義好的確認符,用來組織語言結構。關鍵詞是用小寫字母定義的,因此在編寫程序代碼時必須注意關鍵詞的書寫,以避免出錯。下面是Verilog HDL中使用的關鍵詞

always, and, assign, begin, buf, bufif0, bufif1, case, casex, casez, cmos, deassign, default, defparam, disable, edge, else, end, endcase, endmodule, endfunction, endprimitive, endspecify, endtable, endtask, event, for, force, forever, fork, function, highz0, highz1, if, initial, inout, input, integer, join,large, macromodule,medium, module, nand, negedge, nmos, nor, not, notif0, notifl, or, output, parameter, pmos, posedge, primitive, pull0, pull1, pullup, pulldown, rcmos, reg, releses, repeat, mmos, rpmos, rtran, rtranif0, rtranif1, scalared, small, specify, specparam, strength, strong0, strong1, supply0, supply1, table, task, time, tran, tranif0, tranif1, tri, tri0, tri1, triand, trior, trireg, vectored, wait, wand, weak0, weak1, while, wire, wor, xnor, xor

注意在編寫Verilog HDL程序時,變量的定義不要與這些關鍵詞沖突

3.12、賦值語句

3.12.1、 賦值語句

在Verilog HDL語言中,信號有兩種賦值方式:

(1).非阻塞(Non_Blocking)賦值方式( 如 b <= a; )

A) 在語句塊中,上面語句所賦的變量值不能立即就為下面的語句所用;

B) 塊結束后才能完成這次賦值操作,而所賦的變量值是上一次賦值得到的;

C) 在編寫可綜合的時序邏輯模塊時,這是最常用的賦值方法。

[注意]:非阻塞賦值符 “ <= ” 與小于等于符 “<= ” 看起來是一樣的,但意義完全不同,小于等于符是關系運算符,用于比較大小。而非阻塞賦值符用于時序賦值操作。

(2).阻塞(Blocking)賦值方式( 如 b = a; )

A) 賦值語句執行完后,塊才結束;

B) b的值在賦值語句執行完后立刻就改變的

C) 在時序邏輯設計中使用,可能會產生意想不到的結果。

非阻塞賦值方式和阻塞賦值方式的區別常給設計人員帶來問題。問題主要是給"always"塊內的reg型信號的賦值方式不易把握。"always"模塊內的reg型信號都是采用下面的這種賦值方式:

b <= a;

這種方式的賦值并不是馬上執行的,也就是說 "always" 塊內的下一條語句執行后,b并不等于a,而是保持原來的值。"always" 塊結束后,才進行賦值。而另一種賦值方式阻塞賦值方式,如下所示:

b = a;

這種賦值方式是馬上執行的。也就是說執行下一條語句時,b已等于a。盡管這種方式看起來很直觀,但是可能引起麻煩

總結:

  1. 在Verilog 模塊中所有過程塊(如:initial塊、always塊)、連續賦值語句、實例引用都是并行的;

  2. 它們表示的是一種通過變量名互相連接的關系;

  3. 在同一模塊中各個過程塊、各條連續賦值語句和各條實例引用語句這三者出現的先后次序沒有關系;

  4. 只有連續賦值語句(即用關鍵詞assign引出的語句)和實例引用語句(即用已定義的模塊名引出的語句),可以獨立于過程塊而存在于模塊的功能定義部分;

  5. 被實例引用的模塊其端口可以通過不同名的連線或寄存器類型變量連 接到別的模塊相應的輸出輸入信號端;

  6. 在“always”塊內被賦值的每一個信號都必須定義成reg型;

7) 無論是邏輯運算、邏輯比較還是邏輯等式等邏輯操作一般發生在條件判斷語句中,其輸出只有:1 或 0,也可以理解為成立(真)或不成立(假);

8) 位拼接運算符{ },在C語言中沒有定義,但在Verilog中是很有用的語法。我們可以借助于拼接符用一個信號名來表示由多位信號組成的復雜信號,其中每個功能信號可以有自己獨立的名字和位寬;

9) 縮減運算符(reduction operator)也是C語言所沒有的,合理地使用縮減運算符可以使程序簡潔、明了;

10) 阻塞和非阻塞賦值也是C語言所沒有的。我們應當理解這是非常重要的概念,特別在編寫可綜合風格的模塊中要加以注意。阻塞語句,如果沒有寫延遲時間看起來是在同一時刻運行,但實際上是有先后的,即在前面的先運行,然后再運行下面的語句,阻塞語句的次序與邏輯行為有很大的關系。而非阻塞的就不同了,在begin end之間的所有非阻塞語句都在同一時刻被賦值,因此邏輯行為與非阻塞語句的次序就沒有關系。在硬件實現時這兩者有很大的不同;

11) begin end 塊語句與C語言中的大括號對(即{})類似,而fork join語句在C語言中沒有定義,但其語義并不難理解。在測試模塊中描述測試信號時常在initial和always過程塊中使用并行塊。這種描述方法,由于時間關系只與起點比較,有時這樣表達比較容易和清楚。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110172

原文標題:verilog語法進階

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    是否可以使用邏輯單元verilog代碼?

    我想知道我是否可以使用邏輯單元(Spartan 6)的verilog代碼,這樣我就不必花時間為邏輯單元編寫verilog代碼。這可以節省我的時間,讓我專注于其他部分內容,因為我有一個很
    發表于 03-10 09:45

    verilog基礎模塊介紹

    本文主要介紹verilog基礎模塊,夯實基礎,對深入學習FPGA會有很大幫助。
    發表于 01-22 07:58

    模塊和端口介紹

    verilog的相關學習和介紹,主要介紹模塊和端口
    發表于 11-10 10:21 ?0次下載

    verilog實現定時器函數

    使用Verilog描述硬件的基本設計單元模塊(module)。構建復雜的電子電路,主要是通過模塊的相互連接調用來實現的。模塊被包含在關鍵字
    發表于 12-08 17:20 ?1w次閱讀

    verilog是什么_verilog的用途和特征是什么

    本文首先介紹verilog的概念和發展歷史,其次介紹verilog的特征與Verilog的邏輯門級描述,最后
    發表于 05-14 14:22 ?4.6w次閱讀
    <b class='flag-5'>verilog</b>是什么_<b class='flag-5'>verilog</b>的用途和特征是什么

    如何設計常用模塊Verilog HDL?

    本文檔的主要內容詳細介紹的是常用模塊Verilog HDL設計詳細資料免費下載。
    發表于 10-16 11:12 ?20次下載
    如何設計常用<b class='flag-5'>模塊</b>的<b class='flag-5'>Verilog</b> HDL?

    FPGA的視頻教程之Verilog模塊的基本構成要素資料說明

    本文檔的主要內容詳細介紹的是FPGA的視頻教程之Verilog模塊的基本構成要素資料說明。
    發表于 03-26 16:55 ?13次下載
    FPGA的視頻教程之<b class='flag-5'>Verilog</b><b class='flag-5'>模塊</b>的基本構成要素資料說明

    在寫Verilog時用到的簡單的計數器模塊和功能模塊的程序免費下載

    本文檔的主要內容詳細介紹的是在寫Verilog時用到的簡單的計數器模塊和功能模塊的程序免費下載。
    發表于 08-30 08:00 ?11次下載
    在寫<b class='flag-5'>Verilog</b>時用到的簡單的計數器<b class='flag-5'>模塊</b>和功能<b class='flag-5'>模塊</b>的程序免費下載

    verilog基礎模塊介紹

    本文主要介紹verilog基礎模塊,夯實基礎,對深入學習FPGA會有很大幫助。
    的頭像 發表于 02-08 15:04 ?2697次閱讀
    <b class='flag-5'>verilog</b>基礎<b class='flag-5'>模塊</b>的<b class='flag-5'>介紹</b>

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第三章 Verilog基礎模塊介紹

    本文主要介紹verilog基礎模塊,夯實基礎,對深入學習FPGA會有很大幫助。
    發表于 01-22 10:41 ?5次下載
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第三章 <b class='flag-5'>Verilog</b>基礎<b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    如何在Verilog設計中使用庫模塊

    本教程解釋了如何在基于Verilog的設計中包含Altera的庫模塊,這些設計是使用Quartus R:II軟件實現的。
    發表于 01-22 15:34 ?4次下載
    如何在<b class='flag-5'>Verilog</b>設計中使用庫<b class='flag-5'>模塊</b>

    探討VHDL和Verilog模塊互相調用的問題

    1、 關于如何在VHDL模塊調用一個Verilog模塊 在VHDL模塊聲明一個要與調用的Verilog
    的頭像 發表于 04-30 14:06 ?1.1w次閱讀
    探討VHDL和<b class='flag-5'>Verilog</b><b class='flag-5'>模塊</b>互相調用的問題

    Verilog的設計方法介紹

    Verilog 的設計多采用自上而下的設計方法(top-down)。即先定義頂層模塊功能,進而分析要構成頂層模塊的必要子模塊
    的頭像 發表于 05-29 15:44 ?1485次閱讀
    <b class='flag-5'>Verilog</b>的設計方法<b class='flag-5'>介紹</b>

    verilog如何調用其他module

    第一部分:簡介 1.1 什么是Verilog模塊? 在Verilog中,模塊是其設計層次結構的基本單元
    的頭像 發表于 02-22 15:56 ?6015次閱讀

    verilog調用模塊端口對應方式

    Verilog是一種硬件描述語言(HDL),廣泛應用于數字電路設計和硬件驗證。在Verilog中,模塊是構建電路的基本單元,而模塊端口對應方
    的頭像 發表于 02-23 10:20 ?1843次閱讀
    主站蜘蛛池模板: 国产色精品久久人妻无码看片软件| 久久久久久久久a免费| 美女坐脸vk| 最近中文字幕高清中文| 久久国内精品视频| 国产又黄又硬又粗| 蜜芽一二三区| 99久久夜色精品国产亚洲AV卜| 男男h啪肉np文总受| 亚洲精品乱码电影在线观看| 538prom国产在线视频一区| 久久久国产精品免费A片蜜臀| 亚洲午夜久久久无码精品网红A片 亚洲午夜久久久久中文字幕 | 特级毛片全部免费播放免下载| 国产97精品久久久天天A片| 久久精品亚洲牛牛影视| 亚洲性夜色噜噜噜网站2258KK| 久久国产免费| 97精品国产高清在线看入口| 青青操久久| 中文字幕人成乱码中国| 国产午夜精品福利久久| 欧美一区二区视频在线观看 | 秋霞特色大片18岁入口| 粗暴玩烂货调教| 蜜柚免费视频高清观看在线| www.青青草原| 美国一级大黄一片免费的网站| 777福彩社区| 日本阿v片在线播放免费| 国产毛多水多高潮高清| 一一本之道高清视频在线观看中文字幕 | 亚洲精品一二三区-久久| 久久精品黄色| qvod快播在线观看| 小便japanesewctv| 成人在线高清不卡免费视频| 午夜福利免费0948视频| 国产传媒18精品A片在线观看| 人妻超级精品碰碰在线97视频| 国产成人无码AV麻豆|