У меня есть этот код, реализующий алгоритм деления с плавающей запятой в 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