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

Делюсь: openMsp430 core for Cyclone-III

Бесплатный NIos II - это Economy (версия "e"). А версии "s" и "f" - платные.

На Web Edition даже с версией "e" всё равно только в режиме OpenCores получается ( так сообщает Quartus ) , хотя генерится не лимитированный по времени sof.

 

Warning (12189): OpenCore Simulation-Only Evaluation feature is turned on for all cores in the design

Warning (12191): Some cores in this design do not support the OpenCore Plus Hardware Evaluation feature

Warning (12192): "Nios II Processor (6AF7_00A2)" does not support the OpenCore Plus Hardware Evaluation feature

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


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

NIOS съедает так мало LE, потому что банк регистров сделан на блоках ОЗУ. А в этой поделке защелки и мультиплексоры. Аналог Mega128 легко влезает в 300... 500 LE и имеет гораздо более продвинутую систему команд.

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


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

Насколько я помню... не сказал бы что у Меги более продвинутая система, чем МСП (хотя МСП я лично недолюбливаю, даже не знаю почему... наверное потому что не АРМ =))

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


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

Здравствуйте, в файле в исходниках от openmsp430 - omsp_gpio.v есть следующее:

// Register base address (must be aligned to decoder bit width)
parameter       [14:0] BASE_ADDR   = 15'h0000;

// Decoder bit width (defines how many bits are considered for address decoding)
parameter              DEC_WD      =  6;

// Register addresses offset
parameter [DEC_WD-1:0] P1IN        = 'h20,                    // Port 1
                       P1OUT       = 'h21,
                       P1DIR       = 'h22,
                       P1IFG       = 'h23,
                       P1IES       = 'h24,
                       P1IE        = 'h25,
                       P1SEL       = 'h26,
                       P2IN        = 'h28,                    // Port 2
                       P2OUT       = 'h29,
                       P2DIR       = 'h2A,
                       P2IFG       = 'h2B,
                       P2IES       = 'h2C,
                       P2IE        = 'h2D,
                       P2SEL       = 'h2E,
                       P3IN        = 'h18,                    // Port 3
                       P3OUT       = 'h19,
                       P3DIR       = 'h1A,
                       P3SEL       = 'h1B,
                       P4IN        = 'h1C,                    // Port 4
                       P4OUT       = 'h1D,
                       P4DIR       = 'h1E,
                       P4SEL       = 'h1F,
                       P5IN        = 'h30,                    // Port 5
                       P5OUT       = 'h31,
                       P5DIR       = 'h32,
                       P5SEL       = 'h33,
                       P6IN        = 'h34,                    // Port 6
                       P6OUT       = 'h35,
                       P6DIR       = 'h36,
                       P6SEL       = 'h37;

// Register one-hot decoder utilities
parameter              DEC_SZ      =  (1 << DEC_WD);
parameter [DEC_SZ-1:0] BASE_REG    =  {{DEC_SZ-1{1'b0}}, 1'b1};

// Register one-hot decoder
parameter [DEC_SZ-1:0] P1IN_D      =  (BASE_REG << P1IN),     // Port 1
                       P1OUT_D     =  (BASE_REG << P1OUT),
                       P1DIR_D     =  (BASE_REG << P1DIR),
                       P1IFG_D     =  (BASE_REG << P1IFG),
                       P1IES_D     =  (BASE_REG << P1IES),
                       P1IE_D      =  (BASE_REG << P1IE),
                       P1SEL_D     =  (BASE_REG << P1SEL),
                       P2IN_D      =  (BASE_REG << P2IN),     // Port 2
                       P2OUT_D     =  (BASE_REG << P2OUT),
                       P2DIR_D     =  (BASE_REG << P2DIR),
                       P2IFG_D     =  (BASE_REG << P2IFG),
                       P2IES_D     =  (BASE_REG << P2IES),
                       P2IE_D      =  (BASE_REG << P2IE),
                       P2SEL_D     =  (BASE_REG << P2SEL),
                       P3IN_D      =  (BASE_REG << P3IN),     // Port 3
                       P3OUT_D     =  (BASE_REG << P3OUT),
                       P3DIR_D     =  (BASE_REG << P3DIR),
                       P3SEL_D     =  (BASE_REG << P3SEL),
                       P4IN_D      =  (BASE_REG << P4IN),     // Port 4
                       P4OUT_D     =  (BASE_REG << P4OUT),
                       P4DIR_D     =  (BASE_REG << P4DIR),
                       P4SEL_D     =  (BASE_REG << P4SEL),
                       P5IN_D      =  (BASE_REG << P5IN),     // Port 5
                       P5OUT_D     =  (BASE_REG << P5OUT),
                       P5DIR_D     =  (BASE_REG << P5DIR),
                       P5SEL_D     =  (BASE_REG << P5SEL),
                       P6IN_D      =  (BASE_REG << P6IN),     // Port 6
                       P6OUT_D     =  (BASE_REG << P6OUT),
                       P6DIR_D     =  (BASE_REG << P6DIR),
                       P6SEL_D     =  (BASE_REG << P6SEL);

 т.е. 6-битной шине  P1IN_D присваивается  BASE_REG смещенный влево на 32:

parameter [DEC_SZ-1:0] P1IN_D      =  (BASE_REG << P1IN)

Помогите разобраться как такое может быть в чем смысл такого смещения?

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


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

Помогите разобраться пожалуйста. В файле OpenMSP430_fpga.v две строчки:

	global	gbuf_clk_sys (.in( oc25m ), .out( clk_sys ) );
	global	gbuf_reset_n (.in( ~oRst ), .out( reset_n ) );

Выглядит как установка двух экзепляров модулей "global", но таких модулей в проекте я не нашел. Кто подскажет может это какие-то стандартные блоки veriloga типа "and"? Где можно увидеть их описание?

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


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

Остановился на этапе конвертирования в формат mif. Поставил MinGW, mspgcc отсюда: https://sourceforge.net/projects/mspgcc/files/latest/download, прописал в переменную Path расположение их /bin (от MinGW и mspgcc). 

В командной строке захожу в папку с проектом memledtest, ввожу "make" и получаю ошибку: prtscr.thumb.jpg.7688a2bdea73ce4cb1f84a05334eec90.jpg

MinGW вроде как отдельно работает- компилирует. Может mspgcc не подходит, (не подходящая версия), хотя пробовал и другие, и такой же результат был. Или в MinGW не хватает какого-то пакета, в чем может быть проблема? Что необходимо устанавливать в MinGW чтобы было достаточно для нормальной работы? 

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


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

В 15.04.2019 в 08:36, valerony сказал:

Выглядит как установка двух экзепляров модулей "global", но таких модулей в проекте я не нашел.

Скорее всего это глобальные буферы от Altera. После них сигнал выходит на глобальное дерево. Легко можно заменить на assign

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


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

20 minutes ago, dvlwork said:

Скорее всего это глобальные буферы от Altera. После них сигнал выходит на глобальное дерево. Легко можно заменить на assign

Спасибо, похоже на то... Я в своем проекте просто их закомментировал, и вообще модуль pll не включил. Похоже это для увеличения "fanout". Короче проект с имеющимся .mif с мигающим портом работает. Огромное спасибо автору особенно за этот mif т.к. позволил оценить функциональность. 

По поводу makefile разбираюсь..., пока нашел литературу по утилите make, как с ней работать и в таком духе... 

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


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

Когда запускаю компиляцию утилитой make, сообщает что отсутствует файл in430.h

И действительно, такого файла нигде нет ни в компиляторе mspgcc, ни в RedHat версии. Подскажите какой компилятор взять?

 

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


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

On 4/24/2019 at 2:18 PM, valerony said:

in430.h

in430.h присутствует в старых компиляторах, в некоторых он заменяется intrinsics.h, в общем с этим понятно, но теперь компилятор не понимает функцию __eint() , т.е. непонятно то ли файла не хватает, то ли в ручную прописывать что-то нужно

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


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

В intrinsics.h написано 

/* Insert an eint instruction.  This enables maskable interrupts, such
   as those from peripheral devices. */
void __eint (void);

т.е. нужно написать эту функцию самому. Странно что они сами ее не написали, вроде для всех msp430 она должна быть одинаковой. 

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


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

Все! получилось запустить! Пишу и запускаю команды на компиляцию в notepad++, загружаю и отлаживаю в minidebuger. Оказалось можно обойтись и без MinGW, я использовал make от AVR Studio4 который был установлен, наверняка можно и от какого либо другого тулчейна на gcc.  В планах переделать "под себя" rtl, сделать несколько версий: полную, среднюю, и минимальную. Возможно получится его уменьшить в размере, впереди много интересного...

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

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


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

Помогите понять в чем может быть проблема, на некоторых ПК openmsp430-minidebug.tcl запускается без проблем, на других выходит ошибка:

1065723434_.JPG.a8a139c77ce457b4d9bc18d818c27940.JPG

Точнее пробовал на двух ПК (на каких была возмножность) на работе, все запускается, даже непосредственно с флешки (Windows8, Windows10). А дома на нетбуке (Windows7), и на ПК (Windows10) выходит такая ошибка, как будто проблема с портами uart...

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

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


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

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

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

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

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

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

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

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

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

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