如果我在下面定义了类似的数组...
type A_type is array (0 to 9) of integer;
signal my_array : A_type := (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
如果稍后再下一行,我想转换为代表相同数字的带符号数字列表。 有没有一种方法可以完成类型转换而不必进行for循环?
答案 0 :(得分:3)
不。您将需要一个mainFrame.getContentPane().setLayout(new GridLayout(3, 1));
循环或十个单独的语句。最好的方法是编写自己的转换函数,但我想您真的想知道转换是否可以“一次性完成”。
在VHDL中有两种转换类型的方法。第一个是类型转换:
for
(或变量,obvs)。仅当my_new_type_signal <= my_new_type(my_old_type_signal);
和my_new_type
是密切相关的类型时,此方法才有效。例如,my_old_type
和integer
和real
和std_logic_vector
密切相关,但是您的两个不会。
第二种方法是编写一个转换函数。标准类型(来自signed
和standard
包)已经编写了函数。您的不是标准类型,因此您必须编写自己的类型。
答案 1 :(得分:0)
如果稍后将该行转换为代表相同数字的带符号数字的列表。有没有一种方法可以完成类型转换而不必进行for循环?
是的
library ieee;
use ieee.numeric_std.all;
entity no_mce_provided is
end entity;
architecture foo of no_mce_provided is
type A_type is array (0 to 9) of integer;
signal my_array : A_type := (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
type S_type is array (my_array'range) of signed(31 downto 0);
signal a,b,c,d,e,f,g,h,i,j: signed(31 downto 0);
begin
(a,b,c,d,e,f,g,h,i,j) <= S_type'(to_signed(my_array(0), 32),
to_signed(my_array(1), 32),
to_signed(my_array(2), 32),
to_signed(my_array(3), 32),
to_signed(my_array(4), 32),
to_signed(my_array(5), 32),
to_signed(my_array(6), 32),
to_signed(my_array(7), 32),
to_signed(my_array(8), 32),
to_signed(my_array(9), 32)
);
end architecture;
使用聚合形式的复合类型的右侧表达式,此处是限定表达式的目标,提供聚合类型。请注意,分配的目标也是一个组合,类型是根据上下文(右侧)确定的。
尽管马修·泰勒(Matthew Taylor)另有主张,该示例仍进行了分析,阐述和模拟。 (我怀疑您可能想让您的问题比是/否问题更具体。)