我想制作vhdl分频器

时间:2017-12-08 04:16:11

标签: variables integer vhdl divider

我现在正在使用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;

的幂

1 个答案:

答案 0 :(得分:1)

错误消息几乎(参见下面的注释)100%清除:合成工具不支持除法,除了常数操作数(结果由合成器在常量传播阶段计算)或除数为2的幂(除法是一个简单的右移)。

合成工具限制的一个可能原因是,有许多方法可以在硬件中计算整数除法,而在VHDL代码中仅输入/是不足以在其中进行选择的。可能还有其他原因。

如果操作数不是常量,且除数不是2的幂,则必须自己设置较低级别的除法器。如果你不知道整数分频器的硬件实现,你将不得不搜索一下。这是一个非常经典的话题,应该很容易找到好的资源。只是一个提示:预先计算定点表示中的所有反转,将它们存储在只读存储器中并使用乘法而不是除法是一种选择。

注意:我发现你得到的错误信息(第一个操作数必须是2 的幂)有点令人惊讶。除非术语第一个操作数应该指定除数,这不是常见的,它可能是一个错误,正确的错误信息应该是:第二个操作数必须是2的幂。或者,甚至更好:除数必须是2 的幂。