如何用限定表达式构建含单个元素的合格数组类型表达式?
VHDL中正确使用限定表达式初始化单元素一维数组
当尝试用限定表达式初始化仅含单个元素的一维数组时,会遇到编译器解析错误的问题,比如下面的代码无法正常执行:
-- 整数数组类型声明 type t_ints is array (natural range <>) of integer; -- 单元素数组初始化(执行失败) variable v_ints: t_ints(0 to 0) := t_ints'((1));
原因很直接:编译器会把(1)解析为带冗余括号的标量整数表达式,而非单元素数组聚合。但如果是初始化双元素数组,(1, 2)能被正确识别为数组聚合,所以下面的代码可以正常运行:
-- 整数数组类型声明 type t_ints is array (natural range <>) of integer; -- 双元素数组初始化(执行正常) variable v_ints: t_ints(0 to 1) := t_ints'((1, 2));
不用再依赖繁琐的中间常量切片方法,有两种简洁的方式可以正确初始化单元素数组:
方法一:显式指定元素索引
通过位置聚合语法明确指定元素对应的索引,编译器会直接识别为数组聚合:
-- 整数数组类型声明 type t_ints is array (natural range <>) of integer; -- 单元素数组初始化 variable v_ints: t_ints(0 to 0) := t_ints'(0 => 1);
方法二:使用带空逗号的聚合语法
在单个元素后添加逗号,让编译器将其识别为数组聚合而非标量表达式:
-- 整数数组类型声明 type t_ints is array (natural range <>) of integer; -- 单元素数组初始化 variable v_ints: t_ints(0 to 0) := t_ints'((1,));
内容的提问来源于stack exchange,提问作者aschipfl
相关产品推荐
相关产品推荐

