aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/issue2156/timing_pkg2.vhdl
blob: e04acad9918e32dcd93f435478660882d8ea85d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package timing_pkg is

  type frequency is range 0.0 to real'high;

  function to_string(
    freq : frequency;
    unit : string := "";
    fmt  : string := "%.6f")
    return string;

  function to_string(value: frequency) return string;
end package;

package body timing_pkg is

  function to_string(
    freq : frequency;
    unit : string := "";
    fmt  : string := "%.6f")
    return string
  is
  begin
    if unit = "" then
      if freq < 1.0e3 then
        return to_string(real(freq), fmt) & " Hz";
      elsif 1.0e3 <= freq and freq < 1.0e6 then
        return to_string(real(freq) * 1.0e-3, fmt) & " kHz";
      elsif 1.0e6 <= freq and freq < 1.0e9 then
        return to_string(real(freq) * 1.0e-6, fmt) & " MHz";
      else
        return to_string(real(freq) * 1.0e-9, fmt) & " GHz";
      end if;
    elsif unit = "Hz" then
      return to_string(real(freq), fmt) & " Hz";
    elsif unit = "kHz" then
      return to_string(real(freq) * 1.0e-3, fmt) & " kHz";
    elsif unit = "MHz" then
      return to_string(real(freq) * 1.0e-6, fmt) & " MHz";
    elsif unit = "GHz" then
      return to_string(real(freq) * 1.0e-9, fmt) & " GHz";
    else
      report "invalid frequency unit (Hz, kHz, MHz, GHz)"
      severity failure;
    end if;
  end function;
  
  function to_string(value: frequency) return string is
  begin
      return to_string(value, "", "%.6f");
  end function;
end package body;