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

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

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

3天內不再提示

數字硬件建模SystemVerilog之Interface方法概述

OpenFPGA ? 來源:OpenFPGA ? 2023-04-28 14:10 ? 次閱讀

概述

SystemVerilog Interface是modport的一種,但比簡單的輸入、輸出或輸入輸出端口的功能更多。在其最簡單的形式中,Interface端口將相關的信號捆綁在一起作為一個單一的復合端口。例如,構成AMBA AXI總線的所有單個信號都可以被歸納為一個Interface端口。一個Interface可以做的不僅僅是封裝總線信號。SystemVerilog Interface為設計者提供了一種集中總線功能的方法,而不是將功能分散在設計中的幾個模塊中。這就模擬了設計工程師在RTL層面的工作,并讓綜合工作在整個設計中適當地分配門級總線硬件。

當遵循特定的建模準則和限制時,Interface是可以綜合的。Interface也可以用在不可綜合級別的建模,并作為驗證測試平臺的一部分。先進的驗證方法,如UVM 、OVM和VMM,都使用Interface。

Interface方法(任務和函數)

SystemVerilog Interface的作用不僅僅是將相關的信號組合在一起。Interface還可以封裝模塊間的通信功能。通過將通信功能添加到Interface中,每個使用該Interface的模塊可以簡單地引用該功能,而不必在每個模塊中重復該功能。Interface中的封裝功能也可以獨立于使用該Interface的模塊進行驗證。

Interface中封裝的功能可以通過使用任務和函數來定義。Interface中的任務和函數被稱為Interface方法(interface methods)。Interface方法(任務和函數)可以通過在模塊的modport定義中使用導入語句被導入到需要它們的模塊中。在modport中導入函數類似于從包中導入函數。

下面的例子給簡單的AHB Interface增加了兩個函數--一個是生成奇偶校驗位值(使用奇數校驗),另一個函數是檢查數據是否與計算出的奇偶校驗相符。hwdata和hrdata向量被聲明為比以前的例子寬1位,額外的位被用作奇偶校驗位。

例10-6:帶有奇偶性邏輯Interface方法(函數)的Interface

///////////////////////////////////////////////////////////
//SimpleAHBInterfacewithparitymethods
///////////////////////////////////////////////////////////
//`begin_keywords"1800-2012"
interfacesimple_ahb(
inputlogichclk,//bustransferclk
inputlogichresetN//busreset,activelow
);
logic[31:0]haddr;//transferstartaddress
logic[32:0]hwdata;//datatoslave,withparitybit
logic[32:0]hrdata;//datafromslave,withparitybit
logic[2:0]hsize;//transfersize
logichwrite;//1forwrite,0forread
logichready;//1fortransferfinished

functionautomaticlogicparity_gen(logic[31:0]data);
return(^data);//calculateparityofdata(oddparity)
endfunction

functionautomaticlogicparity_chk(logic[31:0]data,
logicparity);
return(parity===^data);//1=OK,0=parityerror
endfunction

//mastermoduleportdirections
modportmaster_ports(
outputhaddr,hwdata,hsize,hwrite,//toAHBslave
inputhrdata,hready,//fromAHBslave
inputhclk,hresetN,//fromchiplevel
importparity_gen,parity_check//functionimport
);

//slavemoduleportdirections
modportslave_ports(
outputhrdata,hready,//toAHBmaster
inputhaddr,hwdata,hsize,hwrite,//fromAHBmaster
inputhclk,hresetN,//fromchiplevel
importparity_check//functionimport
);

//slavemoduleportdirections
modportslave_ports_alt(
outputhrdata,hready,//toAHBmaster
inputhaddr,hwdata,hsize,hwrite,//fromAHBmaster
inputhclk,hresetN,//fromchiplevel
importfunctionlogicparity_chk(logic[31:0]data,
logicparity)
);
endinterface:simple_ahb
//`end_keywords

在這個例子中,master_ports 的modport定義同時導入了parity_gen 和 parity_chk。modport從主模塊的角度定義了端口方向和導入。因此,一個使用master_portsmodport的模塊正在導入這些函數,類似于一個模塊從包中導入函數的方式。

slave_portsmodport只導入parity_chk。一個使用slave_ports modport的模塊不能訪問parity_gen。因為這個方法沒有被包含在modport 的導入中,所以從 slave_ports 提供的Interface來看,這個方法就好像不存在一樣。

使用方法原型導入方法。作為選擇,modport導入聲明可以指定任務或函數參數的完整原型。而不是僅僅導入方法名,導入關鍵字后面是實際方法定義的聲明行。這種風格的導入聲明的基本語法是:

modport(import task))。
modport(importfunction())。

比如說。

92d0ac56-e583-11ed-ab56-dac502259ad0.png

函數原型不包括automatic關鍵字,即使實際的函數被聲明為automatic(這是綜合所需要的)。

使用完整的原型來導入一個方法并沒有什么好處。一些工程師認為,完整的原型可以直接記錄任務或函數的參數,作為??诼暶鞯囊徊糠?。當實際的任務或函數被定義在一個包中,并被導入到Interface中時,這種額外的代碼記錄會很方便。原型使方法類型和參數在Interface定義中可見,這樣工程師就不需要到包含包的文件中去看方法類型和參數。

調用Interface中定義的方法

導入的方法是Interface的一部分,通過使用Interface端口名稱來調用,與引用Interface中的信號的方式相同。語法是

.。

前面展示的主模塊有一個名為ahb 的 Interface端口 。因此,主模塊可以通過引用ahb.parity_gen來調用Interface parity_gen方法。例如:

always_ff@(posedgeahb.hclk)
 ahb.hwdata[32]<= ahb.parity_gen(ahb.hwdata[31:0])。

綜合Interface方法

從概念上講,綜合編譯器通過在模塊中創建該方法的本地副本來替換導入的方法,然后對該本地副本進行綜合。綜合后的模塊版本將包含導入方法的邏輯,而不再從Interface中獲取該功能。

最佳實踐指南10-4
對于可綜合的RTL Interface,只在Interface中使用函數和無效函數。不要使用任務或always程序。

綜合編譯器對放置在模塊中的Interface內容施加了同樣的RTL編碼限制。這些限制之一是,任務必須在零時間內執行。使用void函數而不是任務來執行這個綜合限制。

注意事項
導入的函數或任務必須被聲明為automatic,并且不能包含靜態聲明,以便被綜合。這與模塊從包中導入函數或任務時的同義詞規則相同。

一個automatic函數或任務在每次被調用時都會分配新的存儲空間。當一個模塊調用一個導入的方法時,所有內部存儲的新副本被分配。這允許綜合處理該方法,就好像它是模塊內的一個本地副本。

抽象的、不可綜合的Interface

SystemVerilog Interface能夠以比RTL綜合編譯器所支持的更高的抽象水平來表示總線協議。例如,一個Interface任務,可能需要多個時鐘周期來執行,可以代表一個完整的主從握手協議。該協議可以從主機發出傳輸請求開始,仲裁哪個從機收到請求,等待從機的反饋,傳輸數據,并收到數據被接收的確認信息

這些Interface功能對抽象的事務級建模很有用,但目前的RTL綜合編譯器不支持。目前的SystemVerilog綜合工具要求將Interface中編碼的功能限制為零延遲和零時鐘周期模型。這些綜合限制可以通過將Interface中定義的功能代碼限制為函數來滿足。SystemVerilog的語法規則要求函數必須在零模擬時間內執行,這就要求綜合器對零延遲Interface功能的要求。

一個Interface也可以包含驗證程序和斷言。這些驗證代碼可以通過將其包含在pragma中而隱藏起來。

//synthesistranslateoffand//synthesistranslateon.

Interface程序代碼

除了任務和函數方法,Interface還可以包含初始和always程序塊和assign。程序代碼可以用來在一個Interface內建立功能模型,這些功能會影響到在Interface所代表的總線上交流的信息。

例10-7為簡單AHB總線增加了一個時鐘發生器hclk,為總線增加了一個復位同步器hresetN。在這個Interface的前幾個例子中,這些信號是在Interface的外部產生的,并作為簡單AHB Interface的輸入端口傳入。這個例子用芯片(或系統)級的時鐘和復位取代了這些輸入,并使用這些芯片級的信號來產生本地總線時鐘和總線復位。這個本地功能然后成為主模塊和從模塊之間封裝的總線通信的一部分。

例10-7:與內部程序代碼的Interface,生成總線功能

///////////////////////////////////////////////////////////
//SimpleAHBInterfacewithclockgeneratorandreset
//synchronizerproceduralcode
///////////////////////////////////////////////////////////
//`begin_keywords"1800-2012"
interfacesimple_ahb(
inputlogicchip_clk,//externalclockfromthechip
inputlogicchip_rstN//busreset,activelow
);
logichclk;//localbustransferclk
logichresetN;//localbusreset,activelow
logic[31:0]haddr;//transferstartaddress
logic[31:0]hwdata;//datasenttoslave
logic[31:0]hrdata;//returndatafromslave
logic[2:0]hsize;//transfersize
logichwrite;//1forwrite,0forread
logichready;//1fortransferfinished

//generateAHBclock(divide-by-twoofchip_clk)
always_ff@(posedgechip_clkornegedgechip_rstN)
if(!chip_rstN)hclk<=?'0;
????else????????????hclk?<=?~hclk;

??//?sync?trailing?edge?of?hresetN?to?hclk
??logic?rstN_tmp;?//?temp?variable?used?inside?the?interface
??always_ff?@(posedge?hclk?or?negedge?chip_rstN)
????if?(!chip_rstN)?begin???//?asynchronous?active-low?reset
??????rstN_tmp?<=?'0;
??????hresetN??<=?'0;
????end?
????else?begin?
??????rstN_tmp?<=?'1;???????//?begin?end?of?reset
??????hresetN??<=?rstN_tmp;?//?stabilize?reset
????end?

??//?master?module?port?directions
??modport?master_ports?(
????output?haddr,?hwdata,?hsize,?hwrite,?//?to?AHB?slave
????input??hrdata,?hready,???????????????//?from?AHB?slave
????input??hclk,?hresetN?????????????????//?from?chip?level
??);

??//?slave?module?port?directions
??modport?slave_ports?(
????output?hrdata,?hready,???????????????//?to?AHB?master
????input??haddr,?hwdata,?hsize,?hwrite,?//?from?AHB?master
????input??hclk,?hresetN?????????????????//?from?chip?level
??);
endinterface:?simple_ahb
//`end_keywords?

綜合Interface程序。綜合編譯器如何處理Interface中的程序代碼并沒有很好的定義,這與Interface方法(任務和函數)的情況不同。方法的綜合是通過在概念上將方法代碼復制到具有Interface端口的模塊中,并對本地副本進行綜合。這可以做到,因為方法是從模塊內調用的,執行起來就像方法是該模塊的一部分。然而,程序代碼是從Interface內執行的,并影響到所有使用該Interface的模塊。Interface中的程序代碼類似于全局功能,綜合編譯器并不支持這種功能,如果有的話。

最佳實踐指南10-5
使用函數來模擬Interface內的功能。不要在可綜合的RTL Interface中使用初始程序、always程序或assign賦值。

綜合編譯器對Interface內的程序代碼的支持并不充分。如果支持的話,不同的綜合編譯器對程序性代碼的處理方式也可能大相徑庭。

參數化的Interface

Interface可以用與模塊相同的方式使用參數重定義。這使得Interface模型可以被配置,因此Interface的每個實例可以有不同的配置。通過使用SystemVerilog的參數重定義結構,參數可以在Interface中使用,使向量大小和Interface中的其他聲明可以重新配置。當Interface被實例化時,Interface的參數值可以被重新細化,這與模塊重新定義的方式相同。

下面是簡單AHB例子的變化,增加了參數,使數據矢量寬度在Interface實例化時可以配置。任何與Interface實例相連的模塊間面端口將使用該Interface實例的向量大小。

例10-8:具有可配置總線數據字大小的參數化Interface

///////////////////////////////////////////////////////////
//SimpleAHBInterfacewithpareterizedbuswidths
///////////////////////////////////////////////////////////
//`begin_keywords"1800-2012"
interfacesimple_ahb
#(parameterDWIDTH=32)//Databuswidth
(
inputlogichclk,//bustransferclk
inputlogichresetN//busreset,activelow
);
logic[31:0]haddr;//transferstartaddress
logic[DWIDTH-1:0]hwdata;//datasenttoslave
logic[DWIDTH-1:0]hrdata;//returndatafromslave
logic[2:0]hsize;//transfersize
logichwrite;//1forwrite,0forread
logichready;//1fortransferfinished

//mastermoduleportdirections
modportmaster_ports(
outputhaddr,hwdata,hsize,hwrite,//toAHBslave
inputhrdata,hready,//fromAHBslave
inputhclk,hresetN//fromchiplevel
);

//slavemoduleportdirections
modportslave_ports(
outputhrdata,hready,//toAHBmaster
inputhaddr,hwdata,hsize,hwrite,//fromAHBmaster
inputhclk,hresetN//fromchiplevel
);
endinterface:simple_ahb
//`end_keywords

下面的代碼片斷將例10-8中Interface的數據字大小重新定義為64位字大小。

simple_ahb#(.DWIDTH(64))

ahbl(.hclk,
.hresetN
);

綜合Interface

Interface是SystemVerilog在原有的Verilog HDL中加入的一個強大的建模結構。Interface端口是從傳統的Verilog模型中抽象出來的,在傳統的Verilog模型中,一組相關的信號必須每次都要聲明一個信號。這些單獨的聲明必須在每個使用相關信號的模塊以及連接模塊的塊級中重復進行。

在其最基本的形式中,SystemVerilog Interface將相關信號封裝在一起,作為一個可重復使用的建模組件。然后,該Interface可以作為模塊上的一個端口,取代一組相關信號的多個單獨端口。Interface所提供的建模抽象可以成為RTL設計工程師的強大工具。設計師可以一次性定義一組相關的信號,作為一個Interface,然后可以多次使用這些信號,而不必重復定義。

綜合編譯器能很好地處理使用Interface來封裝相關信號的問題。設計工程師可以在更高的抽象水平上工作--具有抽象的所有優點--綜合編譯器將信號的抽象封裝轉化為各個模塊的端口,工程師不需要為各個端口的聲明而煩惱,并確保多個模塊中冗余的聲明完全匹配。

綜合編譯器支持兩種方式,即在端口聲明中指定與模塊一起使用的modport,或者在模塊例化時指定modport。然而,如果一個模塊是獨立于其他模塊綜合的,則必須在端口聲明中指定modport。

當一個模塊獨立于其他模塊進行綜合時,或者在綜合編譯器配置為保留RTL模塊層次的情況下綜合多個模塊時,綜合編譯器將把一個模塊的Interface端口擴展為modport定義中代表的各個端口。大多數綜合編譯器將使用Verilog-1995的端口聲明風格,其中端口列表包含端口名稱和順序,而端口大小和數據類型在模塊內部聲明,而不是在端口列表中。一個模塊可以有任意數量的Interface端口,Interface端口可以與其他端口以任意順序指定。本文中的例子將Interface端口列在前面,只是為了強調Interface端口的作用。

下面的代碼片斷顯示了一個主模塊可能的綜合前和綜合后的模塊定義,該模塊使用簡單ahb Interface。

預綜合modport列表,有一個Interface端口。

92dc0e2a-e583-11ed-ab56-dac502259ad0.png

綜合后模型,使用Verilog-1995編碼風格。下面的綜合后例子說明了一個Interface端口如何綜合的典型結果。

92f6d3ae-e583-11ed-ab56-dac502259ad0.png

如果指定了一個modport的定義,綜合將使用modport中指定的方向。如果在模型綜合時沒有指定modport,那么在綜合的模塊中,Interface內的所有信號都會成為雙向的inout端口。

可配置的Interface與可配置的模塊一樣,都是可綜合的。Interface可以使用參數來配置總線寬度和數據類型。Interface也可以用同樣的方式進行配置。

Interface也可以通過使用方法(任務和函數)和程序代碼來封裝與這些信號有關的功能。Interface中的函數是可以綜合的。這可能很有用,RTL設計工程師應該利用這種綜合能力。將函數與它們所操作的信號封裝在一起,是編寫穩健、可重復使用的代碼的最佳實踐編碼方式。

最佳實踐指南10-6
將Interface的功能限制在可以用函數建模的范圍內。

在編寫本文時,現有的RTL綜合編譯器在支持使用Interface來封裝使用任務和程序代碼的功能方面有些局限。

例如,有可能在一個Interface內封裝FIFO的全部功能,這將允許使用封裝信號的模塊在不同的時鐘速度下運行而不損失任何數據。完整的糾錯功能以及與一組信號相關的其他復雜操作也可以與這些信號捆綁在一起。這種更高級的封裝水平不被大多數綜合編譯器所支持,或只有有限的支持。這些限制限制了程序性代碼在Interface中的實用性。

Interface也可以捆綁驗證代碼,例如為封裝的信號和功能提供斷言和自我檢查程序。Interface中的驗證相關代碼可以被綜合編譯器使用綜合translate_off和trans1ate_on pragmas或'if def條件編譯忽略。






審核編輯:劉清

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

    關注

    1

    文章

    203

    瀏覽量

    67405
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59950
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19228
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8309

原文標題:數字硬件建模SystemVerilog-通信總線建模 --Interface方法

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

收藏 人收藏

    評論

    相關推薦

    SystemVerilog 的VMM驗證方法學教程教材

    SystemVerilog 的VMM 驗證方法學教程教材包含大量經典的VMM源代碼,可以實際操作練習的例子,更是ic從業人員的絕佳學習資料。SystemVerilog 的VMM 驗證方法
    發表于 01-11 11:21

    [啟芯公開課] SystemVerilog for Verification

    ,基于SystemVerilog的驗證方法學快速發展,由此可見,數字驗證工程師必須掌握SystemVerilog。啟芯學堂QQ群: 275855756第一講: Design Under
    發表于 06-10 09:25

    如何在SystemVerilog中為狀態機的命令序列的生成建模

     我們將展示如何在SystemVerilog中為狀態機的命令序列的生成建模,并且我們將看到它是如何實現更高效的建模,以及實現更好的測試生成。?
    發表于 01-01 06:05

    數字硬件建模SystemVerilog-歸約運算符

    介紹歸約運算符對單個操作數的所有位執行運算,并返回標量(1位)結果。表5-9列出了歸約運算符。表5-9:RTL建模的歸約運算符歸約運算符包括一個NAND和一個NOR運算符,這是按位運算符所沒有
    發表于 10-20 15:03

    基于SystemVerilog語言的驗證方法學介紹

    文章主要介紹《VMM for SystemVerilog》一書描述的如何利用SystemVerilog語言,采用驗證方法學以及驗證庫開發出先進驗證環境。文章分為四部分,第一部分概述了用
    發表于 05-09 15:22 ?52次下載
    基于<b class='flag-5'>SystemVerilog</b>語言的驗證<b class='flag-5'>方法</b>學介紹

    基于CPLD FPGA的數字通信系統建模與設計

    本書主要介紹了基于cpld/fpga的數字通信系統的設計原理與建模方法。從通信系統的組成、eda概述建模的概念開始(第1~2章),圍繞
    發表于 09-13 15:29 ?140次下載
    基于CPLD FPGA的<b class='flag-5'>數字</b>通信系統<b class='flag-5'>建模</b>與設計

    SystemVerilog硬件功能如何進行建模

    本文定義了通常用于描述使用SystemVerilog硬件功能進行建模的詳細級別的術語。
    的頭像 發表于 03-30 11:42 ?1791次閱讀

    數字硬件建模SystemVerilog-網絡

    每個SystemVerilog網絡類型都有特定的語義規則,這些規則會影響多個驅動程序的解析方式。雖然所有網絡類型都表示硅行為,但并非所有網絡類型都可以用標準ASIC和FPGA技術表示。表3-3列出了ASIC和FPGA綜合編譯器支持的網絡類型。
    的頭像 發表于 05-09 09:26 ?2058次閱讀

    數字硬件建模SystemVerilog-結構體

    默認情況下,結構體會被非壓縮的。這意味著結構體的成員被視為獨立變量或常量,并以一個共同的名稱分組在一起。SystemVerilog沒有指定軟件工具應該如何存儲非壓縮結構體的成員。不同的軟件工具具對于結構體的存儲分布也是不同的。
    的頭像 發表于 06-30 09:54 ?1487次閱讀

    使用Verilog/SystemVerilog硬件描述語言練習數字硬件設計

    HDLBits 是一組小型電路設計習題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習數字硬件設計~
    的頭像 發表于 08-31 09:06 ?1770次閱讀

    數字硬件建模SystemVerilog-組合邏輯建模(1)連續賦值語句

    SystemVerilog有三種在可綜合RTL級別表示組合邏輯的方法:連續賦值語句、always程序塊和函數。接下來幾篇文章將探討每種編碼風格,并推薦最佳實踐編碼風格。
    的頭像 發表于 12-07 15:31 ?1611次閱讀

    RTL和門級建模

    SystemVerilog能夠在許多不同的細節級別(稱為“抽象級別”)對數字邏輯進行建模。抽象意味著缺乏細節。數字模型越抽象,它所代表的硬件
    的頭像 發表于 02-09 14:20 ?1141次閱讀
    RTL和門級<b class='flag-5'>建模</b>

    數字硬件建模SystemVerilogInterface和modport介紹

    SystemVerilog Interface是modport的一種,但比簡單的輸入、輸出或輸入輸出端口的功能更多。
    的頭像 發表于 04-28 14:12 ?4301次閱讀
    <b class='flag-5'>數字</b><b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b><b class='flag-5'>之</b><b class='flag-5'>Interface</b>和modport介紹

    SystemVerilog的覆蓋率建模方式

    為了確保驗證的完備性,我們需要量化驗證目標。SystemVerilog提供了一套豐富的覆蓋率建模方式。
    的頭像 發表于 06-25 10:44 ?1239次閱讀

    SystemVerilog硬件設計部分有哪些優勢

    Language,硬件描述語言),而SystemVerilog則是HDVL(Hardware Design and Verification Language,硬件設計與驗證語言)。由此可見,
    的頭像 發表于 10-19 11:19 ?1370次閱讀
    <b class='flag-5'>SystemVerilog</b>在<b class='flag-5'>硬件</b>設計部分有哪些優勢
    主站蜘蛛池模板: 1000部啪啪勿入十八免费 | 女人精aaaa片一级毛片女女 | 亚洲成色999久久网站 | 色视频免费观看高清完整 | 97色在线视频观看香蕉 | 天堂最新版 | 日韩精品午夜 | 91亚色视频在线观看 | 欧美福利精品 | 欧美一级特黄高清免费 | 欧美高清视频一区 | 亚洲一二| 狠狠乱| 午夜色视频 | 好男人午夜www视频在线观看 | www.五月激情| 欧美性69| 日本aaaa毛片在线看 | h在线国产 | 成人宗合网 | 欧美成人午夜片一一在线观看 | 伊人久久大香线蕉综合电影 | 成人国产日本亚洲精品 | 天天舔天天干天天操 | 免费一级特黄 | 操女人网址| 亚洲免费毛片 | fenfencao在线观看免费视频 | 一级伦奸视频 | 亚洲综合色婷婷在线观看 | 亚洲成人av | 国产国语videosex另类 | 国模欢欢炮交啪啪150 | 国产精品永久免费自在线观看 | 四虎影视在线看 | 伊人久久大线蕉香港三级 | 成人精品一区二区不卡视频 | 国产亚洲3p一区二区三区 | 婷婷久久综合 | 天天视频免费观看高清影视 | 国产妇女在线 |