# How do you cast an integer as a time in VHDL?

multiply (or operate otherwise) by the time unit

`constant t_per : time := (1 / input_frequency * 1000000000) * 1ns;`

(or variations thereof)

You can convert integer values to type time values. Each time value is represented as a position number on the number scale. Therefore, VHDL offers the attributes `'val(...)`

and `'pos(...)`

. Each integer unit represents one primary time unit. This primary unit is defined as femtosecond (fs). But many simulators like ModelSim chose a greater primary unit like picosecond (ps). You can set this *minimum time resolution limit* to femtoseconds with command line option `-t 1fs`

.

Converting integers to time:

```
constant myInt : integer := 10000;
constant myTime : time := time'val(myInt);
```

This is equal to `10 ps`

, because it's 10,000 fs. You can convert back with attribute `'pos`

from a physical type value to a *universal integer* value.

The same can be achieved by multiplying time values with an integer, because package `std.standard`

contains operator overloads for `*`

to allow `time * integer`

and `integer * time`

operations.

```
constant myInt : integer := 5;
constant myTime : time := 10 ns * myInt;
```

This results in 50 ns. Of cause there are more operators overloaded like division or modulo.

If you like to play more with type time or experience other physical type like *frequency*, have a look at the PoC Library and package PoC.physical.