Существует ли мандат для переменной типа данных "целое число" для арифметических операций "+" и "-"? - PullRequest
0 голосов
/ 14 февраля 2019

Ниже приведен код для поиска факториала числа.Если я объявляю «i» как «регистр», выход (z) остается равным 1, независимо от ввода.Если он объявлен как "целое число", я получаю правильный результат.Почему это так?Пожалуйста, объясните.

module Factorial_calc(n, z);
input [5:0] n;
output reg [64:0] z;
reg i;
// integer i;

always @(n)
begin
i=0;
z=1;
 while(i<n)
 begin
 i=i+1;
 z=i*z;
 end
end
endmodule

1 Ответ

0 голосов
/ 14 февраля 2019

Поскольку ваше целое число имеет ширину 32 бита, а значение вашего регистра - только один бит.Ваше моделирование не должно заканчиваться для большинства значений n, не говоря уже о результате.

HDL не похож ни на один другой язык программирования.Помните, что даже если ваш код имитирует, это не значит, что он будет работать аппаратно.В вашем случае это не будет синтезировать.Ваше значение n не определено во время компиляции.

Не в последнюю очередь не используйте x или z для переменных, их слишком легко спутать с 'x или 'z.

...