如何在VHDL中实例化只有一个字段的记录?

如何在VHDL中实例化只有一个字段的记录?,vhdl,Vhdl,如果记录有多个字段,则此操作有效: type record_one_field_t is record abit : bit; abit2 : bit; end record; constant record_one_field : record_one_field_t := ('0', '1'); 但如果只有一个字段: type record_one_field_t is record abit : bit; end record; constant record_o

如果记录有多个字段,则此操作有效:

type record_one_field_t is record
    abit : bit;
    abit2 : bit;
end record;
constant record_one_field : record_one_field_t := ('0', '1');
但如果只有一个字段:

type record_one_field_t is record
    abit : bit;
end record;
constant record_one_field : record_one_field_t := ('0');
GHDL 0.34给出了:

can't match character literal '0' with type record type "record_one_field_t"
我认为这是因为
('0')
正在作为字符进行词法分析

为什么我要这样做而不是只使用
变量:

  • 我正在开始一个设计,这些是输入,我想我以后会添加更多的输入
  • 好奇心
命名关联

constant record\u one\u字段:t:=(abit=>'0')

通常,您可以使用命名关联或位置关联,但对于只有一个组件的记录或数组,只有命名关联起作用,因为位置关联是不明确的,正如您所怀疑的那样。

IEEE 1076-2008 9.3.3.1(记录聚合)明确表示这是不可能的,您需要使用Brian Drummond提到的命名关联:

应始终使用命名关联指定包含单一元素关联的骨料,以便将其与括号中的表达式区分开来


已提及。

命名关联<代码>t:=(abit=>0')@BrianDrummond你会回答并获得代表还是我?:-)IEEE标准1076-2008 9.3.3.1(记录骨料)第4段“应始终使用命名关联指定包含单个元素关联的骨料,以便将其与括号内的表达式区分开来。”不是作为字符,而是作为括号内的表达式。是的,“0”不是记录类型。对于不带括号的字符文字,您会得到相同的消息,消息是不明确的,可以用8行代码来证明。@user1155120在答案中加上标准引号,然后获得我的投票。@user1155120 OK!我同意它不应该是权威性的,但这是一个很好的方法来快速找到权威性的,有时它的解释,如果需要的话。只是让下一个人更快一点;-)