我有这段代码在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