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

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

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

SystemVerilog對(duì)硬件功能如何進(jìn)行建模

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-03-30 11:42 ? 次閱讀

數(shù)字硬件建模SystemVerilog(一)-RTL和門級(jí)建模

接下來系列文章會(huì)有很多在Verilog中知識(shí)點(diǎn)有被提及,關(guān)于這兩者關(guān)系,請(qǐng)查看《談?wù)刅erilog和SystemVerilog簡史,FPGA設(shè)計(jì)是否需要學(xué)習(xí)SystemVerilog》。

本文定義了通常用于描述使用SystemVerilog對(duì)硬件功能進(jìn)行建模的詳細(xì)級(jí)別的術(shù)語。

抽象

SystemVerilog能夠在許多不同的細(xì)節(jié)級(jí)別(稱為“抽象級(jí)別”)對(duì)數(shù)字邏輯進(jìn)行建模。抽象意味著缺乏細(xì)節(jié)。數(shù)字模型越抽象,它所代表的硬件的細(xì)節(jié)就越少。

圖1-3顯示了SystemVerilog中可用的建模抽象的主要級(jí)別的詳細(xì)模型

561ecade-ac9c-11ec-aa7f-dac502259ad0.png 圖1-3:SystemVerilog建模抽象級(jí)別

門級(jí)建模

SystemVerilog支持使用門級(jí)原語對(duì)數(shù)字邏輯進(jìn)行建模。數(shù)字邏輯門是一個(gè)非常接近硅(silicon)實(shí)現(xiàn)的詳細(xì)模型。

SystemVerilog提供了幾個(gè)內(nèi)置的門級(jí)原語,并允許工程師定義其他原語,這些原語是指用戶定義的原語(UDP)。SystemVerilog中的內(nèi)置原語列在表1-1中:

表1-1:SystemVerilog門級(jí)原語

原語 描述
與and 具有2個(gè)或更多輸入和1輸出的與門
與非門nand 具有2個(gè)或更多輸入和1輸出的與非門
or 具有2個(gè)或更多輸入和1個(gè)輸出的或門
或非門nor 具有2個(gè)或更多輸入和1輸出的或非門
異或門xor 具有2個(gè)或更多輸入和1輸出的異或門
異或非門是xnor 具有2個(gè)或更多輸入和1輸出的異或非門
緩沖器buf 具有1個(gè)輸入和1或更多輸出的緩沖門
反向門not 具有1輸入和1或更多輸出的反向門
buffif0 三態(tài)緩沖門,帶“1輸入*1輸出”和1個(gè)激活低啟用
bufif1 具有1輸入、1輸出和1激活高啟用的三態(tài)緩沖門
notif0 帶1輸入、1輸出和1低激活的三態(tài)反向緩沖門
notif1 帶1輸入、1輸出和1高激活的三態(tài)反向緩沖門

SystemVerilog還為ASIC和FPGA庫開發(fā)人員提供了通過定義用戶定義原語(UDP)添加到內(nèi)置原語集的方法。UDP以表格格式定義,表格中的每一行列出一組輸入值和結(jié)果輸出值。組合邏輯和順序邏輯(如觸發(fā)器)原語都可以定義。

圖1-4顯示了帶進(jìn)位的1位加法器的門級(jí)電路。示例1-1顯示了“使用原語對(duì)電路建模的SystemVerilog代碼”。

5646d7ea-ac9c-11ec-aa7f-dac502259ad0.png 圖1-4:帶進(jìn)位的1位加法器,用邏輯門表示 示例1-1;帶進(jìn)位的1位加法器的SystemVerilog門級(jí)模型

`begin_keywords"1800-2012"
modulegate_adder
(inputwirea,b,ci,
outputwiresum,co
);
timeunit1ns;timeprecision100ps;

wiren1,n2,n3;

xorg1(n1,a,b);
xor#1.3g2(sum,n1,ci);
andg3(n2,a,b);
andg4(n3,n1,ci);
or#(1.5,1.8)g5(co,n2,n3);

endmodule:gate_adder
`end_keywords

門級(jí)原語的語法非常簡單:

〈instancename>(,);

許多門級(jí)原語可以具有可變數(shù)量的輸入。例如,and原語可以表示2輸入、3輸入或4輸入與門,如下所示:

and i1{o1,a,b);//2-輸入與門
and i2(o2,a,b,c};//3-輸入與門
and i3{o3,a,b,c,d);//4-輸入與門

原語的實(shí)例名稱雖然是可選的,但它是良好的代碼注釋,它使維護(hù)代碼和將SystemVerilog源代碼與示意圖或設(shè)計(jì)的其他表示形式聯(lián)系起來變得容易。實(shí)例名稱是用戶定義的,可以是任何合法的SystemVerilog名稱。

門級(jí)原語可以用傳播延遲來建模。如果未指定延遲,則門輸入上的更改將立即反映在門輸出上。延遲是一個(gè)表達(dá)式,可以是一個(gè)簡單的值,如示例1-1中的實(shí)例g2,也可以是一個(gè)更復(fù)雜的表達(dá)式,如實(shí)例g5。上述代碼中的柵極g2的傳播延遲為13ns,這意味著當(dāng)其中一個(gè)柵極輸入上發(fā)生轉(zhuǎn)換時(shí),在柵極輸出sum改變之前,這個(gè)時(shí)間是13ns。門g5將傳播延遲分為不同的延遲,用于輸出上的上升和下降躍遷。如果co值從0轉(zhuǎn)換為l,延遲為1ns。如果co正在從1轉(zhuǎn)換為0,更改延遲為1.8ns。

門級(jí)模型能夠以高精度表示實(shí)際硅的傳播延遲。邏輯門的功能反映了將在硅中使用的晶體管組合的功能,并且門延遲可以反映通過這些晶體管的傳播延遲。ASIC和FPGA供應(yīng)商使用這種精度對(duì)特定設(shè)備的詳細(xì)行為進(jìn)行建模。

門級(jí)模型通常由軟件工具或?qū)iT從事庫開發(fā)的工程師生成。在RTL級(jí)別設(shè)計(jì)的設(shè)計(jì)工程師很少(如果有的話)使用門級(jí)原語建模。相反,RTL設(shè)計(jì)者使用門級(jí)模型的網(wǎng)表,其中網(wǎng)表是通過合成RTL模型生成的。網(wǎng)表級(jí)模型由目標(biāo)ASIC或FPGA設(shè)備的供應(yīng)商提供。關(guān)于門級(jí)建模的內(nèi)容比本文中介紹的要多得多。

開關(guān)級(jí)建模。SystemVerilog還可以使用開關(guān)原語(如pmos、nmos和cmos)、電阻開關(guān)原語(如rpmos、cnmos和rcmos)和電容網(wǎng)絡(luò)在晶體管級(jí)對(duì)數(shù)字電路建模。這種級(jí)別的建??梢院芎玫乇硎緦?shí)際的硅實(shí)現(xiàn)。然而,由于這些結(jié)構(gòu)只能仿真數(shù)字行為,因此很少使用。晶體管、電阻器電容器都是仿真器件。數(shù)字仿真不能準(zhǔn)確反映晶體管的行為。開關(guān)級(jí)建模通常不在SystemVerilog的FPGA設(shè)計(jì)流程中使用。

RTL模型

一個(gè)更抽象的建模級(jí)別——也是系列文章的重點(diǎn)——是寄存器傳輸級(jí)別(Register Transfer Levels),或RTL。此級(jí)別的建模使用編程語句和運(yùn)算符表示數(shù)字功能。RTL模型是功能模型,不包含有關(guān)如何在硅中實(shí)現(xiàn)該功能的詳細(xì)信息。由于這種抽象,復(fù)雜的數(shù)字功能可以比在詳細(xì)的門級(jí)更快速、更簡潔地建模。RTL模型的仿真速度也大大快于門級(jí)和開關(guān)級(jí)模型,這使得驗(yàn)證更大、更復(fù)雜的設(shè)計(jì)成為可能。SystemVerilog為RTL建模提供了兩種主要結(jié)構(gòu):連續(xù)賦值(continuous assignments)和always程序塊。

連續(xù)賦值以assign關(guān)鍵字開始,可以表示簡單的組合邏輯。前面的示例1-1說明了1-bit加法器的門級(jí)模型。示例1-2顯示了如何通過使用連續(xù)賦值在更抽象的層次上建模相同的1位加法器功能:

`begin_keywords"1800-2012"
modulertl_adder
(inputlogica,b,ci,
outputlogicsum,co
);
timeunit1ns/1ns;

assign{co,sum}=a+b+ci;

endmodule:rtl_adder
`end_keywords

示例1-2:帶進(jìn)位的1位加法器的SystemVerilog RTL模型

RTL建模的一個(gè)優(yōu)點(diǎn)是代碼更易于自文檔化(self-documenting)。查看示例1-1中的門級(jí)模型并識(shí)別模型所代表的內(nèi)容可能很困難,尤其是在沒有注釋和有意義的名稱的情況下。但是,查看示例1-2中RTL模型中的代碼并認(rèn)識(shí)到該功能是一個(gè)加法器要容易得多。

RTL建模的另一個(gè)強(qiáng)大優(yōu)勢(shì)是能夠處理矢量和數(shù)據(jù)包。矢量是一個(gè)大于一位寬的信號(hào)。開關(guān)級(jí)和門級(jí)建模的操作一1位寬的信號(hào),在SystemVerilog中稱為標(biāo)量信號(hào)。要對(duì)32位加法器進(jìn)行建模,需要對(duì)每個(gè)位上運(yùn)行的開關(guān)或門進(jìn)行建模,這與實(shí)際硅中的操作相同。上述示例1-2中的連續(xù)賦值語句可以通過改變信號(hào)的聲明,對(duì)任意大小的加法器進(jìn)行建模。

更復(fù)雜的功能可以使用程序塊建模。程序塊封裝了一行或多行編程語句,以及有關(guān)何時(shí)執(zhí)行這些語句的信息。RTL級(jí)別使用四種類型的always過程:always、always_comb、always_ff和always_latch。

以下示例簡明地表示具有寄存器輸出的32位加法器/減法器:

`begin_keywords"1800-2012"
modulertl_adder_subtracter
(inputlogicclk,//1-bitscalarinput
inputlogicmode,//1-bitscalarinput
inputlogic[31:0]a,b,//32-bitvectorinputs
outputlogic[31:0]sum//32-bitvectoroutput
);
timeunit1ns/1ns;

always_ff@(posedgeclk)begin
if(mode==0)sum<=?a?+?b;
????else???????????sum?<=?a?-?b;
??end

endmodule:?rtl_adder_subtracter
`end_keywords
示例1-3:32位加法器/減法器的SystemVerilog RTL模型

在一個(gè)典型的仿真和綜合設(shè)計(jì)流程中,工程師們將花費(fèi)大部分時(shí)間在RTL級(jí)別建模和驗(yàn)證RTL功能。

行為級(jí)和事務(wù)級(jí)建模

SystemVerilog過程塊可用于在比RTL更高的抽象級(jí)別上建模,該抽象通常被稱為行為模型(也稱為總線功能或算法模型)。行為模型可能看起來與RTL模型非常相似,因?yàn)镽TL和行為模型都是程序塊。行為模型在兩個(gè)方面與RTL有所不同。

?RTL程序塊在單個(gè)時(shí)鐘周期內(nèi)執(zhí)行其編程語句,如果是組合邏輯,則在零周期內(nèi)執(zhí)行。行為模型過程塊可以使用任意數(shù)量的時(shí)鐘周期來執(zhí)行其語句。

?RTL模型必須遵守嚴(yán)格的語言限制,才能由RTL綜合編譯器進(jìn)行合成。行為模型可以使用完整的SystemVerilog語言。

高級(jí)抽象是事務(wù)級(jí)建模。事務(wù)模型通常用于驗(yàn)證代碼中,并且通常使用SystemVerilog的面向?qū)ο缶幊探Y(jié)構(gòu)進(jìn)行建模。

RTL綜合編譯器無法綜合抽象的行為和事務(wù)級(jí)別,本系列中也沒有討論.

數(shù)字硬件建模-Verilog篇階段總結(jié)及SystemVerilog篇介紹

566e87f4-ac9c-11ec-aa7f-dac502259ad0.jpg

工具與大腦完美結(jié)合,才能寫出世上最棒的Verilog代碼

5684686c-ac9c-11ec-aa7f-dac502259ad0.jpg

你真的理解Verilog 中的module嗎?

原文標(biāo)題:SystemVerilog(一)-RTL和門級(jí)建模

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

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

    關(guān)注

    1630

    文章

    21777

    瀏覽量

    604717
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3356

    瀏覽量

    66348
  • 數(shù)字邏輯
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    16670

原文標(biāo)題:SystemVerilog(一)-RTL和門級(jí)建模

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Android APP如何進(jìn)行訪問硬件驅(qū)動(dòng)

    本文我們要講的是在用 i.MX8 平臺(tái)開發(fā)時(shí),Android APP 如何進(jìn)行訪問硬件驅(qū)動(dòng)。
    的頭像 發(fā)表于 12-04 13:50 ?1675次閱讀
    Android APP如<b class='flag-5'>何進(jìn)行</b>訪問<b class='flag-5'>硬件</b>驅(qū)動(dòng)

    DMK如何進(jìn)行硬件調(diào)試???

    有哪位大俠,能講解一下DMK如何進(jìn)行硬件調(diào)試???(不是軟件設(shè)計(jì),而是打開一個(gè)程序,要看看它運(yùn)行到哪里了?該如何做?先前51單片機(jī)用的少,我查了一些資料,網(wǎng)上也搜了一下,都不是很具體。)
    發(fā)表于 05-03 16:06

    如何在SystemVerilog中為狀態(tài)機(jī)的命令序列的生成建模

     我們將展示如何在SystemVerilog中為狀態(tài)機(jī)的命令序列的生成建模,并且我們將看到它是如何實(shí)現(xiàn)更高效的建模,以及實(shí)現(xiàn)更好的測(cè)試生成。?
    發(fā)表于 01-01 06:05

    SystemVerilog 3.1a語言參考手冊(cè)

    本參考手冊(cè)詳細(xì)描述了Accellera為使用Verilog硬件描述語言在更高的抽象層次上進(jìn)行系統(tǒng)的建模和驗(yàn)證所作的擴(kuò)展。這些擴(kuò)展將Verilog語言推向了系統(tǒng)級(jí)空間和驗(yàn)證級(jí)空間。SystemV
    發(fā)表于 07-22 12:14 ?188次下載

    何進(jìn)行硬件連接,啟動(dòng)GUI并運(yùn)行馬達(dá)

    啟動(dòng)馬達(dá)吧!快速,簡單,有趣!本視頻將向用戶展示如何進(jìn)行硬件連接,啟動(dòng)GUI并運(yùn)行馬達(dá)。
    的頭像 發(fā)表于 11-28 06:04 ?3130次閱讀

    SystemVerilog語言介紹匯總

    作者:limanjihe ?https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一種硬件描述和驗(yàn)證語言
    的頭像 發(fā)表于 10-11 10:35 ?2418次閱讀

    使用Verilog/SystemVerilog硬件描述語言練習(xí)數(shù)字硬件設(shè)計(jì)

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

    FPGA學(xué)習(xí)-SystemVerilog語言簡介

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

    RTL和門級(jí)建模

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

    數(shù)字硬件建模SystemVerilog之Interface方法概述

    SystemVerilog Interface是modport的一種,但比簡單的輸入、輸出或輸入輸出端口的功能更多。
    的頭像 發(fā)表于 04-28 14:10 ?2825次閱讀
    數(shù)字<b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b>之Interface方法概述

    數(shù)字硬件建模SystemVerilog之Interface和modport介紹

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

    Systemverilog中的Driving Strength講解

    systemverilog中,net用于對(duì)電路中連線進(jìn)行建模,driving strength(驅(qū)動(dòng)強(qiáng)度)可以讓net變量值的建模更加精確。
    的頭像 發(fā)表于 06-14 15:50 ?1653次閱讀
    <b class='flag-5'>Systemverilog</b>中的Driving Strength講解

    SystemVerilog的覆蓋率建模方式

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

    SystemVerilog硬件設(shè)計(jì)部分有哪些優(yōu)勢(shì)

    Language,硬件描述語言),而SystemVerilog則是HDVL(Hardware Design and Verification Language,硬件設(shè)計(jì)與驗(yàn)證語言)。由此可見,
    的頭像 發(fā)表于 10-19 11:19 ?1324次閱讀
    <b class='flag-5'>SystemVerilog</b>在<b class='flag-5'>硬件</b>設(shè)計(jì)部分有哪些優(yōu)勢(shì)

    cad如何進(jìn)行三維建模

    三維建模是計(jì)算機(jī)輔助設(shè)計(jì)(CAD)中的一項(xiàng)重要技術(shù),它可以幫助設(shè)計(jì)師在計(jì)算機(jī)上創(chuàng)建和編輯三維模型。本文將介紹如何使用CAD軟件進(jìn)行三維建模,包括建模的基本步驟、
    的頭像 發(fā)表于 07-09 10:23 ?1061次閱讀