我现在正在使用FPGA spartan3,
我想计算结果'其代表如下式。 和结果'应该作为整数类型返回。所以我用整数类型设置所有变量,但它不起作用。
result <=((a*b*7894*7)/(w*temp_constant));
我已将a,b,c,w,temp_constant设为变量
variable a : integer range 0 to 99;
variable b : integer range 0 to 9999;
variable w : integer range 0 to 200;
variable temp_constant : integer range 0 to 99;
但是运营商&#39; /&#39;在这个合成中不起作用。错误消息是 &#39;运营商&#39; /&#39;必须有恒定的操作数或第一个操作数必须是2&#34;&#39;
的幂答案 0 :(得分:1)
错误消息几乎(参见下面的注释)100%清除:合成工具不支持除法,除了常数操作数(结果由合成器在常量传播阶段计算)或除数为2的幂(除法是一个简单的右移)。
合成工具限制的一个可能原因是,有许多方法可以在硬件中计算整数除法,而在VHDL代码中仅输入/
是不足以在其中进行选择的。可能还有其他原因。
如果操作数不是常量,且除数不是2的幂,则必须自己设置较低级别的除法器。如果你不知道整数分频器的硬件实现,你将不得不搜索一下。这是一个非常经典的话题,应该很容易找到好的资源。只是一个提示:预先计算定点表示中的所有反转,将它们存储在只读存储器中并使用乘法而不是除法是一种选择。
注意:我发现你得到的错误信息(第一个操作数必须是2 的幂)有点令人惊讶。除非术语第一个操作数应该指定除数,这不是常见的,它可能是一个错误,正确的错误信息应该是:第二个操作数必须是2的幂。或者,甚至更好:除数必须是2 的幂。