nightkostik 0 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба задача: счётчик с переводом значений из integer в 10-битный std_logic_vector (binary) не могу откомпелировать: process(CLK,RESET) variable QOUT_tmp : tmp; variable add : tmp; begin if(RESET = '1') then QOUT_tmp := 0; elsif(CLK'event and CLK = '1') then QOUT_tmp := QOUT_tmp + 1; end if; address_ind <= std_logic_vector(to_unsigned(QOUT_tmp, 10)); end process; выдаёт ошибку: to_unsigned can not have such operands in this context. из за чего это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба задача: счётчик с переводом значений из integer в 10-битный std_logic_vector (binary) Попробуй так: --The following library will need to be declared for this function: --library IEEE; --use IEEE.std_logic_arith.all; <slv_sig> = CONV_STD_LOGIC_VECTOR(<int_sig>, <integer_size>); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба Что такое тип tmp? Он должен быть подтипом natural, а не integer. Попробуй так address_ind <= std_logic_vector(QOUT_tmp, 10); Вы сами поняли, что написали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nightkostik 0 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба Что такое тип tmp? Он должен быть подтипом natural, а не integer. Вы сами поняли, что написали? наверное Bы правы, я по-поводу типа не заморачивался, тк до попытки конвертировать в binary всё работало, мне надо 10-bit binary на выходе. не подскажите как это сделать в моём случае? Попробуй так: --The following library will need to be declared for this function: --library IEEE; --use IEEE.std_logic_arith.all; <slv_sig> = CONV_STD_LOGIC_VECTOR(<int_sig>, <integer_size>); Да, знаю такую, но говорят что это хреновая не стандартная функция, не рекомендованная к употреблению... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба наверное Bы правы, я по-поводу типа не заморачивался, тк до попытки конвертировать в binary всё работало, мне надо 10-bit binary на выходе. не подскажите как это сделать в моём случае? Да, знаю такую, но говорят что это хреновая не стандартная функция, не рекомендованная к употреблению... Может быть просто описать счетчик и все. Пример 8 разрядного приведен ниже --Счетчик N разрядный --Описание портов: --clk − вход тактовой частоты; --en − одноразрядный вход разрешения; --rst − одноразрядный вход сброса счетчика; --count – 8 разрядный выход. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity counter is Port ( clk : in std_logic; en : in std_logic; rst : in std_logic; count : out std_logic_vector(7 downto 0)); end counter; architecture behavioral of counter is signal cnt: std_logic_vector (7 downto 0):= "00000000"; begin process (clk, en, cnt, rst) begin if (rst = '0') then cnt <= (others => '0'); elsif (clk'event and clk = '1') then if (en = '1') then cnt <= cnt + "00000001"; end if; end if; count <= cnt; end process; end behavioral; Почему "это хреновая не стандартная функция, не рекомендованная к употреблению...", поясните пожалуйста? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба наверное Bы правы, я по-поводу типа не заморачивался, Это плохо. VHDL -- язык со строгой типизацией. Это надо всегда учитывать. тк до попытки конвертировать в binary всё работало, мне надо 10-bit binary на выходе. не подскажите как это сделать в моём случае? Что такое тип tmp? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nightkostik 0 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба Может быть просто описать счетчик и все. Пример 8 разрядного приведен ниже ... Spasibo, I'll try. Что такое тип tmp? type tmp is range 0 to 1023; Почему "это хреновая не стандартная функция, не рекомендованная к употреблению...", поясните пожалуйста? "conv_std_logic_vector is a conversion function from a non-standard-package and is NOT recommended to use!" - here, for examp, и ещё на нескольких форумах видел! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба type tmp is range 0 to 1023; Правильно было бы subtype tmp is natural range 0 to 1023; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nightkostik 0 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба Правильно было бы subtype tmp is natural range 0 to 1023; :a14: Работает - а вы крутой! ) поясните в 2х словах, если не лень конечно!? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба поясните в 2х словах, если не лень конечно!? Всё элементарно. Смотрим или в доку, где описаны стандартные пакеты, или прямо в исходник пакета numeric_std. И видим, что сигнатура функции to_unsigned имеет вид: function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED Т. е. конвертируемое число должно быть или типа natural, или производного от него (subtype). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nightkostik 0 26 августа, 2008 Опубликовано 26 августа, 2008 · Жалоба Thanx! :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться