реклама на сайте
подробности

 
 
> Знатоки VHDL просвятите
des00
сообщение May 13 2005, 04:14
Сообщение #1


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Как в нем делаеться репликация ?
Раньше я писал на верилоге, теперь вот сел за ВХДЛ,
например нужно доопределить знаковый разряд-> Пример:
sum[15:0] <= {5{a(10)}, a[10:0]} + {b[14],b[14:0]};
а как сделать это на ВХДЛ ?
sum(15 downto 0) <= (others => a(a'high)) & a(10 downto 0) + b(b'high) & b(14 downto 0);
не прокатывает, а возможности репликации в ВХДЛ я не нашел. Не расписывать же нужное кол-во бит руками ? sad.gif(
И еще есть ли в ВХДЛ такой аналог верилога как
reg[15:0] <= reg[15:0] ^ {16{reg[15]}};
если делаю
reg <= reg xor (others => reg(reg'high));
говорит про ошибку, но если вести доп.переменную то нормально есть:
temp = (others => reg(reg'high));
reg <= reg xor temp;
???
ЗЫ сильно не пинайте если в что, я только учюсь


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
andrew_b
сообщение May 13 2005, 05:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(des00 @ May 13 2005, 08:14)
Как в нем делаеться репликация ?
Раньше я писал на верилоге, теперь вот сел за ВХДЛ,
например нужно доопределить знаковый разряд-> Пример:
sum[15:0] <= {5{a(10)}, a[10:0]} + {b[14],b[14:0]};
а как сделать это на ВХДЛ ?
sum(15 downto 0) <= (others => a(a'high)) & a(10 downto 0) + b(b'high) & b(14 downto 0);
не прокатывает, а возможности репликации в ВХДЛ я не нашел. Не расписывать же нужное кол-во бит руками ? sad.gif(

Для знакового и беззнакового расширений std_logic_vector есть функции sxt и ext в пакете std_logic_misc.
Для типов signed и unsigned --- фунция resize в пакете numeric_std.

Цитата
И еще есть ли в ВХДЛ такой аналог верилога как
reg[15:0] <= reg[15:0] ^ {16{reg[15]}};
если делаю
reg <= reg xor (others => reg(reg'high));
говорит про ошибку, но если вести доп.переменную то нормально есть:
temp = (others => reg(reg'high));
reg <= reg xor temp;
???
ЗЫ сильно не пинайте если в что, я только учюсь

Просто так, по-моему, нельзя. Можно через generate
Код
genXor:
for i in 15 downto 0 generate
    reg0(i) <= reg1(i) xor reg1(15);
end generate;

или в цикле, если внутри процесса.

Либо можно перегрузить функцию xor:
Код
function "xor" (l : std_logic_vector, r : std_logic) return std_logic_vector is
variable ret : std_logic_vector(l'renge);
begin
       for i in l'range loop
            ret(i) := l(i) xor r;
       end loop;
       return ret;
end;

поместить ее в пакет, и по мере необходимости его использовать. Аналогично можно перегрузить функции and и or.
Таким образом можно сделать пакет с полезными функциями, который время от времени будет пополняться новыми.
Go to the top of the page
 
+Quote Post
des00
сообщение May 13 2005, 05:36
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Спасибо за помошь. Насчет ксора все понятно, но насчет функций в либах есть еще вопросы:

Цитата
Для знакового и беззнакового расширений std_logic_vector есть функции sxt и ext в пакете std_logic_misc.
Для типов signed и unsigned --- фунция resize в пакете numeric_std.

resize в numeric std нашел, а вот sxt ext в std_logic_misc в АктивХДЛе нет. Может быть не та либа ?

И еще у меня есть впрос, где можно посмотреть информацию о функциях библиотех IEEE, хотя бы входные и выходные операнды. В стандарте на ВХДЛ я не нашел, в альдеке эту информацию он не предоставляет, говорит что либы закрыты обратитесь в иеее, а с самого сайта иеее скачивать не дает, регистрированться и денешку платить нужно.
Может быть есть пфвка где описанны функции библиотек и их операнды ?


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение May 13 2005, 05:59
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



sxt ext в std_logic_arith. smile.gif)


--------------------
Go to the top of the page
 
+Quote Post
andrew_b
сообщение May 13 2005, 06:06
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(des00 @ May 13 2005, 09:36)
sxt ext в std_logic_misc в АктивХДЛе нет. Может быть не та либа ?

Да, наврал... std_logic_arith.

Цитата
И еще у меня есть впрос, где можно посмотреть информацию о функциях библиотех IEEE, хотя бы входные и выходные операнды. В стандарте на ВХДЛ я не нашел, в альдеке эту информацию он не предоставляет, говорит что либы закрыты обратитесь в иеее, а с самого сайта иеее скачивать не дает, регистрированться и денешку платить нужно.
Может быть есть пфвка где описанны функции библиотек и их операнды ?

Например, http://tams-www.informatik.uni-hamburg.de/vhdl
Go to the top of the page
 
+Quote Post
des00
сообщение May 13 2005, 06:12
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(andrew_b @ May 13 2005, 01:06)

Спасибо большое


--------------------
Go to the top of the page
 
+Quote Post
andrew_b
сообщение May 16 2005, 05:34
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(des00 @ May 13 2005, 08:14)
И еще есть ли в ВХДЛ такой аналог верилога как
reg[15:0] <= reg[15:0] ^ {16{reg[15]}};

Вот что еще пришло в голову:

reg(15 downto 0) <= reg(15 downto 0) xor sxt(reg(15) & reg(15), 16);

или даже так:

reg(15 downto 0) <= reg(15 downto 0) xor sxt(reg(15 downto 15), 16);
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 05:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016