在構建測試平臺時,經常會用到interface用來簡化模塊和測試平臺或者模塊之間的連接,可以將一堆相關的信號封裝在其中,為硬件模塊的端口提供了一種標準化的封裝方式,其中的modport(module port)結構對interface中的相關信號進行分組并指定方向,這樣會使接口的定義條理更加清晰,明確了站在不一樣的角度相關信號的輸入輸出方向。
例如在monitor中,信號大部分都是輸入的,所以此時modport分組時將相關信號的方向都指定為輸入,并且可以在具體模塊定義的時候通過interface名直接使用modport名,那么此時就會有個問題:既然模塊定義的時候直接了使用modport名,那么模塊在例化的時候與interface的實例如何進行連接呢?本文將通過示例對此進行說明。
為了方便說明,文中相關模塊的實現為“empty”,但是不影響其端口對于信號的可見性。
【示例】
【仿真結果】
示例中,接口定義時指定了modport,其中只包含了sig0這一個變量,sig1并沒有包含在內。test0定義端口列表采用“接口名.modport名”方式聲明了接口變量,而test1定義端口列表采用“接口名”方式聲明了接口變量。在模塊例化時,dut0與“接口實例名”直接連接;dut1與“接口實例名.modport名”直接連接;dut2與“接口實例名”直接連接;dut3與“接口實例名.modport名”直接連接;
通過仿真結果可以看到,test0的兩個實例,不管實例與接口采用何種方式進行連接,此時在實例中僅能觀測到接口中modport分組中的變量sig0,其實主要原因在于test0在定義時其端口列表就已經限定了僅訪問接口分組DUT中的變量。所有的實例中只有dut2中可以觀測到接口中所有變量,這是因為首先test1在定義時其端口列表采用了“接口名”方式,其次例化連接接口時也是直接與接口例化名直接相連,而dut3因為在與接口連接時,限制了僅與接口中的modport分組TB進行連接,所以在dut3中觀測不到sig1的變化。
為此,可以將上例進行簡化匯總之間關系如下圖所示,即如果模塊定義時指定的端口采用了“接口名.modport名 接口變量”的方式,那么不管這個模塊在實例化時與接口實例如何連接,模塊實例對于接口僅可觀測到對應modport分組中的變量。而如果模塊定義時指定的端口采用了“接口名 接口變量”方式,那么模塊實例具體能夠觀測到接口哪些變量,則取決于實例化連接時與接口實例的連接方式。
審核編輯:劉清
-
DUT
+關注
關注
0文章
189瀏覽量
12425
原文標題:接口中的modport連接模塊都能看見什么
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論