Yra 4 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба openMSP430 - интересная штучка на мой взгляд. есть даже GCC и порт FreeRtos. Опен соурс проект. Напрягает только это: // ROM Size // 9 -> 1kB // 10 -> 2kB // 11 -> 4kB // 12 -> 8kB // 13 -> 16kB `define ROM_AWIDTH 10 // RAM Size // 6 -> 128 B // 7 -> 256 B // 8 -> 512 B // 9 -> 1 kB // 10 -> 2 kB `define RAM_AWIDTH 6 Я тут только начал читат про эту штуку - особых проблемм с поднятием не вижу (игрался раньше с picoblaze), но это - огорчает... или всё таки нет в ядре ограничения на размер кода\данных (не игрался ещё с исходниками...). p.s. не спрашивайте зачем - хочу... умная периферия всегда нужна... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LordVader 0 8 ноября, 2009 Опубликовано 8 ноября, 2009 (изменено) · Жалоба Ограничение вроде одно - из ОЗУ выполняться не может. А я озу ставил и до 32 кило (с сотвествтуеющей правкой линкер-скрипта, ессно). И даже внешнее на ДЕ1 подключал ОЗУ. В целом, ядро хорошее, относительно мелкое (без дебага - в районе 1600 LE), а вот попытки сэмулировать периферию реальных чипов имхо нафиг не нужны. Да,и ещё у автора там некий бардак с инклудами (он и сам признаёт). Я эту тему, впрочем, уже тут поднимал... Изменено 8 ноября, 2009 пользователем LordVader Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ). На какой тактовой работать может? 50 МГц? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LordVader 0 8 ноября, 2009 Опубликовано 8 ноября, 2009 (изменено) · Жалоба периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ). На какой тактовой работать может? 50 МГц? Ну как и любое не оптимированное под ФПГА ядро, да ещё и цыск (что бы там не писали в ТИ), оно жрёт много, а работает медленно. Чуть-чуть до 40мгц не дотягивало, но это был ква 6.1 (для циклона 2). PS: Я автору кинул фикс под ДЕ1, он обещал выложить как только, так сразу (у него ребятёнок родился). Изменено 8 ноября, 2009 пользователем LordVader Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 14 ноября, 2009 Опубликовано 14 ноября, 2009 · Жалоба что -то cтранности какието наблюдаю в работе: вот фрагмент кода на С: int main(void) { volatile short *pA = 0x0206; volatile short B; *pA = 0xABCD; pA = 0; B = *(volatile short *)(0x206); *(volatile short *)(0x80) = B; *(volatile short *)(0x84) = B; *(volatile short *)(0x86) = B; *(volatile short *)(0x88) = B; for(;;); вот то что компильнул mspgcc: int main(void) { f036: 31 40 fe 02 mov #766, r1;#0x02fe volatile short *pA = 0x0206; volatile short B; *pA = 0xABCD; f03a: b2 40 cd ab mov #-21555,&0x0206;#0xabcd f03e: 06 02 pA = 0; B = *(volatile short *)(0x206); f040: 91 42 06 02 mov &0x0206,0(r1);0x0000(r1) f044: 00 00 *(volatile short *)(0x80) = B; f046: a2 41 80 00 mov @r1, &0x0080 *(volatile short *)(0x84) = B; f04a: a2 41 84 00 mov @r1, &0x0084 *(volatile short *)(0x86) = B; f04e: a2 41 86 00 mov @r1, &0x0086 *(volatile short *)(0x88) = B; f052: a2 41 88 00 mov @r1, &0x0088 for(;;); f056: ff 3f jmp $+0;abs 0xf056 } В область периферии копируется по адресу 0x0080 чиселка 0xABCD - это всё нормально. В область периферии копируется по адресу 0x0084 чиселка 0x0300 - это НЕ ПРАВИЛЬНО !!!. В область периферии копируется по адресу 0x0086 чиселка 0xABCD - это всё нормально. В область периферии копируется по адресу 0x0088 чиселка 0x0300 - это НЕ ПРАВИЛЬНО !!!. Ничего не понятно (: баг в ядре чтоль? Симулятор M*o*d S*E*6*1 Для чистоты эксперимента периферию заменил регистром always @(posedge CLK) if(per_en && per_wen) PER_REG <= #1 per_din; Огорчает в ядре то, что хотя оно и 16-тиразрядное - Програм Коунтер (PC) ТОЖЕ ШЕСТНАДЦАТИРАЗРЯДНЫЙ. т.е. без изврата со страницами памяти можно адресовать 64 КСлов. Архитектура ФонНеймана - тоесть из 64К надо вычесть размер памяти данных и размер страницы периферии (. В общем получается памяти меньше чем у AVR ise_9_1_probe1.zip mspgcc_cygwin_probe1.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ynicky 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 (изменено) · Жалоба что -то cтранности какието наблюдаю в работе: А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Николай. PS. Подключил как надо ROM и RAM - все заработало. Изменено 15 ноября, 2009 пользователем Ynicky Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Код программы в "leds.mem" не соответствует вашему. Это у меня учтено. Программа работает и доходит до того места без проблемм. Как видно из кода - сначала осуществляется разного рода адресация в RAM с целью записать и считать ячейку. Считанную ячейку я пытаюсь поместить в область периферии несколько раз подряд - помещается через раз почемуто. Файл leds.mem один и тотже (я перепроверил содержимое архивов на всякий случай.) Сам этот файл копировал из одной папочки в другую. Пристёгиваю к проекту мою временную диаграмму и чуть подкорректированные два проектных файла (чтобы получить эту диаграмму). Диаграмм вместе с gtkwave в архиве ....не получается загрузить архив в 5 МБайт ( ....залил на местный фтп в /upload/FPGA/GTKwave/winXP/ top_level_tb.v top_level.v leds.vcd.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ynicky 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба В top_level.v подключите ram следующим образом: .WE_I(~nWE_MSP_RAM), .STB_I(~nSTB_MSP_RAM)//, Николай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба не спрашивайте зачем - хочу... И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ynicky 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. +1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. Мне нужно разгрузить основную систему от рутины. Основная система - Linux - её нельзя дёргать по каждой ерунде. Время латентности высокое. Умонй периферии в данном случае недостаточно (типа ком-порт, заточенный под приёмы/передачу пакетов). Выход - или создавать стэйты или ставить ещё процессор для обработки рутины или освоить синтезированное ядро. Каждый из 3-х методов имеет достоинства и недостатки. Третий метод мне никак не даётся - я уже несколько раз поднимал этот вопрос на форумах: искал относительно небольшое ядро с открытым исходным кодом на RTL-уровне с с-компилятором. picobase(и клон типа pacoblase) - слишком убогое, microblase в чистом виде - не RTL (его клоны на опенкорках - сырые) и много ресурса плис скушает. MSP430 - как вариант устраивает. Появилось там относительно недавно. Захотел попробовать. Есть ещё вариант обратиться в сторону 51w от ментора, но оно больше ресурса вроде скушает чем это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба 51... 51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба 51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды. :) посмотрите на это: /pub/FPGA/_IPcores_/Mentor.Decrypted/m*8*0*5*1*e*w*.tar.gz по моему совсем не проще (минимум 12 тактов на инструкцию не устраивает) Cortex-M0 - не смотрел ещё. Xilinx славится тем, что корки его выглядят вот так: LUT4 mux3_lut (.I0(bit_select[0]), .I1(data_in[4]), .I2(data_in[5]), .I3(Tx_run), .O(data_45) )/* synthesis xc_props = "INIT=E4FF"*/; // synthesis translate_off defparam mux3_lut.INIT = 16'hE4FF; // synthesis translate_on LUT4 mux4_lut (.I0(bit_select[0]), .I1(data_in[6]), .I2(data_in[7]), .I3(Tx_run), .O(data_67) )/* synthesis xc_props = "INIT=E4FF"*/; // synthesis translate_off defparam mux4_lut.INIT = 16'hE4FF; // synthesis translate_on MUXF5 mux5_muxf5 ( .I1(data_23), .I0(data_01), .S(bit_select[1]), .O(data_0123) ); - не RTL (уровень вентилей) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба главное чтоб ядро было не кривое А конкретнее(идеального быть не может в принципе)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 15 ноября, 2009 Опубликовано 15 ноября, 2009 · Жалоба А конкретнее(идеального быть не может в принципе)? без багов, полностью синхронное. кстати, запахало. Не доглядел между строк: регистр инструкций в модуле uut/openMSP430_1/frontend_0/ir на самом деле никакой не регистр, а // Instruction register wire [15:0] ir = mdb_in; где mdb_in - выведено на внешнюю шину. Таким образом, надо ожидать от ПЗУ поведения: always @(posedge CLK_I) if(STB_I) DAT_O <= #1 ram[ADR_I]; - типа синхронное ПЗУ с буферизацией, чтобы содержимое регистра инструкций не менялось во время выполнения инструкции. это вроде работает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться