# Регистровые типы данных

Соответствуют объектам, которые могут хранить значение. К таким типам относятся `reg`, `integer`, `time` и `real`.

*Синтаксис*

{% code overflow="wrap" lineNumbers="true" %}

```verilog
reg signed           // Регистр со знаком (дополнение до 2) 
reg unsigned         // Регистр без знака 
reg [n-1:0]          // Регистр с разрядностью n 
reg [n-1:0] signed   // Регистр с разрядностью n со знаком 
reg [n-1:0] unsigned // Регистр с разрядностью n без знака 
```

{% endcode %}

Все переменные объявляются в начале модуля и могут быть использованы только внутри него. Объявления внутри блоков `always` и `initial` не допускаются.

Преобразование вещественного к целому происходит по правилу округления к ближайшему чётному.

<table data-header-hidden data-full-width="true"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><em>Пример</em></td><td><em>Результат исполнения</em></td></tr><tr><td><pre class="language-verilog" data-overflow="wrap" data-line-numbers><code class="lang-verilog">module data_types_tb;
  reg a; reg [7:0] b, c;
  reg signed [7:0] d; 
  reg [11:0] e; integer i;
  time t; real r; realtime rt;

initial begin
a = 1; $display("1bit = %0d", a);\
b = 8'hF2; $display("8bit\_dec = %0d", b);\
c = 8'b10110011; $display("8bit\_bin = %0d",c);
d = -8'sd5; $display("8bit (-5) = %0d", d);
e = 12'd?; $display("Z-state = %0d", e);
i = 32'hcafe\_1234;
$display("integer = 0x%0h", i);
t = 112345; $display("time = %t", t);
t = 112345; $display("time = %0t", t);
r = 3.8e10; $display("real = %g", r);
rt = 1.0; $display("realtime = %f", rt);
end
endmodule </code></pre></td><td><pre data-overflow="wrap" data-line-numbers><code>

1bit = 1
8bit\_dec = 242
8bit\_bin = 179
8bit (-5) = -5
Z-state = z

integer = 0xcafe1234
time =               112345
time = 112345
real = 3.8e+10
realtime = 1.000000

</code></pre></td></tr></tbody></table>
