Forum: FPGA, VHDL & Co. [VHDL] physical types


von -daniel- (Gast)


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

von dima (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.