有人能够理解此代码中实现了哪种除法算法吗?

时间:2019-05-06 13:21:29

标签: floating-point vhdl division

我有这段代码在VHDL中实现了浮点除法算法,我必须编写C版本。我正在努力了解此代码中使用的算法类型。 SelFunctionTable提供了所有链接(即使它们对我来说不是很清楚)

我已经对除法算法进行了一些研究,但是我还没有真正找到答案,我不了解填充选项或预缩放的原因。然后,该过程当然会重复n次。是否有人至少可以帮助您对该算法进行分类,以便我进行查找? 非常感谢

fX <= "1" & X(22 downto 0);
fY <= "1" & Y(22 downto 0); 

-- Prescaling
with fY (22 downto 21)  select 
  prescaledfY <= 
     ("0" & fY & "0") + (fY & "00") when "00",
     ("00" & fY) + (fY & "00") when "01",
     fY &"00" when others;
with fY (22 downto 21)  select 
  prescaledfX <= 
     ("00" & fX & "0") + ("0" & fX & "00") when "00",
     ("000" & fX) + ("0" & fX & "00") when "01",
     "0" & fX &"00" when others;
w9 <=  "00" & prescaledfX;
sel9 <= w9(28 downto 24) & prescaledfY(23 downto 22);
SelFunctionTable9: selFunction7_4_F10_uid4
  port map ( X => sel9,
             Y => q9_copy5);
q9 <= q9_copy5; -- output copy to hold a pipeline register if needed
w9pad <= w9 & '0';
with q9(1 downto 0)  select  
w8fulla <= 
  w9pad - ("0000" & prescaledfY)            when "01",
  w9pad + ("0000" & prescaledfY)            when "11",
  w9pad + ("000" & prescaledfY & "0")       when "10",
  w9pad                     when others;

with q9(3 downto 1)  select  
fYdec8 <= 
  ("00" & prescaledfY & "00")           when "001" | "010" | "110"| 
  ("0" & prescaledfY & "000")           when "011"| "100",
  (29 downto 0 => '0')when others;
with q9(3)  select 
w8full <= 
  w8fulla - fYdec8          when '0',
  w8fulla + fYdec8          when others;
w8 <= w8full(26 downto 0) & "00";
sel8 <= w8(28 downto 24) & prescaledfY(23 downto 22);
SelFunctionTable8: selFunction7_4_F10_uid4

0 个答案:

没有答案