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

Не синтезируется модуль с циклом

Добрый вечер!

 

Вот написал модуль для поиска значения, удовлетворяющего некую целевую функцию:

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 часов и незасинтезировался.

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

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


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

Вот этот код синтезировался 5 часов и незасинтезировался.

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

Как вы себе представляете реализацию цикла на логике? Как правило, это разворачивание цикла в набор выражений, отличающихся местами, зависимыми от переменной цикла, с последующей оптимизацией этой логики. Отсюда следует, что длина (количество итераций) цикла должна быть ограничена на каком-то пределе, иначе никаких ресурсов не хватит, чтобы обработать такой объем выражений. И это ограничение задается в программе. Например, у синтезатора Квартуса, насколько помню, оно равно 500. У симулятора Квесты - 5000. А у вас какое количество итераций?

 

Цикл в синтезируемом HDL - это просто средство более короткой, компактной записи логики. Там нет реального (реализуемого в железе) устройства, которое прогоняет эн итераций за "нулевое" время. :)

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


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

Используйте FSM (finite state mashine), они как раз предназначены для организации циклов на VHDL.

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


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

Начать надо с вопроса, что из себя представляет тип integer по мнению Вашего синтезатора. Если он, например, 2хбайтный, то i всегда будет меньше 0xFFFFFF, и цикл бесконечный.

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


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

2 Koluchiy

а у какого это синтезатора тип integer есть величина 2х байтная ??

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


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

а у какого это синтезатора тип integer есть величина 2х байтная ??

человек наверное описался :)

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


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

Используйте FSM (finite state mashine), они как раз предназначены для организации циклов на VHDL.

FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц..

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


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

FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц..
Вы предпочитаете, что бы не работало совсем?

Ваш исходный цикл (даже если и синтезируется) не влезет ни в одну существующую (и будущую, лет на 100 вперед) FPGA :rolleyes:

 

 

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


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

2 Koluchiy

а у какого это синтезатора тип integer есть величина 2х байтная ??

 

Без понятия (подобные типы в верилоге не использую) - но в компиляторах для ПК подобное разночтение имеет (имело?) место, поэтому лучше узнать заранее :-))).

Изменено пользователем Koluchiy

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


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

FSM - это то, что через внешний тактовый сигнал работает? Так оно же сравнительно медленно получается, не более 200Мгц..

 

Вопрос правильный, ответ такой, берете FSM, которая работает на частоте 200MHz, а внутри нее синтезируете Вашим циклом 100 сумматоров, работающих одновременно за один такт. Получаем эффективную тактовую частоту суммирования 200*100 MHz или 20 GHz. По моему ничо так скорость. Осталось с данными разобраться, как их заставить суммироваться по 100 значений за раз.

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


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

Добрый вечер!

 

Вот написал модуль для поиска значения, удовлетворяющего некую целевую функцию:

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 млн раз проверить функцию? Этот каламбур ни один синтезатор не потянет. Тут нужно счетчик с накоплением результата делать.

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


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

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

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

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

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

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

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

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

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

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