【问题标题】:Division in VHDL (int/float)VHDL 中的除法(int/float)
【发布时间】:2013-10-10 06:50:23
【问题描述】:

我想在 1 个周期(组合电路)中将 VHDL 中的两个数字(16 位二进制)相除。分子是整数。分母是一个浮点数。结果应该是浮动的。我使用什么算法来执行除法。

请帮忙

【问题讨论】:

  • 您需要一个周期进行除法,还是一个周期完成一个除法?许多浮点除法器是流水线的,因此它们可以在每个周期产生一个结果,而不会使周期时间长到足以在一个周期内进行除法。
  • 你的时钟周期是多久?

标签: math floating-point binary vhdl division


【解决方案1】:

这是一个做你想做的事的实体(如果我理解正确的话):

library ieee;
use ieee.numeric_std.all;
use ieee.float_pkg.all;

entity integer_by_float_division is
    port (
        numerator: in signed(15 downto 0);
        denominator: in signed(15 downto 0);
        result: out float(6 downto -9)
   );
end;

architecture rtl of integer_by_float_division is
    subtype float16 is float(6 downto -9);
    signal numerator_float: float16;
    signal denominator_float: float16;
begin
    numerator_float <= to_float(numerator, numerator_float);
    denominator_float <= to_float(denominator, denominator_float);
    result <= numerator_float / denominator_float;
end;

【讨论】:

  • 当他们说“浮点数”时,我认为 OP 的意思是“IEEE754 单精度”,所以分母和输出可能需要是float32
【解决方案2】:

我认为这是不可能的。有什么理由需要在 1 个时钟周期内完成吗?接近的唯一方法是使用查找表,但您必须牺牲一些输出精度。

【讨论】:

  • 它是我项目的一部分,我需要在它的每个步骤中执行除法。所以我不能再给分裂的时间了。
  • 你运行的时钟频率是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多