Dinglei_hello · 2021年09月18日

为什么说Systemverilog是类C语言

SV 将 C 语言中的大部分特性包含进去,包括了相当多的数据类型和操作符。

WeChat Image_20210918100031.gif

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
微信公众号:
芯片验证工程师.jpg

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
10971
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息