|
Свои процессоры, Разработка своих процессоров со своей системой команд |
|
|
|
 |
Ответов
|
Mar 12 2009, 20:05
|
Участник

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

|
Цитата(SM @ Mar 12 2009, 22:58)  Как классно поставлен вопрос  Свои процы делаются для своих задач и исходя из каких-то своих требований. А не так вот - давайте, мол, все советуйте и систему команд, и реализацию. Хотя бы сказали, что это за процессор, какая архитектура в основе, и т.д. Сейчас видится МИСК архитектура. Арифметика целочисленная, под простую сигналку и ИО.
Сообщение отредактировал PVL - Mar 12 2009, 20:06
|
|
|
|
|
Mar 12 2009, 20:16
|
Участник

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

|
Цитата(Methane @ Mar 12 2009, 23:13)  Что такое МИСК? Почти тоже что РИСК только с бОльшим количеством рабочих регистров 256... 1024. Идеально для блочной памяти в ПЛИС.
|
|
|
|
|
Mar 12 2009, 20:23
|
Участник

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

|
Цитата(Methane @ Mar 12 2009, 23:20)  И тремя тактами на операцию? Не для сигналки можно и больше тактов, данные ведь независимые. Сейчас прикидываю конвейер на 8... 11 тактов. Затык с тем что разные инструкции имеют разное их число. Как райт бэк согласовывать.
|
|
|
|
|
Mar 12 2009, 20:39
|
Участник

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

|
Цитата(Methane @ Mar 12 2009, 23:37)  Как вы из регистрового файла, сразу несколько значений собираетесь вытаскивать за один такт? Не поверишь...  в плисках память двухпортовая.
|
|
|
|
|
Mar 12 2009, 20:53
|
Участник

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

|
Цитата(Methane @ Mar 12 2009, 23:49)  А я и не заметил.  Пусть по две такта на команду. Или по одному но с аккумулятором. Ж) На спартане 3Е при частоте 300 МГц за один такт ничего кроме логического И или пересылки не выполняется. Сложение 4 такта, умножение от 8 - ми. Деление пока совсем не фурычит. Плиске пришлось радиатор довесить - греется. Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию.
Сообщение отредактировал PVL - Mar 12 2009, 20:56
|
|
|
|
|
Mar 19 2009, 16:03
|
Участник

Группа: Участник
Сообщений: 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к. На нем не далеко уити от числомолотилки..
|
|
|
|
|
Mar 25 2009, 06:29
|

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

|
Цитата(PVL @ Mar 19 2009, 20:03)  57 бит нужно ядру ,чтобы выполнить инструкцию. Типа откуда взять, как переключить мультиплексор разультата, как положить. С положить напряг - умноженеи и деление результат 64 бита, умножение 9 тактов, сложение 4, деление 12 кароче баги с конвейером. А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16. Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант  )/Verilog (если конечно это возможно) Цитата(SM @ Mar 24 2009, 23:13)  нет, готовая среда для разработки С компайлера это gcc  А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг а не подскажите где можно взять готовую среду - gcc?
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Mar 25 2009, 08:33
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Maverick @ Mar 25 2009, 09:29)  А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16. Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант  )/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
|
|
|
|
Сообщений в этой теме
PVL Свои процессоры Mar 12 2009, 19:51          Methane Цитата(PVL @ Mar 12 2009, 22:53) На спарт... Mar 12 2009, 21:02            SM Цитата(PVL @ Mar 19 2009, 19:03) Во вторы... Mar 19 2009, 17:28              Maverick Цитата(SM @ Mar 25 2009, 12:33)
Спасибо... Mar 25 2009, 11:03    yes Цитата(PVL @ Mar 12 2009, 23:16) Почти то... Mar 25 2009, 18:01     PVL Цитата(yes @ Mar 25 2009, 22:01) я всегда... Mar 29 2009, 15:34      yes Цитата(PVL @ Mar 29 2009, 19:34) Это ЛАЖА... Mar 30 2009, 10:35 des00 Цитата(PVL @ Mar 12 2009, 13:51) Занимаюс... Mar 13 2009, 03:47 SM Цитата(des00 @ Mar 13 2009, 06:47) ЗЫ. на... Mar 13 2009, 07:51  Ynicky А у меня уже есть свой процессор. LCC осилил, а во... Mar 13 2009, 10:23   SM Цитата(Ynicky @ Mar 13 2009, 13:23) А у м... Mar 13 2009, 10:55    Harbour Цитата(SM @ Mar 13 2009, 12:55) Что интер... Mar 21 2009, 11:19   OverDrewk Цитата(Ynicky @ Mar 13 2009, 17:23) А у м... Oct 23 2009, 04:57    Ynicky Цитата(OverDrewk @ Oct 23 2009, 08:57) См... Oct 23 2009, 16:07     Leka Цитата(Ynicky @ Oct 23 2009, 20:07) Перед... Oct 23 2009, 17:32      Ynicky Цитата(Leka @ Oct 23 2009, 21:32) Ну и ка... Oct 23 2009, 19:27 Sefo Цитата(PVL @ Mar 12 2009, 23:53) Система ... Mar 13 2009, 11:40 PVL Что такое binutils? Готовая среда для разработки С... Mar 24 2009, 14:54 Ynicky Цитата(PVL @ Mar 24 2009, 17:54) Что тако... Mar 24 2009, 16:53 SM Цитата(PVL @ Mar 24 2009, 17:54) Что тако... Mar 24 2009, 19:13 Ynicky Чтобы не плодить новую тему, напишу сдесь. Если, к... Jun 13 2009, 11:04 Ynicky Выкладываю новую версию проекта.
Просьба сообщить,... Jun 14 2009, 14:30  Leka Цитата(Ynicky @ Jun 14 2009, 18:30) Прось... Jun 14 2009, 19:39  des00 Цитата(Ynicky @ Jun 14 2009, 09:30) Выкла... Jun 15 2009, 02:59   Ynicky Цитата(des00 @ Jun 15 2009, 06:59) для те... Jun 15 2009, 06:42   SFx Цитата(des00 @ Jun 15 2009, 06:59) для те... Jun 15 2009, 07:34  Ynicky Исправили ошибки загрузки/выгрузки.
Николай. Jun 15 2009, 17:13   Ynicky Подкорректировали проект.
Проверили прерывания.
До... Jun 17 2009, 15:07    Ynicky Написали JTAG на vhdl, чтобы можно было проект заш... Jul 1 2009, 05:52     Ynicky Добавили 2 блока к внутрисхемному эмулятору.
Отмод... Jul 8 2009, 07:06      Ynicky Добавили блок чтения регистрового файла в режиме о... Sep 10 2009, 18:18 Leka Команды Break и LU - что делают?
И зачем выделенн... Jun 14 2009, 18:27  Ynicky Цитата(Leka @ Jun 14 2009, 22:27) Команды... Jun 14 2009, 19:02 kuchynski Пользуюсь своим процессором 5 год, за это время и ... Oct 16 2009, 06:37 Aner Цитата(kuchynski @ Oct 16 2009, 09:37) По... Oct 16 2009, 09:58  kuchynski Цитата(Aner @ Oct 16 2009, 12:58) Тактова... Oct 21 2009, 09:10 Leka ~2K LUT - немного по сравнению с LEON/OpenRISC/Cor... Oct 23 2009, 20:26 Ynicky Цитата(Leka @ Oct 24 2009, 00:21) ~2K LUT... Oct 23 2009, 20:39  Leka Цитата(Ynicky @ Oct 24 2009, 00:30) Так э... Oct 23 2009, 20:45   Ynicky Цитата(Leka @ Oct 24 2009, 00:44) Вот и с... Oct 23 2009, 20:47    Leka Цитата(Ynicky @ Oct 24 2009, 00:47) А FPG... Oct 23 2009, 21:20 flipflop Кто-нибудь реализовал MMU? Поделитесь опытом.
Не ... Dec 5 2009, 14:19 Ynicky Цитата(flipflop @ Dec 5 2009, 17:19) Кто-... Dec 6 2009, 09:41  flipflop Цитата(Ynicky @ Dec 6 2009, 12:41) А что ... Dec 6 2009, 10:27   Ynicky Цитата(flipflop @ Dec 6 2009, 13:27) 3) Е... Dec 6 2009, 12:45    flipflop Цитата(Ynicky @ Dec 6 2009, 15:45) В моем... Dec 6 2009, 12:54     Ynicky Цитата(flipflop @ Dec 6 2009, 15:54) Ясно... Dec 6 2009, 13:06      flipflop Цитата(Ynicky @ Dec 6 2009, 16:06) В ASIC... Dec 6 2009, 13:21       Ynicky Цитата(flipflop @ Dec 6 2009, 16:21) Ого,... Dec 6 2009, 13:34        Ynicky Перешел в тему "Свои процессоры" из ... May 23 2010, 16:56         =AK= Цитата(Ynicky @ May 24 2010, 02:26) Предл... May 25 2010, 07:26 Leka Я бы упростил систему команд, все-таки большинству... May 24 2010, 21:01 Ynicky Я как раз и собираюсь "пощупать" процесс... May 25 2010, 05:43  Leka Цитата(Ynicky @ May 25 2010, 09:43) А как... May 25 2010, 08:01   Ynicky Цитата(Leka @ May 25 2010, 12:01) Пример ... May 25 2010, 11:12    Ynicky Начал делать АЛУ и сразу возникла мысль: в операци... May 25 2010, 15:21     Leka Цитата(Ynicky @ May 25 2010, 19:21) это н... May 25 2010, 17:45      Ynicky Подкорректировал описание. May 25 2010, 18:23   =AK= Цитата(Leka @ May 25 2010, 17:31) А зачем... May 26 2010, 07:43 Leka Проблема вот в чем.
На уровне "ассемблерног... May 25 2010, 21:47 Leka Если регистры не используются одновременно разными... May 26 2010, 08:28 =AK= Цитата(Leka @ May 26 2010, 17:58) Если ре... May 26 2010, 11:14 Leka Из:
Кодqueens( int N ){
int
count,
arow... May 26 2010, 12:36 =AK= Цитата(Leka @ May 26 2010, 22:06) Все пер... May 26 2010, 12:46  Ynicky Цитата(=AK= @ May 26 2010, 16:46) Я в одн... May 26 2010, 17:40   Leka Цитата(Ynicky @ May 26 2010, 21:40) Я пок... May 26 2010, 19:59    Ynicky Цитата(Leka @ May 26 2010, 23:59) Тогда р... May 27 2010, 09:21 Leka А нету временных переменных. Как после:
#define in... May 26 2010, 13:11 =AK= Цитата(Leka @ May 26 2010, 22:41) А нету ... May 27 2010, 08:59  Leka Цитата(=AK= @ May 27 2010, 12:59) ...Соот... May 27 2010, 09:31   =AK= Цитата(Leka @ May 27 2010, 19:01) сравнит... May 27 2010, 10:04   Ynicky Ну вот, выкладываю первую версию процессора.
Проек... May 30 2010, 07:15    des00 Цитата(Ynicky @ May 30 2010, 02:15) Ну во... May 30 2010, 10:32 Leka Гораздо проще придумать свой язык и компилятор к н... May 27 2010, 05:04 Leka Вся система команд с учетом архитектуры будет опис... May 27 2010, 08:08 Leka Презентации - неинтересно.
Первая попавшаяся нерек... May 27 2010, 12:19 Leka На этой неделе постараюсь выложить первую версию к... May 31 2010, 22:17 Ynicky Цитата(Leka @ Jun 1 2010, 02:17) Нужна ещ... Jun 1 2010, 05:56 Leka Чтобы проще было вылавливать ошибки в компиляторе ... Jun 1 2010, 22:29 Ynicky А что означают выражения?:
R6[R10]=R7;
R13=R3[R10]... Jun 2 2010, 06:50 Leka Косвенную адресацию памяти
R6[R10]=R7; --> S... Jun 2 2010, 10:31 Ynicky Закончил "в черне" процессор.
Вынес памя... Jun 2 2010, 19:34  Ynicky Цитата(Ynicky @ Jun 2 2010, 23:34) Описан... Jun 5 2010, 16:47 Leka Написал компилятор "ассемблерный" Си --... Jun 2 2010, 20:50 Leka Первая версия компилятора "ассемблерный... Jun 7 2010, 19:40 Leka У меня указатель на область локальных переменных а... Jun 7 2010, 21:25
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0
|
|
|