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

Кто -нибудь знаком с openmsp430

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. не спрашивайте зачем - хочу... умная периферия всегда нужна...

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


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

Ограничение вроде одно - из ОЗУ выполняться не может. А я озу ставил и до 32 кило (с сотвествтуеющей правкой линкер-скрипта, ессно). И даже внешнее на ДЕ1 подключал ОЗУ. В целом, ядро хорошее, относительно мелкое (без дебага - в районе 1600 LE), а вот попытки сэмулировать периферию реальных чипов имхо нафиг не нужны.

 

Да,и ещё у автора там некий бардак с инклудами (он и сам признаёт). Я эту тему, впрочем, уже тут поднимал...

Изменено пользователем LordVader

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


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

периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ).

На какой тактовой работать может? 50 МГц?

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


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

периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ).

На какой тактовой работать может? 50 МГц?

 

Ну как и любое не оптимированное под ФПГА ядро, да ещё и цыск (что бы там не писали в ТИ), оно жрёт много, а работает медленно. Чуть-чуть до 40мгц не дотягивало, но это был ква 6.1 (для циклона 2).

 

PS: Я автору кинул фикс под ДЕ1, он обещал выложить как только, так сразу (у него ребятёнок родился).

Изменено пользователем LordVader

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


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

что -то 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

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


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

что -то cтранности какието наблюдаю в работе:

 

А Вы правильно подключили ROM и RAM?

По описанию ram_cen, rom_cen, ram_wen активны нулем.

Может быть дело в этом?

Но может и не только в этом.

 

Николай.

 

PS. Подключил как надо ROM и RAM - все заработало.

Изменено пользователем Ynicky

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


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

А Вы правильно подключили 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

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


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

не спрашивайте зачем - хочу...

И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению.

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


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

И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению.

 

+1

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


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

И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению.

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

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


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

51...

51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды.

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


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

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 (уровень вентилей)

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


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

главное чтоб ядро было не кривое

А конкретнее(идеального быть не может в принципе)?

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


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

А конкретнее(идеального быть не может в принципе)?

без багов, полностью синхронное.

 

кстати, запахало. Не доглядел между строк: регистр инструкций в модуле

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];

- типа синхронное ПЗУ с буферизацией, чтобы содержимое регистра инструкций не менялось во время выполнения инструкции.

 

это вроде работает...

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...