System Verilog与功能验证 2.1.4-2.1.8

2.1.4 字符串 string

大小可变,动态分配的字节数组。

语法:string variable_name [=initial_value];

注意字符串的操作符和内置方法的使用。

2.1.5 结构体和联合体

结构体:struct   联合体:union

struct {
reg [15:0] opcode;
reg [23:0] addr;
} IR;

union {
int I;
shortreal f;
} N;

结构体或联合体中的域可以通过在变量名和域名字之间插入句点(.)来引用:
IR.opcode = 1; // 设置IR变量中的opcode域

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


我们可以使用typedef为结构体或联合体的定义指定一个名字。
typedef struct {
reg [7:0] opcode;
reg [23:0] addr;
} instruction; // 命名的结构体

instruction IR; // 结构体实例

IR.opcode = 1; // 设置IR变量中的opcode域

一个结构体可以使用值的级联来完整地赋值,例如:
instruction = {5, 200}; //IR = {5,200}???jyz

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

通过packed关键字,可以将结构体和联合体定义为压缩结构体和压缩联合体。

LED_Struct的第[0]位是L0,第[1]位是L1:
tepedef struct packed{bit L3,L2,L1,L0;} LED_Struct;//packed以后的自定义结构
var LED_Struct rLED; //声明为暂存类型的自定义结构rLED

var bit [3:0] rLED; //等价关系

rLED <= 4'd0;

有packed的自定义结构声明暂存类型时,LED_Struct声明一个名为rLED的暂存类型,而该rLED与"var bit [3:0] rLED"声明方法有等价的关系,rLED可以直接为所有成员赋值。

2.1.6 常量

parameter

localparam

specparam

const

2.1.7 文本表示

2.1.8操作符和表达式










猜你喜欢

转载自blog.csdn.net/ningjinghai11/article/details/80381223