Перейти к содержанию
    

Арифметический делитель.

Нужен делитель. Вот сделал пока по принципу деления "в столбик" для двоичных чисел, но что-то не устраивает ни скорость, ни размер. Вобщем, есть сомнения.

 

// делитель

module div (div, rmd, rdy, err, a, b, clk, start);

parameter sz_op = 16;
parameter sz_rez = 4;
parameter error = 'h0ffff;

output [sz_op-1:0] div, rmd;
output rdy, err;

input clk, start;
input [sz_op-1:0] b;
input [sz_op-1:0] a;

reg [sz_op-1:0] div, divtmp, rmd;
reg [sz_op:0] ain, tmp, bin;
reg [sz_rez:0] cnt;
reg rdy, eshl, err;

always @ (posedge clk or posedge start)
begin
    if (start)
 begin
     div <= error;
     
     if(b)
   begin
       ain <= a;
       ain[sz_op]<=1'b1;
       bin <= b;
       divtmp <= 0;
       err <= 1'b0;
       rdy <= 1'b0;
       eshl <= 1'b0;
       cnt <= 0;
   end
     else
   begin
       err <= 1'b1;
       rdy <= 1'b1;
   end
 end    
    else
   begin
       if(!rdy)
     if(!eshl)
         begin    // сдвиг делителя 
       tmp = ain;
       tmp = tmp - bin;
           
       if(tmp[sz_op])
           begin
         bin <= bin << 1; // нет заема, продолжаем двигать
         cnt <= cnt + 1;
           end
       else
           begin
         eshl <= 1'b1;
         bin <= bin >> 1;
           end
         end
     else
         if(!cnt)
       begin
           rdy <= 1'b1;
           div <= divtmp;
           rmd <= ain;
       end
         else
       begin
           divtmp = divtmp << 1;
           
           tmp = ain;
           tmp = tmp - bin;
           
           if(tmp[sz_op])
         begin // нет заема
             divtmp[0] = 1'b1;
             ain = tmp;
         end
           
           bin = bin >> 1;
           cnt = cnt - 1;
       end
       end
end

endmodule

 

Пожалуйста, помогите оптимизировать или подскажите другой алгоритм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужен делитель. Вот сделал пока по принципу деления "в столбик" для двоичных чисел, но что-то не устраивает ни скорость, ни размер. Вобщем, есть сомнения.

 

Пожалуйста, помогите оптимизировать или подскажите другой алгоритм.

 

Посмотри М.А.Карцев, В.А.Брик "Вычислительные системы и синхронная арифметика". Лучше чем там, я не видел нигде.

Как это ни странно, чудес не бывает. В любом случае придётся решать компромис между необходимым быстродействием и объёмом в кристалле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...