planetzeusПеренос в FPGA "только АЛУ", как вы это описали - не даст сколько-либо ценного результата.
При переносе в FPGA необходимо вынести в него определенный блок, довольно большой, который осуществляет определенную обработку (заведомо более 10...20 операций) по заранее известному алгоритму. В этим случае можно будет ставить в качестве целей, например, "производительность блока на гарантированном уровне не менее стольких-то обработанных бит на такт" и выстраивать подобные вещи.
Если вы прямо сейчас обладаете только навыками программиста - то для начала вам необходимо зачеркнуть всё, что вы ранее знали про обработку данных при помощи микросхем, и сменить парадигму с "у меня есть жесткий набор инструкций для ЦПУ или АЛУ" на "я могу сделать столько нужных мне действий за такт, сколько мне нужно". Крамольный смысл здесь в чем: матерого программиста сложно переучить на сколь-нибудь годного HDL-щика, в силу того, что программиста с рождения учили что на ЦПУ может выполняться только одна инструкция одновременно. А в HDL можно сделать одновременным выполнение стольких инструкций, сколько нужно. Следующий момент связан с тем, что "матерый программист со стажем" не понимает, что язык описания архитектуры HDL - это не язык программирования. Приходится долго и упорно объяснять, что единственно правильным решением для HDL - является реализация конечного автомата. Что для этого автомата необходимо заранее наметить условия изменения состояния, действия, выполняемые при изменении состояния. Ибо программистам как правило пофиг, потому что они считают что "ежели я не менял значение переменной, то оно должно сохранять свое состояние" по умолчанию, однако в HDL умолчания ведут к провалу; ну и про то, что в результате перехода конечного автомата через несколько состояний что-то где-то может измениться - им тоже плевать. Поначалу. Потом они просто сдаются.
Поэтому.
При переходе от языков программирования высокого уровня необходимо обязательно "слезть с дерева", и перестать считать, что все что ты пишешь на языке HDL - это примерно то же самое что и на C-ях, к примеру.
Это не так, от слова "совсем".
Поэтому у вас два пути - либо найти человека, который в ладах с HDL, и сможет внятно сформулировать какой же вычислительный блок вам сможет помочь, и что для этого нужно, либо "встрять надолго" начав изучение с азов.
Цитата
Я думаю последовательно. Т.е если будут например 4 регистра по 8000 бит, то 2 внешних пина на выбор регистра, один пин для data, один на синхронизацию.
в FPGA нельзя думать последовательно.
нужно думать конкуррентно-параллельно.
т.е.
то, что может быть выполнено сейчас - нужно попытаться вычислить на более ранних шагах алгоритма, в отдельной параллельно исполняемой ветви.
и при составлении алгоритма нужно определять, без чего невозможно выполнение следующего действия, и соответствующим образом менять алгоритм.
зы. полагаю, что если ваш изначальный алгоритм полностью "развернуть", или "по-программистски сделать unroll & inline", то биты конечного результата всегда будут выражаться через биты входных данных. Тогда в "блоке обработки", который планируется к переносу на FPGA нужно эту матрицу (либо несколько матриц) описать, После чего уже пытаться оптимизировать сложность этих действий в раскладках по тактам, и т.д. о чем вам опять-таки сможет объяснить найденный вами человек, который в ладах с HDL
ззы. если у вас есть выход на ИПМ Келдыша РАН, (и если это будет для вас достаточно), то там есть гибридные варианты суперкомпьютеров с интегрированными мульти-модулями ПЛИС, на очень специфическом языке программирования, из семейства C. При этом не придется изучать HDL, но думать конкуррентно-параллельно при создании алгоритма всё равно придется.