我想计算和模拟时钟相移,当我遇到 VHDL 没有mod为 REAL 值定义运算符的问题时。
我检查了我的旧 VHDL 书和这个在线资源。两者都提到mod了整数,但没有提到数字(包括浮点数)。
GHDL 也报告mod为未知。
计算示例:
constant Period : TIME := 10.0 ns;
constant PhaseDelay : TIME := Period * (((Phase + 360.0) mod 360.0) / 360.0);
Run Code Online (Sandbox Code Playgroud)
为什么没有为实数值定义 mod 运算符?
正整数值a、b的模/余数定义:
a = (a/b)*b + (a REM b)
该方程也可用于负数的余数计算。负数的模运算需要一些技巧来处理符号,但它也是基于 add、sub、mult、div 的。
模对于整数有明确的定义,但对于实数则不然。模数为您提供整数除法的余数a / b,但实数除法没有余数,它为您提供真正的...
例如,如果执行 13 除以 3。整数除法将得到结果 4,余数(模)为 1。实数除法将得到大约 4.333333333333,没有余数,因为它是精确的(忽略数字的有限表示) 。
\n\n要在实除后获得模数a / b = c,您必须执行类似的操作(c - floor(c))*b。在本例中\xc2\xa013/4,它返回 1。