Получение ошибки 9: error: genvar is missing for generate "loop" variable 'r'. 1 error(s) during elaboration.
genvar отсутствует для генерации «петли» переменной: Verilog
Весь код:
module divider (dividend, divisor, quotient, remainder) ;
input [7:0] dividend ; // eight input lines modeled as a bus
input [7:0] divisor ; // select lines bundled as a bus
output reg [7:0] quotient ;
output reg [7:0] remainder ;
reg [7:0] r;
reg [7:0] q;
assign q = 0;
for(r = dividend; r >= divisor; r = r - divisor)
assign q = q + 1;
assign remainder = r;
assign quotient = q;
endmodule
module main;
reg [7:0] dd;
assign dd = 12;
reg [7:0] dr;
assign dr = 5;
reg [7:0] q;
reg [7:0] r;
wire a = divider(dd, dr, q, r);
initial begin
$display("quotient %d", q);
$display("remainder %d",r);
end
endmodule
Я пытаюсь написать модуль для вычисления частного и остатка путем многократного вычитания с использованием поведенческого моделирование в verilog. Это моя первая программа verilog, и у меня возникли проблемы с исправлением этих ошибок, пожалуйста, укажите, есть ли в моем коде какие-либо ошибки.
Код, который вы предоставили для логики делителя, не будет работать так, как вы планируете использовать NBA в цикле. Это означает, что он не будет обновлять 'quotient' в каждом цикле, но вместо этого приводит только к тому, что' quotient' устанавливается в 0 или увеличивается с его предыдущего значения, которое в вашем случае было из предыдущей попытки разделить. Кроме того, вы используете назначение блокировки для 'остатка' в блоке' always' с тактовой частотой, что приводит к симуляциям, которые неправильно имитируют реальное оборудование. – Unn
@Unn Я нашел свою ошибку :). Будет ли проблема на аппаратном уровне, если я буду использовать все блокирующие назначения всегда в блоке? Потому что он отлично работает на уровне моделирования, если я конвертирую NBA в блокировку назначений. – ssgr
Хотя эта настройка может работать нормально с назначением блокировки, как только вы интегрируете ее в проект, который использует 'quotient' или' остаток 'в каком-либо другом модуле или блоке, симуляция будет иметь состояние гонки. Чтобы точно имитировать аппаратное обеспечение, вам нужно использовать NBA в тактовых блоках (и BA в комбинационных блоках, таких как 'always @ (*)'). Инструменты синтеза обычно могут понять это, если вы используете БА; но вы никогда не должны использовать BA в тактовых блоках. – Unn