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

 
 
> Lattice Mico8 Soft Processor, поделитесь опытом
sonycman
сообщение Nov 6 2015, 00:20
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Доброго времени суток!

Недавно начал осваивать ПЛИС, и потихоньку добрался до имплементации простенького софт процессора.
Остановился на лэттисовском Mico8, как наиболее доступном, как мне показалось.

Несколько удивил некоторый аскетизм среды разработки, в том смысле, что по умолчанию я не нашёл возможности посмотреть получившийся код, который будет исполнять процессор.
Так ещё до кучи оказалось, что и отладка JTAG для Мико8 отсутствует как класс.

В общем - чёрный ящичек такой, никому не покажу, что и как smile3046.gif

Порылся в доках (с компилятором GCC я практически не знаком) и нашёл таки, как включить файл карты памяти линкера (опция -Map) и ассемблерных файлов, которые генерирует компилятор (опция -save-temps).
Стало немного понятно, как выглядит код и чем будет заниматься процессор.

Ещё научился запускать утилиту objdump.exe, с помощью которой можно дизассемблировать исполняемый файл проекта целиком и увидеть машинные коды полностью вместе с библиотечными функциями.
Правда, без библиотек Cygwin эта утилита не запускается, пришлось закинуть её в директорию Cygwin... а причём тут последний, зачем он мне нужен под Windows, не понимаю?
Это что получается, компилятор и все его утилиты работают под эмулятором?

В общем, кривенько как то все выходит, может, я что-то не так делаю?
Обычно в средах разработки все эти фишки включаются парой галочек в настройках графического интерфейса, и нет надобности лезть глубже...

Ещё пара не очень приятных впечатлений.
У процессора отсутствуют коды команд нецикличного сдвига битов.
Соостветственно для выполнения операций сдвига >> и << (даже на единичку) генерируются вызовы функций, где операция выполняется в цикле с помощью команд цикличного сдвига.
Неужели не хватило места для имплементации простейшего сдвига?

Стек прерываний почему то у процессора отдельный от общего стека. Причём нигде не нашёл задание его размера.
К примеру, при выборе средней модели памяти (64к) стек прерываний задаётся равным 512 байтам, и точка.
Кто так решил, и почему я должен отводить под него львиную долю памяти?
Слава богу, что есть галочка MICO_NO_INTERRUPTS, где вместе с прерываниями удаляется и этот стек... cranky.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yes
сообщение Nov 6 2015, 11:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



я мико8 не пользовал (пользовал мико32), так как мико8 под очень сильную экономию ресурсов и соотв. возможности очень ограничены.
поэтому отвечу "вообще", и похвально, что взяли латисовский софт проц, а не ниос или блейз привязанные к ксайлинсу или альтере


1) если интересуетесь процессорами, то нужно освоить софт для хоста - это линуксные утилиты gcc, gdb, llvm, qemu и т.д. так как виндовс это убогая система для офисных работников, то ни в проф. сообществе не в среде опенсорсников оно не используется и соответственно код для винды не разрабатывается (некоторые уже готовые продукты портируются). чтобы как-то скрасить убогую виндовзную жизнь были придуманы костыли типа cygwin, msys и т.п. но в родной среде все это работает гораздо лучше

2) также советую посмотреть opencores.org (например проект openrisc). а если VHDL не вызывает нервного тика, то LEON3 от GAISLER-а

3) аппаратные стеки у минималистических процессоров - весьма частое дело (про микрочип pic12 pic14 pic16 слышали?).
это делается чтобы ресурсы ПЛИС сэкономить. а отсутствие некоторых инструкций может вызвано отсутствием свободного места в формате команды - я так понимаю, что для тех сдвигов понадобится второй операнд на 3 бита? видимо, на этом авторы сэкономили - опять же таких сдвигов я так сразу ни в одном коммерческом 8-ми битнике не припомню
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 8 2015, 08:51
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(yes @ Nov 6 2015, 15:41) *
1) если интересуетесь процессорами, то нужно освоить софт для хоста - это линуксные утилиты gcc, gdb, llvm, qemu и т.д. так как виндовс это убогая система для офисных работников, то ни в проф. сообществе не в среде опенсорсников оно не используется и соответственно код для винды не разрабатывается (некоторые уже готовые продукты портируются). чтобы как-то скрасить убогую виндовзную жизнь были придуманы костыли типа cygwin, msys и т.п. но в родной среде все это работает гораздо лучше

2) также советую посмотреть opencores.org (например проект openrisc). а если VHDL не вызывает нервного тика, то LEON3 от GAISLER-а

3) аппаратные стеки у минималистических процессоров - весьма частое дело (про микрочип pic12 pic14 pic16 слышали?).
это делается чтобы ресурсы ПЛИС сэкономить. а отсутствие некоторых инструкций может вызвано отсутствием свободного места в формате команды - я так понимаю, что для тех сдвигов понадобится второй операнд на 3 бита? видимо, на этом авторы сэкономили - опять же таких сдвигов я так сразу ни в одном коммерческом 8-ми битнике не припомню

1. Это да, придётся осваивать помаленьку, хотя не сказал бы, что различного софта под винду мало и есть какая-то необходимость ставить Линукс.
2. Ну пока что остановлюсь и поработаю на одном - Мико8. Но спасибо за совет.

3. По аппаратному стеку (call stack) вопросов нет - от у мико маленький и задаётся при конфигурации.

Там ещё существует два софтовых стека - общий (стандартный) для локальных переменных и для передачи параметров - устанавливается на последний адрес памяти данных.
И второй - irq stack - выделенный стек прерываний, располагается в отдельном сегменте bss и размер прописан, похоже, жестко и зависит только от выбранной модели памяти.
К примеру, для малой модели памяти (scratchpad memory = до 256 байт) он устанавливается в 32 байта, для средней и для большой моделей (до 64 килобайта или до 4 гигабайт) его размер выставляется 512 байт.

Весьма странное решение, на мой взгляд, не находите?
К примеру, не уложился я в 256 байт памяти данных - нужно 512. Опа - а компилятор взял, и отхватил ВСЕ 512 байт для этого самого irq_stack...
Весело, правда? 05.gif

Раньше, судя по найденному в сети, для Мико8 существовал симулятор инструкций для проверки\отладки проекта.
Сейчас об этом нигде нет даже упоминания...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Nov 8 2015, 09:11
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(sonycman @ Nov 8 2015, 11:51) *
Весьма странное решение, на мой взгляд, не находите? 05.gif

Да нет, я тоже так делал. Это дает возможность заносить в стек что угодно и не думать о том, что там делается при возвратах... Например передавать данные в подпрограмму через стек.
Так же как в Форте... Стек данных и стек возвратов...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sonycman   Lattice Mico8 Soft Processor   Nov 6 2015, 00:20
|- - Alex77   Offtop Цитата(yes @ Nov 6 2015, 14:41) 1)...   Nov 6 2015, 19:17
|- - sonycman   Цитата(iosifk @ Nov 8 2015, 13:11) Да нет...   Nov 8 2015, 09:19
|- - iosifk   Цитата(sonycman @ Nov 8 2015, 12:19) Вы, ...   Nov 8 2015, 09:24
|- - sonycman   Цитата(iosifk @ Nov 8 2015, 13:24) Так эт...   Nov 8 2015, 09:30
|- - iosifk   Цитата(sonycman @ Nov 8 2015, 12:30) Не с...   Nov 8 2015, 11:35
||- - sonycman   Цитата(iosifk @ Nov 8 2015, 15:35) Реализ...   Nov 8 2015, 13:43
||- - iosifk   Цитата(sonycman @ Nov 8 2015, 16:43) Так ...   Nov 8 2015, 13:57
||- - sonycman   Цитата(iosifk @ Nov 8 2015, 17:57) Просто...   Nov 8 2015, 15:10
||- - iosifk   Цитата(sonycman @ Nov 8 2015, 18:10) Памя...   Nov 8 2015, 15:25
|- - yes   Цитата(sonycman @ Nov 8 2015, 12:30) Не с...   Nov 9 2015, 11:16
|- - sonycman   Цитата(iosifk @ Nov 8 2015, 19:25) ОК...   Nov 9 2015, 14:12
- - yes   ну кроме скорости может быть надежность - то есть ...   Nov 9 2015, 14:48
- - sonycman   Да, после красивого ARM кода компиляторов под корт...   Mar 22 2016, 21:56
- - sonycman   С другой стороны сегодня посмотрел по тактам выпол...   Mar 27 2016, 15:21
|- - Doka   коль скоро в этой теме собрались корифеи lm8, спро...   Nov 29 2016, 14:56
|- - faa   Цитата(Doka @ Nov 29 2016, 17:56) FYI, ко...   Nov 30 2016, 06:18
|- - Doka   Цитата(faa @ Nov 30 2016, 09:18) Для lm32...   Nov 30 2016, 10:49
- - gk2   В 3.6 было здесь: /usr/local/latticemicosystem/3....   Nov 30 2016, 10:00


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:19
Рейтинг@Mail.ru


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