конвертировать целое число в std_logic - PullRequest
5 голосов
/ 03 сентября 2011

Предположим, у вас есть цикл

for i in 1 downto 0 loop
    for j in 1 downto 0 loop
        tS0 <= i;

Но мне нужно преобразовать целое число (что естественно) в std_logic. tS0 объявляется как std_logic.Я делаю это только один бит (0 или 1).То есть мои i и j могут представлять только значение {0,1}.

Я думаю, что я иду к неправильному подходу здесь.Может кто-нибудь сказать мне, что я должен делать вместо этого?

Я не думаю, что у std_logic есть метод to_unsigned.я попытался разрешить tS0 быть вектором (от 1 до 0) и присвоить его как tS0 (0) <= i </strong> и т. д. Но это все равно не сработало.

Большое спасибо!

Ответы [ 5 ]

10 голосов
/ 05 сентября 2011

Нет необходимости конвертировать из целых чисел. Вы можете просто перебрать тип данных std_logic:

for i in std_logic range '0' to '1' loop
   ts0 <= i;
end loop;
6 голосов
/ 05 сентября 2011

Я бы написал функцию:

function to_std_logic(i : in integer) return std_logic is
begin
    if i = 0 then
        return '0';
    end if;
    return '1';
end function;

затем используйте:

ts0 <= to_std_logic(i);
5 голосов
/ 03 сентября 2011

Вам нужно будет использовать вектор, без знака или std_logic, но он может быть длиной в один бит.т.е.:

signal tS0 : unsigned (0 downto 0);
...
tS0 <= to_unsigned(i, tS0'length);

... или ...

signal tS0: std_logic_vector(0 downto 0);
...
tS0 <= std_logic_vector(to_unsigned(i,tS0'length);
2 голосов
/ 27 ноября 2013

Вы можете сделать это так.Это выглядит немного проще.

ts0 <= std_logic(to_unsigned(i, 1)(0));

Вы создадите вектор без знака, используя функцию to_unsigned.Затем вы берете младший бит и конвертируете его в std_logic, а затем назначаете его сигналу.

Вот как он работает отлично: -).

0 голосов
/ 19 ноября 2018

Улучшая предыдущий ответ, вы могли бы написать:

ts0 <= to_unsigned(i, 1)(0);

При условии, что вы включили библиотеку "numeric_std", в которой определена эта функция:

library IEEE;
use IEEE.numeric_std.all;

Вы можете пропуститьявное приведение к типу "std_logic", потому что тип возвращаемого значения "to_unsigned ()" является массивом самого "std_logic":

type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;
...