欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

RTL建模中的函數(shù)和任務(wù)討論

OpenFPGA ? 來(lái)源:OpenFPGA ? 作者:碎碎思 ? 2022-11-09 09:26 ? 次閱讀

RTL建模中的函數(shù)和任務(wù)(Function 和 task)

SystemVerilog的函數(shù)和任務(wù)可以將復(fù)雜的功能劃分為更小的、可重用的代碼塊。函數(shù)對(duì)于RTL建模非常有用,本文將對(duì)此進(jìn)行研究。

任務(wù)雖然有自己的優(yōu)勢(shì),但在RTL模型中幾乎沒(méi)有價(jià)值。使用void函數(shù)(將在本節(jié)后面討論)是比使用任務(wù)更好的RTL編碼方式。因此,本文僅簡(jiǎn)要討論任務(wù)。

函數(shù)和任務(wù)可以在使用它們的模塊或接口中定義。定義可以出現(xiàn)在調(diào)用函數(shù)或任務(wù)的語(yǔ)句之前或之后完成,函數(shù)和任務(wù)也可以在包中定義,然后導(dǎo)入到模塊或接口中,包導(dǎo)入語(yǔ)句必須出現(xiàn)在調(diào)用函數(shù)或任務(wù)之前。

函數(shù)

調(diào)用時(shí),函數(shù)執(zhí)行其編程語(yǔ)句并返回值。對(duì)函數(shù)的調(diào)用可以在任何可以使用表達(dá)式(如網(wǎng)絡(luò)或變量)的地方使用。這里展示了一個(gè)函數(shù)定義示例和對(duì)該函數(shù)的調(diào)用。本節(jié)后面將展示更實(shí)用的可綜合示例。

191c0b68-5fc7-11ed-8abf-dac502259ad0.png

SystemVerilog語(yǔ)法要求函數(shù)在零仿真時(shí)間內(nèi)執(zhí)行??删C合函數(shù)不能包含時(shí)鐘周期或傳播延遲。

靜態(tài)和自動(dòng)(Static and automatic)函數(shù)。函數(shù)(和任務(wù))可以聲明為靜態(tài)或自動(dòng)。如果兩者都未指定,則模塊、接口或包中定義的函數(shù)的默認(rèn)值為靜態(tài)。

靜態(tài)函數(shù)保留從一個(gè)調(diào)用到下一個(gè)調(diào)用的任何內(nèi)部變量或存儲(chǔ)的狀態(tài)。函數(shù)名和函數(shù)輸入是隱式內(nèi)部變量,在函數(shù)退出時(shí)將保留它們的值。

這種靜態(tài)存儲(chǔ)的效果是-對(duì)函數(shù)的新調(diào)用可以記住以前調(diào)用的值。這種“記憶性”在驗(yàn)證代碼中很有用,但這種行為并不能準(zhǔn)確地仿真綜合編譯器從函數(shù)實(shí)現(xiàn)的門(mén)級(jí)行為,這可能導(dǎo)致RTL模型仿真與ASICFPGA的實(shí)際功能不匹配。

自動(dòng)函數(shù)在每次調(diào)用該函數(shù)時(shí)都會(huì)分配新的存儲(chǔ)。遞歸函數(shù)調(diào)用(如上文所示的 階乘f(factorial_f) 函數(shù)示例)需要自動(dòng)存儲(chǔ)(兩個(gè)不同過(guò)程同時(shí)調(diào)用同一任務(wù)的可重入任務(wù)調(diào)用也需要自動(dòng)存儲(chǔ))

最佳實(shí)踐指南6-8
將RTL模型中使用的函數(shù)聲明為自動(dòng)函數(shù)。

靜態(tài)存儲(chǔ)的默認(rèn)設(shè)置不適用于硬件行為的RTL建模。此外,綜合編譯器要求包或接口中聲明的函數(shù)必須聲明為自動(dòng)函數(shù)

函數(shù)默認(rèn)為靜態(tài)存儲(chǔ)是有歷史原因的。在Verilog仿真的最初幾年,當(dāng)時(shí)計(jì)算機(jī)內(nèi)存有限且處理器速度慢得多,靜態(tài)存儲(chǔ)有助于提高仿真運(yùn)行時(shí)性能,與使用現(xiàn)代仿真器和計(jì)算服務(wù)器的自動(dòng)存儲(chǔ)相比,靜態(tài)存儲(chǔ)沒(méi)有性能優(yōu)勢(shì)。SystemVerilog標(biāo)準(zhǔn)保留了靜態(tài)函數(shù)的原始語(yǔ)言默認(rèn)值,以便與遺留的驗(yàn)證代碼保持向后兼容,這些代碼可能是為了利用函數(shù)的靜態(tài)存儲(chǔ)而編寫(xiě)的。

函數(shù)返回。

函數(shù)的返回?cái)?shù)據(jù)類(lèi)型定義在函數(shù)名之前。在上面的 階乘f(factorial_f) 示例中,該函數(shù)返回一個(gè)N位寬的向量,其類(lèi)型為logic(4-state)。如果未指定返回類(lèi)型,則默認(rèn)情況下,函數(shù)返回為1位logic(4-state)類(lèi)型。

SystemVerilog提供了兩種指定函數(shù)返回值的方法。一種方法是使用return關(guān)鍵字,如上面的factorial_f示例所示。return關(guān)鍵字后面是函數(shù)要返回的值。或者,可以將此返回值括在括號(hào)中。

第二種指定返回值的方法是為函數(shù)名賦值。函數(shù)名是與返回值數(shù)據(jù)類(lèi)型相同的隱式變量類(lèi)型,當(dāng)函數(shù)計(jì)算返回值時(shí),此隱式變量可用于臨時(shí)存儲(chǔ)。分配給函數(shù)名的最后一個(gè)值將成為函數(shù)返回值。本節(jié)開(kāi)頭顯示的 階乘f(factorial_f) 函數(shù)可以重新編碼,以使用函數(shù)名作為隱式內(nèi)部變量來(lái)計(jì)算返回值。

194c8108-5fc7-11ed-8abf-dac502259ad0.png

Void函數(shù)

函數(shù)返回類(lèi)型可以聲明為void。Void函數(shù)不返回值,不能像其他函數(shù)一樣用作表達(dá)式。void函數(shù)被稱(chēng)為語(yǔ)句,而不是表達(dá)式。

196c2d1e-5fc7-11ed-8abf-dac502259ad0.png

最佳實(shí)踐指南6-9
使用void函數(shù)代替任務(wù)進(jìn)行RTL建模。僅在驗(yàn)證代碼中使用任務(wù)。

void函數(shù)和任務(wù)之間的唯一區(qū)別是函數(shù)必須在零時(shí)間內(nèi)執(zhí)行。大多數(shù)綜合編譯器不支持任務(wù)中任何形式的時(shí)鐘延遲。使用void函數(shù)代替任務(wù)使得這種綜合限制成為語(yǔ)法要求,并且可以防止編寫(xiě)可以仿真但不可以綜合的RTL模型。

函數(shù)參數(shù)。函數(shù)定義中的參數(shù)稱(chēng)為形式參數(shù)(formal arguments)。函數(shù)調(diào)用中的參數(shù)稱(chēng)為實(shí)際參數(shù)(actual arguments)。形式參數(shù)可以是input、output或inout,并使用與模塊端口相同的語(yǔ)法聲明,默認(rèn)方向(如果未定義)為input,上面fill_packet示例中的形式參數(shù)是32-bit 4-state輸入,用戶(hù)定義的packet_t類(lèi)型的輸出形式參數(shù)。

形式參數(shù)也可以聲明為ref(reference的縮寫(xiě))代替端口方向(direction),ref參數(shù)是指向函數(shù)調(diào)用的實(shí)際參數(shù)的指針形式,函數(shù)必須聲明為自動(dòng)函數(shù)(automaticfunction)才能使用ref參數(shù)。

最佳實(shí)踐指南6-10
在RTL模型中使用的函數(shù)中只使用輸入和輸出(input 和 output)形式參數(shù),不要使用inout或ref形式參數(shù)。

所有RTL綜合編譯器都支持輸入和輸出(input 和 output)函數(shù)參數(shù)。某些RTL綜合編譯器不支持inout和ref參數(shù)。

調(diào)用函數(shù)。

調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)傳遞給形式參數(shù)有兩種編碼樣式:按順序傳遞和按名稱(chēng)傳遞。按順序傳遞時(shí),第一個(gè)實(shí)際參數(shù)傳遞給第一個(gè)形式參數(shù),第二個(gè)實(shí)際參數(shù)傳遞給第二個(gè)形式參數(shù),依此類(lèi)推。按名稱(chēng)傳遞使用與按名稱(chēng)連接模塊相同的語(yǔ)法。形式參數(shù)的名稱(chēng)前面有逗號(hào)(.),后跟括號(hào)中的實(shí)際參數(shù)。

給定函數(shù)定義:

19942670-5fc7-11ed-8abf-dac502259ad0.png

傳遞實(shí)際參數(shù)的兩種方式是:

19ba1542-5fc7-11ed-8abf-dac502259ad0.png

函數(shù)輸入默認(rèn)值。

可以為形式參數(shù)指定默認(rèn)值,如下所示:

1a127566-5fc7-11ed-8abf-dac502259ad0.png

具有默認(rèn)值的參數(shù)不需要傳遞實(shí)際參數(shù),如果沒(méi)有傳遞實(shí)際參數(shù),則使用默認(rèn)值。例如:

1a3716c8-5fc7-11ed-8abf-dac502259ad0.png

如果傳入實(shí)際值,則使用實(shí)際值,如下所示:

1a50b150-5fc7-11ed-8abf-dac502259ad0.png

筆記
在編寫(xiě)本文時(shí),一些綜合編譯器不支持默認(rèn)輸入值,工程師應(yīng)該確保項(xiàng)目中使用的設(shè)計(jì)流程中的所有工具在RTL模型中使用之前都支持默認(rèn)參數(shù)值。

使用return提前退出函數(shù)。

return語(yǔ)句也可以用于在函數(shù)中的所有語(yǔ)句都執(zhí)行之前退出函數(shù),下面的示例可以在3個(gè)不同的點(diǎn)退出函數(shù)。如果 max 輸入為0,則函數(shù)在執(zhí)行for循環(huán)之前退出;如果for循環(huán)迭代器達(dá)到max值,則函數(shù)在到達(dá)循環(huán)末尾之前退出;如果for循環(huán)完成,則函數(shù)在到達(dá)endfunction時(shí)退出。

1adac2a0-5fc7-11ed-8abf-dac502259ad0.png

參數(shù)化函數(shù)(Parameterized function)。

參數(shù)化函數(shù)是SystemVerilog中功能強(qiáng)大且廣泛使用的功能??梢詾槟K的每個(gè)實(shí)例重新定義參數(shù),使模塊易于配置和重用。模塊級(jí)參數(shù)可以在函數(shù)定義中使用,如前面的sum_to_endpoint_f函數(shù)示例所示。使用模塊級(jí)參數(shù)意味著對(duì)函數(shù)的所有調(diào)用將具有相同的向量大小。如果調(diào)用函數(shù)的每個(gè)位置使用不同的向量大小,則無(wú)法對(duì)函數(shù)進(jìn)行配置。

函數(shù)不能像模塊那樣進(jìn)行參數(shù)化,SystemVerilog不允許函數(shù)定義具有內(nèi)部參數(shù),這些參數(shù)可以在調(diào)用函數(shù)的每個(gè)地方重新定義——這限制了編寫(xiě)可重用、可配置函數(shù)的能力。但是,對(duì)于這個(gè)限制,有一個(gè)解決方法,即在參數(shù)化虛擬類(lèi)中聲明靜態(tài)函數(shù),可以使用范圍解析操作符(無(wú)需創(chuàng)建對(duì)象)直接調(diào)用類(lèi)定義中的靜態(tài)函數(shù)。

在調(diào)用函數(shù)的每個(gè)地方,都可以重新定義類(lèi)(class)參數(shù),如下例所示:

1b037538-5fc7-11ed-8abf-dac502259ad0.png

參數(shù)化函數(shù)可以只創(chuàng)建和維護(hù)函數(shù)的一個(gè)版本,而不必定義具有不同數(shù)據(jù)類(lèi)型、向量寬度或其他特征的多個(gè)版本。

請(qǐng)注意,在類(lèi)定義中,static關(guān)鍵字位于function關(guān)鍵字之前,而在模塊中,static或automatic關(guān)鍵字位于function關(guān)鍵字之后。有一個(gè)重要的語(yǔ)義差異,在類(lèi)中,靜態(tài)函數(shù)聲明類(lèi)中函數(shù)的生存期,并限制函數(shù)在類(lèi)中可以訪問(wèn)的內(nèi)容,在模塊中,靜態(tài)函數(shù)或自動(dòng)函數(shù)指函數(shù)中參數(shù)和變量的生存期。

筆記
在寫(xiě)這本文的時(shí)候,并不是所有的綜合編譯器都支持參數(shù)化虛擬類(lèi)中的靜態(tài)函數(shù)。在RTL模型中使用靜態(tài)函數(shù)之前,工程師應(yīng)該確保項(xiàng)目中使用的所有工具都支持參數(shù)化虛擬類(lèi)中的靜態(tài)函數(shù)。

任務(wù)-Task

任務(wù)是封裝一條或多條編程語(yǔ)句的子例程,因此可以從不同的位置調(diào)用封裝的語(yǔ)句,或在其他項(xiàng)目中重用。與函數(shù)不同,任務(wù)沒(méi)有返回值。一個(gè)例子是:

1b2f0964-5fc7-11ed-8abf-dac502259ad0.png

任務(wù)被稱(chēng)為編程語(yǔ)句,并使用輸出形式參數(shù)從任務(wù)中傳遞值。

1b5ab0d2-5fc7-11ed-8abf-dac502259ad0.png

語(yǔ)法上;任務(wù)與函數(shù)非常相似,只是任務(wù)沒(méi)有返回類(lèi)型。任務(wù)和函數(shù)之間的一個(gè)重要區(qū)別是,任務(wù)可能包含時(shí)鐘周期和傳播延遲。然而,大多數(shù)綜合編譯器要求任務(wù)中的編程語(yǔ)句在零仿真時(shí)間內(nèi)運(yùn)行。這種綜合限制使任務(wù)幾乎與void函數(shù)相同,因?yàn)関oid函數(shù)在語(yǔ)法上強(qiáng)制零時(shí)間執(zhí)行,所以最佳編碼實(shí)踐是在RTL模型中需要子例程時(shí)使用void函數(shù)而不是任務(wù)。上面的ReverseBits任務(wù)可以重寫(xiě)為void函數(shù),如下所示:

1b7c46b6-5fc7-11ed-8abf-dac502259ad0.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21799

    瀏覽量

    606196
  • asic
    +關(guān)注

    關(guān)注

    34

    文章

    1206

    瀏覽量

    120793
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59966

原文標(biāo)題:SystemVerilog-Function 和 task

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于任務(wù)鏈的實(shí)時(shí)多任務(wù)軟件可靠性建模

    提出了以實(shí)時(shí)多任務(wù)系統(tǒng)任務(wù)鏈為組件,任務(wù)鏈運(yùn)行時(shí)間比例作為組件的權(quán)重系數(shù),建立實(shí)時(shí)多任務(wù)軟件的可靠性
    發(fā)表于 03-03 11:47 ?16次下載

    S函數(shù)建模和仿真過(guò)程的研究

    探討了S函數(shù)建模和仿真問(wèn)題,研究在S函數(shù)中使用M文本方式輸入公式、方程,非常適合復(fù)雜動(dòng)態(tài)系統(tǒng)的數(shù)學(xué)描述。用Simulink模塊庫(kù)傳遞函數(shù)
    發(fā)表于 10-08 14:44 ?21次下載
    S<b class='flag-5'>函數(shù)</b><b class='flag-5'>建模</b>和仿真過(guò)程的研究

    如何在Zstack實(shí)現(xiàn)自己的任務(wù)詳細(xì)分析和函數(shù)資料概述

    在Zstack(TI的Zigbee協(xié)議棧),對(duì)于每個(gè)用戶(hù)自己新建立的任務(wù)通常需要兩個(gè)相關(guān)的處理函數(shù),包括:(1)用于初始化的函數(shù),如:SampleApp_Init(), 這個(gè)
    發(fā)表于 10-26 17:39 ?38次下載
    如何在Zstack<b class='flag-5'>中</b>實(shí)現(xiàn)自己的<b class='flag-5'>任務(wù)</b>詳細(xì)分析和<b class='flag-5'>函數(shù)</b>資料概述

    FreeRTOS任務(wù)控制API函數(shù)介紹

    FreeRTOS任務(wù)控制API函數(shù)主要實(shí)現(xiàn)任務(wù)延時(shí)、任務(wù)掛起、解除任務(wù)掛起、任務(wù)優(yōu)先級(jí)獲取和設(shè)置
    的頭像 發(fā)表于 03-19 10:19 ?2346次閱讀

    FreeRTOS任務(wù)應(yīng)用函數(shù)介紹

    * constpulTotalRunTime ); 該函數(shù)向TaskStatus_t結(jié)構(gòu)體填充相關(guān)信息,系統(tǒng)每一個(gè)任務(wù)的信息都可以填充到TaskStatus_t結(jié)構(gòu)體數(shù)組,數(shù)組大
    的頭像 發(fā)表于 03-19 10:22 ?2630次閱讀

    FreeRTOS系列第12篇---FreeRTOS任務(wù)應(yīng)用函數(shù)

    任務(wù)應(yīng)用函數(shù)是一組輔助類(lèi)函數(shù),一般用于調(diào)試信息輸出、獲取任務(wù)句柄、獲取任務(wù)狀態(tài)、操作任務(wù)標(biāo)簽值等
    發(fā)表于 01-26 17:53 ?2次下載
    FreeRTOS系列第12篇---FreeRTOS<b class='flag-5'>任務(wù)</b>應(yīng)用<b class='flag-5'>函數(shù)</b>

    Verilog設(shè)計(jì)函數(shù)任務(wù)的作用分析

    任務(wù)函數(shù)在Verilog中用于描述常用的功能行為。與其在不同的地方復(fù)制相同的代碼,不如根據(jù)需求使用函數(shù)任務(wù),這是一種良好且常見(jiàn)的做法。為了便于代碼維護(hù),最好使用子例程之類(lèi)的
    的頭像 發(fā)表于 03-15 11:01 ?1797次閱讀

    如何使用Arduino millis函數(shù)執(zhí)行多任務(wù)處理

    在本教程,我們將學(xué)習(xí)Arduino 如何使用 Arduino millis 函數(shù)執(zhí)行多任務(wù)處理。通常在 Arduino 中使用delay()函數(shù)來(lái)執(zhí)行LED 閃爍等周期性
    的頭像 發(fā)表于 09-06 14:41 ?1.4w次閱讀
    如何使用Arduino millis<b class='flag-5'>函數(shù)</b>執(zhí)行多<b class='flag-5'>任務(wù)</b>處理

    在SpinalHDL如何將ROM的初始化放置在RTL文件

    在默認(rèn)情況下,SpinalHDL在生成代碼時(shí)會(huì)同時(shí)生成一個(gè)bin文件及一個(gè)RTL代碼文件。在RTL代碼,會(huì)通過(guò)readmemb函數(shù)來(lái)載入初始化內(nèi)容
    的頭像 發(fā)表于 04-01 15:27 ?1045次閱讀

    X態(tài)如何通過(guò)RTL級(jí)和門(mén)級(jí)仿真模型的邏輯進(jìn)行傳播呢?

    在Verilog,IC設(shè)計(jì)工程師使用RTL構(gòu)造和描述硬件行為。但是RTL代碼的一些語(yǔ)義,并不能夠準(zhǔn)確地為硬件行為建模。
    的頭像 發(fā)表于 04-20 09:12 ?2172次閱讀

    Verilog任務(wù)函數(shù)的區(qū)別

    函數(shù)一樣,任務(wù)(task)可以用來(lái)描述共同的代碼段,并在模塊內(nèi)任意位置被調(diào)用,讓代碼更加的直觀易讀。
    的頭像 發(fā)表于 06-01 16:38 ?1649次閱讀
    Verilog<b class='flag-5'>任務(wù)</b>與<b class='flag-5'>函數(shù)</b>的區(qū)別

    FreeRTOS內(nèi)核控制函數(shù)

    1、函數(shù) taskYIELD() 此函數(shù)用于 進(jìn)行任務(wù)切換 ,此函數(shù)本質(zhì)上是一個(gè)宏。 2、函數(shù) taskENTER_CRITICAL() 進(jìn)
    的頭像 發(fā)表于 07-06 16:53 ?535次閱讀

    FreeRTOS其他任務(wù)API函數(shù)

    1、函數(shù) uxTaskPriorityGet() 此函數(shù)用來(lái)獲取指定任務(wù)的優(yōu)先級(jí),要使用此函數(shù)的話(huà)宏 INCLUDE_uxTaskPriorityGet 應(yīng) 該定義為 1。 2、
    的頭像 發(fā)表于 07-06 16:54 ?1113次閱讀

    FreeRTOS任務(wù)通知通用發(fā)送函數(shù)

    發(fā)送任務(wù)通知 任務(wù)通知通用發(fā)送函數(shù) 任務(wù)級(jí)任務(wù)通知發(fā)送函數(shù):xTaskNotify()、xTas
    的頭像 發(fā)表于 07-30 11:43 ?785次閱讀
    FreeRTOS<b class='flag-5'>任務(wù)</b>通知通用發(fā)送<b class='flag-5'>函數(shù)</b>

    verilog函數(shù)任務(wù)對(duì)比

    在verilog,函數(shù)任務(wù)均用來(lái)描述共同的代碼段,并且在模式內(nèi)任意位置被調(diào)用,提高代碼效率,讓代碼更加的直觀,提高代碼可讀性。但是在實(shí)際使用的過(guò)程
    的頭像 發(fā)表于 02-12 18:43 ?928次閱讀