为什么说Systemverilog是类C语言
时间:2021-11-03 14:57:07
手机看文章
扫描二维码
随时随地手机看文章
[导读]SV将C语言中的大部分特性包含进去,包括了相当多的数据类型和操作符。1.SystemVerilog支持C语言内建的数据类型。为了避免int和long数据类型的重复带来混淆,在SV中,int是32位的,longint是64位的。C语言中的float类型在SV中称为shortreal...
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 语言。
总体来说, SV 语言继承了 C 语言的大部分特性。
型的重复带来混淆,在 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); endendelse 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); endendwhile(hiphy_time != X_mac_pkt.input_time) begin//等待最小加载时间@X_mac_vif.clk_three;//Verilog 语言#1; //Verilog 语言endwhile(X_mac_vif.X_mac_clk.receive_rdy != 1) begin//等待 X_mac 空闲@X_mac_vif.X_mac_clk;end总体来说, SV 语言继承了 C 语言的大部分特性。





