天天看点

【数字IC前端】Systemverilog语法——文本结构结构文本(Structure literals)数组文本(Array literals)

结构文本(Structure literals)

结构文本(Structure literals)是具有常量成员表达式的结构分配模式或模式表达式。 结构文字必须具有类型,该类型可以用前缀显式指示,也可以由类似赋值的上下文隐式指示。

  • PS:’ 号通常可以表示存储地址空间不是连续的
typedef struct {int a; shortreal b;} ab;
ab c;
c = '{0, 0.0}; // structure literal type determined from
// the left-hand context (c)
           
  • 嵌套的括号应反映结构。 例如:
  • 前面的示例不允许使用类似C的替代项

    '{1,1.0,2,2.0}

  • 结构文字也可以使用成员名称和值或使用数据类型和默认值
c = '{a:0, b:0.0}; // member name and value for that member
c = '{default:0}; // all elements of structure c are set to 0
d = ab'{int:1, shortreal:1.0}; // data type and default value for all
// members of that type
           
  • 初始化结构数组时,嵌套括号应反映该数组和该结构。 例如:
  • 复制运算符可用于为成员的确切数目设置值。 复制中的一对内括号被删除。
struct {int X,Y,Z;} XYZ = '{3{1}};
typedef struct {int a,b[4];} ab_t;
int a,b,c;
ab_t v1[1:0] [2:0];
v1 = '{2{'{3{'{a,'{2 {b,c} } } } } }};
/* expands to '{ '{3{ '{ a, '{2{ b, c }} } }},
				'{3{ '{ a, '{2{ b, c }} } }}
				} */
/* expands to '{ '{ '{ a, '{2{ b, c }} },
				'{ a, '{2{ b, c }} },
				'{ a, '{2{ b, c }} }
				},
				'{ '{ a, '{2{ b, c }} },
				'{ a, '{2{ b, c }} },
				'{ a, '{2{ b, c }} }
				}
				} */
/* expands to '{ '{ '{ a, '{ b, c, b, c } },
				'{ a, '{ b, c, b, c } },
				'{ a, '{ b, c, b, c } }
				},
				'{ '{ a, '{ b, c, b, c } },
				'{ a, '{ b, c, b, c } },
				'{ a, '{ b, c, b, c } }
				}
} */
           

数组文本(Array literals)

  • 数组文字在语法上与C初始值设定项相似,但允许使用复制运算符({{}})。

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

  • 与C中不同,花括号的嵌套应遵循维数。但是,复制操作符可以嵌套。 复制中的一对内括号被删除。 复制表达式仅在一个维度内运行。
int n[1:2][1:6] = '{2{'{3{4, 5}}}}; // same as
'{'{4,5,4,5,4,5},'{4,5,4,5,4,5}}
           
  • 数组文字是具有常量成员表达式的数组分配模式或模式表达式。 数组文字必须具有类型,可以用前缀显式表示,也可以由类似赋值的上下文隐式表示。
typedef int triple [1:3];
$mydisplay(triple'{0,1,2});
           
  • 数组文字也可以使用其索引或类型作为键,并使用默认键值

继续阅读