Tightly coupled memory что это

What is the difference in cache memory and tightly coupled memory

Due to being embedded inside the CPU The TCM has a Harvard-architecture, so there is an ITCM (instruction TCM) and a DTCM (data TCM). The DTCM can not contain any instructions, but the ITCM can actually contain data. The size of DTCM or ITCM is minimum 4KiB so the typical minimum configuration is 4KiB ITCM and 4KiB DTCM.

It looks like tcm have same purpose as cache memory.

No. They didn’t used the word cache in explanation

Tightly coupled memory что это. . Tightly coupled memory что это фото. Tightly coupled memory что это-. картинка Tightly coupled memory что это. картинка

4 Answers 4

A cache uses access patterns to populate data within the cache. It has extra hardware to track the backing address and may have communication with other system entities (SMP) to track when a cache line is dirty (someone else has written something to primary memory).

The ‘TCM’ (tightly coupled memory) is fast, probably SRAM multi-transistor memory, like the cache. Both have a fast dedicated connection to the CPU. However, the overhead to implement the TCM is far less than a cache. Typically TCM is found on lower-end (deeply embedded probably Cortex-M) ARM devices.

Most CPU caches have a lock down feature which enables them to behave like the TCM. However, the TCM does not have on the fly capabilities to buffer high use code and data. Because of this, the TCM (and locked cache) is probably more deterministic which may help hard real time applications.

Tightly coupled memory что это. . Tightly coupled memory что это фото. Tightly coupled memory что это-. картинка Tightly coupled memory что это. картинка

This is what I found that I feel is more concise and to the point.

Cache memory is implemented with on-chip memory and control logic. Tightly coupled memory is implemented with on-chip memory and a dedicated connection.

Tightly coupled memory has a fixed span in the address map. Cache does not live in the address map (. well it kinda does. just don’t think of it as a physical memory) but instead serves as an intermediate between the processor and the memory to (hopefully) provide more efficient memory accesses.

Tightly coupled memory has deterministic access time. Accesses through the cache are not deterministic since the data will either live in the cache (hit) or the data must be fetched from main memory (miss).

While both are very fast accessed memories, cache stores dynamically data/code which has been lately used in order to improve access speed, compared to standard memory connected to the global Avalon matrix. Every time a memory access is required, the processor checks if the required data is already present in the cache or must be newly fetched from memory; in the meantime, old unused cache data is being continously replaced with new data. Tightly coupled memory is also a fast access memory, since it exploits a dedicated port, but it has static content: you decide what you need there and you specify it in the linker script.

Источник

Методы оптимизации кода для Redd. Часть 2: некэшируемая память и параллельная работа шин

В прошлой статье мы выяснили, что кэш — это безусловно полезная штука, но применительно к контроллерной логике он иногда создаёт трудности. В частности, он вносит непредсказуемость длительности импульсов либо иных задержек при программном формировании временных диаграмм. Ну, и в «общепрограммистском» плане, неудачное расположение функции может свести выигрыш от кэша на нет, постоянно провоцируя его перезагрузку из медленной памяти. Я упоминал, что 15 лет назад мы вынуждены были делать специальный препроцессор, который устранял возникающие проблемы для процессора SPARC-8, и обещал, что расскажу, как легко устранить подобные трудности при разработке для синтезированного процессора Nios II, рекомендуемого для использования в комплексе Redd. Пришла пора выполнить обещание.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Предыдущие статьи цикла:

Подготовка аппаратуры

Итак. Мы хотим добавить в нашу спартанскую процессорную систему память, которая никогда не кэшируется и при этом работает на максимально возможной скорости. Разумеется, это будет встроенная память ПЛИС. Мы добавим память как для кода, так и для данных, но это будут разные блоки. Начнём с памяти для данных, как наиболее простой. Добавляем уже известную нам OnChip Memory в систему.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Ну, скажем, пусть её объём будет 2 килобайта (главная проблема встроенной памяти ПЛИС в том, что её мало, так что приходится экономить). В остальном — обычная память, какую мы уже добавляли.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Но подключать мы её будем не к шине данных, а к особой шине. Чтобы она появилась, входим в свойства процессора, идём на вкладку Caches and Memory Interfaces и в списке выбора Number of tightly coulped data master ports выбираем значение 1.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Вот такой новый порт появился у процессора:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Недавно добавленный блок памяти подключаем именно к нему!

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Ещё одна хитрость — в назначении адресов этой новой памяти. В документе есть длинная цепочка рассуждений про оптимальность декодирования адреса. Там утверждается, что некэшируемая память должна отличаться от всех остальных видов памяти чётко выраженным одним битом адреса. Поэтому в документе вся некэшируемая память относится к диапазону 0x2XXXXXXX. Так что впишем вручную адрес 0x2000000 и запрём его на замок, чтобы при следующих автоматических назначениях он не изменялся.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Ну, и чисто для эстетики, переименуем блок… Назовём его, скажем, NonCachedData.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

С аппаратурой для некэшируемой памяти данных всё. Переходим к памяти для хранения кода. Здесь всё почти так же, но чуть-чуть сложнее. На самом деле, всё можно сделать полностью идентично, только ведущий порт шины открывается в списке Number of tightly coulped instruction master ports, однако отлаживать такую систему будет невозможно. При заливке программы средствами отладчика, она вливается туда через шину данных. При остановке, дизассемблируемый код считывается отладчиком также через шину данных. И даже если программа загружается из внешнего загрузчика (мы такой метод ещё не рассматривали, тем более, что в бесплатной версии среды разработки мы обязаны работать только при подключённом JTAG отладчике, но в целом, никто так делать не запрещает), заливка также идёт через шину данных. Поэтому память придётся делать двухпортовой. К одному порту подключать некэшируемый мастер инструкций, который работает в основное время, а к другому — вспомогательную штатную шину данных. Она будет использоваться для загрузки программы извне, а также для получения содержимого ОЗУ отладчиком. В остальное время эта шина будет простаивать. Вот так всё это выглядит в теоретической части документа:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Обратите внимание, что в документе не объясняется почему, но отмечается, что даже у двухпортовой памяти только один порт может быть подключён к некэшируемому мастеру. Второй должен быть подключён к обычному.

Давайте добавим 8 килобайт памяти, сделаем её двухпортовой, остальное оставим по умолчанию:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Процессору добавим некэшируемый порт инструкций:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Память назовём NonCachedCode, подключим память к шинам, назначим ей адрес 0x20010000 и запрём его на замок (для обоих портов). Итого, у нас получается как-то так:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Всё. Сохраняем и генерим систему, собираем проект. Аппаратура готова. Переходим к программной части.

Подготовка BSP в программной части

Обычно после изменения процессорной системы достаточно просто выбрать пункт меню Generate BSP, но сегодня нам придётся открыть BSP Editor. Так как мы это делаем редко, напомню, где расположен соответствующий пункт меню:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Там мы идём на вкладку Linker Script. Мы видим, что у нас добавились регионы, унаследовавшие имена от блоков ОЗУ:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Я покажу, как добавить секцию, в которую будет помещаться код. В разделе секций нажимаем Add:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

В появившемся окне даём имя секции (чтобы исключить путаницу в статье, я назову её очень не похоже на имя региона, а именно — nccode) и связываем её с регионом (я выбрал NonCachedCode из списка):

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Всё, генерим BSP и закрываем редактор.

Размещение кода в новой секции памяти

Напомню, что у нас в программе, доставшейся в наследство от прошлой статьи, имеется две функции: MagicFunction1() и MаgicFunction2(). При первом проходе обе они подгружали своё тело в кэш, что было видно на осциллографе. Дальше – в зависимости от ситуации в окружении, работали либо на максимальной скорости, либо постоянно затирали друг друга своими телами, провоцируя постоянные подгрузки из SDRAM.

Давайте перенесём первую функцию в новый некэшируемый сегмент, а вторую оставим на месте, после чего выполним пару прогонов.

Чтобы поместить функцию в новую секцию, следует добавить ей атрибут section.

Перед определением функции MagicFunction1() поместим ещё и её объявление с этим атрибутом:

Выполняем первый прогон одной итерации цикла (я поставил точку останова на строчку while):

Видим следующий результат:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Как видим, первая функция действительно выполняется на максимальной скорости, вторая подгружается из SDRAM. Выполняем второй прогон:

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Обе функции работают на максимальной скорости. И первая функция не выгружает вторую из кэша, несмотря на то, что между ними стоит та вставка, которую я оставил после написания прошлой статьи:

Эта вставка больше не влияет на взаимное положение двух функций, так как первая из них уехала совсем в другую область памяти.

Пара слов о данных

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

Регион для такой памяти у нас создан, сопоставление с секцией можно сделать тем же путём, что и для секции кода. Осталось только понять, как присвоить переменной соответствующий атрибут. Вот первый попавшийся пример объявления таких данных, найденный в недрах автоматически созданного кода:

Что это нам даёт

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

Внимательно посмотрим на шины

А теперь внимательно посмотрим на шины в получившейся процессорной системе. У нас их получилось почти четыре. Красным я обвёл основную шину (являющуюся объединением из двух, именно поэтому я и написал «почти»: физически — шин две, но логически — одна). Зелёным я выделил шину, ведущую к некэшируемой памяти инструкций, синим — к некэшируемой памяти данных. Эти три шины работают параллельно и независимо друг от друга!

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Помните, в статье про DMA я рассуждал о том, что одним из ограничивающих производительность фактором является то, что данные передаются по одной и той же шине? Блок DMA читает данные из шины, пишет данные в неё же, да ещё в это же время той же шиной пользуется процессорное ядро. Как видим, этот недостаток закрытых систем полностью устранён в ПЛИС. В готовых контроллерах производители при прокладке связей вынуждены разрываться между потребностями и возможностями. Программисту может понадобиться такой вариант. И такой. И такой. И такой… Много чего может понадобиться. Но ресурсы стоят денег, да и не всегда на выбранном кристалле хватит места под них. Всё не разместишь. Приходится выбирать, что реально нужно всем, а что понадобится в единичных случаях. И какие единичные случаи следует внедрить, а про какие — забыть. И дальше появляются компромиссные решения, все тонкости которых, если есть желание их использовать, программисту приходится держать в уме. В нашем же случае, мы можем действовать без затей. Что нам нужно сегодня, то сегодня и проложили. У нас ресурс гибкий. Мы тратим его так, чтобы аппаратура была оптимальна под нашу сегодняшнюю задачу. Под завтрашнюю и вчерашнюю задачи, ресурсы резервировать не нужно. Но зато под сегодняшнюю мы проложим всё так, чтобы программа работала максимально эффективно, не требуя для того особых программистских изысков.

Давным-давно, в университете на курсе по сигнальным процессорам нас учили искусству параллельного использования двух шин одной командой. Насколько я знаю, в современных ARM контроллерах также детальное знание матрицы шин позволяет производить оптимизацию. Но всё это хорошо, когда разработчик годами работает с одной и той же системой. Если от проекта к проекту приходится скакать на совершенно разные железки, всё заучить не удаётся. В случае же с ПЛИС, мы не изучаем особенности среды, мы вольны подгонять среду под себя.

Применительно к подходу «мы не тратим много времени на разработку», это звучит так:
Нам не надо прилагать усилия по оптимальному использованию готовых типовых шин, мы можем быстро проложить их наиболее оптимальным для решаемой задачи способом, быстро закончить эту вспомогательную разработку и быстро обеспечить процесс отладки либо тестирования основного проекта.

Давайте для закрепления материала взглянем на пример включения блока DMA из документа Embedded Peripherals IP User Guide.

Tightly coupled memory что это. image loader. Tightly coupled memory что это фото. Tightly coupled memory что это-image loader. картинка Tightly coupled memory что это. картинка image loader

Мы видим три независимых подключения. Входные данные (на данном рисунке это шина, проецируемая на память), выходные данные (на данном рисунке это совсем другой тип шины – потоковый интерфейс) и связь с управляющим процессором. Никто не мешает подключить это всё к разным шинам, тогда работа будет идти в параллель. Входные данные (например, от SDRAM) будут идти одним потоком, которому никто не мешает; выходные данные будут уходить другим потоком, скажем, в канал FT245-FIFO, который мы уже рассматривали; а работа центрального процессора не будет отъедать от этих шин тактов, так как основная шина изолирована. Хотя в этом случае, разумеется, память в SDRAM, будучи на отдельной шине, окажется программно недоступна. Но никто не помешает её также считывать средствами DMA. Если цель — достичь высокой производительности работы с буфером, то её надо достигать любой ценой. Разве что всю программу придётся уместить в памяти, встроенной в ПЛИС, так как иных блоков хранения в аппаратуре Redd не предусмотрено.

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

В общем, зная эти базовые принципы, вы наверняка сможете использовать их в реальных задачах. Но, в целом, именно можете. Можно обойтись и без этого, если результат достигается и обычными средствами. Но держать в уме это стоит. Иногда оптимизация системы через эти механизмы происходит проще, чем тонкая подгонка программы.

Заключение

Мы рассмотрели методику выноса участков кода, критичных к производительности либо к предсказуемости растактовки исполнения, в некэшируемую память. Попутно мы рассмотрели возможности оптимизации производительности за счёт использования нескольких шин, работающих параллельно и независимо друг от друга.

Чтобы закончить тему, мы должны ещё научиться поднимать тактовую частоту системы (сейчас она ограничена компонентом, вырабатывающим тактовые импульсы для микросхемы SDRAM). Но так как статьи идут по принципу «одна вещь — одна статья», сделаем мы это уже в следующий раз.

Источник

STM32F7: новый флагман – новые горизонты

Tightly coupled memory что это. NE 2016 02 STM32F7. Tightly coupled memory что это фото. Tightly coupled memory что это-NE 2016 02 STM32F7. картинка Tightly coupled memory что это. картинка NE 2016 02 STM32F7

Tightly coupled memory что это. st. Tightly coupled memory что это фото. Tightly coupled memory что это-st. картинка Tightly coupled memory что это. картинка stДолгое время семейство контроллеров STM32F4 удерживало лидерство по производительности среди всех изделий STMicroelectronics. Однако новые контроллеры STM32F7 имеют вдвое большую производительность и еще более богатую периферию.

Компания STMicroelectronics продолжает удерживать лидерство в освоении процессорных ядер ARM Cortex-M. До недавнего времени в номенклатуре компании насчитывалось семь семейств микроконтроллеров на их основе:

Теперь к ним добавились микроконтроллеры STM32F7. Это событие чрезвычайно важно по двум причинам. Во-первых, STM32F7 – настоящий технологический прорыв, так как это первое в мире общедоступное семейство микроконтроллеров на базе ядра ARM Cortex-M7. Во-вторых, теперь именно контроллеры STM32F7, обойдя STM32F42/STM32F43, являются флагманами в линейке изделий STMicroelectronics.

Еще 10 лет назад на рынке главенствовали 8-битные микроконтроллеры с рабочими частотами до 20…25 МГц. Затем на него с триумфом ворвались 32-битные системы. Контроллеры STM32F1 с высочайшей, по тем временам, рабочей частой до 72 МГц и богатейшей периферией казались верхом совершенства. Но технологии развивались, и STMicroelectronics, выпуская новые семейства, приучила нас к постоянному увеличению производительности. После STM32F1 появились STM32F2, а затем и STM32F4.

Представители последней линейки STM32F42x/STM32F43x до недавнего времени были топовыми в номенклатуре компании. Они работают на частотах до 180 МГц и имеют производительность 1,25 DMIPS/МГц (Dhrystone 2.1). В пике это давало до 225 DMIPS. Однако теперь этот рекорд пал под натиском STM32F7.

STM32F7 – новое высокопроизводительное семейство, построенное на сверхсовременном ядре ARM Cortex-M7. Эти микроконтроллеры, работая на частотах до 216 МГц, выдают пиковую производительность 462 DMIPS, что в два раза больше, чем у STM32F4 (рисунок 1). При этом значения энергоэффективности оказываются достаточно близкими.

Tightly coupled memory что это. ris 1 opt. Tightly coupled memory что это фото. Tightly coupled memory что это-ris 1 opt. картинка Tightly coupled memory что это. картинка ris 1 opt

Рис. 1. STM32F7 – новый флагман STMicroelectronics

STM32F7: быстрее, выше, сильнее

Прежде чем пускаться в описание тонкостей архитектуры новых микроконтроллеров, стоит выделить их ключевые достоинства. Лучшим способом для этого будет сравнение STM32F7 с прошлыми топовыми линейками STM32F42x и STM32F43x.

STM32F42x и STM32F43x обладают рядом достоинств. Во-первых, они построены на базе процессорного ядра ARM Cortex-M4 и могут работать на частотах до 180 МГц с пиковой производительностью 225 DMIPS. Во-вторых, представители семейства содержат на борту до 2 Мбайт Flash и до 256 кбайт ОЗУ. При этом есть возможность поддержки внешней памяти (в том числе и SDRAM) за счет контроллера FMC. В третьих, до появления STM32F7 периферия флагманского STM32F439 была самой богатой среди всех контроллеров STMicroelectronics (рисунок 2). В ее состав входили блоки, которые в принципе отсутствовали в других семействах, например, TFT-LCD-контроллер, аудио интерфейс SAI.

Tightly coupled memory что это. 44472. Tightly coupled memory что это фото. Tightly coupled memory что это-44472. картинка Tightly coupled memory что это. картинка 44472

Рис. 2. Структура STM32F439 – бывшего флагмана STMicroelectronics

Несмотря на все достоинства STM32F42х/STM32F43х, новое флагманское семейство STM32F7 обходит предшественников практически по всем показателям. Это становится очевидным при сравнении топовых представителей обоих семейств: STM32F439 и STM32F756 (рисунок 3).

Tightly coupled memory что это. 44547. Tightly coupled memory что это фото. Tightly coupled memory что это-44547. картинка Tightly coupled memory что это. картинка 44547

Рис. 3. Структура STM32F756 – нового флагмана STMicroelectronics

На рисунке 3 цветом выделены важные особенности, обеспечивающие лидерство STM32F756:

Стоит отметить и еще одно достоинство STM32F7 – повыводную совместимость с STM32F4. STM32F745xx и STM32F746xx имеют одинаковую распиновку для большинства корпусов: LQFP144, LQFP176, LQFP208, TFBGA216, UFBGA176, WLCSP143. Единственным исключением является LQFP100.

Вывод: контроллеры STM32F7 не только быстрее предшественников, но и дают дополнительную гибкость, а также имеют еще более широкие возможности по применению. И при всем этом они могут заменить STM32F4 в уже существующих схемах.

Где же может потребоваться вся доступная вычислительная мощь и способности STM32F7? При разработке этих контроллеров инженеры STMicroelectronics ориентировались, в первую очередь, на следующие приложения:

216 млн ударов в секунду: сверхбыстрое «сердце» ARM Cortex-M7

ARM Cortex-M7 – самая производительная платформа среди всех ядер Cortex-Mx, предназначенных для встраиваемых систем. Оно было создано для бюджетных платформ – микроконтроллеров с малым числом выводов, небольшим энергопотреблением, но с высокой производительностью.

Стоит сразу отметить, что, как и в случаях с другими процессорными ядрами, спецификация ARM Cortex-M7 подразумевает множество опций. Каждый производитель сам вправе решать, какие опции присутствуют, а какие нет. Например, блок вычислений с плавающей точкой (FPU) вовсе не является обязательным, однако во всех реализациях STM32 на ядрах Cortex-M4/M7 от STMicroelectronics он присутствует.

Основными особенностями ARM Cortex-M7 являются:

Наличие нескольких шин памяти делает возможным одновременное выполнение двух команд чтения или одной команды записи и одной команды чтения.

Мощность ядра дополняет уникальная и эффективная шинная архитектура STM32F7, которая является одной из сильных сторон данного семейства.

Шинная архитектура микроконтроллеров STM32F7

Архитектура STM32F7 построена на двух ключевых элементах (рисунок 4):

Tightly coupled memory что это. 44621. Tightly coupled memory что это фото. Tightly coupled memory что это-44621. картинка Tightly coupled memory что это. картинка 44621

Рис. 4. Шинная архитектура STM32F7

32-битная шинная матрица multi AHB соединяет между собой все ведущие и ведомые блоки. К ведущим относятся: ядро Cortex-M7 (через мост AXI-AHB), DMA1, DMA2, Ethernet DMA, USB OTG HS DMA, TFT-LCD Controller DMA, Chrom-Art Accelerator™ (DMA2D).

К ведомым относятся: 1 Мбайт Flash; 64 кбайт DTCM RAM (подключенная через AHBS к DMA); 240 кбайт SRAM1; 16 кбайт SRAM2; мосты AHB1-APB1 и AHB1-APB2; FMC; Quad SPI.

Шина AXIM (AXI Master) – 64-битная шина, используемая для подключения шины данных и шины команд ядра Cortex-M7 к шинной матрице multi AHB. Конечными устройствами для нее являются Flash, FMC, QuadSPI, SRAM1, SRAM2.

Шина ITCM (Instruction Tightly Coupled Memory) – 64-битная шина, необходимая процессору для сверхоперативного чтения и записи данных и команд из ITCM RAM, а также из Flash (через ускоритель ART).

Шина DTCM (Data Tightly Coupled Memory) – две 32-битные шины, необходимые процессору для максимально быстрой работы с данными и командами, хранящимися в DTCM RAM. 32-битная шина D1TCM используется для передачи старшего полуслова данных, а D0TCM – младшего.

Стоит отметить, что ОЗУ ITCM RAM и DTCM RAM доступны для контроллеров прямого доступа памяти посредством специальной шины AHBS (AHB slave).

Шинная матрица multi AHB используется также для связи Flash, ОЗУ, FMC, QuadSPI и периферийных блоков (через периферийные шины APB) посредством DMA-контроллеров.

Контроллеры прямого доступа памяти в STM32F7

Контроллер прямого доступа к памяти DMA (direct memory access) используется для ускоренного обмена данными между памятью и периферией, или памятью и памятью без участия процессорного ядра. В составе STM32F7 присутствуют два DMA общего назначения и индивидуальные DMA у некоторых периферийных блоков, требующих интенсивного обмена данными с минимальными задержками: Ethernet, USB, TFT-LCD-контроллер, Chrome-ART Accelerator.

Каждый из двух DMA-контроллеров общего назначения имеет по две 32-битных интерфейсных шины. Одна используется для связи с памятью (DMA_MEM), вторая – для связи с периферийными блоками через периферийные шины APB (DMA_P) (рисунок 4).

DMA имеют доступ ко всем типам памяти. Через шинную матрицу multi AHB возможен доступ к Flash, SRAM1, SRAM2, контроллерам внешней памяти FMC, Quad-SPI. С помощью специализированной шины ядра AHBS осуществляется обмен с ITCM RAM и DTCM RAM.

Интерфейсная 32-битная шина DMA_P используется для взаимодействия с периферийными блоками: Среди них SPI, I2S, I2C, USART, таймеры, ЦАП, АЦП, интерфейс камеры (DCMI), контроллер карт памяти (SDMMC), SAI, SPDIFRX, HDMI-CEC.

Каждый из двух DMA-контроллеров общего назначения имеет восемь независимых каналов. Каждый канал имеет буфер FIFO емкостью в четыре 32-битных слова. Для предотвращения коллизий используется арбитраж с четырьмя уровнями приоритета (Very high, High, Medium, Low).

Организация памяти в STM32F7

Архитектура STM32F7 содержит различные виды встроенной памяти и имеет возможность расширения за счет памяти внешней.

Все типы памяти организованы в виде общего линейного адресного пространства 4 Гбайт. Оно, в свою очередь, поделено на восемь блоков объемом 512 Мбайт.

Внутренняя память, а также регистры периферийных модулей размещены в начале адресного пространства в трех первых блоках (Block 0, Block 1, Block 2). Последний блок адресного пространства (Block 7) отведен под нужды процессорного ядра. Block 3, Block 4, Block 5, Block 6 используются для отображения внешней памяти.

Интегрированная память STM32F7 включает:

Flash – энергонезависимая память объемом до 1 Мбайт, используемая для хранения программ и данных. Flash доступна для чтения, записи и стирания. Чтение производится с различной разрядностью: байт, полуслово (16 бит), слово (32 бит), двойное слово (64 бита). Стирание может быть полным или осуществляться по секторам.

Доступ к Flash имеет ядро Cortex-M7 и все типы DMA. Для этого ядро использует шину AXI (через мост AXI-AHB) и шину ITCM (через ART Accelerator) (рисунок 4). ART Accelerator – это кэш-память объемом 64 строки по 256 битов.

Контроллеры DMA используют для доступа к Flash шинную матрицу multi AHB.

Системное ОЗУ включает три составляющих: 320 кбайт SRAM1, 16 кбайт SRAM2, 16 кбайт DTCM RAM.

SRAM1 – ОЗУ общего назначения, используемое для хранения данных и программ. Доступ к этой памяти имеют все ведущие шинной матрицы multi AHB (рисунок 4). Так как разрядность multi AHB составляет 32 бита, то чтение и запись в SRAM1 осуществляется с разрядностью данных 8/16/32 бита.

SRAM2 – имеет все те же особенности, что и SRAM1, но меньший объем – 16 кбайт.

Наличие SRAM1 и SRAM2 позволяет распараллелить процессы пересылки данных. Например, процессор может проводить обмен с SRAM1, в то же время один из каналов DMA будет использовать SRAM2.

DTCM RAM – специализированное ОЗУ для обмена данными с нулевым числом циклов ожидания. Это важно для приложений, работающих в реальном времени.

Доступ к этой памяти напрямую возможен только для ядра с помощью 64-битной шины DTCM. Остальные ведущие шинной матрицы multi AHB имеют доступ к DTCM RAM только через специализированный интерфейс ядра AHBS (рисунок 4).

ITCM-RAM – специализированное ОЗУ для пользовательских программ, работающее также без задержек, с нулевым циклом ожидания. В отличие от других типов памяти, ITCM-RAM напрямую доступна только для ядра через 64-битнную шину ITCM (рисунок 4).

Backup SRAM (теневое ОЗУ) – специализированная память малого объема, которая применяется для хранения данных во время нахождений контроллера в режиме глубокого сна. В этом случае остальные типы памяти выключаются для снижения потребления.

Для подключения дополнительной внешней памяти используются контроллеры FMC (Flexible memory controller) и QuadSPI.

FMC содержит в своем составе сразу три контроллера и поддерживает различные виды статической и динамической памяти: SRAM, NOR/OneNAND Flash, PSRAM, NAND Flash, DRAM (SDRAM/Mobile LPSDR SDRAM).

QuadSPI применяют для подключения дополнительной DUAL и QUAD SPI-Flash.

Стоит отметить, что QuadSPI – новый блок, которого раньше не было ни в одном из контроллеров STM32.

Периферия STM32F7: еще больше возможностей

Все представители семейства STM32F7 имеют одинаковую архитектуру, ядро и организацию памяти. Отличие между ними заключается в разном корпусном исполнении, объеме Flash и перечне периферийных блоков. По набору доступной периферии все модели STM32F7 можно разделить на три линейки:

Перечислим состав базового набора периферийных блоков:

Как видим, набор периферии STM32F7 стал еще богаче по сравнению с топовыми моделями STM32F4. Среди новых блоков стоит отметить контроллер внешней памяти QuadSPI, контроллер цифрового аудио SPDIFRX, контроллер HDMI-CEC, 16-битный таймер LPTIM.

Рассмотрим новую периферию подобнее.

Обзор новых периферийных блоков STM32F7

Новая периферия дополнительно расширяет возможности по применению STM32F7.

Quad-SPI – контроллер внешней DUAL SPI-Flash и QUAD SPI-Flash-памяти. Такая Flash имеет до четырех входов/выходов данных (рисунок 5). Увеличенное количество линий данных позволяет значительно повысить скорость обмена.

Схема включения Quad-SPI и Flash достаточно проста (рисунок 5). В простейшем случае Quad-SPI может работать с Flash посредством обычного интерфейса SPI (на рисунке 5 этот случай отдельно не рассматривается). Больший интерес представляет случай подключения одной микросхемы DUAL и QUAD SPI-Flash (режим Single Flash Mode) и случай с двумя микросхемами, включенными параллельно (режим Dual Flash Mode).

Tightly coupled memory что это. 44690. Tightly coupled memory что это фото. Tightly coupled memory что это-44690. картинка Tightly coupled memory что это. картинка 44690

Рис. 5. Подключение внешней Flash к QUADSPI

В режиме Single Flash Mode память подключается с использованием шести линий: CLK, BK_IO[3…0], BK_CS. В таком случае возможна одновременная передача четырех бит, если данные защелкиваются только по фронту или по срезу (Single Data Rate Mode). Если производить считывание данных по фронту и по срезу, то за один такт можно вычитывать до 8 бит (Double Data Rate Mode).

В режиме Dual Flash Mode используются две микросхемы Flash. При этом они имеют общие линии тактирования CLK и выбора кристалла BK_CS. А линии данных разделены. В таком случае скорость обмена составляет 16 битов за такт (Double Data Rate Mode).

Quad-SPI может работать в трех режимах: непрямой обмен с использованием регистров Quad-SPI; обмен по прерыванию с постоянным опросом статусного регистра внешней Flash; отображение внешней Flash на адресное пространство контроллера.

Важным достоинством Quad-SPI является возможность использования DMA.

SPDIF Receiver Interface (SPDIFRX) – контроллер, используемый для приема цифрового аудио S/PDIF. Этот протокол соответствует IEC-60958 и используется для передачи цифровых стерео-аудиопотоков и даже Dolby и DTS.

Ключевыми особенностями SPDIF являются (рисунок 6):

Tightly coupled memory что это. 44800. Tightly coupled memory что это фото. Tightly coupled memory что это-44800. картинка Tightly coupled memory что это. картинка 44800

Рис. 6. Блок-схема контроллера S/PDIF

HDMI-CEC (HDMI-CEC) – контроллер, обеспечивающий поддержку стандарта CEC (Consumer Electronics Control), который входит в состав стандарта HDMI (High-Definition Multimedia Interface).

CEC используется для управления различными бытовыми электронными устройствами: телевизорами, аудиосистемами и так далее.

Основными особенностями HDMI-CEC-контроллера являются:

Физическое подключение управляемого CEC-устройства к контроллеру STM32F7 осуществляется с использованием подтягивающего резистора 27 кОм к питанию 3,3 В (рисунок 7). Если к одному и тому же CEC-устройству возможно подключение нескольких управляющих микросхем – необходимо дополнительно использовать транзистор, который будет отключать линию, если питание 3,3 В микроконтроллера отсутствует.

Tightly coupled memory что это. 44833. Tightly coupled memory что это фото. Tightly coupled memory что это-44833. картинка Tightly coupled memory что это. картинка 44833

Рис. 7. Схема подключения CEC-устройства к контроллеру STM32F7

Low-power timer (LPTIM) – 16-битный таймер, который используется при работе в режимах пониженного потребления. В отличие от таймеров общего назначения и другой периферии, он способен работать даже в режиме Standby. Чтобы добиться этого, тактирование LPTIM осуществляется от различных внутренних источников (LSE, LSI, HSI или APB clock). Таймер может работать и в режиме счетчика от дополнительного внешнего источника, подключенного ко входу ULPTIM. Это важная особенность, так как таймер часто используется для пробуждения системы из режимов глубокого сна.

Кроме входного счетчика, LPTIM способен работать в режиме энкодера, одиночного импульса и ШИМ.

Теперь, когда основные вопросы архитектуры и особенностей периферии рассмотрены, можно уделить внимание электрическим и эксплуатационным характеристикам и провести обзор номенклатуры STM32F7.

Обзор номенклатуры микроконтроллеров STM32F7

Номенклатура STM32F7 производства компании STMicroelectronics на настоящий момент объединяет 22 модели трех линеек:

Для каждой из линеек доступны модели с различным корпусным исполнениями, объемом памяти 512 кбайт или 1 Мбайт (таблица 1).

Таблица 1. Номенклатура микроконтроллеров STM32F7

Из таблицы 1 видим, что для STM32F7 используются достаточно многовыводные корпуса: LQFP100, LQFP144, LQFP176, LQFP208, TFBGA216, UFBGA176, WLCSP143. STM32F7 и STM32F4 имеют полную совместимость по выводам, за исключением LQFP100.

Среди важных эксплуатационных характеристик следует упомянуть:

На первый взгляд может показаться, что STM32F7 потребляют гораздо больше чем STM32F4. Так, например, в активном режиме ток потребления STM32F4 составляет 260 мкА/МГц, а это в два раза меньше. Однако здесь будет уместно указать другой показатель, а именно – энергоэффективность. Для STM32F7 она составляет 6 CoreMark/мВт, а для STM32F4 7 CoreMark/мВт. Таким образом, по энергоэффективности микроконтроллеры отличаются не так сильно.

При выборе микроконтроллера следует учитывать не только его производительность, богатство периферии и эксплуатационные качества, но и доступность средств разработки. В случае с продуктами производства STMicroelectronics этот аспект традиционно находится на высоте.

Максимальная доступность: средства разработки и отладки для STM32F7

Огромное преимущество всех без исключения микроконтроллеров от STMicroelectronics заключается в максимальной доступности средств разработки: отладочных и оценочных наборов с весьма демократичной ценой; бесплатных библиотек и ПО от STMicroelectronics; платных и бесплатных библиотек и ПО от сторонних производителей. Все перечисленное относится и к STM32F7.

Отладочные наборы от STMicroelectronics. Для этого семейства выпускается три набора фирменных плат: оценочный набор STM32F746G-DISCO и два практически идентичных отладочных набора STM32756G-EVAL и STM32746G-EVAL (рисунок 8). STM32756G-EVAL и STM32746G-EVAL отличаются только типом контроллера. На STM32756G-EVAL установлен микроконтроллер STM32F756NGH6, а на STM32746G-EVAL – STM32F746NGH6.

Tightly coupled memory что это. 44766. Tightly coupled memory что это фото. Tightly coupled memory что это-44766. картинка Tightly coupled memory что это. картинка 44766

Рис. 8. Внешний вид плат отладочных наборов для STM32F7

STM32F746G-DISCO – оценочный набор предназначен для ознакомления с базовыми особенностями STM32F7. При этом никто не запрещает использовать эту плату в собственных разработках. Основными особенностями STM32F746G-DISCO являются:

Питание STM32F746G-DISCO может производиться с помощью различных способов: от ST LINK/V2-1, от USB FS, от USB HS, от питания плат расширения Arduino, от внешнего блока питания 5 В.

Отладочные наборы STM32756G-EVAL и STM32746G-EVAL позволяют оценить работу практически всех периферийных блоков. Внешне обе платы идентичны и имеют одинаковые особенности. Отличие состоит только в контроллере. На борту у обоих плат можно найти:

Питание обоих наборов может обеспечиваться по-разному: от ST LINK/V2-1, от USB FS1, от USB FS2, от USB HS, от питания плат расширения, от внешнего блока питания 5 В.

Теперь рассмотрим бесплатное программное обеспечение и библиотеки для STM32F7 от STMicroelectronics.

STM32CubeF7 – библиотеки, описывающие аппаратный уровень Hardware Abstraction Layer (HAL), примеры, шаблоны, а также компоненты более высокого уровня абстракции (например, реализации FreeRTOS, библиотека USB и стек LwIP).

STM32CubeMX – бесплатный конфигуратор и кодогенератор. Он позволяет создать файлы инициализации микроконтроллера с помощью простого графического интерфейса. Инструмент имеет возможность настройки системы тактирования, портов ввода-вывода с учетом используемой периферии и так далее.

STM32F7 имеют поддержку различных интегрированных сред разработки, как коммерческих (IAR Embedded Workbench, Keil MDK-ARM, ARM® mbed™ online), так и бесплатных, построенных на базе GCC-компилятора (SW4STM32, Atollic TrueSTUDIO, CooCox CoIDE).

Например, CooCox CoIDE – бесплатная среда разработки программ для ARM Cortex-M0/M0+/M3/M4-микроконтроллеров. Она построена на базе оболочки Eclipse и GCC-компилятора. Основными особенностями программы являются:

Заключение

Выход семейства STM32F7 с ядром ARM Cortex-M7 – знаковое событие для компании STMicroelectronics и для отрасли в целом. Новые микроконтроллеры отняли пальму первенства у предыдущего топового семейства STM32F4.

Ключевыми преимуществами STM32F7 перед STM32F4 являются:

Источник

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

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