реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Кто -нибудь знаком с openmsp430, Это синтезабельное подобие MSP430
Yra
сообщение Nov 8 2009, 17:13
Сообщение #1


Местный
***

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


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
LordVader
сообщение Nov 8 2009, 20:11
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418



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

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

Сообщение отредактировал LordVader - Nov 8 2009, 20:13
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 8 2009, 20:23
Сообщение #3


Местный
***

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



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


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
LordVader
сообщение Nov 8 2009, 20:58
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 14 2009, 20:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 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
Прикрепленные файлы
Прикрепленный файл  ise_9_1_probe1.zip ( 471.72 килобайт ) Кол-во скачиваний: 25
Прикрепленный файл  mspgcc_cygwin_probe1.zip ( 18.15 килобайт ) Кол-во скачиваний: 28
 


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Nov 15 2009, 13:10
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 15 2009, 13:47
Сообщение #7


Местный
***

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



Цитата
А Вы правильно подключили ROM и RAM?
По описанию ram_cen, rom_cen, ram_wen активны нулем.
Может быть дело в этом?
Но может и не только в этом.
Код программы в "leds.mem" не соответствует вашему.

Это у меня учтено. Программа работает и доходит до того места без проблемм. Как видно из кода - сначала осуществляется разного рода адресация в RAM с целью записать и считать ячейку. Считанную ячейку я пытаюсь поместить в область периферии несколько раз подряд - помещается через раз почемуто. Файл leds.mem один и тотже (я перепроверил содержимое архивов на всякий случай.) Сам этот файл копировал из одной папочки в другую.
Пристёгиваю к проекту мою временную диаграмму и чуть подкорректированные два проектных файла (чтобы получить эту диаграмму). Диаграмм вместе с gtkwave в архиве

....не получается загрузить архив в 5 МБайт (
....залил на местный фтп в /upload/FPGA/GTKwave/winXP/
Прикрепленные файлы
Прикрепленный файл  top_level_tb.v ( 539 байт ) Кол-во скачиваний: 42
Прикрепленный файл  top_level.v ( 1.88 килобайт ) Кол-во скачиваний: 57
Прикрепленный файл  leds.vcd.gz ( 2.78 килобайт ) Кол-во скачиваний: 23
 


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Nov 15 2009, 14:46
Сообщение #8


Участник
*

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



В top_level.v подключите ram следующим образом:

.WE_I(~nWE_MSP_RAM),
.STB_I(~nSTB_MSP_RAM)//,

Николай.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 15 2009, 14:54
Сообщение #9


Гуру
******

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



Цитата(Yra @ Nov 8 2009, 20:13) *
не спрашивайте зачем - хочу...

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Nov 15 2009, 15:03
Сообщение #10


Участник
*

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



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


+1
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 15 2009, 16:51
Сообщение #11


Местный
***

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



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

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


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 15 2009, 17:07
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 15 2009, 17:25
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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 ядер самый писк моды.

smile.gif посмотрите на это:
/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 (уровень вентилей)


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Leka
сообщение Nov 15 2009, 18:57
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Yra @ Nov 9 2009, 00:23) *
главное чтоб ядро было не кривое

А конкретнее(идеального быть не может в принципе)?
Go to the top of the page
 
+Quote Post
Yra
сообщение Nov 15 2009, 20:27
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 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];
- типа синхронное ПЗУ с буферизацией, чтобы содержимое регистра инструкций не менялось во время выполнения инструкции.

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


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016