roboforum.ru

Технический форум по робототехнике.

blindman - [Как возвести 2 в степень n?]

Правила форума
В данном разделе каждый может иметь не более одной темы. Тема должна начинаться с логина (ника) робофорума.

Re: blindman - [ПЛИС - с чего начать?]

Michael_K » 09 янв 2012, 01:09

пооффтоплю - раньше во времена железяк типа 16v8 не умели делать на одном кристалле и ЕЕПРОМ, и логику (достаточно плотную), и раму, и силовуху. Тогда различие между PLD и FPGA действительно было заметно. Первые были набором И-ИЛИ элементов с прожигаемыми связями (то есть на них нельзя было сделать триггер без танцев с бубнами), а вторые - основывались на встроенной памяти (и там уже были триггеры). Сейчас технологические ограничения сильно подвинулись, CPLD типа заняло промежуточную нишу, а с точки зрения пользователя совершенно по барабану, как оно там внутре устроено.

Кроме того, там по-моему, чисто маркетинговые названия всплывали частенько...

Re: blindman - [ПЛИС - с чего начать?]

Dmitry__ » 09 янв 2012, 02:15

Как это в 16v8 нет триггеров? :shock:
Там элемент построен на основе триггера, а чтоб его отключить надо использовать режим "Combinatorial Configuration for Registered Mode"

Добавлено спустя 2 минуты 26 секунд:
да и фпга плохо подходят для триггеров :) не для этого они...
в общем все переврал :)

Re: blindman - [ПЛИС - с чего начать?]

Michael_K » 09 янв 2012, 02:21

Да, уже есть, просто более древних не вспомнил :) Гуглить влом - если не лень, флаг в руки %)

Re: blindman - [ПЛИС - с чего начать?]

Dmitry__ » 09 янв 2012, 02:43

PLA
1970, Texas Instruments
TMS2000 had up to 17 inputs and 18 outputs with 8 JK flip flop for memory
куда старее? :wink:

без триггеров только одно упоминание нагуглилось:
Early programmable logic
In 1969, Motorola offered the XC157, a mask-programmed gate array with 12 gates and 30 uncommitted input/output pins. :D

т.е. PLD без триггеров не было...

Re: blindman - [ПЛИС - с чего начать?]

Michael_K » 09 янв 2012, 04:41

да... ну и ладно... Но суть не меняется. :)

Re: blindman - [ПЛИС - с чего начать?]

Dmitry__ » 09 янв 2012, 05:05

это ой как меняет суть :D
теперь есть смысл искать различия между PLD и FPGA :wink:

Re: blindman - [ПЛИС - с чего начать?]

Michael_K » 09 янв 2012, 13:08

Вот вы бы, вместо препирательств, по сути бы и написали - в чем же, по-вашему, кардинальное отличие между PLD и FPGA!

Re: blindman - [ПЛИС - с чего начать?]

Dmitry__ » 09 янв 2012, 15:29

может лучше устроить визг? типа:
Michael_K писал(а):Лично я считаю, что откровенно неверные построения нужно с форума удалять, хотя бы потому, что не всякий школьник способен отличить вранье от правды. Кроме того, на этом форуме запрещена публикация заведомо неверной информации.

Шутка :)

И тут так часто всех посылают гуглить, а сами не могут набрать "FPGA vs CPLD"
http://www.fpgarelated.com/usenet/fpga/show/11740-1.php

Re: blindman - [ПЛИС - с чего начать?]

Michael_K » 10 янв 2012, 00:18

Ну и внятных ответов там нет. Я продолжаю считать, что с точки зрения пользователя - один фиг. Возможно когда-то бывшее различие давно ушло в область маркетинговых лозунгов.

Наиболее внятное "объяснение" такое:

The main difference is that CPLDs are mainly focused on
Input->(fast)Logic->Register->Output
while Fpgas are typically slower for CPLD tasks, but have more
configuration possibillities and support more complex logic
structures.
A typical CPLD design would have fast but simple operations while a
fpga has complex operations based on many internal registers.


Как вы сами понимаете, границы между "сложными" и "простыми" проектами - очень-очень размыты. Можно конечно указать крайности - быстрый счетчик или дешифратор - это CPLD, а MPEG-декодер - FPGA, но между ними еще много-много других "промежуточных" приложений.

Re: blindman - [ПЛИС - с чего начать?]

Dmitry__ » 10 янв 2012, 04:12

Прикалываешься??? :shock:

Re: blindman - [Как возвести 2 в степень n?]

blindman » 11 янв 2012, 04:45

http://code.google.com/p/ht1632c/source ... t1632c.cpp

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

Re: blindman - [Как возвести 2 в степень n?]

=DeaD= » 11 янв 2012, 07:47

Массив? :)

Добавлено спустя 2 минуты 32 секунды:
Ну или если равновероятны степени, то среднее время можно "в лоб" сократить так:

word inline pow2(byte exp)
{
word result = 1;
if(exp>7){ result = 128; exp-=7; };
while(exp--)
result *= 2;

return result;
}

:)

Re: blindman - [Как возвести 2 в степень n?]

Strijar » 11 янв 2012, 08:07

Я чего то не понял. А разве это просто сдвигом нельзя сделать? 2^n == 1<<n

Re: blindman - [Как возвести 2 в степень n?]

=DeaD= » 11 янв 2012, 08:26

Если есть такая операция, а то компилятор может её превратить в примерно такой же код, только вместо result*=2 напишет внутри result = result << 1.

Re: blindman - [Как возвести 2 в степень n?]

blindman » 11 янв 2012, 08:49

Причем это будут фактически 2 операции - контроллер 8-битный. И avr-gcc скомпилирует и умножение на 2, и сдвиг влево на 1 разряд как сложение числа с самим собой

Добавлено спустя 4 минуты 59 секунд:
=DeaD= писал(а):то компилятор может её превратить в примерно такой же код, только вместо result*=2 напишет внутри result = result << 1.


Фактически при замене всей pow2() на return 1 << exp; генерируется тот же самый код, что и с умножением в цикле


Rambler\'s Top100 Mail.ru counter