Перейти к содержанию
    

Операция сдвига

Операция сдвига влево заявлена так

function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED;

Делаю так

signal set_rx_stat    : std_logic := '0';
shared variable mailbox_idx : integer range 0 to 255 := 0;

variable set_bits : std_logic_vector(31 downto 0) := X"00000000";

set_bits :=   std_logic_vector ( shift_left ( to_unsigned(set_rx_stat,1), mailbox_idx ) );

Получаю ошибку

Quote

Error (10476): VHDL error at reg_file.vhd(1178): type of identifier "set_rx_stat" does not agree with its usage as "natural" type

Почему? Я вроде привел все типы к требуемым.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, jenya7 сказал:

Операция сдвига влево заявлена так

А функция to_unsigned?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, andrew_b said:

А функция to_unsigned?

to_unsigned дает unsigned. я ей пользуюсь иногда.

Quote

function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED;

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 minutes ago, jenya7 said:

to_unsigned дает unsigned. я ей пользуюсь иногда.


function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED;

TO_UNSIGNED имеет ARG NATURAL, а в Вашем примере в TO_UNSIGNED в качестве аргумента используется   signal set_rx_stat, который не NATURAL.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, andrew_su said:

TO_UNSIGNED имеет ARG NATURAL, а в Вашем примере в TO_UNSIGNED в качестве аргумента используется   signal set_rx_stat, который не NATURAL.

а как мне std_logic привести к unsigned ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, jenya7 said:

а как мне std_logic привести к unsigned ?

Например объявить signal set_rx_stat : std_logic_vector(0 downto 0);

И применить для конвертации unsigned(set_rx_stat).

Разные примеры на https://www.nandland.com/vhdl/tips/tip-convert-numeric-std-logic-vector-to-integer.html#Arith-Std_Logic_Vector-To-Unsigned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 minutes ago, andrew_su said:

Например объявить signal set_rx_stat : std_logic_vector(0 downto 0);

И применить для конвертации unsigned(set_rx_stat).

Разные примеры на https://www.nandland.com/vhdl/tips/tip-convert-numeric-std-logic-vector-to-integer.html#Arith-Std_Logic_Vector-To-Unsigned

переделал

signal set_rx_stat    : std_logic_vector(0 downto 0) := (others => '0');

теперь на

set_bits := std_logic_vector ( shift_left ( unsigned(set_rx_stat), mailbox_idx ) );

получаю ошибку

Error (10344): VHDL expression error at reg_file.vhd(1179): expression has 1 elements, but must have 32 elements.

Что же возвращает shift_left ?

 

 

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, jenya7 сказал:

Что же возвращает shift_left ?

А самому посмотреть не? Код открыт.

shift_left возвращает вектор того же типа и той же длины, что и аргумент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, andrew_b said:

А самому посмотреть не? Код открыт.

shift_left возвращает вектор того же типа и той же длины, что и аргумент.

 понял. спасибо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...