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

 
 
> Про ПЛИС и VHDL, Некоторые вопосы
Грендайзер
сообщение Jul 12 2011, 10:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



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

entity DIVIDER is
port (CLK_IN : in Std_logic;
RESET : in Std_logic;
SPD :in Integer;
CLK_OUT :out Std_logic);
end;

wacko.gif

Сначала подумал, что какая то ошибка, но потом проверил вбив подобную строчку в ксилинксовский ISE и... он это дело захавал twak.gif
Никак не могу понять, как порт цифровой микросхемы, может иметь значение отличное от битового? Что это значит то? Как трактовать, что нога у плисины это integer? cranky.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
andrew_b
сообщение Jul 12 2011, 10:56
Сообщение #2


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

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



Очевидно, это несколько бит. Скорее всего 32.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 12 2011, 11:04
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



хххмммм... только что посмотрел прект в "схемоте", который получился из данного кода... и Вы правы.. именно 32 бита... но почему вы решили что должно быть именно 32 а не 173,47 к примеру=)))?
Go to the top of the page
 
+Quote Post
SFx
сообщение Jul 12 2011, 19:51
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



в стандарте vhdl написано что все integer должны быть 32 разряда.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 13 2011, 04:27
Сообщение #5


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

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



Цитата(SFx @ Jul 12 2011, 23:51) *
в стандарте vhdl написано что все integer должны быть 32 разряда.


Это не совсем так. Стандарт гарантирует ширину integer не менее 32 разрядов. Можно больше, это на усмотрение производителей софта. Но я думаю, что производители этим не заморачиваются и делают гарантированный минимум.

Под рукой только IEEE Std 1076™-2002. Пункт 3.1.2.1 Predefined integer types
Цитата
The range of INTEGER is implementation dependent, but it is guaranteed to include the range –2147483647 to +2147483647. It is defined with an ascending range.


Если в коде явно указан диапазон, например
Код
signal cnt : integer range 0 to 7;

то разрядность будет минимальной для того, чтобы обеспечить заданный диапазон. В данном случае 3 бита.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 26 2011, 11:38
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Спасибо. Теперь всё встало на свои места... однако, этот кодик я нашёл не просто так. Хочу реализовать на ПЛИС некоторую операцию, которая содержит операцию деления чисел, а операнды в ней могут быть дробными числами. Уже несколько недель голову ломаю, весь интернет облазил, но ничего дельного так и не нашёл. Может кто нить объяснит, как оперировать с дробными числами. Нарвался на одну статейку, в которой предлагается использовать ксилинксовский корген, который генерит некоторое ядро, которое в свою очередь чё то там делает... но это как то всё мутно... так ничё и не понял...
Go to the top of the page
 
+Quote Post
ivanoffer
сообщение Jul 26 2011, 12:09
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 21-07-11
Пользователь №: 66 348



Чтобы что-то сделать, надо понимать что делаешь, а так можно и несколько месяцев и лет прогуглить, хотя может вы получаете удовольствие
от самого процесса поиска. Ну нашли вы тип integer, разобрались, теперь тип float искать будете? Именно для вас Xilinx и сделал IP. А "чё то там делает..." это уже больше к вам. Читайте описание на IP, думаю, что это сократит время на ваши "научные поиски истины".
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 27 2011, 10:54
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



а если бы Xilinx это IP не сделал? Или по тем или иным причинам меня бы не удовлетворяла его работа (в одной статье кстати прочёл, что именно в одном из ксилинксовских ядер, работающих с плавающей запятой, существует некоторый косяк. Не проверял не знаю, но знаю, что помимо бесплатного ядра, Xilinx распространяет ещё и платное (как думаете, с каким типом данных оно работает?), отсюда вопрос: шо за дела?). И вообще, я ж не предлагаю лезть в саму микросхему и разбирать её по костачкам... но подход, мол всё уже до нас украдено, а что там да как так трава не расти, то же неправильный!!! angry.gif И ещё, извините конечно, без обид, просто уже не первый раз сталкиваюсь с этим... я задал конкретный вопрос... хочу услышать конкретный ответ... а если хочется мысли на кулаки понаворачивать... так это вам к философам... им деньги платят за то, что б они ничё не делали... у них профессия такая... laughing.gif
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Jul 27 2011, 12:37
Сообщение #9


Участник
*

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180



Цитата(Грендайзер @ Jul 26 2011, 15:38) *
Хочу реализовать на ПЛИС некоторую операцию, которая содержит операцию деления чисел, а операнды в ней могут быть дробными числами.

Дробные числа представляются в формате:
- с фиксированной точкой (fixed-point);
- с плавающей точкой (float-point).
У вас что? Какая разрядность? и т.д. ...
Сформулировать точнее можете?

Цитата(Грендайзер @ Jul 26 2011, 15:38) *
Уже несколько недель голову ломаю, весь интернет облазил, но ничего дельного так и не нашёл. Может кто нить объяснит, как оперировать с дробными числами.

Fixed-point arithmetic
Float-point arithmetic
Книги по цифровой электронике.

Насчет integer. Т.е., например, std_logic_vector (105 downto 23) - у Вас вопросов не вызывает? Назначение в VHDL типа с плавающей точкой (REAL), физических типов (TIME) для Вас очевидно? Если да, то чего нервничаете так?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 28 2011, 06:20
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



С плавающей или с фиксированной запятой, значения не имеет... В случае оперирования десятичными числами, округления до 4-ого знака, будит вполне достаточно.
Цитата
Насчет integer. Т.е., например, std_logic_vector (105 downto 23) - у Вас вопросов не вызывает? Назначение в VHDL типа с плавающей точкой (REAL), физических типов (TIME) для Вас очевидно? Если да, то чего нервничаете так?

Не допонял, что Вы имеете в виду? Причём тут real или time? Их же синтезировать всёрано не выйдет...
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Jul 28 2011, 08:23
Сообщение #11


Участник
*

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180



Цитата(Грендайзер @ Jul 28 2011, 10:20) *
С плавающей или с фиксированной запятой, значения не имеет...

Имеет. Надо выбрать.
Цитата(Грендайзер @ Jul 28 2011, 10:20) *
В случае оперирования десятичными числами, округления до 4-ого знака, будит вполне достаточно.

Что значит "оперирования десятичными числами"? Делитель для BCD-кодов? Выражайтесь точнее.

Цитата(Грендайзер @ Jul 28 2011, 10:20) *
Не допонял, что Вы имеете в виду? Причём тут real или time? Их же синтезировать всёрано не выйдет...

То, что VHDL не только для синтеза используют. На нем еще тест-бенчи пишут. И тот вышеуказанный Вами делитель с "буржуйского сайта" (ссылку привели бы что-ли...) возможно и не для синтеза был написан (хотя и синтезируется).
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 28 2011, 08:51
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
То, что VHDL не только для синтеза используют. На нем еще тест-бенчи пишут. И тот вышеуказанный Вами делитель с "буржуйского сайта" (ссылку привели бы что-ли...) возможно и не для синтеза был написан (хотя и синтезируется).

Да, спасибо, это я ещё тогда осознал, когда попытался в ISE эту штуку откомпелировать... естественно компелятор меня матом покрыл, а вот отмоделировалось всё чётко rolleyes.gif .
Цитата
Что значит "оперирования десятичными числами"? Делитель для BCD-кодов? Выражайтесь точнее.

Честно говоря я сейчас, вообще ничё не понял, что Вы такое сказали... ну да Бог с ним... меня уже долго мучает вот такой вопрос... как к примеру 5 поделить скажем на 2 и найти хотя бы неполное частное или остаток? Конечно, я могу воспользоваться функцией mod или скажем поделить напрямую, т. е. 5/2 = 2, но! что если мне надо, что бы операнды были переменными? Вот тут меня компелятор шлёт по известному адресу crying.gif Конечно, я могу вычитать из пяти двойку, и каждый раз проверять не стала ли разность меньше делителя (т. е. 2), и всё пучком... два такта и готово rolleyes.gif Однако... если бы у меня не 5 было, а скажем 57 или 535 или 5896743489 эт сколько мне тахтов то убивать на это дело? maniac.gif Немогли бы Вы на мысль натолкнуть так сказать... А потом уже возможно я с плавающими и фиксированными запятыми сам докумекаю...

Сообщение отредактировал Грендайзер - Jul 28 2011, 08:55
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Jul 28 2011, 09:24
Сообщение #13


Участник
*

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180



Цитата(Грендайзер @ Jul 28 2011, 12:51) *
как к примеру 5 поделить скажем на 2 и найти хотя бы неполное частное или остаток?

Это частный случай, и он очень простой.
Деление на степень двойки (2, 4, 8, 16, 32 ...) - это двиг влево на число разрядов, равное степени двойки.
Пример 1. 510 (число пять в десятичной форме) пишем в двоичном виде (для примера в четырех разрядном) - 0101.
5 / 2 = 0101 >> 1 = 0010 = 210
5 / 4 = 0101 >> 2 = 0001 = 110
и т.д. (кое-какие детали есть при делении чисел со знаком).
Это целочисленное деление с отбрасыванием остатка.

Теперь вариант с фиксированной точкой. Например, будет 4 разряда для целой части и 2 - для дробной:
5 / 2 = 0101.00 >> 1 = 0010.10 = 2.510
5 / 4 = 0101.00 >> 2 = 0001.01 = 1.2510

Вам бы книжни по этой теме почитать, яснее будет.

Цитата(Грендайзер @ Jul 28 2011, 12:51) *
Конечно, я могу воспользоваться функцией mod или скажем поделить напрямую, т. е. 5/2 = 2

Даже не знаю... Как у Вас обстоит дело со сложением/вычитанием на ПЛИС? Последовательный сумматор могём? sm.gif
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Jul 28 2011, 09:40
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



мммм... последовательный сумматор... я честно говоря в этой терминологии не силён... но уверен, что в какой то книжке (помоиму в буржуйской) видел что то в этом духе... токо там фраза была, мне её гугл перевёл как "конвейерный сумматор", это не одно и то же?
Я накачал несколько книжек по этому делу, но чё то какие то они "отвлечённые", может посоветуете что нибудь?
И ещё последний вопросик, если можно rolleyes.gif ... А как быть, если скажем делитель это не двойка и даже не степень двойки, а скажем 3 или что то в этом духе?

Сообщение отредактировал Грендайзер - Jul 28 2011, 09:43
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Jul 28 2011, 11:36
Сообщение #15


Участник
*

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180



Угрюмов "Цифровая схемотехника", например. И т.п.

1) Берем готовый делитель для целых - модуль с входами и выходами. Находим нужной разрядности. Надо с остатком - ищем с остатком. Надо со знаком... и т.д. CoreGen Вам уже советовали. А баги... Баги у всех есть. И у Вас будут. Были баги - и нету багов. Мелочи... Почитаете даташит на ксайлиновский делитель, сконфигурируете как хочется (что такое divident, quotient, divisor и др. - разберетесь).
2) Пользуемся структурным описанием. Подаем на входы операнды, снимаем результат... Голая цифровая схемотехника, без всяких синтаксических vhdl изъёбов.
3) Теперь имеем делитель, например, двух 16-разрядных операндов (целых) с 16-разрядным результатом. Как поделить им дробные?
Суть в использовании фиксированной точки, правильном представлении входных данных, правильной интерпретации выходных данных.


Пример для делителя двух 16-бит беззнаковых.

Можно делить целые числа.
2310 = 00000000_00010111
4710 = 00000000_00101111

На входы делителя подаем:
00000000_00010111
00000000_00101111
На выходе имеем
00000000_00000010, т.е. 210 (и остаток, если делитель его выдает)

47 / 23 = 2

Можно дробные...

Вариант 1:
2310 = 00000001_0111.0000 (12 бит - целая часть, 4 - дробная)
4710 = 00000010_1111.0000 (12 бит - целая часть, 4 - дробная)
На входы делителя подаем:
00000001_01110000 (делитель)
00000010_11110000 (делимое)
На выходе имеем (частное):
00000000_00000010
Поскольку у делимого и у делителя по 4 разряда на дробную часть,
то 4 - 4 = 0. Т.е. у результата точка справа от нулевого разряда.
Значит результат интерпретируется так:
00000000_00000010. = 210

Вариант 2:
2310 = 00000000_00010111 (16 бит - целая часть)
4710 = 00000010_1111.0000 (12 бит - целая часть, 4 - дробная)
На входы делителя подаем:
00000000_00010111 (делитель)
00000010_11110000 (делимое)
На выходе имеем:
00000000_00100000 (плохой пример sm.gif, ну да ладно.)
У делимого на дробную часть отведено 4 разряда, у делителя - 0.
Значит 4 - 0 = 4 - столько разрядов будет отведено у частного (результат) на дробную часть.
Значит результат интерпретируется так:
00000000_0010.0000 = 210

Еще раз вариант 2 ( с другими операндами - 16 и 5 sm.gif ):
0510 = 00000000_00000101 (16 бит - целая часть)
1610 = 00000001_0000.0000 (12 бит - целая часть, 4 - дробная)
На входы делителя подаем:
00000000_00000101 (делитель)
00000001_00000000 (делимое)
На выходе имеем:
00000000_00110011
У делимого на дробную часть отведено 4 разряда, у делителя - 0.
Значит 4 - 0 = 4 - столько разрядов будет отведено у частного (результат) на дробную часть.
Значит результат интерпретируется так:
00000000_0011.0011 = 3.187510

Ясна идея?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:14
Рейтинг@Mail.ru


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