日常記錄(13)SystemVerilog
logic資料型別
logic資料型別和reg資料型別只能受到單個驅動,而wire可以受到多個驅動。
logic明顯不可綜合,是SystemVerilog語法,而reg可綜合。
logic和reg還有點像,都能被連續賦值,門單元賦值,還有模組驅動賦值。
比較贊同:從語義上來說,SV中的logic資料型別和Verilog中的reg型別是一樣的,可以互換使用,更多的是相容wire型別。
https://zhuanlan.zhihu.com/p/107051924
賦值型別
http://www.elecfans.com/bandaoti/eda/202007201248592.html
VerilogHDL語言當中,包含連續賦值、過程賦值以及過程性連續賦值這三種賦值方式。
連續賦值:有以下幾個特點:
(1)含有關鍵字“assign”來標識;
(2)在賦值時,資料型別必須是wire線網型資料,是因為用於描述組合邏輯建模與線網資料;
(3)連續賦值語句執行時,賦值表示式當中訊號變化都將立即被反映到賦值線網型資料的取值上。
而過程賦值:
(1)被賦值的資料型別必須是reg型別資料;
(2)過程性連續主要是用來描述時序邏輯電路進行行為描述;
(3)只有在過程賦值語句執行時,才能執行賦值操作,語句執行完後被賦值變數的取值不再受到賦值表示式的影響。
而過程性連續賦值,
只有assign-deassign與force-release這兩種過程性連續賦值。
在實現過程中,連續賦值方式和過程賦值方式相比:具有速度快、而且能節省資源(過程賦值實現是需要暫存器來輔助)。
狀態資料型別
雙狀態的資料型別:bit1,int32,byte8,shortint16,longint64,real雙精度64(https://www.bilibili.com/read/cv12270330)
四狀態是Verilog傳統的reg、wire,還有SystemVerilog的logic,竟然還有time型別。(P104)
預設情況下,四狀態用x作為初始,二狀態用0,變數存在x或z,可以使用$isunknown函式判斷。
陣列型別
非合併陣列:普通陣列,按照計算機儲存方式,小於32bit的位寬型別以32bit形式儲存,而longint用兩個字表示。
常量陣列:是普通陣列的賦值過程,採用'{}的形式,其中可以新增default:x,作為未賦值的預設值x。
合併陣列:是宣告位寬的部分高維表示,如bti [3:0][7:0] array[3],每個array中是一個合併陣列,四個位元組,每個位元組8位。
合併陣列的值可以作為敏感訊號列表(@中的值,而非合併陣列不行)
合併和非合併都是定寬陣列。
動態陣列:
使用空的下標[],int d2[], d2=new[5], 賦值過程好像會自動釋放記憶體啊
對列:
對增加和刪除元素的開銷較小,具有陣列和連結串列的優點(通過索引進行訪問,最大編號為$)q2[$]={1,2,3}
insert, delete方法
關聯陣列:
儲存稀疏矩陣的元素,數或者雜湊表儲存形式,宣告時在中括號指定位寬,bit [63:0] assoc[bit[63:0]],具有64位的定址空間,int s[string],string作為定址空間
first, next,delete等方法
合併結構
typedef struct packed {bit [7:0] a, b, c;} pxs; 其中的abc都在同一個字中,和合並陣列的儲存類似。
流操作,<< >>等
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!