jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба Операция сдвига влево заявлена так 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 Почему? Я вроде привел все типы к требуемым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 2 часа назад, jenya7 сказал: Операция сдвига влево заявлена так А функция to_unsigned? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 (изменено) · Жалоба 30 minutes ago, andrew_b said: А функция to_unsigned? to_unsigned дает unsigned. я ей пользуюсь иногда. Quote function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED; Изменено 24 марта, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 7 minutes ago, andrew_su said: TO_UNSIGNED имеет ARG NATURAL, а в Вашем примере в TO_UNSIGNED в качестве аргумента используется signal set_rx_stat, который не NATURAL. а как мне std_logic привести к unsigned ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 (изменено) · Жалоба 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 ? Изменено 24 марта, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 13 минут назад, jenya7 сказал: Что же возвращает shift_left ? А самому посмотреть не? Код открыт. shift_left возвращает вектор того же типа и той же длины, что и аргумент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 8 minutes ago, andrew_b said: А самому посмотреть не? Код открыт. shift_left возвращает вектор того же типа и той же длины, что и аргумент. понял. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться