Physical Type
  
    
    
     
   
   Formal Definition
  
   Physical type
    is a numeric scalar that represents some quantity. Each value of a
   physical type has a position number that is an integer value. Any
   value of a physical type is a straight multiple of the primary unit
   of measurement for that type. 
  
   Simplified Syntax
  
   type type_name is
    range left_bound to right_bound 
  
   units 
  
     primary_unit_name 
  
     secondary_unit_name = number primary_unit_name 
  
     secondary_unit_name = number primary_unit_name 
  
     . . . 
  
   end units type_name 
  
   type type_name is
    range left_bound downto right_bound 
  
   units 
  
     primary_unit_name 
  
     secondary_unit_name = number primary_unit_name 
  
     secondary_unit_name = number primary_unit_name 
  
     . . . 
  
   end units type_name 
  
   Description
  
   A physical type allows to define measurement units for some physical 
   quantity, like length, time, pressure, capacity, etc. 
  
   The range, specified at the beginning of a physical type, defines the 
   minimum and maximum values of a given quantity expressed in the base 
   units (see primary unit declaration below). The bounds of the range 
   of a physical type should be in the form of locally static 
   expression. The expression is classified as locally static if it is 
   possible to determine its value without running the code. The value 
   of an expression used as a range for a physical type must be of 
   integer type. It is legal to use negative bounds. 
  
   At the core of a physical type declaration is the definition of a primary 
   unit, and optionally, multiple secondary
    units. The primary 
   unit serves as the base unit for representing values of the specified 
   type. The secondary units 
   are defined as multiplicity of primary 
   units or previously specified secondary 
   units. Their declarations may contain only integer literals. 
  
   Each value of a physical type has 
   a corresponding position number, which is the number of primary units 
   represented by that unit name. This way values specified in different 
   units of the same type can be compared (Example 2). 
  
   For all physical types, both TIME 
   and user-defined, relational and arithmetic operators can be used. 
  
   The VHDL standard predefines only one physical type: TIME, which is 
   defined in the STANDARD package. 
  
   The value of one unit can be written in short form using the name of 
   the unit only (i.e. without the value 1 - Example 3). 
  
   Examples
  
   Example 1 
  
   type CAPACITY is range 
   0 to 1E5 
   units 
     pF; -- picofarad 
     nF = 1000 pF; -- nanofarad 
     uF = 1000 nF; -- microfarad 
     mF = 1000 uF; -- milifarad 
     F = 1000 mF; -- farad 
   end units CAPACITY; 
  
     
   The primary unit in this example is one picofarad and the maximum 
   value of the CAPACITY type object is 105 pF. 
  
   Example 2. 
  
   type DISTANCE is range 0 to 1E5 
     units 
       um; -- micrometer 
       mm = 1000 um; -- millimeter 
       in_a = 25400 um; -- inch 
     end units DISTANCE; 
   variable Dis1, Dis2 : DISTANCE; 
   Dis1 := 28 mm; 
   Dis2 := 2 in_a - 1 mm; 
   if Dis1 < Dis2 then ... 
  
     
   Both, a comparison and an arithmetic operation can be performed on 
   visually different measurement units as long as they are defined as 
   the same type with the same base unit. 
  
   Example 3 
  
   SomeVar := mF; 
  
     
   This assignment means that the variable SomeVar will be assigned the 
   value of 1 mF. 
  
   Important Notes
  
   - 
   
    Physical types are not synthesizeable. As a result, delays in signal 
    assignments are not synthesizeable as well. 
    - 
   
    It is not allowed to use floating point values in physical type 
    declarations, i.e. if a conversion from millimeters to inches (25.4 
    mm = 1 in) would have to be performed, then millimeters could not be 
    used as the base unit. 
     
  
    
 
    |