TCJJ

导航

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

posted on 2021-02-26 14:13  TCJJ  阅读(152)  评论(0)    收藏  举报

1