在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

System Verilog的概念以及與Verilog的對(duì)比

Hack電子 ? 來(lái)源:Hack電子 ? 2023-06-12 10:05 ? 次閱讀

接口(Interface)

Verilog模塊之間的連接是通過(guò)模塊端口進(jìn)行的。 為了給組成設(shè)計(jì)的各個(gè)模塊定義端口,我們必須對(duì)期望的硬件設(shè)計(jì)有一個(gè)詳細(xì)的認(rèn)識(shí)。 不幸的是,在設(shè)計(jì)的早期,我們很難把握設(shè)計(jì)的細(xì)節(jié)。 而且,一旦模塊的端口定義完成后,我們也很難改變端口的配置。 另外,一個(gè)設(shè)計(jì)中的許多模塊往往具有相同的端口定義,在Verilog中,我們必須在每個(gè)模塊中進(jìn)行相同的定義,這為我們?cè)黾恿藷o(wú)謂的工作量。

SystemVerilog提供了一個(gè)新的、高層抽象的模塊連接,這個(gè)連接被稱為接口(Interface)。 接口在關(guān)鍵字interface和endinterface之間定義,它獨(dú)立于模塊。 接口在模塊中就像一個(gè)單一的端口一樣使用。 在最簡(jiǎn)單的形式下,一個(gè)接口可以認(rèn)為是一組線網(wǎng)。 例如,可以將PCI總線的所有信號(hào)綁定在一起組成一個(gè)接口。 通過(guò)使用接口,我們?cè)谶M(jìn)行一個(gè)設(shè)計(jì)的時(shí)候可以不需要首先建立各個(gè)模塊間的互連。 隨著設(shè)計(jì)的深入,各個(gè)設(shè)計(jì)細(xì)節(jié)也會(huì)變得越來(lái)越清晰,而接口內(nèi)的信號(hào)也會(huì)很容易地表示出來(lái)。 當(dāng)接口發(fā)生變化時(shí),這些變化也會(huì)在使用該接口的所有模塊中反映出來(lái),而無(wú)需更改每一個(gè)模塊。 下面是一個(gè)接口的使用實(shí)例:

1 interface chip_bus;// 定義接口
2
3 wireread_request, read_grant;
4
5 wire [7:0]address, data;
6
7 endinterface: chip_bus
8
9
10
11 module RAM(chip_bus io, // 使用接口
12
13 inputclk);
14
15 //可以使用io.read_request引用接口中的一個(gè)信號(hào)
16
17 endmodule
18
19
20
21 module CPU(chip_busio, input clk);
22
23 ...
24
25 endmodule
26
27
28
29 module top;
30
31 reg clk = 0;
32
33 chip_busa; // 實(shí)例接口
34
35 //將接口連接到模塊實(shí)例
36
37 RAM mem(a,clk);
38
39 CPU cpu(a,clk);
40
41 endmodule

實(shí)際上,SystemVerilog的接口不僅僅可以表示信號(hào)的綁定和互連。 由于SystemVerilog的接口中可以包含參數(shù)、常量、變量、結(jié)構(gòu)、函數(shù)、任務(wù)、initial塊、always塊以及連續(xù)賦值語(yǔ)句,所以SystemVerilog的接口還可以包含內(nèi)建的協(xié)議檢查以及被使用該接口的模塊所共用的功能。

全局聲明和語(yǔ)句

在Verilog中,除了一個(gè)模塊可以作為模塊實(shí)例引用其他模塊外,并不存在一個(gè)全局空間。 另外,Verilog允許任意數(shù)目的頂層模塊,因此會(huì)產(chǎn)生毫無(wú)關(guān)聯(lián)的層次樹(shù)。

SystemVeriog增加了一個(gè)被稱為root的隱含的頂級(jí)層次。 任何在模塊邊界之外的聲明和語(yǔ)句都存在于root空間中。 所有的模塊,無(wú)論它處于哪一個(gè)設(shè)計(jì)層次,都可以引用$root中聲明的名字。 這樣,如果某些變量、函數(shù)或其它信息被設(shè)計(jì)中的所有模塊共享,那么我們就可以將它們作為全局聲明和語(yǔ)句。 全局聲明和語(yǔ)句的一個(gè)使用實(shí)例如下:

1 reg error_flag; // 全局變量
2
3 function compare(...); // 全局函數(shù)
4
5 always@(error_flag) // 全局語(yǔ)句
6
7 ...
8
9 module test;
10
11 chip1 u1(...)
12
13 endmodule
14
15
16
17 module chip1(...);
18
19 FSM u2(...);
20
21 always@(data)
22
23 error_flag= compare(data, expected);
24
25 endmodule
26
27
28
29 module FSM(...);
30
31 ...
32
33 always @(state)
34
35 error_flag= compare(state, expected);
36
37 終端模塊

時(shí)間單位和精度

在Verilog中,表示時(shí)間的值使用一個(gè)數(shù)來(lái)表示,而不帶有任何時(shí)間單位。例如:

forever #5clock= ~clock;
從這一句中我們無(wú)法判斷5代表的是5ns? 5ps? 還是其他。 Verilog的時(shí)間單位和精度是作為每一個(gè)模塊的屬性,并使用編譯器指令timescale來(lái)設(shè)置。使用這種方法具有固有的缺陷,因?yàn)榫幾g器指令的執(zhí)行依賴于源代碼的編譯順序,編譯器總是將它遇到的最后一個(gè)timescale設(shè)置的時(shí)間單位和精度作為之后的標(biāo)準(zhǔn)。 那么,假如有些模塊之前沒(méi)有使用`timescale設(shè)置時(shí)間單位和精度,這就有可能出現(xiàn)同一個(gè)源代碼的不同仿真會(huì)出現(xiàn)不同結(jié)果的情況。

SystemVerilog為了控制時(shí)間單位加入了兩個(gè)重要的增強(qiáng)。首先,時(shí)間值可以顯式地指定一個(gè)單位。時(shí)間單位可以是s、ms、ns、ps或fs。時(shí)間單位作為時(shí)間值的后綴出現(xiàn)。例如:

forever #5nsclock= ~clock;
其次,SystemVerilog允許使用新的關(guān)鍵字(timeunits和timeprecision)來(lái)指定時(shí)間單位和精度。 這些聲明可以在任何模塊中指定,同時(shí)也可以在$root空間中全局指定。 時(shí)間單位和精度必須是10的冪,范圍可以從s到fs。 例如:

時(shí)間單位 1ns;

timeprecision 10ps;
4. 抽象數(shù)據(jù)類型

Verilog提供了面向底層硬件的線網(wǎng)、寄存器和變量數(shù)據(jù)類型。這些類型代表了4態(tài)邏輯值,通常用來(lái)在底層上對(duì)硬件進(jìn)行建模和驗(yàn)證。線網(wǎng)數(shù)據(jù)類型還具有多個(gè)強(qiáng)度級(jí)別,并且能夠?yàn)槎囹?qū)動(dòng)源的線網(wǎng)提供解析功能。

SystemVerilog包括了C語(yǔ)言的char和int數(shù)據(jù)類型,它允許在Verilog模型和驗(yàn)證程序中直接使用C和C++代碼。VerilogPLI不再需要集成總線功能模型、算法模型和C函數(shù)。SystemVerilog還為Verilog加入了幾個(gè)新的數(shù)據(jù)類型,以便能夠在更抽象的層次上建模硬件。

l char:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的char數(shù)據(jù)類型相同,可以是一個(gè)8位整數(shù)(ASCII)或short int(Unicode);

l int:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的int數(shù)據(jù)類型相似,但被精確地定義成32位;

l shortint:一個(gè)兩態(tài)的有符號(hào)變量,被精確地定義成16位;

l longint:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的long數(shù)據(jù)類型相似,但被精確地定義成64位;

l byte:一個(gè)兩態(tài)的有符號(hào)變量,被精確地定義成8位;

l bit:一個(gè)兩態(tài)的可以具有任意向量寬度的無(wú)符號(hào)數(shù)據(jù)類型,可以用來(lái)替代Verilog的reg數(shù)據(jù)類型;

l logic:一個(gè)四態(tài)的可以具有任意向量寬度的無(wú)符號(hào)數(shù)據(jù)類型,可以用來(lái)替代Verilog的線網(wǎng)或reg數(shù)據(jù)類型,但具有某些限制;

l shortreal:一個(gè)兩態(tài)的單精度浮點(diǎn)變量,與C語(yǔ)言的float類型相同;

l void:表示沒(méi)有值,可以定義成一個(gè)函數(shù)的返回值,與C語(yǔ)言中的含義相同。

SystemVerilog的bit和其他數(shù)據(jù)類型允許用戶使用兩態(tài)邏輯對(duì)設(shè)計(jì)建模,這種方法對(duì)仿真性能更有效率。由于Verilog語(yǔ)言沒(méi)有兩態(tài)數(shù)據(jù)類型,因此許多仿真器都通過(guò)將這種功能作為仿真器的一個(gè)選項(xiàng)提供。這些選項(xiàng)不能夠在所有的仿真器之間移植,而且在需要時(shí)用三態(tài)或四態(tài)邏輯的設(shè)計(jì)中強(qiáng)制使用兩態(tài)邏輯還具有副作用。SystemVerilog的bit數(shù)據(jù)類型能夠極大改進(jìn)仿真器的性能,同時(shí)在需要的時(shí)候仍然可以使用三態(tài)或四態(tài)邏輯。通過(guò)使用具有確定行為的數(shù)據(jù)類型來(lái)代替專有的仿真器選項(xiàng),兩態(tài)模型能夠在所有的SystemVerilog仿真器間移植。

SystemVerilog的logic數(shù)據(jù)類型比Verilog的線網(wǎng)和寄存器數(shù)據(jù)類型更加靈活,它使得在任何抽象層次上建模硬件都更加容易。logic類型能夠以下面的任何一種方法賦值:

l 通過(guò)任意數(shù)目的過(guò)程賦值語(yǔ)句賦值,能夠替代Verilog的reg類型;

l 通過(guò)單一的連續(xù)賦值語(yǔ)句賦值,能夠有限制地替代Verilog的wire類型;

l 連接到一個(gè)單一原語(yǔ)的輸出,能夠有限制地替代Verilog的wire類型;

由于logic數(shù)據(jù)類型能夠被用來(lái)替代Verilog的reg或wire(具有限制),這就使得能夠在一個(gè)更高的抽象層次上建模,并且隨著設(shè)計(jì)的不斷深入能夠加入一些設(shè)計(jì)細(xì)節(jié)而不必改變數(shù)據(jù)類型的聲明。logic數(shù)據(jù)類型不會(huì)表示信號(hào)的強(qiáng)度也不具有線邏輯的解析功能,因此logic數(shù)據(jù)類型比Verilog的wire類型更能有效地仿真和綜合。

有符號(hào)和無(wú)符號(hào)限定符

缺省情況下,Verilog net和reg數(shù)據(jù)類型是無(wú)符號(hào)類型,integer類型是一個(gè)有符號(hào)類型。Verilog-2001標(biāo)準(zhǔn)允許使用signed關(guān)鍵字將無(wú)符號(hào)類型顯式地聲明成有符號(hào)類型。SystemVerilog加入了相似的能力,它可以通過(guò)unsigned關(guān)鍵字將有符號(hào)數(shù)據(jù)類型顯式地聲明成有無(wú)符號(hào)數(shù)據(jù)類型。例如:

int unsigned j;

....

SystemVerilog語(yǔ)言簡(jiǎn)介

SystemVerilog是一種硬件描述和驗(yàn)證語(yǔ)言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語(yǔ)言(HDL),并對(duì)其進(jìn)行了擴(kuò)展,包括擴(kuò)充了C語(yǔ)言數(shù)據(jù)類型、結(jié)構(gòu)、壓縮和非壓縮數(shù)組、 接口、斷言等等,這些都使得SystemVerilog在一個(gè)更高的抽象層次上提高了設(shè)計(jì)建模的能力。 SystemVerilog由Accellera開(kāi)發(fā),它主要定位在芯片的實(shí)現(xiàn)和驗(yàn)證流程上,并為系統(tǒng)級(jí)的設(shè)計(jì)流程提供了強(qiáng)大的連接能力。 下面我們從幾個(gè)方面對(duì)SystemVerilog所作的增強(qiáng)進(jìn)行簡(jiǎn)要的介紹,期望能夠通過(guò)這個(gè)介紹使大家對(duì)SystemVerilog有一個(gè)概括性的了解。

接口(Interface)

Verilog模塊之間的連接是通過(guò)模塊端口進(jìn)行的。 為了給組成設(shè)計(jì)的各個(gè)模塊定義端口,我們必須對(duì)期望的硬件設(shè)計(jì)有一個(gè)詳細(xì)的認(rèn)識(shí)。 不幸的是,在設(shè)計(jì)的早期,我們很難把握設(shè)計(jì)的細(xì)節(jié)。 而且,一旦模塊的端口定義完成后,我們也很難改變端口的配置。 另外,一個(gè)設(shè)計(jì)中的許多模塊往往具有相同的端口定義,在Verilog中,我們必須在每個(gè)模塊中進(jìn)行相同的定義,這為我們?cè)黾恿藷o(wú)謂的工作量。

SystemVerilog提供了一個(gè)新的、高層抽象的模塊連接,這個(gè)連接被稱為接口(Interface)。 接口在關(guān)鍵字interface和endinterface之間定義,它獨(dú)立于模塊。 接口在模塊中就像一個(gè)單一的端口一樣使用。 在最簡(jiǎn)單的形式下,一個(gè)接口可以認(rèn)為是一組線網(wǎng)。 例如,可以將PCI總線的所有信號(hào)綁定在一起組成一個(gè)接口。 通過(guò)使用接口,我們?cè)谶M(jìn)行一個(gè)設(shè)計(jì)的時(shí)候可以不需要首先建立各個(gè)模塊間的互連。 隨著設(shè)計(jì)的深入,各個(gè)設(shè)計(jì)細(xì)節(jié)也會(huì)變得越來(lái)越清晰,而接口內(nèi)的信號(hào)也會(huì)很容易地表示出來(lái)。 當(dāng)接口發(fā)生變化時(shí),這些變化也會(huì)在使用該接口的所有模塊中反映出來(lái),而無(wú)需更改每一個(gè)模塊。 下面是一個(gè)接口的使用實(shí)例:

interface chip_bus;// 定義接口

wireread_request,read_grant;

有線 [7:0] 地址、數(shù)據(jù);

端界面:chip_bus

module RAM(chip_bus io, // 使用接口

輸入);

//可以使用io.read_request引用接口中的一個(gè)信號(hào)

終端模塊

模塊CPU(chip_busio,輸入方);

...

終端模塊

模塊頂部;

注冊(cè) clk = 0;

chip_busa; // 實(shí)例接口

//將接口連接到模塊實(shí)例

RAM mem(a,clk);

中央處理器(a,clk);

終端模塊

實(shí)際上,SystemVerilog的接口不僅僅可以表示信號(hào)的綁定和互連。 由于SystemVerilog的接口中可以包含參數(shù)、常量、變量、結(jié)構(gòu)、函數(shù)、任務(wù)、initial塊、always塊以及連續(xù)賦值語(yǔ)句,所以SystemVerilog的接口還可以包含內(nèi)建的協(xié)議檢查以及被使用該接口的模塊所共用的功能。

全局聲明和語(yǔ)句

在Verilog中,除了一個(gè)模塊可以作為模塊實(shí)例引用其他模塊外,并不存在一個(gè)全局空間。 另外,Verilog允許任意數(shù)目的頂層模塊,因此會(huì)產(chǎn)生毫無(wú)關(guān)聯(lián)的層次樹(shù)。

SystemVeriog增加了一個(gè)被稱為root的隱含的頂級(jí)層次。 任何在模塊邊界之外的聲明和語(yǔ)句都存在于root空間中。 所有的模塊,無(wú)論它處于哪一個(gè)設(shè)計(jì)層次,都可以引用$root中聲明的名字。 這樣,如果某些變量、函數(shù)或其它信息被設(shè)計(jì)中的所有模塊共享,那么我們就可以將它們作為全局聲明和語(yǔ)句。 全局聲明和語(yǔ)句的一個(gè)使用實(shí)例如下:

reg error_flag; // 全局變量

function compare(...); // 全局函數(shù)

always@(error_flag) // 全局語(yǔ)句

...

模塊測(cè)試;

芯片 1 u1(...)

終端模塊

模塊 chip1(...);

FSM u2(...);

總是@(數(shù)據(jù))

error_flag=比較(數(shù)據(jù),預(yù)期);

終端模塊

模塊有限狀態(tài)機(jī)(...);

...

總是@(狀態(tài))

error_flag=比較(狀態(tài),預(yù)期);

終端模塊

時(shí)間單位和精度

在Verilog中,表示時(shí)間的值使用一個(gè)數(shù)來(lái)表示,而不帶有任何時(shí)間單位。例如:

永遠(yuǎn) #5clock= ~clock;

從這一句中我們無(wú)法判斷5代表的是5ns? 5ps? 還是其他。Verilog的時(shí)間單位和精度是作為每一個(gè)模塊的屬性,并使用編譯器指令timescale來(lái)設(shè)置。使用這種方法具有固有的缺陷,因?yàn)榫幾g器指令的執(zhí)行依賴于源代碼的編譯順序,編譯器總是將它遇到的最后一個(gè)timescale設(shè)置的時(shí)間單位和精度作為之后的標(biāo)準(zhǔn)。那么,假如有些模塊之前沒(méi)有使用`timescale設(shè)置時(shí)間單位和精度,這就有可能出現(xiàn)同一個(gè)源代碼的不同仿真會(huì)出現(xiàn)不同結(jié)果的情況。

SystemVerilog為了控制時(shí)間單位加入了兩個(gè)重要的增強(qiáng)。首先,時(shí)間值可以顯式地指定一個(gè)單位。時(shí)間單位可以是s、ms、ns、ps或fs。時(shí)間單位作為時(shí)間值的后綴出現(xiàn)。例如:

永遠(yuǎn) #5nsclock= ~clock;

其次,SystemVerilog允許使用新的關(guān)鍵字(timeunits和timeprecision)來(lái)指定時(shí)間單位和精度。這些聲明可以在任何模塊中指定,同時(shí)也可以在$root空間中全局指定。時(shí)間單位和精度必須是10的冪,范圍可以從s到fs。例如:

時(shí)間單位 1ns;

時(shí)間精度10ps;

抽象數(shù)據(jù)類型

Verilog提供了面向底層硬件的線網(wǎng)、寄存器和變量數(shù)據(jù)類型。這些類型代表了4態(tài)邏輯值,通常用來(lái)在底層上對(duì)硬件進(jìn)行建模和驗(yàn)證。線網(wǎng)數(shù)據(jù)類型還具有多個(gè)強(qiáng)度級(jí)別,并且能夠?yàn)槎囹?qū)動(dòng)源的線網(wǎng)提供解析功能。

SystemVerilog包括了C語(yǔ)言的char和int數(shù)據(jù)類型,它允許在Verilog模型和驗(yàn)證程序中直接使用C和C++代碼。VerilogPLI不再需要集成總線功能模型、算法模型和C函數(shù)。SystemVerilog還為Verilog加入了幾個(gè)新的數(shù)據(jù)類型,以便能夠在更抽象的層次上建模硬件。

l char:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的char數(shù)據(jù)類型相同,可以是一個(gè)8位整數(shù)(ASCII)或short int(Unicode);

l int:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的int數(shù)據(jù)類型相似,但被精確地定義成32位;

l shortint:一個(gè)兩態(tài)的有符號(hào)變量,被精確地定義成16位;

l longint:一個(gè)兩態(tài)的有符號(hào)變量,它與C語(yǔ)言中的long數(shù)據(jù)類型相似,但被精確地定義成64位;

l byte:一個(gè)兩態(tài)的有符號(hào)變量,被精確地定義成8位;

l bit:一個(gè)兩態(tài)的可以具有任意向量寬度的無(wú)符號(hào)數(shù)據(jù)類型,可以用來(lái)替代Verilog的reg數(shù)據(jù)類型;

l logic:一個(gè)四態(tài)的可以具有任意向量寬度的無(wú)符號(hào)數(shù)據(jù)類型,可以用來(lái)替代Verilog的線網(wǎng)或reg數(shù)據(jù)類型,但具有某些限制;

l shortreal:一個(gè)兩態(tài)的單精度浮點(diǎn)變量,與C語(yǔ)言的float類型相同;

l void:表示沒(méi)有值,可以定義成一個(gè)函數(shù)的返回值,與C語(yǔ)言中的含義相同。

SystemVerilog的bit和其他數(shù)據(jù)類型允許用戶使用兩態(tài)邏輯對(duì)設(shè)計(jì)建模,這種方法對(duì)仿真性能更有效率。由于Verilog語(yǔ)言沒(méi)有兩態(tài)數(shù)據(jù)類型,因此許多仿真器都通過(guò)將這種功能作為仿真器的一個(gè)選項(xiàng)提供。這些選項(xiàng)不能夠在所有的仿真器之間移植,而且在需要時(shí)用三態(tài)或四態(tài)邏輯的設(shè)計(jì)中強(qiáng)制使用兩態(tài)邏輯還具有副作用。SystemVerilog的bit數(shù)據(jù)類型能夠極大改進(jìn)仿真器的性能,同時(shí)在需要的時(shí)候仍然可以使用三態(tài)或四態(tài)邏輯。通過(guò)使用具有確定行為的數(shù)據(jù)類型來(lái)代替專有的仿真器選項(xiàng),兩態(tài)模型能夠在所有的SystemVerilog仿真器間移植。

SystemVerilog的logic數(shù)據(jù)類型比Verilog的線網(wǎng)和寄存器數(shù)據(jù)類型更加靈活,它使得在任何抽象層次上建模硬件都更加容易。logic類型能夠以下面的任何一種方法賦值:

l 通過(guò)任意數(shù)目的過(guò)程賦值語(yǔ)句賦值,能夠替代Verilog的reg類型;

l 通過(guò)單一的連續(xù)賦值語(yǔ)句賦值,能夠有限制地替代Verilog的wire類型;

l 連接到一個(gè)單一原語(yǔ)的輸出,能夠有限制地替代Verilog的wire類型;

由于logic數(shù)據(jù)類型能夠被用來(lái)替代Verilog的reg或wire(具有限制),這就使得能夠在一個(gè)更高的抽象層次上建模,并且隨著設(shè)計(jì)的不斷深入能夠加入一些設(shè)計(jì)細(xì)節(jié)而不必改變數(shù)據(jù)類型的聲明。logic數(shù)據(jù)類型不會(huì)表示信號(hào)的強(qiáng)度也不具有線邏輯的解析功能,因此logic數(shù)據(jù)類型比Verilog的wire類型更能有效地仿真和綜合。

有符號(hào)和無(wú)符號(hào)限定符

缺省情況下,Verilog net和reg數(shù)據(jù)類型是無(wú)符號(hào)類型,integer類型是一個(gè)有符號(hào)類型。Verilog-2001標(biāo)準(zhǔn)允許使用signed關(guān)鍵字將無(wú)符號(hào)類型顯式地聲明成有符號(hào)類型。SystemVerilog加入了相似的能力,它可以通過(guò)unsigned關(guān)鍵字將有符號(hào)數(shù)據(jù)類型顯式地聲明成有無(wú)符號(hào)數(shù)據(jù)類型。例如:

不帶符號(hào)的 j;

值得注意的是unsigned在Verilog中是一個(gè)保留字,但并沒(méi)有被Verilog標(biāo)準(zhǔn)使用。

用戶定義的類型

Verilog不允許用戶定義新的數(shù)據(jù)類型。SystemVerilog通過(guò)使用typedef提供了一種方法來(lái)定義新的數(shù)據(jù)類型,這一點(diǎn)與C語(yǔ)言類似。用戶定義的類型可以與其它數(shù)據(jù)類型一樣地使用在聲明當(dāng)中。例如:

typedefunsigned int uint;

單元 a, b;

一個(gè)用戶定義的數(shù)據(jù)類型可以在它的定義之前使用,只要它首先在空的typedef中說(shuō)明,例如:

typedef int48; // 空的typedef,在其他地方進(jìn)行完整定義

int48 c;

枚舉類型

在Verilog語(yǔ)言中不存在枚舉類型。標(biāo)識(shí)符必須被顯式地聲明成一個(gè)線網(wǎng)、變量或參數(shù)并被賦值。SystemVerilog允許使用類似于C的語(yǔ)法產(chǎn)生枚舉類型。一個(gè)枚舉類型具有一組被命名的值。缺省情況下,值從初始值0開(kāi)始遞增,但是我們可以顯式地指定初始值。枚舉類型的例子如下:

枚舉{紅、黃、綠} RGB;

枚舉 {WAIT=2'b01, LOAD, DONE} 狀態(tài);

我們還可以使用typedef為枚舉類型指定一個(gè)名字,從而允許這個(gè)枚舉類型可以在許多地方使用。例如:

typedefenum {FALSE=1'b0, TRUE} 布爾值;

布爾值準(zhǔn)備就緒;

布爾測(cè)試完成;

結(jié)構(gòu)體和聯(lián)合體

在Verilog語(yǔ)言中不存在結(jié)構(gòu)體或聯(lián)合體,而結(jié)構(gòu)體或聯(lián)合體在將幾個(gè)聲明組合在一起的時(shí)候非常有用。SystemVerilog增加了結(jié)構(gòu)體和聯(lián)合體,它們的聲明語(yǔ)法類似于C。

結(jié)構(gòu){

reg [15:0] 操作碼;

注冊(cè) [23:0] 地址;

} 和;

工會(huì){

詮釋我;

短實(shí) f;

} N;

結(jié)構(gòu)體或聯(lián)合體中的域可以通過(guò)在變量名和域名字之間插入句點(diǎn)(.)來(lái)引用:

IR.opcode = 1; // 設(shè)置IR變量中的opcode域

N.f = 0.0; // 將N設(shè)置成浮點(diǎn)數(shù)的值

我們可以使用typedef為結(jié)構(gòu)體或聯(lián)合體的定義指定一個(gè)名字。

typedefstruct{

reg [7:0] 操作碼;

注冊(cè) [23:0] 地址;

} instruction; // 命名的結(jié)構(gòu)體

instruction IR; // 結(jié)構(gòu)體實(shí)例

一個(gè)結(jié)構(gòu)體可以使用值的級(jí)聯(lián)來(lái)完整地賦值,例如:

指令={5,200};

結(jié)構(gòu)體可以作為一個(gè)整體傳遞到函數(shù)或任務(wù),也可以從函數(shù)或任務(wù)傳遞過(guò)來(lái),也可以作為模塊端口進(jìn)行傳遞。

數(shù)組

在Verilog中可以聲明一個(gè)數(shù)組類型,reg和線網(wǎng)類型還可以具有一個(gè)向量寬度。在一個(gè)對(duì)象名前面聲明的尺寸表示向量的寬度,在一個(gè)對(duì)象名后面聲明的尺寸表示數(shù)組的深度。例如:

reg [7:0] r1 [1:256]; // 256個(gè)8位的變量

在SystemVerilog中我們使用不同的術(shù)語(yǔ)表示數(shù)組:使用“壓縮數(shù)組(packed array)”這一術(shù)語(yǔ)表示在對(duì)象名前聲明尺寸的數(shù)組;使用“非壓縮數(shù)組(unpacked array)”這一術(shù)語(yǔ)表示在對(duì)象名后面聲明尺寸的數(shù)組。壓縮數(shù)組可以由下面的數(shù)據(jù)類型組成:bit、logic、reg、wire以及其它的線網(wǎng)類型。無(wú)論是壓縮數(shù)組還是非壓縮數(shù)組都可以聲明成多維的尺寸。

bit [7:0] a; // 一個(gè)一維的壓縮數(shù)組

bit b [7:0]; //一個(gè)一維的非壓縮數(shù)組

bit [0:11] [7:0] c; //一個(gè)二維的壓縮數(shù)組

bit [3:0] [7:0] d [1:10]; // 一個(gè)包含10個(gè)具有4個(gè)8位字節(jié)的壓縮數(shù)組的非壓縮數(shù)組

非壓縮尺寸在壓縮尺寸之前引用,這就允許將整個(gè)壓縮數(shù)組作為一個(gè)單一的元素進(jìn)行引用。在上面的例子中,d[1]引用非壓縮數(shù)組的一個(gè)單一元素,這個(gè)元素是一個(gè)包含4個(gè)字節(jié)的數(shù)組。

在為命名的塊中聲明

Verilog允許變量在一個(gè)命名的begin-end或fork-join語(yǔ)句組中聲明。相對(duì)于語(yǔ)句組來(lái)說(shuō),這些變量是本地的,但它們可以被層次化地引用。在SystemVerilog中,既可以在命名的塊中也可以在未命名的塊中聲明。在未命名的塊中,不能夠使用層次名來(lái)訪問(wèn)變量。所有的變量類型,包括用戶定義的類型、枚舉類型、結(jié)構(gòu)體和聯(lián)合體都可以在begin-end或fork-join語(yǔ)句組中聲明。

常量

在Verilog中有三種特性類型的常量:parameter、specparam和localparam。而在SystemVerilog中,允許使用const關(guān)鍵字聲明常量。例如:

常量字符=“:”;

可重定義的數(shù)據(jù)類型

SystemVerilog擴(kuò)展了Verilog的parameter,使其可以包含類型。這個(gè)強(qiáng)大的功能使得一個(gè)模塊中的數(shù)據(jù)類型在模塊的每一個(gè)實(shí)例中重新定義。例如:

模塊 foo;

(參數(shù) typeVAR_TYPE = 短線;)

(輸入邏輯[7:0] i,輸出邏輯[7:0] o);

VAR_TYPE j = 0; // 如果不重新定義,j的數(shù)據(jù)類型為shortint

……

終端模塊

模塊欄;

邏輯 [3:0] i, o;

foo#(.VAR_TYPE(int)) u1 (i, o); // 重新將VAR_TYPE定義成int類型

終端模塊

模塊端口連接

在Verilog中,可以連接到模塊端口的數(shù)據(jù)類型被限制為線網(wǎng)類型以及變量類型中的reg、integer和time。而在SystemVerilog中則去除了這種限制,任何數(shù)據(jù)類型都可以通過(guò)端口傳遞,包括實(shí)數(shù)、數(shù)組和結(jié)構(gòu)體。

字母值

在Verilog中,當(dāng)指定或賦值字母值的時(shí)候存在一些限制。而SystemVerilog則為字母值如何指定作了下面的增強(qiáng):

l 一個(gè)字母值的所有位均可以使用0、1、z或x作相同的填充。這就允許填充一個(gè)任意寬度的向量,而無(wú)需顯式地指定向量的寬度,例如:

位 [63:0] 數(shù)據(jù);

data = `1; //將data的所有位設(shè)置成1

l 一個(gè)字符串可以賦值成一個(gè)字符數(shù)組,象C語(yǔ)言一樣加入一個(gè)空結(jié)束符。如果尺寸不同,它象C中一樣進(jìn)行左調(diào)整,例如:

char foo[0:12] = “你好世界”;

l 加入了幾個(gè)特殊的串字符:

v:垂直TAB

f:換頁(yè)

a:響鈴

x02:用十六進(jìn)制數(shù)來(lái)表示一個(gè)ASCII字符

l 數(shù)組可以使用類似于C初始化的語(yǔ)法賦值成字符值,但它還允許復(fù)制操作符。括號(hào)的嵌套必須精確地匹配數(shù)組的維數(shù)(這一點(diǎn)與C不同),例如:

int n[1: 2] [1:3] = {{0, 1, 2}, {3{4}}};

強(qiáng)制類型轉(zhuǎn)換

Verilog不能將一個(gè)值強(qiáng)制轉(zhuǎn)換成不同的數(shù)據(jù)類型。SystemVerilog通過(guò)使用’操作符提供了數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換功能。這種強(qiáng)制轉(zhuǎn)換可以轉(zhuǎn)換成任意類型,包括用戶定義的類型。例如:

int’ (2.0 *3.0) // 將結(jié)果轉(zhuǎn)換為int類型

mytype’ (foo) // 將foo轉(zhuǎn)換為mytype類型

一個(gè)值還可以通過(guò)在強(qiáng)制轉(zhuǎn)換操作符前指定一個(gè)10進(jìn)制數(shù)來(lái)轉(zhuǎn)換成不同的向量寬度,例如:

17’(x- 2) // 將結(jié)果轉(zhuǎn)換為17位寬度

也可以將結(jié)果轉(zhuǎn)換成有符號(hào)值,例如:

signed’(x) // 將x轉(zhuǎn)換為有符號(hào)值

操作符

Verilog沒(méi)有C語(yǔ)言的遞增(++)和遞減(--)操作符。 而SystemVerilog加入了幾個(gè)新的操作符:

l ++和--:遞增和遞減操作符;

l +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=賦值操作符;

唯一性和優(yōu)先級(jí)決定語(yǔ)句

在Verilog中,如果沒(méi)有遵循嚴(yán)格的編碼風(fēng)格,它的if-else和case語(yǔ)句會(huì)在RTL仿真和RTL綜合間具有不一致的結(jié)果。 如果沒(méi)有正確使用full_case和parallel_case綜合指令還會(huì)引起一些其它的錯(cuò)誤。

SystemVerilog能夠顯式地指明什么時(shí)候一條決定語(yǔ)句的分支是唯一的,或者什么時(shí)候需要計(jì)算優(yōu)先級(jí)。 我們可以在if或case關(guān)鍵字之前使用unique或requires關(guān)鍵字。 這些關(guān)鍵字可以向仿真器、綜合編譯器、以及其它工具指示我們期望的硬件類型。 工具使用這些信息來(lái)檢查if或case語(yǔ)句是否正確建模了期望的邏輯。 例如,如果使用unique限定了一個(gè)決定語(yǔ)句,那么在不希望的case值出現(xiàn)的時(shí)候仿真器就能夠發(fā)布一個(gè)警告信息。

位 [2:0]a;

唯一 if((a==0) ||(a==1))y= in1;

否則如果 (a==2) y=in2;

else if (a==4) y=in3; // 值3、5、6、7會(huì)引起一個(gè)警告

優(yōu)先級(jí)如果 (a[2:1]==0) y = in1;a是0或1

否則如果 (a[2]==0) y = in2;a是2或3

else y = in3; // 如果a為其他的值

獨(dú)特案例 (A)

0, 1: y = in1;

2: y = in2;

4: y = in3;

endcase // 值3、5、6、7會(huì)引起一個(gè)警告

優(yōu)先級(jí)案例z(a)

2'b00?: y = in1;a是0或1

2'b0??: y = in2;a是2或3

default : y = in3; //如果a為其他的值

尾殼

底部檢測(cè)的循環(huán)

Verilog包含for、while和repeat循環(huán),這幾個(gè)循環(huán)都是在循環(huán)的起始處檢測(cè)循環(huán)條件。 SystemVerilog加入了一個(gè)do-while循環(huán),這種循環(huán)在執(zhí)行語(yǔ)句的結(jié)尾處檢測(cè)循環(huán)條件。

跳轉(zhuǎn)語(yǔ)句

在語(yǔ)句的執(zhí)行過(guò)程中,C語(yǔ)言提供了幾種方式來(lái)跳轉(zhuǎn)到新的語(yǔ)句,包括:return、break、continue和goto。 在Verilog中除了通過(guò)使用disable語(yǔ)句跳轉(zhuǎn)到語(yǔ)句組的尾部外,沒(méi)有提供任何其它跳轉(zhuǎn)語(yǔ)句。 使用disable語(yǔ)句執(zhí)行中止和繼續(xù)功能要求加入塊的名字,并且會(huì)產(chǎn)生不直觀的代碼。 SystemVerilog加入了C語(yǔ)言的break和continue關(guān)鍵字,這兩個(gè)關(guān)鍵字不要求使用塊名字。 另外,SystemVerilog還加入了一個(gè)return關(guān)鍵字,它可以用來(lái)在任何執(zhí)行點(diǎn)上退出一個(gè)任務(wù)或函數(shù)。

l break:退出一個(gè)循環(huán),與C語(yǔ)言相同;

l continue:跳轉(zhuǎn)到一個(gè)循環(huán)的尾部,與C語(yǔ)言相同;

l return 表達(dá)式:退出一個(gè)函數(shù);

l return:退出一個(gè)任務(wù)或void類型的函數(shù)。

SystemVerilog沒(méi)有包含C語(yǔ)言中的goto語(yǔ)句。

塊名字和語(yǔ)句標(biāo)簽

在Verilog中,我們可以通過(guò)在begin或fork關(guān)鍵字之后指定名字來(lái)為begin-end或fork-jion語(yǔ)句指定名字。 這個(gè)指定的名字代表整個(gè)語(yǔ)句塊。 SystemVerilog還允許在end或jion關(guān)鍵字之后指定一個(gè)匹配的塊名字。 這種機(jī)制很容易將end或jion與對(duì)應(yīng)的begin或fork聯(lián)系起來(lái),尤其是在一個(gè)長(zhǎng)的塊或嵌套的塊中。 塊結(jié)尾處的名字是可選的,但如果使用的話,它必須與塊起始處的名字相同。 例如:

begin: foo // 在begin之后的塊名字

……

fork: bar // 具有名字的嵌套的塊

……

jion: bar // 必須具有相同的名字

……

end: foo // 必須具有相同的名字

SystemVerilog還允許像C語(yǔ)言一樣為單個(gè)語(yǔ)句設(shè)置標(biāo)簽。 語(yǔ)句標(biāo)簽放置在語(yǔ)句的前面,用來(lái)標(biāo)識(shí)這條語(yǔ)句。 例如:

初始開(kāi)始

測(cè)試1: read_enable = 0;

……

測(cè)試2:對(duì)于(I=0;I<=255;I++)

……

結(jié)束

對(duì)事件控制的增強(qiáng)

Verilog使用@標(biāo)記來(lái)控制基于特定事件的執(zhí)行流,SystemVerilog增強(qiáng)了@事件控制。

l 有條件的事件控制

@標(biāo)記的一個(gè)基本應(yīng)用就是推斷一個(gè)具有使能輸入的鎖存器。 下面的例子演示了一個(gè)鎖存器建模的基本風(fēng)格。

始終 @(數(shù)據(jù)或 en)

如果 (en)y<=data;

這種編碼風(fēng)格對(duì)仿真來(lái)說(shuō)是效率低下的,因?yàn)榧词乖谑鼓茌斎霟o(wú)效的時(shí)候,數(shù)據(jù)輸入的每次改變都會(huì)觸發(fā)事件控制。

SystemVerilog在事件控制中加入了一個(gè)iff條件。 只有iff條件為真的條件下,事件控制才會(huì)被觸發(fā)。 通過(guò)將使能判斷移入到事件控制里面,使得只有在鎖存器輸出能夠改變的時(shí)候事件控制才會(huì)被觸發(fā)。 例如:

始終 @(a 或 en iff en==1)

y<=a;

l 事件控制中的表達(dá)式

Verilog允許在@事件控制列表中使用表達(dá)式,例如:

始終 @((a * b))

總是@(內(nèi)存[地址])

在第一個(gè)例子中,是當(dāng)操作數(shù)發(fā)生改變的時(shí)候還是只有當(dāng)運(yùn)算結(jié)果發(fā)生改變的時(shí)候才會(huì)觸發(fā)事件控制? 在第二個(gè)例子中,是當(dāng)memory的地址發(fā)生變化的時(shí)候還是只有當(dāng)memory的值發(fā)生變化的時(shí)候才會(huì)觸發(fā)事件控制? 當(dāng)@事件控制中包含表達(dá)式的時(shí)候,IEEE Verilog標(biāo)準(zhǔn)允許仿真器進(jìn)行不同的優(yōu)化。 這就可能導(dǎo)致在不同的仿真器間有不同的仿真結(jié)果,可能還會(huì)導(dǎo)致仿真與綜合之間的結(jié)果不一致。 SystemVerilog加入了一個(gè)changed關(guān)鍵字,在事件控制列表中它被用作一個(gè)修飾符。 @(changed (表達(dá)式))能夠顯式地定義只有當(dāng)表達(dá)式的結(jié)果發(fā)生改變的時(shí)候才會(huì)觸發(fā)事件控制。 例如:

總是 @(更改 (a * b))

總是@(更改了內(nèi)存[地址])

l 事件控制中的賦值

Verilog不允許在事件控制中使用賦值。 SystemVerilog允許在事件控制中使用賦值表達(dá)式。 事件控制僅僅敏感于賦值表達(dá)式右側(cè)的變化。 例如:

始終 @(y = a * b)

新的過(guò)程

Verilog使用always過(guò)程來(lái)表示時(shí)序邏輯、組合邏輯和鎖存邏輯的RTL模型。 綜合工具和其它軟件工具必須根據(jù)過(guò)程起始處的事件控制列表以及過(guò)程內(nèi)的語(yǔ)句來(lái)推斷always過(guò)程的意圖。 這種推斷會(huì)導(dǎo)致仿真結(jié)果和綜合結(jié)果之間的不一致。 SystemVerilog增加了三個(gè)新的過(guò)程來(lái)顯式地指示邏輯的意圖。

l always_ff:表示時(shí)序邏輯的過(guò)程;

l always_comb:表示組合邏輯的過(guò)程;

l always_latch:表示鎖存邏輯的過(guò)程。

例如:

always_comb@(aor b 或 sel) 開(kāi)始

如果 (sel) y = a;

否則 y = b;

結(jié)束

軟件工具能夠檢查事件控制敏感列表和過(guò)程的內(nèi)容來(lái)保證邏輯的功能匹配過(guò)程的類型。 例如,工具能夠檢查一個(gè)always_comb過(guò)程能夠敏感過(guò)程內(nèi)讀取的所有外部值,對(duì)邏輯的每一個(gè)分支的相同變量進(jìn)行賦值,并且檢查分支是否覆蓋了所有可能的條件。 如果任何一個(gè)條件沒(méi)有滿足,軟件工具均會(huì)報(bào)告該過(guò)程沒(méi)有正確建模組合邏輯。

動(dòng)態(tài)過(guò)程

Verilog通過(guò)使用fork-jion提供了一種靜態(tài)的并發(fā)過(guò)程。 每一個(gè)分支都是一個(gè)分離的、并行的過(guò)程。 fork-jion中任何語(yǔ)句的執(zhí)行必須在組內(nèi)的每一個(gè)過(guò)程完成后才會(huì)執(zhí)行。 例如:

初始開(kāi)始

send_packet_task (1,255, 0);

send_packet_task(7 128人,5人);

watch_result_task (1,255, 0);

watch_result_task(7 128人,5人);

jion // 所有的任務(wù)必須完成后才會(huì)到達(dá)這里

結(jié)束

SystemVerilog通過(guò)process關(guān)鍵字加入了一個(gè)新的、動(dòng)態(tài)的過(guò)程。 它為一個(gè)過(guò)程產(chǎn)生分支,然后繼續(xù)執(zhí)行而無(wú)需等待其他過(guò)程完成。 過(guò)程不會(huì)阻塞過(guò)程或任務(wù)內(nèi)的語(yǔ)句執(zhí)行。 這種方式能夠建模多線程的過(guò)程。 例如:

初始開(kāi)始

進(jìn)程send_packet_task (1,255, 0);

processsend_packet_task(7, 128, 5);

processwatch_result_task(1, 255, 0);

processwatch_result_task(7, 128, 5);

end //所有的過(guò)程并行運(yùn)行

任務(wù)和函數(shù)增強(qiáng)

SystemVerilog為Verilog的任務(wù)和函數(shù)作了幾個(gè)增強(qiáng)。

l 靜態(tài)和自動(dòng)的存儲(chǔ)

缺省情況下,在Verilog任務(wù)或函數(shù)內(nèi)的所有存儲(chǔ)都是靜態(tài)的。 Verilog-2001允許將任務(wù)和函數(shù)聲明成自動(dòng)的。 在SystemVerilog中:(1). 在一個(gè)靜態(tài)任務(wù)和函數(shù)內(nèi)的特定數(shù)據(jù)可以顯式地聲明成自動(dòng)的。 聲明成自動(dòng)的數(shù)據(jù)在塊中具有完整的生命周期,并且在任務(wù)和函數(shù)調(diào)用的入口處初始化; (2). 在一個(gè)自動(dòng)的任務(wù)或函數(shù)中的特定數(shù)據(jù)可以顯式地聲明成靜態(tài)的。 自動(dòng)的任務(wù)或函數(shù)中聲明成靜態(tài)的數(shù)據(jù)在一個(gè)塊的本地范圍內(nèi)具有靜態(tài)的生命周期。

l 從任何點(diǎn)返回

Verilog在一個(gè)任務(wù)或函數(shù)中執(zhí)行到endtask或endfunction關(guān)鍵字的時(shí)候返回。 函數(shù)的返回值是給函數(shù)名賦的最后一個(gè)值。 SystemVerilog加入了一個(gè)return關(guān)鍵字,使用這個(gè)關(guān)鍵字,一個(gè)任務(wù)或函數(shù)可以在任何點(diǎn)上返回。

l 多語(yǔ)句

Verilog要求一個(gè)任務(wù)或函數(shù)只具有一個(gè)語(yǔ)句或語(yǔ)句塊。 多條語(yǔ)句必須組合到一個(gè)單一的begin-end或fork-jion塊中。 SystemVerilog去除了這種限制。 因此,多條語(yǔ)句可以在一個(gè)任務(wù)或函數(shù)中列出而無(wú)需使用的begin-end或fork-jion。 每有分組的語(yǔ)句就像在begin-end中一樣順序執(zhí)行。 我們還可以產(chǎn)生一個(gè)沒(méi)有語(yǔ)句的任務(wù)或函數(shù)定義。

l void函數(shù)

Verilog要求一個(gè)函數(shù)具有一個(gè)返回值,函數(shù)的調(diào)用接收這個(gè)返回值。 SystemVerilog加入了一個(gè)void數(shù)據(jù)類型,這個(gè)數(shù)據(jù)類型可以作為一個(gè)函數(shù)的返回值類型。 void函數(shù)可以像Verilog任務(wù)一樣進(jìn)行調(diào)用,而無(wú)需接收一個(gè)返回值。 void函數(shù)和任務(wù)的差別在于函數(shù)存在幾個(gè)限制,例如沒(méi)有時(shí)間控制等。

l 函數(shù)的輸入和輸出

Verilog標(biāo)準(zhǔn)要求一個(gè)函數(shù)至少具有一個(gè)輸入并且函數(shù)只能具有輸入。 SystemVerilog去除了這些限制。 函數(shù)可以具有任意數(shù)目的輸入、輸出以及輸入輸出,也可以什么也沒(méi)有。

連續(xù)賦值的增強(qiáng)

在Verilog中,連續(xù)賦值語(yǔ)句的左側(cè)只能是線網(wǎng)類型,例如wire。 連續(xù)賦值語(yǔ)句被認(rèn)為是線網(wǎng)的驅(qū)動(dòng)源,而線網(wǎng)可以擁有任意數(shù)據(jù)的驅(qū)動(dòng)源。 SystemVerilog允許除reg類型以外的任何數(shù)據(jù)類型用于連續(xù)賦值語(yǔ)句的左側(cè)。 與線網(wǎng)不同,所有其它數(shù)據(jù)類型被限制為只能有一個(gè)連續(xù)賦值語(yǔ)句驅(qū)動(dòng)。 為相同的變量混合使用連續(xù)賦值語(yǔ)句和過(guò)程賦值語(yǔ)句是不被允許的。

$bit系統(tǒng)函數(shù)

在Verilog中沒(méi)有類似于C語(yǔ)言中sizeof的函數(shù)。 SystemVerilog加入一個(gè)新的$bit內(nèi)建函數(shù)。 這個(gè)函數(shù)返回保存一個(gè)值所需的硬件位的數(shù)目(一個(gè)四態(tài)值要求一個(gè)硬件位),這個(gè)函數(shù)還可以用來(lái)確定一個(gè)結(jié)構(gòu)體所代表的硬件位的數(shù)目。

`define的增強(qiáng)

SystemVerilog增強(qiáng)了define編譯器指令的能力以便支持將字符串作為宏的參數(shù)。宏的文本字符串中可以包含一個(gè)隔離的引號(hào),它的前面必須具有一個(gè)反勾號(hào)(”),這就允許字符串中包含宏參數(shù)。 宏文本可以在行的尾部包含一個(gè)反斜杠(’’)來(lái)表示在下一行繼續(xù)。 如果宏文本字符串中包含反斜杠,則反斜杠應(yīng)該被放在兩個(gè)反勾號(hào)之間,這樣它就不會(huì)被認(rèn)為是Verilog轉(zhuǎn)義標(biāo)識(shí)符的開(kāi)始。 宏文本字符串還可以包含雙反勾號(hào)(``),它允許標(biāo)識(shí)符能夠從參數(shù)中構(gòu)建。 這些增強(qiáng)使得define指令更加靈活。例如:include指令后可以緊跟一個(gè)宏名字來(lái)替代一個(gè)字符串。

“定義 F1”../project_top/opcode_defines”

include F1

狀態(tài)機(jī)建模

SystemVerilog允許在更高的抽象層次上對(duì)狀態(tài)機(jī)建模。 這些結(jié)構(gòu)包括:

l 枚舉類型

l 一個(gè)特殊的state數(shù)據(jù)類型;

l 一個(gè)遷移語(yǔ)句

l 一個(gè)遷移操作符

斷言

SystemVerilog中加入了斷言的功能來(lái)改善系統(tǒng)的驗(yàn)證過(guò)程。

結(jié)論

SystemVerilog為Verilog-2001標(biāo)準(zhǔn)提供了一系列的擴(kuò)展。 這些擴(kuò)展使得大型設(shè)計(jì)的建模和驗(yàn)證更加容易。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2725

    瀏覽量

    47610
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8667

    瀏覽量

    151518
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110187
  • System
    +關(guān)注

    關(guān)注

    0

    文章

    165

    瀏覽量

    37004

原文標(biāo)題:System Verilog的概念以及與verilog的對(duì)比

文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    System Verilog常見(jiàn)問(wèn)題及語(yǔ)言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問(wèn)題以及相關(guān)的SystemVerilog 語(yǔ)言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Veri
    發(fā)表于 12-11 07:19

    System Verilog問(wèn)題和語(yǔ)言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問(wèn)題以及相關(guān)的SystemVerilog 語(yǔ)言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Veri
    發(fā)表于 12-24 07:07

    Verilog Digital System Design

    This book is on the IEEE Standard Hardware Description Languagebased on the Verilog® Hardware
    發(fā)表于 07-23 08:59 ?0次下載
    <b class='flag-5'>Verilog</b> Digital <b class='flag-5'>System</b> Design

    VHDL和Verilog HDL語(yǔ)言對(duì)比

    VHDL和Verilog HDL語(yǔ)言對(duì)比 Verilog HDL和VHDL都是用于邏輯設(shè)計(jì)的硬件描述語(yǔ)言,并且都已成為IEEE標(biāo)準(zhǔn)。VHDL是在1987年成為IEEE標(biāo)準(zhǔn),Verilog
    發(fā)表于 02-09 09:01 ?1.1w次閱讀

    VHDL,Verilog,System verilog比較

    本文簡(jiǎn)單討論并總結(jié)了VHDL、VerilogSystem verilog 這三中語(yǔ)言的各自特點(diǎn)和區(qū)別 As the number of enhancements
    發(fā)表于 01-17 11:32 ?0次下載

    verilog代碼要有硬件的概念

    因?yàn)?b class='flag-5'>Verilog是一種硬件描述語(yǔ)言,所以在寫Verilog語(yǔ)言時(shí),首先要有所要寫的module在硬件上如何實(shí)現(xiàn)的概念,而不是去想編譯器如何去解釋這個(gè)module
    發(fā)表于 02-11 16:18 ?2883次閱讀
    寫<b class='flag-5'>verilog</b>代碼要有硬件的<b class='flag-5'>概念</b>

    基于System Verilog中的隨機(jī)化激勵(lì)

    基于System Verilog中的隨機(jī)化激勵(lì)
    發(fā)表于 10-31 09:25 ?9次下載
    基于<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>中的隨機(jī)化激勵(lì)

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

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

    System Verilogverilog對(duì)比

    SystemVerilog語(yǔ)言簡(jiǎn)介 SystemVerilog是一種硬件描述和驗(yàn)證語(yǔ)言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語(yǔ)言(HDL),并對(duì)其進(jìn)行了擴(kuò)展,包括擴(kuò)充
    的頭像 發(fā)表于 09-28 17:12 ?3557次閱讀

    System Verilogverilog概念有何不同

    SystemVerilog是一種 硬件描述和驗(yàn)證語(yǔ)言 (HDVL),它 基于IEEE1364-2001 Verilog硬件描述語(yǔ)言(HDL),并對(duì)其進(jìn)行了擴(kuò)展,包括擴(kuò)充了C語(yǔ)言數(shù)據(jù)類型、結(jié)構(gòu)、壓縮
    的頭像 發(fā)表于 10-19 10:58 ?4457次閱讀

    FPGA技術(shù)之Verilog語(yǔ)法基本概念

    Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的語(yǔ)言。用Verilog HDL描述的電路設(shè)計(jì)就是該電路的Verilog HDL模型也稱為模塊。Verilog HDL既是一種行為描述的語(yǔ)言
    發(fā)表于 12-08 14:00 ?2787次閱讀

    學(xué)會(huì)這些System Verilog方法,芯片驗(yàn)證入門沒(méi)問(wèn)題

    一個(gè)掌握Verilog語(yǔ)言的工程師初次看SystemVerilog都會(huì)有這樣的感受,這就是Verilog啊,很容易啊,So easy啊。沒(méi)錯(cuò),確實(shí)是這樣,System Verilog
    的頭像 發(fā)表于 12-09 15:08 ?3872次閱讀

    淺談System Verilog的DPI機(jī)制

    System Verilog(SV)把其他編程語(yǔ)言統(tǒng)一成為外語(yǔ),F(xiàn)oreign Programming Language(FPL)。
    的頭像 發(fā)表于 05-23 15:39 ?2263次閱讀
    淺談<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>的DPI機(jī)制

    談?wù)?b class='flag-5'>Verilog/System Verilog和C的幾種交互模式

    PLI全稱 Program Language Interface,程序員可以通過(guò)PLI在verilog中調(diào)用C函數(shù),這種訪問(wèn)是雙向的。
    的頭像 發(fā)表于 06-01 17:32 ?1654次閱讀
    談?wù)?b class='flag-5'>Verilog</b>/<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>和C的幾種交互模式

    system verilog語(yǔ)言簡(jiǎn)介

    ICer需要System Verilog語(yǔ)言得加成,這是ICer深度的表現(xiàn)。
    發(fā)表于 11-01 10:44 ?0次下載
    主站蜘蛛池模板: 四虎影裤| 美女天天色| 最近2018年中文字幕免费图片| 黄色大秀视频| 亚洲乱码一区二区三区在线观看| 啪视频免费| 国产香蕉一区二区精品视频| 午夜色网站| 婷婷综合久久中文字幕蜜桃三| 四虎在线永久免费视频网站| 日本特黄特色特爽大片老鸭| 免费黄色三级| 国产精品17p| 天天色综合三| 激情五月网站| 欧美性猛交xxxx免费看久久| 日日操夜夜操狠狠操| 欲色视频| 日本三级欧美三级香港黄| 免费一级毛片| 99成人在线| 精品午夜视频| 亚洲免费视频播放| 亚洲人色大成年网站在线观看| 三级毛片在线免费观看| 久久色婷婷| 午夜影院免费视频| www操com| 超h高h文污肉| 日韩欧美中文字幕在线视频| 韩国三级hd中文字幕久久精品| 午夜免费伦费影视在线观看| xxxx黄| 国模欢欢大尺度| 日本成人一级片| www在线播放| 国产综合成色在线视频| 亚洲综合一区二区| 四虎永久精品免费网址大全| 激情综合亚洲| 男女一级大黄|