Преобразование типов массива целых чисел в подписанные - PullRequest
0 голосов
/ 12 февраля 2019

Если у меня есть массив, как определено ниже ...

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?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Если позже в строке, я хочу преобразовать в список чисел со знаком, представляющих те же номера.Есть ли способ, которым я могу завершить преобразование типа без необходимости делать цикл 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;

Использование выражения в правой частисоставной тип в форме агрегата, здесь цель квалифицированного выражения, предоставляющего тип агрегата.Обратите внимание, что цель назначения также составная, тип определяется из контекста (правая сторона).

Этот пример анализирует, разрабатывает и моделирует, несмотря на утверждение Мэтью Тейлора в противном случае.(Я подозреваю, что вы могли бы сделать свой вопрос немного более конкретным, чем вопрос да / нет.)

0 голосов
/ 12 февраля 2019

Нет.Вам понадобится либо цикл for, либо десять отдельных операторов.Лучшим способом было бы написать свою собственную функцию преобразования , но я думаю, что вы действительно хотели знать, можно ли выполнить преобразование, так сказать, "за один раз".

ТамЕсть два способа преобразования типов в VHDL.Первым является преобразование типа :

my_new_type_signal <= my_new_type(my_old_type_signal);

(или переменная, obvs).Это работает, только если my_new_type и my_old_type являются тесно связанными типами .Например, integer и real тесно связаны, как и std_logic_vector и signed, но ваши два не будут.

Второй способ - написать функцию преобразования .Стандартные типы (из пакетов standard и numeric_std) уже написали функции.Ваши не стандартные типы, поэтому вам придется написать свой собственный.

...