Нецелые значения в verilog

#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 , где нет реальных массивов.