|
Кто -нибудь знаком с openmsp430, Это синтезабельное подобие MSP430 |
|
|
|
Nov 8 2009, 17:13
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
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. не спрашивайте зачем - хочу... умная периферия всегда нужна...
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 8 2009, 20:58
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Цитата(Yra @ Nov 8 2009, 23:23)  периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ). На какой тактовой работать может? 50 МГц? Ну как и любое не оптимированное под ФПГА ядро, да ещё и цыск (что бы там не писали в ТИ), оно жрёт много, а работает медленно. Чуть-чуть до 40мгц не дотягивало, но это был ква 6.1 (для циклона 2). PS: Я автору кинул фикс под ДЕ1, он обещал выложить как только, так сразу (у него ребятёнок родился).
Сообщение отредактировал LordVader - Nov 8 2009, 20:59
|
|
|
|
|
Nov 14 2009, 20:11
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
что -то 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
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 13:10
|
Участник

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

|
Цитата(Yra @ Nov 14 2009, 23:11)  что -то cтранности какието наблюдаю в работе: А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Николай. PS. Подключил как надо ROM и RAM - все заработало.
Сообщение отредактировал Ynicky - Nov 15 2009, 13:40
|
|
|
|
|
Nov 15 2009, 13:47
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Код программы в "leds.mem" не соответствует вашему. Это у меня учтено. Программа работает и доходит до того места без проблемм. Как видно из кода - сначала осуществляется разного рода адресация в RAM с целью записать и считать ячейку. Считанную ячейку я пытаюсь поместить в область периферии несколько раз подряд - помещается через раз почемуто. Файл leds.mem один и тотже (я перепроверил содержимое архивов на всякий случай.) Сам этот файл копировал из одной папочки в другую. Пристёгиваю к проекту мою временную диаграмму и чуть подкорректированные два проектных файла (чтобы получить эту диаграмму). Диаграмм вместе с gtkwave в архиве ....не получается загрузить архив в 5 МБайт ( ....залил на местный фтп в /upload/FPGA/GTKwave/winXP/
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 14:46
|
Участник

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

|
В top_level.v подключите ram следующим образом:
.WE_I(~nWE_MSP_RAM), .STB_I(~nSTB_MSP_RAM)//,
Николай.
|
|
|
|
|
Nov 15 2009, 15:03
|
Участник

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

|
Цитата(zltigo @ Nov 15 2009, 17:54)  И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. +1
|
|
|
|
|
Nov 15 2009, 16:51
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. Мне нужно разгрузить основную систему от рутины. Основная система - Linux - её нельзя дёргать по каждой ерунде. Время латентности высокое. Умонй периферии в данном случае недостаточно (типа ком-порт, заточенный под приёмы/передачу пакетов). Выход - или создавать стэйты или ставить ещё процессор для обработки рутины или освоить синтезированное ядро. Каждый из 3-х методов имеет достоинства и недостатки. Третий метод мне никак не даётся - я уже несколько раз поднимал этот вопрос на форумах: искал относительно небольшое ядро с открытым исходным кодом на RTL-уровне с с-компилятором. picobase(и клон типа pacoblase) - слишком убогое, microblase в чистом виде - не RTL (его клоны на опенкорках - сырые) и много ресурса плис скушает. MSP430 - как вариант устраивает. Появилось там относительно недавно. Захотел попробовать. Есть ещё вариант обратиться в сторону 51w от ментора, но оно больше ресурса вроде скушает чем это.
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 17:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Yra @ Nov 15 2009, 19:51)  51... 51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 15 2009, 17:25
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата(zltigo @ Nov 15 2009, 20:07)  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 (уровень вентилей)
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 20:27
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата А конкретнее(идеального быть не может в принципе)? без багов, полностью синхронное. кстати, запахало. Не доглядел между строк: регистр инструкций в модуле 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]; - типа синхронное ПЗУ с буферизацией, чтобы содержимое регистра инструкций не менялось во время выполнения инструкции. это вроде работает...
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|