×
嵌入式 > 技术百科 > 详情

SystemVerilog语言简介(二)

发布时间:2022-03-31 发布时间:
|

6. 用户定义的类型

Verilog不允许用户定义新的数据类型。SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:

typedef unsigned int uint;

一个用户定义的数据类型可以在它的定义之前使用,只要它首先在空的typedef中说明,例如:

int48 c;

7. 枚举类型

在Verilog语言中不存在枚举类型。标识符必须被显式地声明成一个线网、变量或参数并被赋值。SystemVerilog允许使用类似于C的语法产生枚举类型。一个枚举类型具有一组被命名的值。缺省情况下,值从初始值0开始递增,但是我们可以显式地指定初始值。枚举类型的例子如下:

green} RGB;

2'b01, LOAD, DONE} states;

我们还可以使用typedef为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:

typedef enum {FALSE=1'b0, TRUE} boolean;

boolean test_complete;

8. 结构体和联合体

在Verilog语言中不存在结构体或联合体,而结构体或联合体在将几个声明组合在一起的时候非常有用。SystemVerilog增加了结构体和联合体,它们的声明语法类似于C。

reg [15:0] align=left> reg [23:0] addr;

int I;

} align=left>结构体或联合体中的域可以通过在变量名和域名字之间插入句点(.)来引用:

N.f = 0.0; /⁄将N设置成浮点数的值

我们可以使用typedef为结构体或联合体的定义指定一个名字。

reg [7:0] align=left> reg [23:0] addr;

instruction IR; /⁄结构体实例

一个结构体可以使用值的级联来完整地赋值,例如:

结构体可以作为一个整体传递到函数或任务,也可以从函数或任务传递过来,也可以作为模块端口进行传递。

数组

Verilogreg

reg [7:0] r1 [1:256]; /⁄256个8位的变量

SystemVerilogpacked arrayunpacked arraybitlogicregwire

bit [7:0] a; /⁄一个一维的压缩数组

bit b [7:0]; //一个一维的非压缩数组

bit [0:11] [7:0] c; //一个二维的压缩数组

bit [3:0] [7:0] d [1:10]; /⁄一个包含10个具有4个8位字节的压缩数组的非压缩数组

d[1]4在为命名的块中声明

Verilogbegin-endfork-joinSystemVerilogbegin-endfork-join常量

VerilogparameterspecparamlocalparamSystemVerilogconst

const char colon = “:”;

可重定义的数据类型

SystemVerilogVerilogparameter

module foo;

# (parameter type VAR_TYPE = shortint;)

(input logic [7:0] i, output logic [7:0] align=left> VAR_TYPE j = 0; /⁄如果不重新定义,j的数据类型为shortint

endmodule

module bar;

logic [3:0] i, align=left> foo #(.VAR_TYPE(int)) u1 (i,>重新将VAR_TYPE定义成int类型

endmodule

模块端口连接

VerilogregintegertimeSystemVerilog字母值

VerilogSystemVerilogl一个字母值的所有位均可以使用`0`1`z`x

bit [63:0] data;

data = `1; //将data的所有位设置成1

l一个字符串可以赋值成一个字符数组,象CC

char foo [0:12] = “hello worldn”;

l加入了几个特殊的串字符:

vTAB

fax02ASCIIl数组可以使用类似于CC

int n [1: 2] [1:3] = {{0, 1, 2}, {3{4}}};


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
RFID的电子关锁系统设计与实现