Цикл for переходит в бесконечный цикл, когда я использую переменную в качестве конечного условия

У меня есть цикл for, который отлично работает в Verilog. Это выглядит так:

for(j=0; j<=5; j=j+1)begin
    ...
end

но как только я меняю 5 на переменную:

for(j=0; j<=m; j=j+1)begin
    ...
end

Я получаю эту ошибку:

Ошибка (10119): Оператор Verilog HDL Loop ошибка в alu.v(95): цикл с непостоянным условием цикла должен завершиться в течение 250 итераций

У меня есть m как reg, инициализированный как таковой:

reg [3:0] m = 5;

Причина, по которой мне нужно использовать переменную, заключается в том, что у меня есть другая переменная, которую я хочу, чтобы этот цикл считал. Я получал ту же ошибку, поэтому я использовал это тестовое значение «m», которое всегда должно равняться 5. Я не уверен, почему это происходит. Я бы подумал, что цикл закончится после 5, но по какой-то причине это не так. Пожалуйста помоги!


person Jake    schedule 09.05.2016    source источник
comment
Вы внедряете (ищете) синтезированные или несинтезированные материалы?   -  person Prakash Darji    schedule 09.05.2016
comment
Это синтез, поскольку Ошибка (10119) генерируется Altera Quartus II/Prime.   -  person Morten Zilmer    schedule 09.05.2016


Ответы (1)


Verilog HDL не является языком программирования, например. C или Python, но язык описания оборудования (HDL). Таким образом, инструмент синтеза развернет цикл for на фиксированную аппаратную схему, и для этого ему необходимо знать (максимальное) количество итераций в цикле.

В вашем случае кажется, что инструмент синтеза (Altera Quartus II/Prime) не может понять это, когда конечное условие основано на m в качестве регистра, поэтому вам нужно переписать это, чтобы каждый цикл имел постоянное конечное условие, позволяя инструменту синтеза развернуть это на фиксированную аппаратную схему.

person Morten Zilmer    schedule 09.05.2016