2016-02-05 66 views
3

我想使两个阵列中的一个。联合两个阵列

TYPE  character_string IS array (0 TO 15) of unsigned (7 DOWNTO 0); 
TYPE  full_string IS array (0 TO 31) of unsigned (7 DOWNTO 0); 
SIGNAL lcd_oben, lcd_unten    : character_string; 
SIGNAL lcd_data        : full_string; 

我想把两个较小的阵列放在大的阵列中。 事情是这样的:

lcd_data <= lcd_oben & lcd_unten; 

但是,给出了错误:

Error (10327): VHDL error at seqdec.vhd(55): can't determine definition of operator ""&"" -- found 0 possible definitions 

有人能帮忙吗?

问候 阿德里安

回答

3

你已经把这些作为完全不相关的数组类型,所以你告诉编译器不在一起没有类型转换混合。

我不认为这真的是你想要做的。

制作这两种数组类型,无约束数组的子类型,如array(<>) of unsigned(7 downto 0)。然后它们不是完全独立的类型,应该为它们定义一个预定义的&运算符。

TYPE  LCD_string IS array (natural range <>) of unsigned (7 DOWNTO 0); 
SUBTYPE  character_string IS LCD_String (0 TO 15); 
SUBTYPE  full_string IS LCD_String (0 TO 31); 

(或者,您可以编写自己的&函数执行必要的转换,IMO这将是设计不良)。

+0

使用子类型声明可能没有优势。对象声明(信号lcd_oben,lcd_unten:* LCD_string(0到15)*;')提供子类型指示,“子类型指示定义类型标记的基类型的子类型”。 (IEEE标准1076-2008 6.3子类型声明,第4段)。使用命名的子类型作为接口对象中的类型标记(例如函数头)可以要求这些相同的准确类型转换,而Brian表明您可以依赖基类型的操作。是否有只应在子类型上执行的操作? – user1155120