System Verilog基础(一)

学习文本值和基本数据类型的笔记。

1.常量(Literal Value)

1.1.整型常量

例如:8‘b0  32'd0  '0  '1  'x  'z

省略位宽则意味着全位宽都被赋值。

例如:

wire [7:0]    sig1;
assign sig1 = '1;    //sig1 = 8'b11111111

1.2.实型常量

支持小数或者科学型表示,例如:3.14  2.0e3

real a = 3.14;

1.3.字符串常量

前后用双引号引起来,和C语言有不同,字符串末尾不是"\n"。

string    s = "System Verilog";
bit [7:0] d = "sv";    //也可以赋值给整型

1.4.数组常量

和C语言类似

int array[1:2] = {5,6};

1.5.结构体常量

typedef struct{
     int     a;
     string b;
     real    c;      
}  name_1;

name_1 var;

var = {10, "sv", 1.24};

1.6.时间文本值(Time Literal)

`timescale 1ns/100ps    //时间单位是1ns,时间精度是100ps
module test;
initial begin
    #20;        //相当于20ns
    #20ns;
    #5.18ns;  //相当于5.2ns,因为时间精度是100ps,即0.1ns,自动进位了
    #1step;   //相当于100ps
end
endmodule

`timescale必须定义在模块的外面,使用关键字timeunit和timeprecision只能定义在模块内部,只会影响单个模块。

`timescale 1ns/100ps    //时间单位是1ns,时间精度是100ps
module test;
    timeunit 1ns;
    timeprecesion 10ps;
initial begin
    #20;        //相当于20ns
    #20ns;
    #5.18ns;  //相当于5.18ns,因为时间精度是10ps,即0.01ns,不需要自动进位
    #1step;   //相当于10ps
end
endmodule

2.基本数据类型

2.1.整型

类型描述符号
bit2态,自定义位宽默认无符号
shortint2态,16bit有符号signed
int2态,32bit有符号signed
longint2态,64bit有符号signed
byte2态,8bit有符号signed
logic4态,自定义位宽有符号signed
reg4态,自定义位宽有符号signed
integer4态,32bit有符号signed
time4态,64bit无符号 unsigned

    2态只有1和0;4态是0,1,Z,X。2态数据类型不初始化,则默认是0;4态数据类型不初始化,则默认是X。不要用2态的数据类型去做ADC数据采集。在对4态数据类型做比较的时候,使用三个等号(a === b),而不两个等号(a == b)。2态和4态数据类型是可以相互转化的。从4态转化倒2态,那么4态中的Z和X会默认为2态的0。注意time类型是整数类型,64bit位宽。

2.1.1logic类型

    在SV中增加了logic类型,是reg类型的增强。在verilog中,一般输入会定义成wire类型,但是在SV中,输出和输入都定义成logic就行。

module(
    output    reg    a,
    input      wire   b
);
endmodule

SV:
module(
    output    logic    a,
    input      logic    b
);
endmodule

    在verilog中,reg类型只能在always块中被赋值,不能用assign来赋值,但是logic类型可以在always块中和assign中被赋值。

2.2.实数类型

    分为real data和shortreal data。real data相当于C语言中的double类型,64bit位宽,2态;shortreal data相当于C语言中的float类型,32bit位宽,2态。

real    a=3.15;
shotreal    b = 4.5;

2.3.字符串类型

    初始值是空字符。字符串的比较按照ASIC码来比较。使用[]来索引,随意改变和取值。

string s0 = "hello";    //不用定义大小
string s1 = " world !!";    //注意有个空格
string s;
initial begin
    s1[0] = ",";    // s1 = ",world !!",逗号替换了空格
    if(s0!=s1)
        s = {s0, s1};    //"hello,world !!"
        s = {2{s0}, s1};    //"hellohello,world !!"
end

    其他的一些字符操作:atobin(), atioct(), atoi(), atoreal()......用到再做笔记。

s = "CQUPT";
s.putc(0,"A");    //相当于s[0] = "A";  最终s = "AQUPT";
//s.getc(0);  相当于获得字符
//s.len();  计算字符串长度为5
//s.lower(); 把大写的变成小写的
//s.substr(2,4); 取出字符串中的2到4位
s = $psfrintf("%s %5d",s,100); //不同于$display,输出为s = "AQUPT  100";

2.4.常量(constant data type)

    在变量前面加const,如果用户把这个变量改变了,那么仿真器会报错。按照C语言中的const来理解。

2.5.空类型(void data type)

    SV中定义function也是可以有返回值的,如果不想有返回值,那么在定义function后面添加void。调用有返回值的函数,但是不想用返回值,这个时候在调用函数的前面加void'(fun1());就可以了。不然会有warning,在验证中最好不要有警告

2.6.用户自定义类型

 

转载于:https://www.cnblogs.com/yiwenbo/p/10103207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值