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

ПЛИС для вычислений с длинной арифметикой

Я не спец в электронике, вот например схема:

...

после такого сумматора первого уровня получаем два числа, которые затем складываем как в обычном сумматоре с итерациями и переносами...

На мой взгляд, все сумматоры расположенные выше побочной диагонали вообще не нужны.. ;)

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


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

Не, не то хотел спросить. Во имя чего такая задача решается в принципе? Дичь невиданная :)

Или нет возможности раскрыть конечное предназначение?

Почему дичь? например в RSA тоже используется длинная арифметика. У меня задача связана с другой темой, но также немного имеет отношение к криптографии.

Мне нужно быстрое АЛУ для длинных чисел, что тут дикого?) Микропроцессоры, на мой взгляд, в любом случае медленнее, чем быстрая логика

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


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

Всё, что мне нужно - это операция (2x+1), инкремент и сумма двух чисел.

Я уже сказал, операция 2x + 1 на логике в любом случае будет быстрее, так как это можно сделать за единицу времни. Т.е есть на входе схемы число X из 8000 бит, на выходе X*2+1, простая логическая схема.

Почему-то мне кажется что некорректно описано задание.

"X*2+1" - сиё означает умножение на 2 те сдвиг и пририсовывание бита 1.

Всё это реализуется "статическим сдвигом (т.е. реального сдвига нет)" и добавления вечной 1-цы.

Таким образом схема будет работать на максимальной скорости в 500МГц.

 

А на словах задание звучит как "А+Б+1".

Что Автору требуется ?

:wacko:

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


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

Мне нужно быстрое АЛУ для длинных чисел, что тут дикого?

Вы не сказали, что нужно делать с полученной суммой двух длинных чисел. Если это однократная операция, то вполне вероятно, что запись/чтение в/из ПЛИС как раз и будут определять скорость всего алгоритма в целом. Как вы собираетесь загружать в ПЛИС 8000-разрядные числа?

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


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

"X*2+1" - сиё означает умножение на 2 те сдвиг и пририсовывание бита 1.

Всё это реализуется "статическим сдвигом (т.е. реального сдвига нет)" и добавления вечной 1-цы.

Таким образом схема будет работать на максимальной скорости в 500МГц.

 

А на словах задание звучит как "А+Б+1".

Что Автору требуется ?

:wacko:

Именно! Нужна максимальная скорость - все операции, которые можно реализовать схемой вход->[схема]->выход (с нужным значением). Операций нужно несколько, я ж написал. (2х+1) - одна операция. А+Б - другая операция. Сравнение с 0 - третья операция, которая тоже решается логической схемой.

 

Мне требуется только грамотный совет) Какой девайс выбрать чтобы все это пробовать? Т.е чтобы хватило логических элементов, чтобы была максимальная скорость. Девайсы недешевые, не хотелось бы потратить деньги и понять, что полностью реализовать не получится потому что мало элементов, или другие ограничения.

 

Как вы собираетесь загружать в ПЛИС 8000-разрядные числа?

Я думаю последовательно. Т.е если будут например 4 регистра по 8000 бит, то 2 внешних пина на выбор регистра, один пин для data, один на синхронизацию. Еще раз говорю, я не спец в электронике. Максимум, что я делал - это RPi и на уровне "помигать светодиодом". Вот хочу освоить ПЛИС, спрашиваю у людей с опытом совета.

 

 

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


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

Мне требуется только грамотный совет. Какой девайс выбрать чтобы все это пробовать? Т.е чтобы хватило логических элементов, чтобы была максимальная скорость.

Выбирайте Stratix 10. Его скорости вам точно хватит.. :biggrin:

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


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

Выбирайте Stratix 10. Его скорости вам точно хватит.. :biggrin:

 

Или Xilinx Kintex-7, Virtex-7 и более новые Ultrascale. Я бы взял что-то из середины семейства примерно на 400...500 тыс. триггеров. Потому что больше не потянет система охлаждения и питания отладочной платы.

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


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

Или Xilinx Kintex-7, Virtex-7 и более новые Ultrascale. Я бы взял что-то из середины семейства примерно на 400...500 тыс. триггеров. Потому что больше не потянет система охлаждения и питания отладочной платы.

Да всё потянет! Не болтайте ерундой!!! DK-U1-VCU1525-A-G.....

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


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

Да всё потянет! Не болтайте ерундой!!! DK-U1-VCU1525-A-G.....

 

Кстати, да, это тоже вариант для больших чисел.. Да что там, для любых чисел! Ток по VCCINT под 80А, если я правильно понял, и активное охлаждение. Надо брать.

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


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

И все-таки по поводу девайса, посмотрите на решения серверные, отработайте там - https://aws.amazon.com/ru/ec2/instance-types/f1/

Это сэкономит деньги, ибо если не понравится плис, то уйдете на что-то другое, заплатив пару баксов за час.

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


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

Вот хочу освоить ПЛИС, спрашиваю у людей с опытом совета.

 

Отличная задача для освоения ПЛИС )

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


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

Приветствую.

Именно! Нужна максимальная скорость - все операции, которые можно реализовать схемой вход->[схема]->выход (с нужным значением). Операций нужно несколько, я ж написал. (2х+1) - одна операция. А+Б - другая операция. Сравнение с 0 - третья операция, которая тоже решается логической схемой.

Было бы интересно увидеть алгоритм вычисления.

А так я уже выше писал по грубой прикидке для 8K бит надо будет 3-4 такта (200-300 MHz) на одну операцию -

получить цикл на операцию 10нc еще надо будет попотеть. Для начала значения в 100-20 нс на цикл более реалистично

 

Мне требуется только грамотный совет) Какой девайс выбрать чтобы все это пробовать? Т.е чтобы хватило логических элементов, чтобы была максимальная скорость. Девайсы недешевые, не хотелось бы потратить деньги и понять, что полностью реализовать не получится потому что мало элементов, или другие ограничения.

Берите ... ModelSim, Vivado, Quartus большего Вам в ближайший месяц-два-три и не понадобится.

А затем уж Вы и сами сможете ответить на этот вопрос на какой FPGA Вам будет выгодно реализовать Ваш алгоритм.

 

Конечно если очень хочется то можно сразу брать плату на Virtex UltarScale+ или Aria10 -не ошибетесь - к тому же мигание светодиода на плате в 10-15K $ особенно завораживающе выглядит. :)

 

Удачи! Rob.

 

 

 

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


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

Почему дичь? например в RSA тоже используется длинная арифметика. У меня задача связана с другой темой, но также немного имеет отношение к криптографии.

Мне нужно быстрое АЛУ для длинных чисел, что тут дикого?) Микропроцессоры, на мой взгляд, в любом случае медленнее, чем быстрая логика

Тут советуют новичку взяться сначала за симуляторы, а не за плис. И это верно, для первого шага.

 

Я бы пошел дальше и посоветовал тут для начала набросать алгоритм, чтобы он работал в матлабе/питоне/что_там_еще, чтобы было видно что всё успешно разбилось на много тактов, и результат такой же как и у "медленной версии на процессоре". И вот когда всё будет разбито на маленькие стадии, вот тогда можно пытаться это сделать на языке Verilog HDL.

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


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

Использовать CLA.

 

Если есть ограничения на pipeline delay, то нужно балансировать между разрядностью элементарного сумматора и длиной цепочки переносов для достижения максимальной Fclk. Например, использование DSP-блоков позволит сделать быстрый элементарный сумматор для CLA, скажем, разрядностью 48х8 и, как следствие, цепь переносов длиной ceil{8000/(48х8)} ~= 20.

 

Если ограничений на pipeline delay в сумматоре не накладывается, то всё становится совсем просто, и работать будет на околопредельных частотах ПЛИС при любом внятном описании конвеера.

 

В одно действие задачка в общем-то. Вполне подойдет для собеседований на конкурс "творчество юных".

 

Самое сложное на мой взгляд - загрузить получившееся устройство данными, чтобы обеспечить коэффициент использования ресурсов хотя бы 0.1, иначе зачем это всё.

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


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

planetzeus

Перенос в FPGA "только АЛУ", как вы это описали - не даст сколько-либо ценного результата.

При переносе в FPGA необходимо вынести в него определенный блок, довольно большой, который осуществляет определенную обработку (заведомо более 10...20 операций) по заранее известному алгоритму. В этим случае можно будет ставить в качестве целей, например, "производительность блока на гарантированном уровне не менее стольких-то обработанных бит на такт" и выстраивать подобные вещи.

Если вы прямо сейчас обладаете только навыками программиста - то для начала вам необходимо зачеркнуть всё, что вы ранее знали про обработку данных при помощи микросхем, и сменить парадигму с "у меня есть жесткий набор инструкций для ЦПУ или АЛУ" на "я могу сделать столько нужных мне действий за такт, сколько мне нужно". Крамольный смысл здесь в чем: матерого программиста сложно переучить на сколь-нибудь годного HDL-щика, в силу того, что программиста с рождения учили что на ЦПУ может выполняться только одна инструкция одновременно. А в HDL можно сделать одновременным выполнение стольких инструкций, сколько нужно. Следующий момент связан с тем, что "матерый программист со стажем" не понимает, что язык описания архитектуры HDL - это не язык программирования. Приходится долго и упорно объяснять, что единственно правильным решением для HDL - является реализация конечного автомата. Что для этого автомата необходимо заранее наметить условия изменения состояния, действия, выполняемые при изменении состояния. Ибо программистам как правило пофиг, потому что они считают что "ежели я не менял значение переменной, то оно должно сохранять свое состояние" по умолчанию, однако в HDL умолчания ведут к провалу; ну и про то, что в результате перехода конечного автомата через несколько состояний что-то где-то может измениться - им тоже плевать. Поначалу. Потом они просто сдаются.

Поэтому.

При переходе от языков программирования высокого уровня необходимо обязательно "слезть с дерева", и перестать считать, что все что ты пишешь на языке HDL - это примерно то же самое что и на C-ях, к примеру.

Это не так, от слова "совсем".

Поэтому у вас два пути - либо найти человека, который в ладах с HDL, и сможет внятно сформулировать какой же вычислительный блок вам сможет помочь, и что для этого нужно, либо "встрять надолго" начав изучение с азов.

 

 

Я думаю последовательно. Т.е если будут например 4 регистра по 8000 бит, то 2 внешних пина на выбор регистра, один пин для data, один на синхронизацию.

в FPGA нельзя думать последовательно.

нужно думать конкуррентно-параллельно.

т.е.

то, что может быть выполнено сейчас - нужно попытаться вычислить на более ранних шагах алгоритма, в отдельной параллельно исполняемой ветви.

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

 

зы. полагаю, что если ваш изначальный алгоритм полностью "развернуть", или "по-программистски сделать unroll & inline", то биты конечного результата всегда будут выражаться через биты входных данных. Тогда в "блоке обработки", который планируется к переносу на FPGA нужно эту матрицу (либо несколько матриц) описать, После чего уже пытаться оптимизировать сложность этих действий в раскладках по тактам, и т.д. о чем вам опять-таки сможет объяснить найденный вами человек, который в ладах с HDL

 

ззы. если у вас есть выход на ИПМ Келдыша РАН, (и если это будет для вас достаточно), то там есть гибридные варианты суперкомпьютеров с интегрированными мульти-модулями ПЛИС, на очень специфическом языке программирования, из семейства C. При этом не придется изучать HDL, но думать конкуррентно-параллельно при создании алгоритма всё равно придется.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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