Jump to content

    

Recommended Posts

Привет всем!

Я студент, и мое задание на диплом - реализовать адаптивный алгоритм (LMS) на ez-kit sharc 21061 фирмы analog devices.

Нашел на их сайте описание реализации fir-фильтра на assembler. Достаточно сложновато с учетом того, что не могу найти мануала по assembler для этих процев.

Не мог ли кто-нибудь посоветовать с чего мне начать? Где я могу найти мануал по ассемблеру?

И если кто-нибудь сконнектил бы со мной и посоветовал бы что-нибудь конкретное, то был бы очень признателен! Мое мыло m.v.s@bk.ru

Share this post


Link to post
Share on other sites

Мануал по ассемблеру для этих процов лежит на сайте ADI:

http://www.analog.com/static/imported-file...40__asm_man.pdf

Его недостаточно, надо также описание отдельных команд. Оно есть в приложении A,B к мануалу по аппаратноым средствам проца:

http://www.analog.com/static/imported-file...Revision2_1.pdf

В сети гуляет русскоязычный перевод этого мануала, но если хорошо с английским, то лучше смотреть в первоисточник.

А для написания непосредственно LMS по идее должна помочь глава 6 из вот этой книги:

http://www.analog.com/static/imported-file...ook_Vol.1.0.pdf

Share this post


Link to post
Share on other sites

Здравствуйте. В продолжении темы хотелось бы задать свой вопрос.

Только начинаю изучать ассемблер (BF-532). Есть задача написать код на ассемблере осуществляющий чтение из одного (unsigned char) массива {Cb1,Y1,Cr1,Y2,Cb2,Y3,Cr2...} и запись данных в три разных (short) массива {Y1,Y2,Y3...} , {Cb1,Cb2,Cb3....} и {Cr1, Cr2, Cr3, ....}.

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

Написал, как смог :-) :

 

ReadBuffer((unsigned char*)input, (short*)Y, (short*)CB, (short*)CR); // Вызываемая из C-файла функция.

 

Ассемблерная функция:

 

.section L1_code;

.global ReadBuffer;

.align 8;

_ReadBuffer:

 

LINK 0;

[--SP] = (R7:0, P5:0);

 

P0 = R0; // P0 = Pointer to the input buffer

P1 = R1; // u16 Y1

I2 = R2; // u16 CB

I3 = R3; // u16 CR

P5 = 4; //

MNOP;

 

LOOP Count_1 LC1 = P5; // 4 cycles

LOOP_BEGIN Count_1;

R0 = B [P0++] (Z);

W[i2++] = R0.l; // CR

R0 = B [P0++] (Z);

W[P1++] = R0; // Y1

R0 = B [P0++] (Z);

W[i3++] = R0.l; // CB

R0 = B [P0++] (Z);

W[P1++] = R0; // Y1

LOOP_END Count_1;

 

(R7:0,P5:0) = [sp++];

UNLINK;

RTS;

 

_ReadBuffer.end:

 

Кто-нибудь может профессиональным взглядом указать на недостатки, подсказать другой, более эффективный (быстрый) способ реализации?

Share this post


Link to post
Share on other sites

Где-то так:

....
I0=0;
R0=[P0++];
LSETUP (lp_begin, lp_end) LC0=P5;
lp_begin:
  (R7,R6) = byteunpack r1:0;  // r7.h=Y2; r7.l=cr1; r6.h=Y1; r6.l=cb1
  R5 = pack (R7.h, R6.h) || W[I2++]=R7.L;
  [P1++]=R5;
lp_end:  MNOP || W[I3++]=R6.L || R0=[P0++];
....

За правильность не ручаюсь - проверить нет возможности.

PS. Еще можно попробовать с помощью DMA...

Share this post


Link to post
Share on other sites
Есть задача написать код на ассемблере осуществляющий чтение из одного (unsigned char) массива {Cb1,Y1,Cr1,Y2,Cb2,Y3,Cr2...} и запись данных в три разных (short) массива {Y1,Y2,Y3...} , {Cb1,Cb2,Cb3....} и {Cr1, Cr2, Cr3, ....}. Требуется написать оптимальный по скорости код.

...

Кто-нибудь может ..подсказать другой, более эффективный (быстрый) способ реализации?

Для решения этой задачи лучше воспользоваться процессором BF547. Он распаковывает видео в формате ITU-R.BT656 вообще без использования ассемблера, т.е. исключительно с помощью EPPI+DMA, т.е., аппаратно.

Это дает максимально быстрый по скорости и максимально компактный "код"..

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this