#verilog #system-verilog #hdl
#verilog #system-verilog #hdl
Вопрос:
Есть ли способ хранить и вычислять нецелые значения в verilog (скажем, x = 5/2 = 2.5). Могу ли я вычислить и сохранить 2.5 в x, определенном выше?
Комментарии:
1. Вы можете манипулировать битами по своему усмотрению, и существует множество способов кодирования нецелых чисел. Но я полагаю, вы просите что-то встроенное в Verilog?
2. да, например, есть ли у нас какое-либо ключевое слово или функция, с помощью которых мы можем сохранять нецелые значения также в регистрах (например, signed подразумевает, что мы сохраняем числа со знаком в регистрах).
3.
real
В языке SystemVerilog существуют типы данных для моделирования, но если вы спрашиваете о встроенном типе, который может быть синтезирован в аппаратном обеспечении, его не существует.
Ответ №1:
Да, вы можете использовать real registers
для хранения реальных значений, т.е.:
real float; // a register to store real value
Обычно это 64-разрядный тип данных, который хранит значения с плавающей запятой. Но не все операторы Verilog можно использовать с выражением, включающим действительные числа и действительные регистры. Конкатенации, оператор модуля, равенство регистров, побитовые операторы, операторы сокращения, операторы сдвига, выбор битов и частичный выбор для переменных реального типа не допускаются.
Простой пример:
module ecample;
real r;
initial begin
r = 123456e-3;
$display("r=%f",r); // r = 123.456000
#20 r = r / 2;
$display("r=%f",r); // r = 61.728000
$finish;
end
endmodule
Комментарии:
1. поддерживает ли real массивы. Могу ли я объявить что-то вроде real r[0:10][0:10] ??
2. Поскольку пользователь пометил вопрос с помощью SystemVerilog, я предполагаю, что это то, что они используют. Да, в SystemVerilog есть массивы любого типа
3. @dave_59: он также помечен
Verilog
, где нет реальных массивов.