SV_3_Literal Values
摘要:本章节主要介绍System verilog 中的 literal value
- time value
- array value
- structure value
- improvement to string literals
1. integer and logic literals
可用如下方法进行赋值:
- '0 : Set all bits to 0
- '1: Set all bits to 1
- 'X or `x : Set all bits to x
- `Z or `z : Set all bits to z
integer 型的一个例子
1 `timescale 1ns/100ps 2 module int_literals (); 3 4 integer a; 5 6 initial begin 7 $monitor ("@ %gns a = %h", $time, a); 8 a = '0; 9 #1 a = 'x; 10 #1 a = '1; 11 #1 a = 'z; 12 #1 a = 'b0; 13 #1 a = 'bx; 14 #1 a = 'b1; 15 #1 a = 'bz; 16 #1 $finish; 17 end 18 19 endmodule 20 21 //compile result 22 @ 0ns a = 00000000 23 @ 1ns a = xxxxxxxx 24 @ 2ns a = ffffffff 25 @ 3ns a = zzzzzzzz 26 @ 4ns a = 00000000 27 @ 5ns a = xxxxxxxx 28 @ 6ns a = 00000001 29 @ 7ns a = zzzzzzzz
2. real literals
对于小数和指数,默认类型为real
以下例子为real的一个实例,并将小数和指数转换为shortreal 型
1 `timescale 1ns/100ps 2 module real_literals (); 3 4 real a; 5 shortreal b; 6 7 initial begin 8 $monitor ("@ %gns a = %e b = %e ", $time, a, b); 9 a = '0; 10 b = 1.0e2; 11 #1 a = 2e5; 12 // Type casting 13 #1 b = shortreal'(a); 14 #1 a = 2.1E-2; 15 // Type casting 16 #1 b = shortreal'(a); 17 #1 $finish; 18 end 19 20 endmodule 21 22 //compile result 23 @ 0ns a = 0.000000e+00 b = 1.000000e+02 24 @ 1ns a = 2.000000e+05 b = 1.000000e+02 25 @ 2ns a = 2.000000e+05 b = 2.000000e+05 26 @ 3ns a = 2.100000e-02 b = 2.000000e+05 27 @ 4ns a = 2.100000e-02 b = 2.100000e-02
3. time literals
时间以小数和整数写入,后跟时间单位,无空格,输出以当前时间单位的四舍五入为标椎。
例子:
1 `timescale 100ps/10ps 2 module time_literals (); 3 4 time a; 5 initial begin 6 $monitor ("@ %g a = %t", $time, a); 7 #1 a = 1ns; 8 #1 a = 0.2ns; 9 #1 a = 300ps; 10 #1 $finish; 11 end 12 13 endmodule 14 15 //compile results 16 @ 0 a = 0 17 @ 1 a = 100 18 @ 2 a = 20 19 @ 3 a = 30
4. string literals
- 字符串文字必须用"****"括起来,并具有自己的数据类型;
- 字符串的字面值必须包含在单行,如果想分行打印,则在两行之间必须有\;
- 非打印字符以及其他特殊字符前面必须有\;
system verilog 添加了以下特殊字符串:
- \v vertical tab
- \f form feed
- \a bell
- \x02 hex number
一个例子:
1 `timescale 1ns/100ps 2 module string_literals (); 3 4 string a; 5 6 initial begin 7 $display ("@ %gns a = %s", $time, a); 8 a = "Hello Deepak"; 9 $display ("@ %gns a = %s", $time, a); 10 #1 a = "Over writing old string"; 11 $display ("@ %gns a = %s", $time, a); 12 #1 a = "This is multi line comment \ 13 and this is second line"; 14 $display ("@ %gns a = %s", $time, a); 15 #1 $finish; 16 end 17 18 endmodule 19 20 //compile result 21 @ 0ns a = 22 @ 0ns a = Hello Deepak 23 @ 1ns a = Over writing old string 24 @ 2ns a = This is multi line comment 25 and this is second line
5. array literal
数组字符,类似于C,允许使用复制操作符{{}}
一个例子:
1 `timescale 1ns/100ps 2 module array_literals (); 3 4 byte a [0:1][0:2] = '{'{0,1,2},'{3{8'h9}}}; 5 6 initial begin 7 $display ("a [0][0] = %d", a[0][0]); 8 $display ("a [0][1] = %d", a[0][1]); 9 $display ("a [0][2] = %d", a[0][2]); 10 $display ("a [1][0] = %d", a[1][0]); 11 $display ("a [1][1] = %d", a[1][1]); 12 $display ("a [1][2] = %d", a[1][2]); 13 #1 $finish; 14 end 15 16 endmodule 17 18 //compile result 19 a [0][0] = 0 20 a [0][1] = 1 21 a [0][2] = 2 22 a [1][0] = 9 23 a [1][1] = 9 24 a [1][2] = 9
6. structure literals
结构字符必须有固定的类型,无论是来自上下文或者是来源于类型转换($cast)
一个例子:
1 `timescale 1ns/100ps 2 // Type define a struct 3 typedef struct { 4 byte a; 5 reg b; 6 shortint unsigned c; 7 } myStruct; 8 9 module struct_literals (); 10 11 myStruct object = '{10,0,100}; 12 13 myStruct objectArray [0:1] = '{'{10,0,100},'{11,1,101}}; 14 15 initial begin 16 $display ("a = %b b = %b c = %h", object.a, object.b, object.c); 17 object.a = 15; 18 $display ("a = %b b = %b c = %h", object.a, object.b, object.c); 19 object.c = 16'hDEAD; 20 $display ("a = %b b = %b c = %h", object.a, object.b, object.c); 21 $display ("Printing array of objects"); 22 $display ("a = %b b = %b c = %h", 23 objectArray[0].a, objectArray[0].b, objectArray[0].c); 24 $display ("a = %b b = %b c = %h", 25 objectArray[1].a, objectArray[1].b, objectArray[1].c); 26 #1 $finish; 27 end 28 29 endmodule 30 31 //compile result 32 a = 00001010 b = 0 c = 0064 33 a = 00001111 b = 0 c = 0064 34 a = 00001111 b = 0 c = dead 35 Printing array of objects 36 a = 00001010 b = 0 c = 0064 37 a = 00001011 b = 1 c = 0065
浙公网安备 33010602011771号