igormihmih 0 8 февраля, 2011 Опубликовано 8 февраля, 2011 · Жалоба Добрый вечер! Вот написал модуль для поиска значения, удовлетворяющего некую целевую функцию: module (output reg button) begin integer i; always @(posedge button) begin for(i=0;i<32'hFFFFFF;i=i+1) begin if(F(i)==5)/*какие-то действия*/;//F - некая функция end end Вот этот код синтезировался 5 часов и незасинтезировался. Подскажите, пожалуйста, что не так и как с этим бороться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 36 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Вот этот код синтезировался 5 часов и незасинтезировался. Подскажите, пожалуйста, что не так и как с этим бороться. Как вы себе представляете реализацию цикла на логике? Как правило, это разворачивание цикла в набор выражений, отличающихся местами, зависимыми от переменной цикла, с последующей оптимизацией этой логики. Отсюда следует, что длина (количество итераций) цикла должна быть ограничена на каком-то пределе, иначе никаких ресурсов не хватит, чтобы обработать такой объем выражений. И это ограничение задается в программе. Например, у синтезатора Квартуса, насколько помню, оно равно 500. У симулятора Квесты - 5000. А у вас какое количество итераций? Цикл в синтезируемом HDL - это просто средство более короткой, компактной записи логики. Там нет реального (реализуемого в железе) устройства, которое прогоняет эн итераций за "нулевое" время. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tAmega 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Используйте FSM (finite state mashine), они как раз предназначены для организации циклов на VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба Начать надо с вопроса, что из себя представляет тип integer по мнению Вашего синтезатора. Если он, например, 2хбайтный, то i всегда будет меньше 0xFFFFFF, и цикл бесконечный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба 2 Koluchiy а у какого это синтезатора тип integer есть величина 2х байтная ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 9 февраля, 2011 Опубликовано 9 февраля, 2011 · Жалоба а у какого это синтезатора тип integer есть величина 2х байтная ?? человек наверное описался :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igormihmih 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Используйте FSM (finite state mashine), они как раз предназначены для организации циклов на VHDL. FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц..Вы предпочитаете, что бы не работало совсем? Ваш исходный цикл (даже если и синтезируется) не влезет ни в одну существующую (и будущую, лет на 100 вперед) FPGA :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 (изменено) · Жалоба 2 Koluchiy а у какого это синтезатора тип integer есть величина 2х байтная ?? Без понятия (подобные типы в верилоге не использую) - но в компиляторах для ПК подобное разночтение имеет (имело?) место, поэтому лучше узнать заранее :-))). Изменено 11 февраля, 2011 пользователем Koluchiy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tAmega 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц.. Вопрос правильный, ответ такой, берете FSM, которая работает на частоте 200MHz, а внутри нее синтезируете Вашим циклом 100 сумматоров, работающих одновременно за один такт. Получаем эффективную тактовую частоту суммирования 200*100 MHz или 20 GHz. По моему ничо так скорость. Осталось с данными разобраться, как их заставить суммироваться по 100 значений за раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
POVRU 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Добрый вечер! Вот написал модуль для поиска значения, удовлетворяющего некую целевую функцию: module (output reg button) begin integer i; always @(posedge button) begin for(i=0;i<32'hFFFFFF;i=i+1) begin if(F(i)==5)/*какие-то действия*/;//F - некая функция end end Вот этот код синтезировался 5 часов и незасинтезировался. Подскажите, пожалуйста, что не так и как с этим бороться. По нажатию кнопки 16 млн раз проверить функцию? Этот каламбур ни один синтезатор не потянет. Тут нужно счетчик с накоплением результата делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться