реклама на сайте
подробности

 
 
> Цифровая видеокамера
Ynicky
сообщение May 6 2010, 18:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Долго думал и решил создать новую тему.
Полтора года назад мое начальство дало задание проработать проект цифровой видеокамеры,
но потом от него отказалось. А мне это до сих пор не дает покоя.
На тот момент у меня уже был опыт создания SOC (систем на кристалле) на своих процессорах.
Был даже проект векторного 64 разрядного сопроцессора (SIMD). Правда он так и не был реализован в ASIC-е.
С тех пор, занимаясь "плановой" работой, я нахожу немного времени для проекта цифровой видеокамеры.
Уже сделано почти все, кроме вывода изображения на ЖК экран. Но надежда на то, что камера когда-нибудь
будет востребована, с каждым днем "тает". Конечно я понимаю, что это коммерчески не выгодно.
Тягаться с известными зарубежными фирмами, выпускающими видеокамеры, бессмысленно.
Но для души такой проект - то что надо. Даже если он и не будет реализован. Наработанный опыт не
пройдет даром. Мысль о том что проект никому не нужен заставила меня обратиться на форум.
Выложить его, как есть, всем желающим я не могу по причине того, что это собственность предприятия.
Тем более что ассемблер к RISC процессору и векторному сопроцессору написан не мною.
Так вот, чтобы не нарушать коммерческую тайну и право собственности, я решил разработать новый RISC
процессор и векторный сопроцессор к нему в свободное от основной работы время (т.е. дома). Так как
опыт и наработки уже есть, это займет не очень много времени. Их то я (RISC и VCP) и мог бы выложить на форуме.
Проблема только в программном обеспечении. Чтобы быстро отладить процессор и сопроцессор, нужен как минимум
ассемблер с простейшей функцией разделения кода и данных, так как RISC ядро имеет гарвардскую архитектуру.
А как максимум, не мешало бы иметь gcc или binutils для разработки прикладного ПО.
В принципе, написать ассемблер мог бы и я, но тогда это займет много времени и не будет стимула
выкладывать все на форуме, да и заниматься этим. Может найдется среди вас энтузиаст,
который бы взялся хотя бы за ассемблер. Если таких нет, может кто знает к кому обратиться?
"С" компилятор на основе LCC мог бы написать и я в дальнейшем (если не будет gcc или binutils).
Чтобы иметь представление о RISC ядре, выкладываю пока не полное описание.

Николай.
Прикрепленные файлы
Прикрепленный файл  torisc32.pdf ( 94.58 килобайт ) Кол-во скачиваний: 235
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Leka
сообщение May 17 2010, 17:58
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Вот что пришло в голову.

Длинное арифметическое выражение можно упростить до "ассемблерного" вида без использования низкоуровневых конструкций:
Код
// a = b+c*d+e;
int local;
local = c*d;
local += b;
a = local + e;


Длинный if-else упростить без явного использования условных "goto" в общем случае нельзя. Для примера можно взять:
if( (a==1 && b==2 || c==3 && d == 4 ) && ( e == 5 || f == 6) ) { ... } else { ... }

Но если запретить в "урезанном ЯВУ" изменение приоритета "||" и "&&" скобками, то появляется возможность упрощения до "ассемблерного" вида без явного использования условных "goto":
Код
// if( (a & b) == 1 &&  (c & d) == 2 || (e & f) == 3 ) { ... } else { ... }
int local;
if(
  ( local = a & b,
    local == 1 )
&&
  ( local = c & d,
    local == 2 )
||
  ( local = e & f,
    local == 3 )
){
  ...
} else {
  ...
}


Т.о. появляется возможность делать основную компиляцию в рамках ЯВУ:
Си/Паскаль/... --> "ассемблерный" Си/Паскаль/... --> "автокод" (улучшение читабельности) --> машинные коды. Как насчет открытой разработки такой цепочки?

"Автокод" - синтаксис наподобие:
Код
if
  local = a & b
  local == 1
and
  local = c & d
  local == 2
or
  local = e & f
  local == 3
then
  ...
else
  ...
end


Сообщение отредактировал Leka - May 17 2010, 17:52
Go to the top of the page
 
+Quote Post
Leka
сообщение May 19 2010, 21:33
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Leka @ May 17 2010, 21:58) *
Т.о. появляется возможность делать основную компиляцию в рамках ЯВУ:
Си/Паскаль/... --> "ассемблерный" Си/Паскаль/... --> "автокод" (улучшение читабельности) --> машинные коды.

Все-таки есть польза от форума smile.gif - обратил внимание, что текущий "автокод" очень похож на урезанный Си, в котором:
- отсутствуют типы, все переменные/массивы объявляются, как "static" (большой регистровый файл в памяти),
- только индексная адресация, массивы объявляются через "[ ]",
- упрощенная запись выражений - как в Паскале,
- нет структур, switch (взамен есть if-elsif-...-else).
Так что, пожалуй, выкину "автокод", а компиляцию сделаю с "ассемблерного" подмножества Си. Тогда будет цепочка: подмножество Си --> "ассемблерное" подмножество Си --> машинные коды.

Образец "ассемблерного" Си(кроме "printf") - на примере N-ферзей:
CODE
queens( static N ){
static
count,
arow[20],
aleft[20],
aright[20],
aposs[20],
poss,
place,
val,
pos,
pos1,
N1,
temp,
temp1;

count = 0;
N1= N & 1;
temp = 1 << N;
val = temp - 1;
temp = N >> 1;
poss = val >> temp;
arow[1] = 0;
aleft[1] = 0;
aright[1] = 0;
aposs[1] = poss;
pos = 1;
do{
if( poss != 0 ){
temp = -poss;
place = poss & temp;
temp = ~place;
poss = poss & temp;
if( pos == N1 && poss == 0 ){
count = count << 1;
}
if( pos != N ){
pos1 = pos + 1;
aposs[pos] = poss;
temp = arow[pos];
temp = temp | place;
arow[pos1] = temp;
temp = aleft[pos];
temp = temp | place;
temp = temp << 1;
aleft[pos1] = temp;
temp = aright[pos];
temp = temp | place;
temp = temp >> 1;
aright[pos1] = temp;
temp = arow[pos1];
temp1 = aleft[pos1];
temp = temp | temp1;
temp1 = aright[pos1];
temp = temp | temp1;
temp = ~temp;
temp = temp & val;
poss = temp;
pos = pos1;
}else{
count = count + 1;
}
}else{
pos = pos - 1;
poss = aposs[pos];
}
}while( pos != 0 );
if( N1 == 0 ){
count = count << 1;
}
return count;
}

main(){
static N;
for(N = 1; N < 15; N = N + 1){
printf("queens(%d)=%d \n", N, queens(N));
}
}

В "ассемблерном" подмножестве нет длинных выражений --> непосредственно транслируются в 3x-операндные машинные коды.

Предлагаю открытый проект софт-процессора с большим регистровым файлом в памяти(c Гарвардской архитектурой - Циклоны/Спартаны дадут ~100MIPS). Мне он не нужен(есть свой), но интересует развитие идеи компиляции в рамках ЯВУ(когда промежуточным языком является подмножество ЯВУ), и под этот проект готов взять на себя открытый компилятор с "ассемблерного" Си.

Сообщение отредактировал Omen_13 - Jun 1 2010, 19:26
Причина редактирования: Оформление кода
Go to the top of the page
 
+Quote Post
Ynicky
сообщение May 20 2010, 09:25
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ May 20 2010, 01:33) *
Предлагаю открытый проект софт-процессора с большим регистровым файлом в памяти(c Гарвардской архитектурой - Циклоны/Спартаны дадут ~100MIPS). Мне он не нужен(есть свой), но интересует развитие идеи компиляции в рамках ЯВУ(когда промежуточным языком является подмножество ЯВУ), и под этот проект готов взять на себя открытый компилятор с "ассемблерного" Си.

Замечательно!
Какого объема нужен регистровый файл?
PS. Может перейти в тему "Свои процессоры".

Николай.
Go to the top of the page
 
+Quote Post
Leka
сообщение May 20 2010, 15:21
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Ynicky @ May 20 2010, 13:25) *
Какого объема нужен регистровый файл?
PS. Может перейти в тему "Свои процессоры".

При большом регистровом файле константы удобно брать из регистров, а не из команды. Массивы - в отдельной памяти. Поэтому желаемое число регистров = число статических переменных + число констант.
Для Фон-Неймановской архитектуры логично все локальные переменные нерекурсивных(нереентрабельных) функций делать статическими - код все-равно занимает в разы больше места. Чем больше окно регистрового файла, тем лучше. У меня 1К при 36-разрядном коде: 6 бит - код операции, 30 бит - 3 операнда. Неиспользуемые регистры м/б заняты командами/данными(массивами). Для Гарвардской архитектуры лишние регистры никак не используются, но все-равно лучше взять по-максимуму (урезать проще, чем нарастить).

Можно продолжить в "Свои процессоры".

У меня отлаженная Фон-Неймановская архитектура(2 такта на инструкцию при ~100МГц), и незаконченная переределка на Гарвардскую(1 такт на инструкцию, кроме переходов) - задача отошла на задний план. Активное участие обещаю только в разработке компилятора (устрою перерывчик себе в "синтезе программ", а то "тихо шифером шурша, ...").
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ynicky   Цифровая видеокамера   May 6 2010, 18:10
- - x736C   Чем вас не устраивает готовые открытые RISC процес...   May 6 2010, 21:27
- - x736C   Еще немного почитал о вашем r32core.. И совсем ста...   May 6 2010, 22:34
- - des00   Цитата(Ynicky @ May 6 2010, 13:10) Пробле...   May 7 2010, 02:54
- - DRUID3   От меня Вы помощи не дождетесь! Сорри, юмор т...   May 7 2010, 03:31
|- - des00   Цитата(DRUID3 @ May 6 2010, 22:31) От ме...   May 7 2010, 03:34
- - asoneofus   Проект камеры, пользовательской, имеет примерно сл...   May 7 2010, 05:29
- - yes   Цитата(Ynicky @ May 6 2010, 22:10) А как ...   May 7 2010, 09:09
|- - Ynicky   Цитата(yes @ May 7 2010, 13:09) какую зад...   May 7 2010, 15:12
|- - yes   Цитата(Ynicky @ May 7 2010, 19:12) Сделал...   May 11 2010, 10:49
|- - ArtemDement   Цитата(yes @ May 11 2010, 14:49) да и я к...   Apr 7 2012, 16:23
|- - yes   Цитата(ArtemDement @ Apr 7 2012, 20:23) А...   Apr 12 2012, 15:40
|- - ArtemDement   Цитата(yes @ Apr 12 2012, 19:40) проект б...   Apr 13 2012, 03:03
|- - yes   Цитата(ArtemDement @ Apr 13 2012, 07:03) ...   Apr 17 2012, 11:17
- - Leka   Простой ассемблер(как в приложении) пишется/отлажи...   May 7 2010, 19:39
|- - Ynicky   Есть в интернете проект процессора XR16. К нему пр...   May 8 2010, 10:24
|- - Leka   Цитата(Ynicky @ May 8 2010, 14:24) Есть в...   May 12 2010, 18:41
|- - Ynicky   Цитата(Leka @ May 12 2010, 22:41) На осно...   May 13 2010, 05:16
- - Leka   Пожалуй, с разбора длинных логических выражений if...   May 13 2010, 20:36
- - Leka   Если увижу смысл в выкладывании исходника "ав...   May 14 2010, 06:33
|- - Ynicky   Цитата(Leka @ May 17 2010, 21:58) Си/Паск...   May 18 2010, 15:17
|- - Ynicky   Уже прикинул архитектуру с большим регистровым фай...   May 20 2010, 16:36
- - Leka   Мне ява неинтересна, тк ява не только не решает пр...   May 18 2010, 21:03
- - Andrey Filippov   Можно нескромный вопрос? А причем здесь вообще ...   May 19 2010, 03:30
|- - dinam   Добрый день, Андрей. Что-то вас давно на форуме не...   May 19 2010, 04:06
|- - Andrey Filippov   Цитата(dinam @ May 18 2010, 22:06) Добрый...   May 19 2010, 05:26
- - yes   пока не перешли в свои процессоры... про язык LIS...   May 20 2010, 11:10
- - Leka   В понедельник посмотрю.   May 20 2010, 18:34


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016