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

    

Свои процессоры

А у меня уже есть свой процессор. LCC осилил, а вот с ассемблером напряг.

По образованию я не программист, но приходится писать программы для отладки

железа.

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

 

Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих!

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


Ссылка на сообщение
Поделиться на другие сайты
Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию.

 

Какой формат инструкции?

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


Ссылка на сообщение
Поделиться на другие сайты
Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию.

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

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


Ссылка на сообщение
Поделиться на другие сайты
Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное)

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

 

 

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

Во первых систему команд, хочется уложить в 16 бит дабы не юзать БГА корпус. Народный проц хочу сделать.

Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлет, на числомолотилке раз в 10 медленнее будет.

Шина 96 бит - читать шесть инструкций за такт дабы работать на СРАМ. С динамикой пока лениво связываться.

И вообще сейчас есть спартан 3Е - 500к. На нем не далеко уити от числомолотилки..

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


Ссылка на сообщение
Поделиться на другие сайты
Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлет
Так это и говорит о том, что проц - числомолотилка. Иначе бы без таких узлов был бы просто проц общего назначения.

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


Ссылка на сообщение
Поделиться на другие сайты
Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих!

 

Не надо ля-ля, помню обьяву, просто был дико занят в тот момент ;)

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


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

Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали :cranky:

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


Ссылка на сообщение
Поделиться на другие сайты
Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали :cranky:

 

http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.gz

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


Ссылка на сообщение
Поделиться на другие сайты
Что такое binutils? Готовая среда для разработки С - компайлера?

нет, готовая среда для разработки С компайлера это gcc :) А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг

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


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

 

А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16.

Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант :rolleyes: )/Verilog (если конечно это возможно)

 

нет, готовая среда для разработки С компайлера это gcc :) А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16.

Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант :rolleyes: )/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

 

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

ну как бы gcc.gnu.org

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


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

 

Спасибо за исчерпающий ответ :)

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


Ссылка на сообщение
Поделиться на другие сайты
Почти тоже что РИСК только с бОльшим количеством рабочих регистров 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

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


Ссылка на сообщение
Поделиться на другие сайты
я всегда думал, что 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 к ушла вся.

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


Ссылка на сообщение
Поделиться на другие сайты
Это ЛАЖА ,а не процессор. 300 ЛУТ таблиц 95 МГц. ААААхренеть производительность. У меня без нагрева шарашит на 240 МГц комерческий Спартан 3е работает. Индустриальные добегают до 300... 350 или 200 МГц на -40 градусов цельсия. Правда ПЛИС на 500 к ушла вся.

 

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

 

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация