[VHDL] physical types

Gast #389626
Lesenswert?

Hallo,

wenn ich recht verstande habe, kann man nur integrale typen
für die deklaration von physikalischen typen verwenden.

type X is range 0 to 100
units
  a;
  aa = 2 a;
  aaa = 3 a;
end units;

signal z: x;

dabei darf an z in der summe nur werte aus dem range
zugewiesen werden, sprich

z <= 50 aa;  -- noch ok
z <= 51 aa;  -- schon überlauf => runtime error

ich habe für die zeitangabe 3.5 ns sehen stehen

ich habe in einem quellcode für zeit 3.5 ns stehen sehen
also eine fliesskommazahl, ich war überrascht dass es erlaubt ist

ich habe es ausprobiert und es geht tatsächlich
allerdings wird dann bei
z <= 3.5 a;
auf 4 a aufgerundet, zumindest bei mir.
Ist das implementation defined oder verhalten sich
auch eure/alle? simulatoren genauso?

Grüsse, Daniel
Gast #389627
Lesenswert?

library ieee;
use ieee.std_logic_1164.all;
entity main is end;

architecture main of main is
        type temperature is range 0 to 10e10
                units
                        a;
                        b = 10 a;
                        c = 10 b;
                        d = 10 c;
                        e = 10 d;
                end units;
        procedure print(constant t: in temperature) is
                use std.textio.all;
                variable l: line;
        begin
                write(l, temperature'image(t));
                writeline(output, l);
        end;
        signal temp: temperature := 3.3 b;      -- 33 a
        signal temp1: temperature := 3.3 a;
        signal temp2: temperature := 3.5 a;

begin
        print(temp);
        print(temp1);
        print(temp2);
end;

printet bei mir
33 a
3 a
4 a

wie man sieht macht komma bei physikalischen typen durchaus sinn
ob es alle simulator so handhaben kann ich leider dir nicht sagen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren