psL 0 26 августа, 2005 Опубликовано 26 августа, 2005 · Жалоба Нужен делитель. Вот сделал пока по принципу деления "в столбик" для двоичных чисел, но что-то не устраивает ни скорость, ни размер. Вобщем, есть сомнения. // делитель 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 Пожалуйста, помогите оптимизировать или подскажите другой алгоритм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AA55 0 27 августа, 2005 Опубликовано 27 августа, 2005 · Жалоба Нужен делитель. Вот сделал пока по принципу деления "в столбик" для двоичных чисел, но что-то не устраивает ни скорость, ни размер. Вобщем, есть сомнения. Пожалуйста, помогите оптимизировать или подскажите другой алгоритм. <{POST_SNAPBACK}> Посмотри М.А.Карцев, В.А.Брик "Вычислительные системы и синхронная арифметика". Лучше чем там, я не видел нигде. Как это ни странно, чудес не бывает. В любом случае придётся решать компромис между необходимым быстродействием и объёмом в кристалле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться