Расчеты с действительными числами, Verilog HDL - PullRequest
2 голосов
/ 17 марта 2012

Я заметил, что Verilog округляет мои действительные числа в целочисленные результаты.Например, когда я смотрю на симулятор, он показывает результат 17/2 как 9. Что мне делать?Есть ли способ определить что-то вроде: output real reg [11:0] output_value?Или это что-то, что должно быть сделано с помощью настроек симулятора?

Только симуляция (без синтеза).Пример:
x определен как входное значение со знаком и output_value определено как регистр вывода.

output_value = ((x >>> 1) + x) + 5; 

Если x = + 1, тогда выходное значение должно быть: 13/2=6.5.

Однако, когда я симулирую, я вижу output_value = 6.

1 Ответ

1 голос
/ 17 марта 2012

Кодекс помог бы, но я подозреваю, что вы не делите реал на всех. 17 и 2 являются целыми числами, и поэтому такое простое утверждение выполнит целочисленное деление.

17   / 2   = 8 (not 9, always rounds towards 0)
17.0 / 2.0 = 8.5

В вашем втором случае

output_value = ((x >>> 1) + x) + 5

Если x равно 1, x >>> 1 равно 0, а не 0,5, потому что вы только что вышли из нижней части слова.

* * 1010

Здесь нет ничего особенного в verilog. Это верно для большинства языков.

...