Page 163 - Hardware Implementation of Finite-Field Arithmetic
P. 163

146    Cha pte r  S i x


               vhd, reduced version of  adder_subtractor.vhd). The complete VHDL
               file pse-udo_Euclidean_divider.vhd is available at www.arithmetic-
               circuits. org. The entity declaration is
               entity pseudo_Euclidean_divider is
               port(
                  g, h: in polynomial;
                  clk, reset, start: in std_logic;
                  z: out polynomial;
                  done: out std_logic
               );
               end pseudo_Euclidean_divider;
                  The VHDL architecture corresponding to the circuit of Fig. 6.1 is
               the following:

               long_c(m) <= “00000000”; long_e(m) <= “00000000”;
               definition: for i in 0 to m-1 generate
                  long_c(i) <= c(i); long_e(i) <= e(i);
               end generate;
               with sel_sub select sub1 <= n_a when ‘0’, long_c when
               others;
               with sel_sub select nbe <= n_b when ‘0’, long_e when
               others;
               functions1: for i in 0 to m generate
                  m1: mod_239_multiplier port map(coef, nbe(i),
                  sub2(i));
                  s1: subtractor port map(sub1(i), sub2(i), out1(i));
               end generate;
               by_x1: for i in 1 to m-1 generate sub3(i) <= e(i-1); end
               generate;
               sub3(0) <= “00000000”;
               functions2: for i in 0 to m-1 generate
                  m2: mod_239_multiplier port map(e(m-1), f(i),
                  sub4(i));
                  s2: subtractor port map(sub3(i), sub4(i), out2(i));
               end generate;
               dr_minus1 <= deg_r - 1; db_minus1 <= deg_b - 1; dif <=
               deg_a - deg_b;
               inverter: mod_239_inverter port map(clk, n_b(m), inv_
               out);
               m3: mod_239_multiplier port map(n_a(m), inv_out, coef);
               functions3: for i in 0 to m-1 generate
                  m4: mod_239_multiplier port map(inv_out, d(i), z(i));
               end generate;
               by_x2: for i in 1 to m generate nr_by_x(i) <= n_r(i-1);
               end generate;
               nr_by_x(0) <= “00000000”;
               with sel_r select next_r <= out1 when ‘0’, nr_by_x when
               others;
               with sel_r select next_dr <= deg_a when ‘0’, dr_minus1
               when others;
               definition2: for i in 0 to m-1 generate
   158   159   160   161   162   163   164   165   166   167   168