variables - 我想做vhdl除法器

标签 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;

但是运算符“/”在此综合中不起作用。错误消息是 '运算符 '/' 必须具有常量操作数或第一个操作数必须是 2 的幂”'

最佳答案

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

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

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

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

关于variables - 我想做vhdl除法器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707624/

相关文章:

javascript - 在 For 循环中将 PHP 变量存储到 JavaScript 变量中

bash - Bash 中的动态变量名称

c - 如何在 C 中的整数数组中添加二次数列

vhdl - 将长 std_logic_vector 与零进行比较

vhdl - 在 vhdl 中将 sfixed 转换为 std_logic_vector 的正确方法是什么?

VHDL 8位计数器

php - 使用 PHP 在两个页面之间传递变量的最安全方式

mySQL JOIN 将文本添加到变量

c++ - 如何正确检查减法之前不会发生整数下溢和溢出?

java - 从 int 数组中删除重复元素