在VHDL中使用其他集合

在VHDL中使用其他集合,vhdl,Vhdl,我试图返回一个单词,其定义如下: 子类型字是标准逻辑向量(字长度-1到0); 通过将来自这样一个记录的大量其他输入串联起来(这在开关块内部): 返回get\u opc(ins.op)和std\u logic\u vector(ins.val)和“0000”要用其他构造替换这些构造吗 但是,不同的操作码具有不同的其他输入集,因此需要正确填充零的量会发生变化。我不是一个手工硬编码尾随零的超级粉丝,这是一个混乱的广告,如果我调整我的单词大小,它将不会发挥好 我的本能是尝试: 返回get_opc(i

我试图返回一个
单词
,其定义如下:

子类型字是标准逻辑向量(字长度-1到0);
通过将来自这样一个记录的大量其他输入串联起来(这在开关块内部):

返回get\u opc(ins.op)和std\u logic\u vector(ins.val)和“0000”要用其他构造替换这些构造吗
但是,不同的操作码具有不同的其他输入集,因此需要正确填充零的量会发生变化。我不是一个手工硬编码尾随零的超级粉丝,这是一个混乱的广告,如果我调整我的单词大小,它将不会发挥好

我的本能是尝试:

返回get_opc(ins.op)和std_logic_vector(ins.val)和(其他=>0');
但显然,在这种情况下,您不能将
其他人
用作聚合

我知道我可以创建一个字大小的缓冲区,用零填充它,然后将不同的输入放入不同的片中,但这样做会非常冗长,需要我指定每个片的起点和终点,而不仅仅是在左侧连接它们。这很快就会变得非常混乱

有没有简单的方法可以让一切都简洁明了?

如果使用VHDL-2008(或VHDL-2019!),可以返回如下聚合:

return (get_opc(ins.op), std_logic_vector(ins.val), others => '0');
这假设您的返回类型受约束。换句话说,这没关系:

function F return word is 
begin
  return (get_opc(ins.op), std_logic_vector(ins.val), others => '0');
end function;    
然而,如果您的返回类型像这样不受约束,那么它就不正常:

function F return std_logic_vector is 

这似乎会导致ghdl中出现coredump。。。假设这是一个GHDL bug而不是一个语言冲突是否足够安全?@Persistence无论它是否是一个语言冲突,它都不应该导致核心转储。您应该会收到一条错误消息,告诉您出了什么问题。我已在GHDL问题跟踪程序中将其报告为一个错误,但非常感谢您的回答。不过,请提供一个。如果未来的读者无法复制问题并评估解决方案,那么你的问题对他们来说就没有什么价值。(Re:Matthew的答案-拥有聚合类型及其元素类型的元素的能力是在-2008年引入的,由于受到综合支持的限制,没有得到广泛使用。对您的问题的响应#1704应该与对您的#1667的响应相同。聚合是一个表达式,-2008聚合尚未在ghdl中完全实现).一个没有答案的是/否问题可以得到一个简单的答案(是的,不依赖-2008聚合)。“和其他人一起选择的聚合”的子类型无法根据您本能尝试的聚合上下文确定。在函数
中,子类型0是标准逻辑向量(word_length-ins.op'length-ins.val'length-1到0)。使用限定表达式指定聚合的子类型
return get_opc(ins.op)&std_logic_vector(ins.val)&zeros'(其他=>'0')单词\从子类型单词中获取的长度。