nabbla (nabbla1) wrote,
nabbla
nabbla1

Доработка видеопроцессора (3)

Ну и теперь нужно компилятор привести в соответствие с "железом".





Вот так в файле конфигурации описывались 4 команды видеопроцессора по SrcAddr (т.е где он выступает как источник данных):

  object TQuatCoreCommand
    Key = 'GPUL'
    Code = 136
    Mask = 254
    Description = 'Read Luminance/Low 1st sum word from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUH'
    Code = 138
    Mask = 254
    Description = 'Read Hor coord/High 1st sum word from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUPL'
    Code = 140
    Mask = 254
    Description = 'Read Product Low from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUPH'
    Code = 142
    Mask = 254
    Description = 'Read Product High from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end


Добавить ещё 4 - вообще дело техники!

Маску исправляем с 254 = 0xFE на 255 = 0xFF. Ну и вписываем недостающее:
  object TQuatCoreCommand
    Key = 'GPUL'
    Code = 136
    Mask = 255
    Description = 'Read Luminance/Low 1st sum word from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'BGPUL'
    Code = 137
    Mask = 255
    Description = 'Begin row (change odd/even flag) + GPUL'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUH'
    Code = 138
    Mask = 255
    Description = 'Read Hor coord/High 1st sum word from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'BGPUH'
    Code = 139
    Mask = 255
    Description = 'Begin row (change odd/even flag) + GPUH'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUPL'
    Code = 140
    Mask = 255
    Description = 'Read Product Low from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'BGPUPL'
    Code = 141
    Mask = 255
    Description = 'Begin row (change odd/even flag) + GPUPL'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'GPUPH'
    Code = 142
    Mask = 255
    Description = 'Read Product High from Graphic Processor (which reads image from sensor)'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end
  object TQuatCoreCommand
    Key = 'BGPUPH'
    Code = 143
    Mask = 255
    Description = 'Begin row (change odd/even flag) + GPUPH'
    Place = [cpSrc]
    Resources = []
    DataType = dtNumeric
  end


Очень простые команды. Запустим компилятор, чтобы убедиться, что он прочитал файл конфигурации и не нашёл ничего криминального:

Загружаем файл конфигурации транслятора
Файл конфигурации прочитан, готовы к работе


Хорошо, это обнадёживает. И попробуем теперь откомпилить нашу программу, куда был добавлен BGPUL в начале цикла по строкам. Да, компилится нормально, вот кусочек листинга:

ProcessFrame proc           
18  A106                     j           1       ;отныне и во веки веков!    
19  200B                     ACQ         VSync   ;"застревает" до тех пор, пока кадровый импульс не придёт
1A  A20C                     k           TopRows ;TopRows должны быть определены в основном файле                                                
1B  200D  @@topRows:         ACQ         HSync
1C  AA0E                     kLOOP       @@topRows
1D  FE09                     [SP+2j]     -1      ;в [SP+2] храним номер строки.
1E  B00F                     JMP         @@FinalRange    ;чтобы СНАЧАЛА отправить запрос, а потом уже смотреть результат, так почему-то удобнее                  
1F  8989  @@newRow:          NOP         BGPUL
20  FE80                     [SP+2j]     Acc
21  CD10                     X           ActivePoints    ;начинаем цикл по всем активным точкам
22  8A0A  @@ResetPending:    C           0           ;уж явно не 0x8000          
23  8088  @@ActPointsStart:  Acc         GPUL        ;яркость самой яркой точки на отрезке
24  F288                     [SP+2j+1]   GPUL


Какая забавная команда получается 8989. Первые 0x89 - это NOP (так уж случайно получилось), правые - BGPUL (тоже случайно получилось). И сейчас встретились два одиночества.


Ну и поглядим таблицу команд процессора, часть SrcAddr:
Адрес +0 +1 +2 +3 +4 +5 +6 +7
00 IMM0 IMM1 IMM2 IMM3 IMM4 IMM5 IMM6 IMM7
08 IMM8 IMM9 IMM10 IMM11 IMM12 IMM13 IMM14 IMM15
10 IMM16 IMM17 IMM18 IMM19 IMM20 IMM21 IMM22 IMM23
18 IMM24 IMM25 IMM26 IMM27 IMM28 IMM29 IMM30 IMM31
20 IMM32 IMM33 IMM34 IMM35 IMM36 IMM37 IMM38 IMM39
28 IMM40 IMM41 IMM42 IMM43 IMM44 IMM45 IMM46 IMM47
30 IMM48 IMM49 IMM50 IMM51 IMM52 IMM53 IMM54 IMM55
38 IMM56 IMM57 IMM58 IMM59 IMM60 IMM61 IMM62 IMM63
40 IMM-64 IMM-63 IMM-62 IMM-61 IMM-60 IMM-59 IMM-58 IMM-57
48 IMM-56 IMM-55 IMM-54 IMM-53 IMM-52 IMM-51 IMM-50 IMM-49
50 IMM-48 IMM-47 IMM-46 IMM-45 IMM-44 IMM-43 IMM-42 IMM-41
58 IMM-40 IMM-39 IMM-38 IMM-37 IMM-36 IMM-35 IMM-34 IMM-33
60 IMM-32 IMM-31 IMM-30 IMM-29 IMM-28 IMM-27 IMM-26 IMM-25
68 IMM-24 IMM-23 IMM-22 IMM-21 IMM-20 IMM-19 IMM-18 IMM-17
70 IMM-16 IMM-15 IMM-14 IMM-13 IMM-12 IMM-11 IMM-10 IMM-9
78 IMM-8 IMM-7 IMM-6 IMM-5 IMM-4 IMM-3 IMM-2 IMM-1
80 Acc Acc UAC C Acc Acc UAC C
88 GPUL BGPUL GPUH BGPUH GPUPL BGPUPL GPUPH BGPUPH
90 IN IN IN IN IN IN IN IN
98 [ER++] [ER++] [ER++] [ER++] [ER++] [ER++] [ER++] [ER++]
A0 i j k Inv ijk ijk ijk ijk
A8 i j k Inv ijk ijk ijk ijk
B0 CALL0 CALL1 CALL2 CALL3 CALL4 CALL5 CALL6 CALL7
B8 CALL8 CALL9 CALLA CALLB CALLC CALLD CALLE CALLF
C0 [X+1] [X+2i+1] [X+2j+1] [X+4j+1] [X+i] [X+3i] [X+2j+i] [X+4j+i]
C8 [X+k] [X+2i+k] [X+2j+k] [X+4j+k] [X+i^j] X [X+2j+i^j] [X+4j+i^j]
D0 [Y+1] [Y+2i+1] [Y+2j+1] [Y+Treug[j]+1] [Y+i] [Y+3i] [Y+2j+i] [Y+Treug[j]+i]
D8 [Y+k] [Y+2i+k] [Y+2j+k] [Y+Treug[j]+k] [Y+i^j] Y [Y+2j+i^j] [Y+Treug[j]+i^j]
E0 [Z+1] [Z+2i+1] [Z+2j+1] [Z+4j+1] [Z+i] [Z+3i] [Z+2j+i] [Z+4j+i]
E8 [Z+k] [Z+2i+k] [Z+2j+k] [Z+4j+k] [Z+i^j] Z [Z+2j+i^j] [Z+4j+i^j]
F0 [SP+1] [SP+2i+1] [SP+2j+1] [SP++] [SP+i] [SP+3i] [SP+2j+i] [i-1+SP++]
F8 [SP+k] [SP+2i+k] [SP+2j+k] [--SP+k] [SP] SP [SP+2j] [--SP]


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

И на сегодня пока всё. Завтра испробуем. Всяко посмеёмся.
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

  • Нахождение двух самых отдалённых точек

    Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно…

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Огари разговаривают

    Сегодня по пути на работу встретил огарей прямо в Лосином острове, на берегу Яузы. Эти были на удивление бесстрашны, занимались своими делами, не…

  • Ковыряемся с сантехникой

    Наконец-то закрыл сколько-нибудь пристойно трубы, подводящие к смесителю, в квартире в Москве: А в воскресенье побывал на даче, там очередная…

  • Мартовское велосипедное

    Продолжаю кататься на работу и с работы на велосипеде, а также в РКК Энергию и на дачу. Хотя на две недели случился перерыв, очередная поломка,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments