类型转换整数数组到签名

问题描述 投票:0回答:2

如果我有一个类似下面定义的数组...

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循环?

vhdl fpga
2个回答
3
投票

不,你需要一个for循环或十个单独的声明。最好的方法是编写自己的转换函数,但我想你真的想知道转换是否可以“一气呵成”完成,可以这么说。

在VHDL中有两种转换类型的方法。第一种是类型转换:

my_new_type_signal <= my_new_type(my_old_type_signal);

(或变量,obvs)。这只有在my_new_typemy_old_type是密切相关的类型时才有效。例如,integerreal密切相关,std_logic_vectorsigned,但你的两个不会。

第二种方法是编写转换函数。标准类型(来自standardnumeric_std包)已经编写了函数。你的不是标准类型,所以你必须自己编写。


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;

使用聚合形式的复合类型的右侧表达式,这里是提供聚合类型的限定表达式的目标。请注意,赋值的目标也是复合,从上下文(右侧)确定的类型。

这个例子分析,阐述和模拟尽管马修泰勒的说法不然。 (我怀疑你可能想让你的问题比是/否问题更具体。)

© www.soinside.com 2019 - 2024. All rights reserved.