nterface
Verilog語言使用端口名字連接配接各個子產品;
systemVerilog中使用“.*”可以自動比對具有相同名字的線網和端口,自動連接配接的名字必須具有相同的端口位寬,連接配接的端口類型必須相容;也可以使用“.name”進行連接配接,.name必須滿足端口名字和位寬一直;
Verilog傳統連接配接的缺點:通信協定接口在多個子產品中使用,在多個子產品中都要聲明相應的端口,同時不比對的聲明會導緻編譯錯誤,設計文檔修改端口名後需要修改所有的子產品;
interface中集合了多個Verilog類型的信号,是一個獨立的端口類型,可以簡化端口連接配接。interface包含了連接配接,同步,甚至多個塊之間的通信,隻要在interface裡面聲明過的信号與端口,在其它子產品中都可以使用。
interface的優勢:
接口便于設計重用,當兩個塊之間有兩個以上的信号連接配接,并且使用特定的協定通信的時候,應當考慮接口;如果接口組一次又一次的重複出現,應該考慮虛拟接口;
借口可以用來替換原來在子產品或者程式中反複聲明并且位于代碼内部的一系列信号,減少了連接配接錯誤的可能性;
要增加一個信号時,隻需要在借口中聲明一次,不需要在更高層聲明,這減少了連接配接錯誤的可能性;
modport允許一個子產品很友善的将接口中一系列信号捆綁在一起,也可以為信号指明方以便工具自動檢查。
interface的劣勢:
必須同時使用接口名和信号名,可能會使子產品變得更加冗長;
如果連接配接的兩個子產品使用的是一個不會被重用的專用協定,使用接口需要做更多的工作;
連接配接兩個接口很困難;
對于點對點的連接配接,使用modport的接口描述跟使用信号清單的端口一樣的冗長。
modport為接口内部的信号提供了不同的視圖,在interface中可以提供任意數量的modport。
clocking可以保證測試平台在正确的時間點和信号互動(驅動過早或者過晚都會引起競争),将信号同步到一個特定的時鐘上。interface可以包含多個clocking。
program block的好處
将驗證平台與待測設計分隔開;
在不同的時間域運作,減少了競争現象;
在Verilog中,初學者經常分不清reg和wire兩者的差別,在sv中對此進行了改進,這種新的資料類型為logic,但要求logic不能有多個結構性的驅動。logic有四種狀态:0,1,x,z。
二值變量(隻有兩種狀态,不用做rtl設計,提供仿真性能,減少記憶體使用量):bit,byte,shortint,int,longint
邏輯仿真特性:
四值狀态變量的預設初始值為x,二值狀态變量的預設初始值為0;
二值初始變量不能表示未初始化狀态;
四值狀态變量可以指派給二值狀态變量,x和z會轉換成0;
$isunknown()可以檢測表達式中是否存在x或者z。
固定數組
支援多元數組;
超過邊界的寫操作會被忽略;
超過邊界的讀操作傳回值為x;
byte,shortint,int存放在32位的存儲空間中;
longint存放在64位的存儲空間中
填充數組
混合數組
動态數組
隊列
隊列具有排序和搜尋的功能;
迅速配置設定額外的空間和額外的元素;
支援push和pop的操作;
支援add和remove元素操作;
可支付之固定數組和動态數組的值給隊列;
不需要new函數
當滿足以下條件時,動态數組和固定數組可以互相複制:相同的資料類型和相同數目的元素。
結構體
具有一組變量或者常數組成的集合,可以作為一個整體進行操作,也可以操作其中的一部分;
将邏輯上相關的信号放在一起,比如一些總線協定;
可以利用結構體的名字操作整個變量。
枚舉
抽象變量代表一個數值序列;
使用者可以定義每一個值;
增加了可閱讀性;
支援first,last,next,prev操作;
枚舉類型預設為int,所有數值需要唯一
function
函數執行過程中不消耗仿真時間,是以函數中不能有控制時間的語句。
task
含有input,output或者inout語句;
消耗仿真時間
封裝:類可以把自己的資料和方法隻讓可信的類或者對象操作,對不可信的進行資訊隐藏。通過這種方式,對象對内部資料提供了不同級别的保護,以防止程式中無關的部分意外的改變或錯誤的使用了對象的私有部分;
繼承:是指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進行擴充。 通過繼承建立的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。
多态:就是指一個類執行個體的相同方法在不同情形有不同表現形式,比如build_phase中的create。展現不同的效果;
虛函數
參數化類
随機化
rand關鍵字聲明随機變量(指定範圍内均勻分布)。
周期性關鍵字randc(資料類型隻能是bit或者enum)。
constraint語句限制塊。
randomize将對象中的随機變量指派。
seed随機種子。
dist數值分布操作符(randc的随機變量不能設定權重)。
:=指定的數值具有相同的分布權重;:/指定的數值均分權重。
雙向限制
solve before
random_mode()
constraint_mode()
并發線程
并發線程沒有固定的先後執行順序;
join
join any
join none
當一個線程執行時,隻有遇到wait語句才會停止;
當正在執行的線程遇到等待語句時,在隊列中的ready 狀态的線程可以執行;
當所有的線程進入wait狀态時,仿真時間更新,進入到下一個仿真周期;
wait fork:等待所有的并發程序執行完成;
disable fork:停止所有并發子線程的執行;
線程内部通信
Verilog event:觸發事件的操作符:->;等待事件的操作符:@
事件 event不需要聲明為全局變量,就可以将event作為共享資源使用;
觸發事件的操作符:->和->>;
等待一個事件被觸發的操作符:@和wait;
triggered函數用來檢查一個事件是否被觸發過,傳回值是一個狀态;
旗語 semaphore
郵箱 mailbox
來源:http://www.icode9.com/content-4-66501.html