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

 
 
22 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Свои процессоры, Разработка своих процессоров со своей системой команд
SM
сообщение Mar 13 2009, 10:55
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Ynicky @ Mar 13 2009, 13:23) *
А у меня уже есть свой процессор. LCC осилил, а вот с ассемблером напряг.
По образованию я не программист, но приходится писать программы для отладки
железа.

Мой совет, как уже прошедшего этот этап - берите binutils, и делайте на основе какого-то уже существующего там. Неделя на то, чтобы въехать, ну и неделя на то, чтобы свой сделать. Там, в бинутилс, "все для людей", т.е. добавить свою систему команд достаточно просто, при том, что сразу будут работать все фичи и объектного кода, и линковки.

Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих!
Go to the top of the page
 
+Quote Post
Sefo
сообщение Mar 13 2009, 11:40
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537



Цитата(PVL @ Mar 12 2009, 23:53) *
Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию.


Какой формат инструкции?
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 13 2009, 18:41
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(PVL @ Mar 12 2009, 23:53) *
Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию.

Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное)
Go to the top of the page
 
+Quote Post
PVL
сообщение Mar 19 2009, 16:03
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-02-07
Пользователь №: 24 959



Цитата(SM @ Mar 13 2009, 21:41) *
Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное)

57 бит нужно ядру ,чтобы выполнить инструкцию. Типа откуда взять, как переключить мультиплексор разультата, как положить. С положить напряг - умноженеи и деление результат 64 бита, умножение 9 тактов, сложение 4, деление 12 кароче баги с конвейером.


Цитата(SM @ Mar 13 2009, 21:41) *
Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное)

Во первых систему команд, хочется уложить в 16 бит дабы не юзать БГА корпус. Народный проц хочу сделать.
Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлет, на числомолотилке раз в 10 медленнее будет.
Шина 96 бит - читать шесть инструкций за такт дабы работать на СРАМ. С динамикой пока лениво связываться.
И вообще сейчас есть спартан 3Е - 500к. На нем не далеко уити от числомолотилки..
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 19 2009, 17:28
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(PVL @ Mar 19 2009, 19:03) *
Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлет
Так это и говорит о том, что проц - числомолотилка. Иначе бы без таких узлов был бы просто проц общего назначения.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Mar 21 2009, 11:19
Сообщение #21


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Цитата(SM @ Mar 13 2009, 12:55) *
Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих!


Не надо ля-ля, помню обьяву, просто был дико занят в тот момент wink.gif
Go to the top of the page
 
+Quote Post
PVL
сообщение Mar 24 2009, 14:54
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-02-07
Пользователь №: 24 959



Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали cranky.gif
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Mar 24 2009, 16:53
Сообщение #23


Участник
*

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



Цитата(PVL @ Mar 24 2009, 17:54) *
Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали cranky.gif


http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.gz
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 24 2009, 19:13
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(PVL @ Mar 24 2009, 17:54) *
Что такое binutils? Готовая среда для разработки С - компайлера?

нет, готовая среда для разработки С компайлера это gcc smile.gif А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 25 2009, 06:29
Сообщение #25


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(PVL @ Mar 19 2009, 20:03) *
57 бит нужно ядру ,чтобы выполнить инструкцию. Типа откуда взять, как переключить мультиплексор разультата, как положить. С положить напряг - умноженеи и деление результат 64 бита, умножение 9 тактов, сложение 4, деление 12 кароче баги с конвейером.


А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16.
Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант rolleyes.gif )/Verilog (если конечно это возможно)

Цитата(SM @ Mar 24 2009, 23:13) *
нет, готовая среда для разработки С компайлера это gcc smile.gif А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг


а не подскажите где можно взять готовую среду - gcc?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 25 2009, 08:33
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Maverick @ Mar 25 2009, 09:29) *
А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16.
Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант rolleyes.gif )/Verilog (если конечно это возможно)

А в чем вопрос-то? Например деление за два такта делается при помощи комбинаторного "полуделителя", который при N-битном входе дает N/2-битное частное и N-битный остаток. Деление за 3 такта - "третьделителя" - соотв N/3 и N. Ну и так далее.
вот пример полнофункционального делителя, который делит 8/8 бит за 1 такт, а 16/16 бит за два такта, с поддержкой дробного деления и чисел со знаком.
Код
module div(num, den, quot, rem, m16, divz, sn, sd, frct, n_in, n_out, cycle, clock);

input  [15:0] num; // numerator
input [15:0] den; // denominator
output [15:0] quot; // quotient
output [15:0] rem; // remainder
output divz, n_out; // divide-by-zero & sign bits
input m16, sn, sd, frct, n_in, cycle, clock; // 8/16_mode, numerator_signed, denominator_signed, fractional/normal, sign_from_PSW, cpu_cycle_#, clock

wire [15:0] int_den, int_num, int_quot, ext_num, ext_den, int_rem;

wire nsgn, dsgn, qsgn;
assign nsgn = sn & (m16 ? num[15] : num[7]);
assign dsgn = sd & (m16 ? den[15] : den[7]);
assign qsgn = nsgn ^ dsgn;

assign ext_num = m16 ? num : { {8{nsgn}}, num[7:0]};
assign ext_den = m16 ? den : { {8{dsgn}}, den[7:0]};

assign int_num = (ext_num ^ {16{nsgn}}) + nsgn;
assign int_den = (ext_den ^ {16{dsgn}}) + dsgn;

assign divz = !(|int_den);

wire en_frct = frct & (int_num < int_den); // fractional mode only if |num| < |den|
wire numz = !(|int_num);

reg [3:0] i;
reg [16:0] temp;
reg [15:0] save_rem;
reg [17:0] temp1;
reg [7:0] out, save_out;

always @*
begin
  temp = cycle ? {save_rem, int_num[7] & !(en_frct)} :
           (en_frct ? {int_num, 1'b0} : {16'h0000,int_num[m16?15:7]});
  for (i=0; i<8; i = i+1'b1)
    begin
      temp1 = temp - int_den;
      out[7-i] = !temp1[17];
      if (i != 7) temp = {(temp1[17] ? temp[15:0] : temp1[15:0]), int_num[(cycle | !m16) ? (6-i) : (14-i)] & !(en_frct)};
        else temp = {1'b0, (temp1[17] ? temp[15:0] : temp1[15:0])};
    end
end
  
always @(posedge clock)
  if (!cycle) save_rem <= temp[15:0];

always @(posedge clock)
  if (!cycle) save_out <= out;

assign int_quot = {save_out, out};
assign int_rem = temp[15:0];

// sign of remaider :
// sign of remainder is equal to sign of numerator.
assign rem = (int_rem ^ {16{nsgn}}) + nsgn;  

// sign of quotient :
// fractional mode - quotient always positive
// integer mode - quotient has sign of den*num
wire t_qsgn = qsgn & !frct;
assign quot = (int_quot ^ {16{t_qsgn}}) + t_qsgn;

// sign output:
// fractional mode - if numerator not zero, put sign into N
// integer mode - put sign into N
assign n_out = (!numz | !frct) ? qsgn : n_in;

endmodule


Цитата(Maverick @ Mar 25 2009, 09:29) *
а не подскажите где можно взять готовую среду - gcc?

ну как бы gcc.gnu.org
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 25 2009, 11:03
Сообщение #27


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(SM @ Mar 25 2009, 12:33) *


Спасибо за исчерпающий ответ smile.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
yes
сообщение Mar 25 2009, 18:01
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(PVL @ Mar 12 2009, 23:16) *
Почти тоже что РИСК только с бОльшим количеством рабочих регистров 256... 1024. Идеально для блочной памяти в ПЛИС.


я всегда думал, что MISC это minimal instruction ...
то есть по русски - безоперандный (или стековый) комп
http://en.wikipedia.org/wiki/Minimal_instr...on_set_computer
(кстати там по ссылке есть и OISC one ... - имхо, cool)

примеры таких - всякие лисп/форт/жава компутеры
для ПЛИС есть ZPU (имхо, интересно, но мне не увы нужно)
http://www.zylin.com/zpu.htm
Go to the top of the page
 
+Quote Post
PVL
сообщение Mar 29 2009, 15:34
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-02-07
Пользователь №: 24 959



Цитата(yes @ Mar 25 2009, 22:01) *
я всегда думал, что MISC это minimal instruction ...
то есть по русски - безоперандный (или стековый) комп
http://en.wikipedia.org/wiki/Minimal_instr...on_set_computer
(кстати там по ссылке есть и OISC one ... - имхо, cool)

примеры таких - всякие лисп/форт/жава компутеры
для ПЛИС есть ZPU (имхо, интересно, но мне не увы нужно)
http://www.zylin.com/zpu.htm

Это ЛАЖА ,а не процессор. 300 ЛУТ таблиц 95 МГц. ААААхренеть производительность. У меня без нагрева шарашит на 240 МГц комерческий Спартан 3е работает. Индустриальные добегают до 300... 350 или 200 МГц на -40 градусов цельсия. Правда ПЛИС на 500 к ушла вся.
Go to the top of the page
 
+Quote Post
yes
сообщение Mar 30 2009, 10:35
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(PVL @ Mar 29 2009, 19:34) *
Это ЛАЖА ,а не процессор. 300 ЛУТ таблиц 95 МГц. ААААхренеть производительность. У меня без нагрева шарашит на 240 МГц комерческий Спартан 3е работает. Индустриальные добегают до 300... 350 или 200 МГц на -40 градусов цельсия. Правда ПЛИС на 500 к ушла вся.


а что С++ и eCos у Вас работают?

имхо, не надо путать теплое с мягким - написать стэйтмашинку которая работает на спартане это одно (у меня в прошлом проекте автоматом вышло ~200МГц без каких-либо усилий с моей стороны), а написать процессор, который можно применять для процессорных задач (то есть компилятор, ОСь и т.п.) это совершенно другой уровень задачи
Go to the top of the page
 
+Quote Post

22 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 09:27
Рейтинг@Mail.ru


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