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

Последовательный делитель

Здравствуйте.

 

Я думаю что следующее утверждение верно. Среднее арифметическое 8-битных чисел - 8 битное число :)

Второе при делении накопленной суммы 8битных чисел на количество этих самых чисел результат всегда будет получен максимум за 8 тактов. Т.е для нахождения среднего будет необходимо 8 итераций последовательного деления.

 

Вопрос. Можно ли сделать итерационный делитель который будет осуществлять деление 16 битного аккумулятора на 8 битное количество чисел всегда за 8 тактов?

 

Посмотрел вот тут:

http://www.pwalsh.net/cs/ASPCode/NonRestoringDivision/test.asp

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

 

Заранее спасибо!

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


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

Сделал так

wire [16:0] tmp_div=PIX_NUM<<7;    

always@(..)
     if(div_we)
            begin
                accumulator<=accumulator-tmp_div;
                cur_divisor<=tmp_div>>1;    /* Pixel_num */
                bit_count<=8;  
            end
        else if (bit_count>4'b000)
            begin
                if (accumulator[16]==1'b0)
                    begin
                        accumulator <=accumulator-cur_divisor;     
                        result[bit_count-1'b1]<=1'b1;      
                        miso_avg<=1'b1;
                    end    
                else
                    begin
                            result[bit_count-1'b1]<=1'b0;    
                        miso_avg<=1'b0;
                        accumulator <= accumulator+cur_divisor;
                    end
                bit_count<=bit_count-1;      
                cur_divisor<= cur_divisor>>1;

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


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

Конечный результат я так понимаю вам нужно что - то подобное что и мне на

http://electronix.ru/forum/index.php?showtopic=43110

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


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

Vitaliy,

 

Otvet na vas vopros po moemu: DA. Delenie mozes sdelat tak:

a/b = a * (1/b). b 8 bitnoye chislo. Znacit, jevo inverse (izvini, ne znayu slovo po russki), mozno nayti v 8 taktov posledovatelnogo delenia. Mozna i na mnogo bistreye yesli ne posledovatelno. Vot tebe kusok koda katoriy delayet "inverse" v verilog:

 

input iClk;

input iReset_N;

input iClear;

input iEnable;

input [15:0] iRefPwr;

 

output [15:0] oQuotient;

 

reg [31:0] Acc;

reg [15:0] RefPwr;

 

reg [15:0] PreviousInverse;

 

wire signed [31:0] SubResult;

wire FlagSubresultLTE0;

 

always @(posedge iClk `ASYNC_RESET_DEF) begin

if(!iReset_N) begin

Acc <= 17'h1_0000;

RefPwr <= 16'h00ff;

PreviousInverse <= 16'h00ff;

end

else begin

if(iClear) begin

RefPwr <= iRefPwr;

Acc <= 17'h1_0000;

PreviousInverse <= oQuotient;

end

else begin

PreviousInverse <= PreviousInverse;

RefPwr <= RefPwr;

if(iEnable) Acc <= FlagSubresultLTE0 ? (Acc << 1) : ((SubResult << 1) + 1'b1);

end

end

end

 

assign SubResult = Acc - (RefPwr << 15);

assign FlagSubresultLTE0 = SubResult[31];

 

assign oQuotient = Acc[15:0];

 

nasol to ze samoye v matlab, mozet budet legce ponyat:

 

function result = divider (dividend, divisor)

acc = dividend;

 

for i=1:16

display i;

sub_result = acc - (32768 * divisor);

if(sub_result >= 0)

acc = (2*sub_result) + 1;

else

acc = acc * 2;

end

end

 

result = acc;

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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