什么引入interface?
將設(shè)計(jì)和驗(yàn)證從邏輯上和時(shí)間上分開,使得兩個(gè)小組可以相對(duì)獨(dú)立;
IC 設(shè)計(jì)的復(fù)雜度逐漸增加,模塊之間的連接也逐漸復(fù)雜,傳統(tǒng)的 Verilog信號(hào)連接方式代碼量太大,容易出錯(cuò),且不易于復(fù)用。
Interface的優(yōu)勢(shì)
簡(jiǎn)潔:
1、使用 Interface 在驗(yàn)證中添加、刪除和修改信號(hào)時(shí)只需要修改 Interface 和使用該 Interface 的模塊,怎么理解?
如圖所示:頂層模塊top例化了模塊m1和m2,a信號(hào)從m2經(jīng)過頂層模塊到m1。假設(shè)現(xiàn)需將信號(hào)a修改為b,不使用接口的情況下,m1、m2及top模塊都應(yīng)該做出相應(yīng)的修改;若使用接口,top例化的是接口,接口內(nèi)的信號(hào)修改只需要修改m1、m2相關(guān)部分即可。
2、兩個(gè)塊之間有兩個(gè)以上的信號(hào)連接,并且使用特定的協(xié)議時(shí),使用接口更利于復(fù)用。
軟硬件域的橋梁:
Interface 是硬件域( module、設(shè)計(jì)中使用)和軟件域( class、驗(yàn)證環(huán)境中使用)交互的唯一方式。
定義要點(diǎn)
Interface 的定義與 Module 類似,可以參考 Module 的定義方法;由于接口直接與DUT打交道,因此變量建議聲明為四值邏輯logic;同時(shí)為了防止驗(yàn)證環(huán)境帶來的競(jìng)爭(zhēng)問題,驅(qū)動(dòng)硬件的信號(hào)應(yīng)使用非阻塞賦值;Interface端口列表中只需要定義時(shí)鐘、復(fù)位等公共信號(hào),或者不定義任何端口信號(hào)。
使用示例
首先定義interface,然后在頂層例化后作為module的端口列表分別傳入DUT和TB中。
接口中的modport
前一個(gè)例子中使用了點(diǎn)對(duì)點(diǎn)無(wú)信號(hào)方向的連接方式。在使用該端口的原始網(wǎng)單里包含了方向信息,編譯器依次來檢查連線錯(cuò)誤。也可以通過modport來進(jìn)一步限定信號(hào)傳輸?shù)姆较?,避免端口連接的錯(cuò)誤。
需要注意的是modport中的input和output方向是調(diào)用該modport模塊的輸入輸出方向,比如TEST的modport內(nèi)聲明的方向,就是調(diào)用它的test模塊輸入輸出。
事實(shí)上modport在驗(yàn)證環(huán)境中使用并不多,因?yàn)橄挛奶岬降牟坏玞locking塊包含了modport的方向信息,同時(shí)clocking塊也可作為同步信號(hào)的驅(qū)動(dòng)。
接口中的clocking塊
clocking 塊,用來對(duì)同步信號(hào)進(jìn)行采樣和驅(qū)動(dòng),可以避免設(shè)計(jì)和驗(yàn)證的競(jìng)爭(zhēng)。clocking block需要指定一個(gè)觸發(fā)時(shí)鐘,比如posedge clk、negedge clk。
同若驗(yàn)證環(huán)境中需要同步驅(qū)動(dòng),利用“arb_if.cb.*”的方式利用clocking塊中的信號(hào)進(jìn)行驅(qū)動(dòng)即可。
同時(shí)可以為clocking塊中信號(hào)設(shè)置建立和保持時(shí)間,若未設(shè)置建立時(shí)間或保持時(shí)間時(shí)則會(huì)默認(rèn)在clocking事件前1step輸入采樣,在事件后#0對(duì)輸出驅(qū)動(dòng)。
標(biāo)注的語(yǔ)句表示在時(shí)鐘上升沿前10ns進(jìn)行采樣,在時(shí)鐘上升沿2ns后進(jìn)行驅(qū)動(dòng)。怎么理解?事實(shí)上這個(gè)步驟主要是為了模擬實(shí)際的硬件行為,感興趣的可以自己畫幾級(jí)觸發(fā)器來分析,TB對(duì)DUT的驅(qū)動(dòng)一側(cè)相當(dāng)于DUT的上一級(jí)觸發(fā)器,采樣DUT數(shù)據(jù)一側(cè)的TB相當(dāng)于DUT的下一級(jí)寄存器。
幾點(diǎn)注意:clocking不是interface獨(dú)有的,module、program也可以聲明clocking模塊;clocking中列舉的信號(hào)都是由interface、module、program等聲明了clocking的模塊定義的,cloking自身不聲明信號(hào);一個(gè)interface中可以定義多個(gè)clocking,同一個(gè)變量可以在多個(gè)clocking塊中被應(yīng)用,且可以聲明不同的輸入輸出方向。
完結(jié)。
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8257瀏覽量
149956 -
IC設(shè)計(jì)
+關(guān)注
關(guān)注
37文章
1287瀏覽量
103436 -
Verilog
+關(guān)注
關(guān)注
28文章
1333瀏覽量
109713 -
Interface
+關(guān)注
關(guān)注
0文章
103瀏覽量
38570
原文標(biāo)題:Interface in systemverilog
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論