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

Проблемка

задача:

счётчик с переводом значений из 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.

 

из за чего это?

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


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

задача:

счётчик с переводом значений из 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>);

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


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

Что такое тип tmp? Он должен быть подтипом natural, а не integer.

 

 

Попробуй так

 

address_ind <= std_logic_vector(QOUT_tmp, 10);

Вы сами поняли, что написали?

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


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

Что такое тип 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>);

 

Да, знаю такую, но говорят что это хреновая не стандартная функция, не рекомендованная к употреблению...

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


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

наверное 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;

 

Почему "это хреновая не стандартная функция, не рекомендованная к употреблению...", поясните пожалуйста?

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


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

наверное Bы правы, я по-поводу типа не заморачивался,
Это плохо. VHDL -- язык со строгой типизацией. Это надо всегда учитывать.

 

тк до попытки конвертировать в binary всё работало, мне надо 10-bit binary на выходе. не подскажите как это сделать в моём случае?
Что такое тип tmp?

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


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

Может быть просто описать счетчик и все. Пример 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, и ещё на нескольких форумах видел!

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


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

Правильно было бы
subtype tmp is natural range 0 to 1023;

 

:a14:

Работает - а вы крутой! )

поясните в 2х словах, если не лень конечно!?

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


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

поясните в 2х словах, если не лень конечно!?
Всё элементарно. Смотрим или в доку, где описаны стандартные пакеты, или прямо в исходник пакета numeric_std. И видим, что сигнатура функции to_unsigned имеет вид:

function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED

Т. е. конвертируемое число должно быть или типа natural, или производного от него (subtype).

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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