VHDL中具有用户定义的物理类型的操作

VHDL中具有用户定义的物理类型的操作,vhdl,user-defined-types,Vhdl,User Defined Types,我是VHDL的初学者,正在使用用户定义的类型“distance”执行一些操作,如下所述: entity metric is type DISTANCE is range 0 to 1000000000 units nm; mm = 10E6 nm; cm = 10 mm; m = 100 cm; km = 10E3 m; inch = 25400000 nm; foot = 12 inch; yard = 3 foot; mile = 1760 yard; end units; end me

我是VHDL的初学者,正在使用用户定义的类型“distance”执行一些操作,如下所述:

entity metric is
type DISTANCE is range 0 to 1000000000 
units 
nm;
mm = 10E6 nm;
cm = 10 mm;
m = 100 cm;
km = 10E3 m;
inch = 25400000 nm;
foot = 12 inch;
yard = 3 foot;
mile = 1760 yard;
end units;
end metric;
在该体系结构中,我声明了距离类型的变量,并尝试了一些使用整数值的操作

architecture test of metric is
 begin
  P1 : process
   variable res1, res2 : DISTANCE ;
  begin
   res1 := 10  * (10 nm);
   res2 := 10 / (10 nm);
   wait;
  end process;
end test;
代码针对res1编译,但针对res2会发生以下错误-

中缀运算符“/”没有可行的条目

变量赋值中的右侧(中缀表达式)错误

有人能解释为什么在上述情况下乘法有效而除法无效吗?
提前感谢。

如果您要查看IEEE Std 1076-2008,9.2.7乘法运算符:

您会发现,除使用相同物理类型的左操作数外,按其他物理类型进行除法不是预定义的


您需要定义一个“/”函数来重载物理类型的除法运算符,或者需要将左手表达式转换为物理类型。还请注意,结果是一个整数,用于描述物理类型的两个操作数之间的关系。

在这里,它实际上无法自动执行任何操作。
1/距离的单位是多少?@jeff:从逻辑上讲,是波数!如果OP希望这样做,他可以声明波数类型并重载
/
操作符。。。或者目前,
10nm/10
应该可以工作。。。形式上,乘法是可交换的,而除法不是。