Расположение папки проекта Firmware

Разработка приложений для СнК SmartFusion2 с использованием средств разработки Libero SoC и SoftConsole.
Часть 1

PDF версия
В соответствии с прогнозами экспертов, к 2020 году на планете будут работать 60 млрд устройств, подключенных к сети Интернет: количество абонентов устройств заметно превысит число абонентов людей. Значительная доля информации, передаваемой по сети, не будет предназначаться человеку, а составит трафик общения устройств между собой. «Умные» дома, беспилотные автомобили поднимут уровень комфорта нашей жизни, но при этом создадут новый уровень угроз нашему существованию. Не трудно представить себе последствия работы хакера, захватившего по сети управление комбайном и переместившего его с кукурузного поля на оживленную автостраду.

Решить проблемы безопасности в мире «Интернета вещей» можно, предоставив пользователю надежную систему защиты от несанкционированного вторжения не только в его данные, но и в само устройство. Подобная система защиты должна быть реализована на уровне кристалла микросхемы. Первыми и пока единственными семействами микросхем, имеющих указанные средства защиты на уровне, достаточном для осуществления концепции «Интернета вещей», являются системы на кристалле SmartFusion2 и ПЛИС Igloo2 корпорации Microsemi.

Данная статья открывает цикл материалов, посвященных особенностям проектирования для систем на кристалле SmartFusion2.

 

Краткий обзор архитектуры СнК SmartFusion2

Структурная схема СнК SmartFusion2 представлена на рис. 1.

Структура СнК SmartFusion2

Рис. 1. Структура СнК SmartFusion2

Основные структурные элементы СнК SmartFusion2 — это микроконтроллерная подсистема с большим набором аппаратно реализованных блоков интерфейсов, матрица ПЛИС и системный контроллер с его подсистемой безопасности.

Структурная схема FPGA Igloo2 показана на рис. 2.

Структура ПЛИС Igloo2

Рис. 2. Структура ПЛИС Igloo2

Архитектура Igloo2 включает подсистему памяти, сильно сокращенную версию микроконтроллерной подсистемы SmartFusion2, матрицу ПЛИС и системный контроллер.

Состав аппаратурных блоков, входящих в СнК SmartFusion2 и ПЛИС Igloo2, изображен на рис. 3.

При рассмотрении рис. 3 может показаться, что Igloo2 является некоторой усеченной версией SmartFusion2. Так и есть на самом деле. Кристаллы SmartFusion2 и Igloo2 производятся в едином техпроцессе. Затем на финишной стадии у некоторого количества кристаллов лазером отсекается часть блоков. Делается это для того, чтобы не платить роялти за такие элементы архитектуры, как процессор ARM Cortex-M3, контроллер CAN-интерфейса и т. п., поскольку известно, что довольно большое количество микросхем будет иметь спрос и без указанных блоков архитектуры. По выходе с конвейера соответствующие чипы SmartFusion2 и Igloo2 имеют совместимость pin-to-pin, что позволяет мигрировать с одного семейства на другое без переразводки печатной платы.

Сравнение аппаратных возможностей SmartFusion2 и Igloo2

Рис. 3. Сравнение аппаратных возможностей SmartFusion2 и Igloo2

Более подробно архитектура СнК SmartFusion2 и ПЛИС Igloo2 описана в статье [1].

В рамках данного цикла статей СнК SmartFusion2 представляет наибольший интерес как чип с полным набором периферийных блоков. Компания Microsemi представляет целую линейку отладочных плат на основе SmartFusion2 [2]. Для отработки описываемых примеров проектирования подойдет любая из существующих.

 

Создание проекта

В качестве первого задания для СнК Smart-Fusion2 возьмем ставший классическим пример программы, выполняющей отправку сообщения “Hello, world!” по интерфейсу UART микроконтроллерной подсистемы и мигание светодиодом, которое реализуем в FPGA-матрице.

Запускаем среду разработки Libero SoC 11.6., кликнув на ярлычок на рабочем столе или на аналогичный в меню «Пуск» (рис. 4).

Запуск Libero SoC

Рис. 4. Запуск Libero SoC

Создаем проект (рис. 5).

Создание проекта

Рис. 5. Создание проекта

В главном меню LiberoSoC выбираем команду Project/New Project, запускаем мастер создания нового проекта. В появившемся окне указываем название нашего проекта LedUART и его место расположения на диске. Нажимаем кнопку Next (рис. 6).

Выбор места расположения проекта

Рис. 6. Выбор места расположения проекта

В появившемся окне Device selection указываем нужные параметры, в выпадающих списках выбираем PartNumber микросхемы, с которой будем работать. Нажимаем Next (рис. 7).

Выбор кристалла

Рис. 7. Выбор кристалла

В следующем окне выбираем настройки стандарта ввода/вывода по умолчанию, напряжение питания PLL и задержку старта микросхемы после сигнала Reset. Нажимаем кнопку Next (рис. 8).

Выбор стандарта ввода/вывода по умолчанию

Рис. 8. Выбор стандарта ввода/вывода по умолчанию

В следующем появившемся окне отмечаем мастер, который будем использовать для настройки микроконтроллерной подсистемы. Нажимаем кнопку Next (рис. 9).

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

Рис. 9. Выбор мастера для настройки микроконтроллерной подсистемы

В следующих появляющихся окнах ничего не меняем, просто нажимаем Next до появления окна следующего содержания (рис. 10).

Окно верхнего уровня проекта с настройками микроконтроллерной подсистемы по умолчанию

Рис. 10. Окно верхнего уровня проекта с настройками микроконтроллерной подсистемы по умолчанию

Сгенерированный мастером компонент LedUART_MSS_0 отражает состояние настроек микроконтроллерной подсистемы по умолчанию (рис. 11).

Исходные настройки микроконтроллерной подсистемы

Рис. 11. Исходные настройки микроконтроллерной подсистемы

Нам нужно изменить эти настройки в соответствии с задачами, решаемыми нашим приложением. Приложение отправляет сообщение “Hello world!”, используя аппаратный интерфейс UART микроконтроллерной подсистемы. Для выполнения этой операции понадобится один контроллер интерфейса UART. Настроим его, дважды щелкнув на блоке MMUART_0. В появившемся окне выберем настройки, показанные на рис. 12.

Настройка интерфейса MMUART_0

Рис. 12. Настройка интерфейса MMUART_0

Мигание светодиодом реализуем средствами матрицы ПЛИС, микроконтроллерная подсистема в этом участвовать не будет, поэтому все блоки архитектуры, кроме MMUART_0, которые можно отключить, мы отключаем, снимая галочку, как показано на рис. 13.

Отключение блока архитектуры, не используемого в проекте

Рис. 13. Отключение блока архитектуры, не используемого в проекте

Для обеспечения работы нашего проекта остается настроить подсистему тактирования (MSS_ССС) и сброса (MSS_Reset). Система тактирования СнК SmartFusion2 синтезирует заданные пользователем номиналы частот и доводит тактовые сигналы до различных блоков архитектуры, таких как процессор Cortex-M3, контроллер DDR-памяти и т. п. Для реализации нашей задачи установим значения тактовых частот CLK_BASE и M3_CLK равными 50 и 100 МГц, как показано на рис. 14.

Настройка системы тактирования микроконтроллерной подсистемы

Рис. 14. Настройка системы тактирования микроконтроллерной подсистемы

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

Настройка подсистемы сброса

Рис. 15. Настройка подсистемы сброса

После выполнения описанных действий окно настроек микроконтроллерной подсистемы должно выглядеть, как на рис. 16.

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

Рис. 16. Настройки микроконтроллерной подсистемы проекта

Синтезируем компонент микроконтроллерной подсистемы с нашими настройками, выполнив команду SmartDesign/Generate Component основного меню или нажав кнопку с пиктограммой Кнопка.

Затем сохраняем текущие настройки, выполнив команду Project/Save или нажав кнопку с пиктограммой Кнопка.

Переходим в окно проектирования верхнего уровня нашего проекта. После настройки микроконтроллерной подсистемы внешний вид компонента LedUART_MSS_0 изменился — в правом верхнем углу компонента появился восклицательный знак на желтом фоне.

Это значит, что описание верхнего уровня компонента LedUART_MSS_0 нужно обновить. Для этого кликаем правой кнопкой на компоненте и в появившемся меню выбираем Update Instance with Latest Component (рис. 17).

Обновление компонента

Рис. 17. Обновление компонента

После выполнения обновления компонента его внешний вид приобретает окончательную форму, необходимую для выполнения нашей задачи, то есть отображаются только выбранные нами блоки и сигналы (UART, Reset, Clock), все отключенные нами блоки более не отображаются (рис. 18).

Окно верхнего уровня проекта с настройками микроконтроллерной системы под выполняемую задачу

Рис. 18. Окно верхнего уровня проекта с настройками микроконтроллерной системы под выполняемую задачу

Теперь нужно добавить компоненты, отвечающие за тактирование, системный сброс и мигание светодиодом. Для генерации сигнала тактирования используем компонент Chip Oscillators палитры Clock & Management из каталога. Окно настройки компонента вызываем как обычно, двойным щелчком левой кнопки мыши на компоненте (рис. 19).

Выбор компонента тактового генератора

Рис. 19. Выбор компонента тактового генератора

Для тактирования работы СнК SmartFusion2 можно применить как внешние кварцевые генераторы, подключаемые к специальным контактам СнК, так и внутренние RC-генераторы на 50 и 25 МГц. Для нашего тестового задания выбираем внутренний генератор на 50 МГц. Тактирующий сигнал нужно подать на пользовательскую логику, как показано на рис. 20.

Настройка генератора сигнала тактирования

Рис. 20. Настройка генератора сигнала тактирования

Компонент, отвечающий за системный сброс, находится в палитре компонентов Macro Library стандартного каталога и в настройке не нуждается.

Стандартного компонента для мигания светодиодом, разумеется, не существует. Его нужно сделать самостоятельно. Для выбранной нами частоты внутреннего генератора 50 МГц, чтобы обеспечить интенсивное мигание приблизительно 6 раз в секунду, вполне достаточно простого счетчика на 23 разряда. Для этого создаем файл HDL-описания счетчика, выполнив команду File>New>HDL (рис. 21).

Создание файла HDL-описания компонента

Рис. 21. Создание файла HDL-описания компонента

В появившемся окне выберем язык HDL-описания (VHDL или Verilog) и введем имя создаваемого компонента (рис. 22).

Ввод основных свойств HDL-описания

Рис. 22. Ввод основных свойств HDL-описания

После этого среда создаст текстовый файл, в котором нужно ввести HDL-описание нашего счетчика на выбранном нами языке описания. Тест HDL-описания на языке VHDL приведен на рис. 23.

VHDL-описание 23 разрядного счетчика мигания светодиода

Рис. 23. VHDL-описание 23 разрядного счетчика мигания светодиода

Одновременно с созданием файла HDL-описания во вкладке Design Hierarchy появилось название созданного нами компонента — таким образом, мы получили возможность использовать созданный компонент в нашей системе. Для этого переносим мышкой название компонента на рабочее поле проекта, аналогично тому, как мы это делали с компонентами из стандартного каталога. Результат представлен на рис. 24.

Использование созданного компонента в проекте

Рис. 24. Использование созданного компонента в проекте

Для того чтобы соединить нужные контакты, необходимо при нажатой кнопке клавиатуры Ctrl выделить мышкой контакты, которые собираемся соединить, затем нажать правую кнопку мыши, в появившемся меню выбрать пункт Connect, как показано на рис. 25.

Соединение «контактов» компонентов

Рис. 25. Соединение «контактов» компонентов

Выход счетчика у нас имеет разрядность [22:0], для зажигания светодиода будем использовать только самый старший разряд, который нужно вычленить из группы. Для этого нажимаем на контакте Q [22:0] правой кнопкой мыши и выбираем пункт Edit Slice. В появившемся окне нажимаем кнопку Add Slice Entry (зеленый знак «плюс») и заполняем таблицу по образцу, представленному на рис. 26.

Выделение сигнала из шины

Рис. 26. Выделение сигнала из шины

Выводим нужные сигналы на верхний уровень для дальнейшего подключения контактов СнК, последовательно нажимаем на контакты Q [22] компонента MyCounter_0, MMUART_0_FABRIC компонента LedUART_MSS_0, в выпадающем меню выбираем пункт Promote to Top Level (рис. 27).

Создание внешних соединений проекта

Рис. 27. Создание внешних соединений проекта

Неиспользуемые выходы компонентов следует пометить выбором пункта Mark Unused в меню, выпадающем при нажатии правой кнопки мыши на соответствующем контакте.

Выполняем команды меню Save и Generate Component.

Переходим во вкладку DesignFlow и выполняем команду Place and Route>IO Constraints (рис. 28).

Запуск утилиты I/O Editor

Рис. 28. Запуск утилиты I/O Editor

Назначаем номера контактов внешним соединениям проекта. Сохраняем внесенные изменения и закрываем I/O Editor (рис. 29).

Назначение номеров контактов внешним соединениям проекта

Рис. 29. Назначение номеров контактов внешним соединениям проекта

В рамках данного примера ввиду простоты FPGA-части проекта мы опускаем моделирование дизайна в Modelsim. Разумеется, при разработке реальных проектов пропускать исследования поведенческой модели не следует.

Подключаем программатор к устройству с СнК, подаем на плату питание, запускаем команду Program Design/Run PROGRAM Action. В результате выполнения данной команды будет синтезирован файл конфигурационной последовательности, который будет загружен в кристалл. Об окончании процесса можно судить по зажиганию зеленого светодиода на программаторе и миганию выбранного светодиода на плате отладочного набора.

 

Разработка встроенного программного обеспечения процессора Cortex-M3

Выполняем конфигурирование драйверов блоков архитектуры. Для этого выбираем необходимые для нашего приложения драйверы встраиваемого программного обеспечения (рис. 30). Для демонстрации работы интерфейса MMUART_0 нам понадобятся драйверы интерфейса MMUART и библиотека CMSIS.

Выбор необходимых драйверов

Рис. 30. Выбор необходимых драйверов

Теперь можно запустить генерацию тестового проекта встраиваемого программного обеспечения (ВПО). Для этого выполним команду Export Firmware. В появившемся окне (рис. 31) выберем среду разработки ВПО, в которой в дальнейшем будем работать. Предлагается три возможные среды разработки: SoftConsole, IAR EWARM и Keil. В рамках данного примера выберем SoftConsole, ставим галочку Create project for selected Software Tool Chain и нажимаем OK. В папке проекта появится каталог SoftConsole с файлами проекта ВПО.

Выбор среды разработки Firmware

Рис. 31. Выбор среды разработки Firmware

Теперь необходимо внести в код программы работы процессора нужные нам изменения. Для этого запускаем SoftConsole v3.4. При старте среда просит указать проект, с которым мы собираемся работать. Указываем расположение папки LedUART_MSS_CM3 (рис. 32).

Расположение папки проекта Firmware

Рис. 32. Расположение папки проекта Firmware

После этого откроется основное окно среды разработки SoftConsole, которое должно выглядеть так, как показано на рис. 33. Если во вкладке Project Explorer отсутствует наш проект, его нужно загрузить вручную, выполнив команды File>Import, в открывшемся окне во вкладке General выбрать пункт Existing Project into Workspace и в следующем появившемся окне указать расположение проекта Firmware, то есть …\LedUART\SoftConsole\LedUART_MSS_CM3. После чего окно примет вид, показанный на рис. 33.

Окно среды разработки SoftConsole

Рис. 33. Окно среды разработки SoftConsole

Теперь нужно открыть файл main.c и отредактировать его содержимое. Полный текст программы показан на рис. 34. Кроме того, архив проекта со всеми исходными текстами можно скачать по ссылке [3]. Помимо приветствия, в код программы добавлены строки по реализации «зеркала», то есть отправки в порт полученного из порта символа.

Листинг программы демонстрационного примера

Рис. 34. Листинг программы демонстрационного примера

Создаем исполняемый файл, выполнив команду Project>Clean основного меню.

 

Пошаговая отладка кода встраиваемого программного обеспечения

Для выполнения отладки необходимо подключить программатор FlashPro4 к отладочной плате и персональному компьютеру, выполнить подсоединение SmartFusion2 к персональному компьютеру по интерфейсу MMUART_0. После этого следует запустить программу-терминал для отображения на экране ПК посылаемых SmartFusion2 сообщений. Приступим к пошаговой отладке программы, выполнив команду основного меню Softconsole Run>Debug Configurations. В появившемся окне дважды щелкаем левой кнопкой мыши на строке Microsemi Cortex-M3 Target, появляется пункт LedUART_MSS_CM3_app. Щелкаем на нем и нажимаем кнопку Debug. В результате описанных действий запускается пошаговая отладка разработанного нами приложения. При нажатии кнопки Step Over Кнопка или клавиши F6 клавиатуры выполняется очередная строка кода программы. Для реализации кода в непрерывном режиме нажмем кнопку Resume Кнопка (клавиша F8 клавиатуры) и пронаблюдаем отправку в окно терминала символов, вводимых нами с клавиатуры (рис. 34–36).

Отладка приложения в пошаговом режиме

Рис. 35. Отладка приложения в пошаговом режиме

Проверка работы приложения в непрерывном режиме

Рис. 36. Проверка работы приложения в непрерывном режиме

На этом первое знакомство с процессом разработки проекта для СнК SmartFusion2 с использованием Libero SoC и SoftConsole считаем состоявшимся.

Литература
  1. Иоффе Д., Казаков А. SmartFusion2 и IGLOO2 — надежные, экономичные, компактные // Компоненты и технологии. 2014. № 8.
  2. Иоффе Д., Казаков А. SmartFusion2 и IGLOO2 в помощь разработчику. Обзор отладочных плат для новых семейств ПЛИС корпорации Microsemi // Компоненты и технологии. 2014. № 10.
  3. drive.google.com/open?id=0B6gJ23CPBznKQlVzMklLR3JIMFU /ссылка утрачена/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *