СПРАВОЧНИК ПО ЯЗЫКУ VHDL



ФИЗИЧЕСКИЕ ТИПЫ


Физические типы позволяют разработчику непосредственно выразить величины в физических единицах измерения. В VHDL используется один физический тип - предопределенный физический тип TIME( время) . Обьявление физического типа задает множество единиц, определенных в терминах некоторой базовой единицы. В случае типа TIME базовой единицей является fs (фемтосекунда), а производными единицами являются ps,ns,us и так далее. Рассмотрим определение типа TIME. type TIME is range -(2**31-1) to 2**31-1 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; s = 1000 ms; min = 60 s; hr = 60 min; end units; Диапазон типа TIME определяет диапазон базовых единиц, который может быть точно представлен обьектами типа. Физические литералы, использующие любые из определенных имен для физических единиц, будут автоматически преобразовываться к фемтосекундам. Обеспечивается абсолютная точность, когда значения одного физического типа складываются и вычитаются или когда значение физического типа умножается на целое. Допускается также деление на целое, но в этом случае может выполняться округление результата. Рассмотрим два примера физических типов. Они не являются предопределенными типами, но эти и другие физические типы могут быть получены из библиотечного пакета, поставляемого продавцами матобеспечения САПР. type resistance is range 0 to 2**31-1 units nOhm; uOhm =1000 nOhm; mOhm =1000 uOhm; Ohm =1000 mOhm; kOhm =1000 Ohm; megOhm =1000 kOhm; end units; type voltage is range -(2**31-1) to 2**31-1 units nV; uV =1000 nV; mV =1000 uV; V =1000 mV; kV =1000 V; megaV =1000 kV; end units; Когда значение физического типа делится на другое значение того же самого типа, то единицы измерения исчезают и результат становится совместимым с любым целым типом. Допускается умножение физического типа на число с плавающей точкой, в этом случае получается результат физического типа. Эти идеи иллюстрируются в следующих примерах. total_time := 1 ns + .039 s - min_time; output_volts<=supply_volts-500mV after reset_duration+5 ms; nom := .75* max; function "*" (I:current; R:resistance) return voltage is begin return nV* ( real (I/nA)* real(R/nOhm)*1.0E-9); end; function "*" (R:resistance; I:current) return voltage is begin return nV * ( real ( I/ nA )* real(R/nOhm)* 1.0E-9); end; Каждое обьявление функции перезагружает оператор умножения таким образом, что он будет выполняться, когда перемножаются значения физических типов current и resistance. Результат должен быть физического типа voltage.




Содержание  Назад  Вперед