SV 将 C 语言中的大部分特性包含进去,包括了相当多的数据类型和操作符。
1. SystemVerilog 支持 C 语言内建的数据类型。为了避免 int 和 long 数据类
型的重复带来混淆,在 SV 中, int 是 32 位的, longint 是 64 位的。C 语言中的float 类型在 SV 中称为 shortreal。
2. SystemVerilog 中加入了字符串、结构体和联合体等常见的数据类型。
3. SystemVerilog 中有数组的概念,不过其将数组扩展为三类,压缩数组和非压缩数组以及动态数组等类,不同的数组类型都有不同的属性。其非压缩数组类似于 C语言中的数组。另外, SV 中的数组都有自己的成员函数,设计者无需自己设计
数组的操作函数。
4. SystemVerilog 的操作符是 Verilog 和 C 语言操作符的组合。正是因为其支持 C 语言的操作符,因此其编程风格更像 C 语言。
5. SystemVerilog 的过程语句和控制流方法,支持 C 语言中大部分的控制语句(if else/dowhile/case),支持 Verilog 中的控制语句(begin end/fork join/fork join_any/fork join_none)。同时支持 Verilog 的电平敏感和沿敏感的时间控制。
下面是一段 SystemVerilog 语言的代码,进行对比后发现,如果将其中的 begin end 换成 C 语言的{},将很难区分 SV 语言和 C 语言。
if(X_mac_pkt.data_length == 130)begin
`uvm_info("X_mac_driver","data_length = 34",UVM_HIGH)
for(int i=0;i<32;i++) begin
X_mac_data[1+i]={emac_data[i*4+0],emac_data[i*4+1],emac_data[i*4+2],emac_data[i*4+3];
end
X_mac_data[33]={emac_data[32*4+0],emac_data[32*4+1],8'b0,8'b0};
for(int i=0;i<30;i++) begin
X_mac_data[34+i]=(i+1);
end
end
else begin
`uvm_info("X_mac_driver","data_length = 56",UVM_HIGH)
for(int i=0;i<54;i++) begin
X_mac_data[1+i]={emac_data[i*4+0],emac_data[i*4+1],emac_data[i*4+2],emac_data[i*4+3]};//Verilog 语言
end
X_mac_data[55]={emac_data[54*4+0],emac_data[54*4+1],8'b0,8'b0};
for(int i=0;i<8;i++) begin
X_mac_data[56+i]=(i+1);
end
end
while(hiphy_time != X_mac_pkt.input_time) begin//等待最小加载时间
@X_mac_vif.clk_three;//Verilog 语言
#1; //Verilog 语言
end
while(X_mac_vif.X_mac_clk.receive_rdy != 1) begin//等待 X_mac 空闲
@X_mac_vif.X_mac_clk;
end
总体来说, SV 语言继承了 C 语言的大部分特性。
END
作者:验证哥布林
原文链接:https://mp.weixin.qq.com/s/2XuUoc1qdekDci4nAFpgDQ
微信公众号:
推荐阅读
- [UVM中类的例化用new和create有什么不同?]https://aijishu.com/a/1060000...)
- UVM\_Agent中一般包含哪些内容
更多IC设计技术干货请关注IC设计技术专栏。