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

m
                             Operations over  GF (2 )—Polynomial Bases      203

                   when 2 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘1’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                    <= ‘0’; capt <= ‘0’;
                   when 3 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘1’; last
                    <= ‘0’; capt <= ‘0’;
                   when 4 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’;last
                   <= ‘0’; capt <= ‘0’;
                   when 5 => inic <= ‘1’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’;last
                    <= ‘0’; capt <= ‘0’;
                   when 6 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘1’; strt_mul <= ee(0);last
                   <= ‘0’; capt <= ‘0’;
                   when 7 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                    <= ‘0’; capt <= ‘0’;
                   when 8 => inic <= ‘0’; shift_r <= ‘1’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                    <= ‘0’; capt <= ‘0’;
                   when 9 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                    <= ‘1’; capt <= ‘0’;
                   when 10 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘1’; last
                   <= ‘0’; capt <= ‘0’;
                   when 11 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                   <= ‘0’; capt <= ‘0’;
                   when 12 => inic <= ‘0’; shift_r <= ‘0’; done <= ‘0’;
                   first <= ‘0’; strt_sq <= ‘0’; strt_mul <= ‘0’; last
                   <= ‘0’; capt <= ‘1’;
                 end case;
                 if reset = ‘1’ then current_state <= 0;
                 elsif clk’event and clk = ‘1’ then
                   case current_state is
                  when 0 => if start = ‘0’ then current_state <= 1;
                   end if;
                   when 1 => if start = ‘1’ then current_state <= 2;
                   end if;
                   when 2 => current_state <= 3;
                   when 3 => current_state <= 4;
                   when 4 => if (done_mult = ‘1’) then current_state <= 5;
                   end if;
                   when 5 => current_state <= 6;
                   when 6 => current_state <= 7;
                  when 7 => if (done_sq = ‘1’ and (ee(0) = ‘0’ or
                   done_mult = ‘1’))then current_state <= 8; end if;
   218   219   220   221   222   223   224   225   226   227   228