SM 0 13 марта, 2009 Опубликовано 13 марта, 2009 · Жалоба А у меня уже есть свой процессор. LCC осилил, а вот с ассемблером напряг. По образованию я не программист, но приходится писать программы для отладки железа. Мой совет, как уже прошедшего этот этап - берите binutils, и делайте на основе какого-то уже существующего там. Неделя на то, чтобы въехать, ну и неделя на то, чтобы свой сделать. Там, в бинутилс, "все для людей", т.е. добавить свою систему команд достаточно просто, при том, что сразу будут работать все фичи и объектного кода, и линковки. Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 13 марта, 2009 Опубликовано 13 марта, 2009 · Жалоба Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию. Какой формат инструкции? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 марта, 2009 Опубликовано 13 марта, 2009 · Жалоба Система команд пока не для записи во внешнюю память - аж 57 бит на инструкцию. Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
POVRU 0 19 марта, 2009 Опубликовано 19 марта, 2009 · Жалоба Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное) 57 бит нужно ядру ,чтобы выполнить инструкцию. Типа откуда взять, как переключить мультиплексор разультата, как положить. С положить напряг - умноженеи и деление результат 64 бита, умножение 9 тактов, сложение 4, деление 12 кароче баги с конвейером. Ну почему же - расширить до 64 бит, и при шине внешней памяти шириной 128 и больше бит очень даже смотреться будет, выборка по паре или более инструкций за такт. Хотя лично я предпочитаю variable length, правда ведущую за собой серьезные усложнения декодера и схемы буфера предвыборки. (я так понял, что речь все таки в данном случае идет о суперпроизводительной числомолотилке, а не о CPU общего назначения, перекошенного под что-то конкретное) Во первых систему команд, хочется уложить в 16 бит дабы не юзать БГА корпус. Народный проц хочу сделать. Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлет, на числомолотилке раз в 10 медленнее будет. Шина 96 бит - читать шесть инструкций за такт дабы работать на СРАМ. С динамикой пока лениво связываться. И вообще сейчас есть спартан 3Е - 500к. На нем не далеко уити от числомолотилки.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 19 марта, 2009 Опубликовано 19 марта, 2009 · Жалоба Во вторых уже не просто числомолотилка поскольку есть спец узлы под фурье и вейвлетТак это и говорит о том, что проц - числомолотилка. Иначе бы без таких узлов был бы просто проц общего назначения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 21 марта, 2009 Опубликовано 21 марта, 2009 · Жалоба Что интересно - я давал объявление на эту работу (за деньги), ни одного желающего не нашлось! Не то, что бы условия не устроили, а они были вполне щедрыми, а именно не было даже желающих! Не надо ля-ля, помню обьяву, просто был дико занят в тот момент ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
POVRU 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ynicky 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Что такое binutils? Готовая среда для разработки С - компайлера? Где взять? Подскажите , а то сейчас с программерами сношаюсь - достали :cranky: http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Что такое binutils? Готовая среда для разработки С - компайлера? нет, готовая среда для разработки С компайлера это gcc :) А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 25 марта, 2009 Опубликовано 25 марта, 2009 · Жалоба 57 бит нужно ядру ,чтобы выполнить инструкцию. Типа откуда взять, как переключить мультиплексор разультата, как положить. С положить напряг - умноженеи и деление результат 64 бита, умножение 9 тактов, сложение 4, деление 12 кароче баги с конвейером. А можно узнать как Вы делаете целочисленное деление за 12 тактов, наверное при разрядности данных 32 или 16. Поделитесь пожалуйста алгоритмом, а лучше описанием на VHDL (идеальный вариант :rolleyes: )/Verilog (если конечно это возможно) нет, готовая среда для разработки С компайлера это gcc :) А binutils это binutils - ассемблер, линкер, objdump, и прочее вокруг а не подскажите где можно взять готовую среду - gcc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 25 марта, 2009 Опубликовано 25 марта, 2009 · Жалоба А можно узнать как Вы делаете целочисленное деление за 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 25 марта, 2009 Опубликовано 25 марта, 2009 · Жалоба Спасибо за исчерпающий ответ :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 25 марта, 2009 Опубликовано 25 марта, 2009 · Жалоба Почти тоже что РИСК только с бОльшим количеством рабочих регистров 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
POVRU 0 29 марта, 2009 Опубликовано 29 марта, 2009 · Жалоба я всегда думал, что 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 к ушла вся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба Это ЛАЖА ,а не процессор. 300 ЛУТ таблиц 95 МГц. ААААхренеть производительность. У меня без нагрева шарашит на 240 МГц комерческий Спартан 3е работает. Индустриальные добегают до 300... 350 или 200 МГц на -40 градусов цельсия. Правда ПЛИС на 500 к ушла вся. а что С++ и eCos у Вас работают? имхо, не надо путать теплое с мягким - написать стэйтмашинку которая работает на спартане это одно (у меня в прошлом проекте автоматом вышло ~200МГц без каких-либо усилий с моей стороны), а написать процессор, который можно применять для процессорных задач (то есть компилятор, ОСь и т.п.) это совершенно другой уровень задачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться