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

Замена STM32 от Geehy Semiconductor

В 29.07.2022 в 13:16, dimka76 сказал:

В модуле Reset and Clock (RCM) (для STM32 это RCC) добавили бит включения тактирования FPU - RCM->AHB2CLKEN, бит с номером 1.

Как такое может быть? Что-то Вы путаете...

FPU в Cortex-M - это часть процессора, а не отдельный узел. Это просто набор команд для работы с определённым форматом чисел. Как можно отключить тактирование одной/N команд CPU???  :wacko2:

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


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

On 7/29/2022 at 2:56 PM, jcxz said:

Как такое может быть? Что-то Вы путаете...

FPU в Cortex-M - это часть процессора, а не отдельный узел. Это просто набор команд для работы с определённым форматом чисел. Как можно отключить тактирование одной/N команд CPU???  :wacko2:

image.png.a17bcaa87b2c2a785d5537bd05c6659a.png

image.png.45359b49a7c4a326e2dc135aaa768ef9.png

 

И отдельно описания этого бита в тексте User Manual не приводится (или я плохо ищу).

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


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

В 29.07.2022 в 15:06, dimka76 сказал:

И отдельно описания этого бита в тексте User Manual не приводится (или я плохо ищу).

А если его отключить - перестают выполняться команды FPU?  :wink:  А процессор что при этом делает, встретив такую команду? Останавливается и стоит? :wink:

ЗЫ: Просто тупо - баг в мануле. Очепятка. Или безграмотный китец при передирании оригинального мануала, что-то недопонял.

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


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

On 7/29/2022 at 3:13 PM, jcxz said:

А если его отключить - перестают выполняться команды FPU?  :wink:  А процессор что при этом делает, встретив такую команду? Останавливается и стоит? :wink:

ЗЫ: Просто тупо - баг в мануле. Очепятка. Или безграмотный китец при передирании оригинального мануала, что-то недопонял.

Как я заметил, он вообще на работу не влияет.

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


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

Китаец встретил неизвестную ему аббревиатуру. Подходящего для неё иероглифа он не знал. А самый близкий был - иероглиф FPU.  :biggrin:

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


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

1 час назад, jcxz сказал:

FPU в Cortex-M - это часть процессора, а не отдельный узел.

FPU в Cortex-M - это в первую очередь сопроцессор, и как минимум факт наличия или отсутствия его в Cortex-M4(-F) указывает на то, что это, все-таки, отдельный узел, хоть и реализован очень тесно связанным с CPU.

Цитата

Как можно отключить тактирование одной/N команд CPU???

А что мешает? Вас же не смущает, что перед началом работы с FPU нужно включить CP10/CP11 в регистрах CPU? Что мешало китайцам протащить HCLK к FPU через ключ, управляемый битом в регистре управления, который рулит, в том числе, и клоками периферийных узлов?

Останов тактирования FPU, возможно, был бы полезен для сокращения энергопотребления, если МК на базе M4F хочется использовать без плавучки.

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


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

On 7/29/2022 at 4:42 PM, Arlleex said:

Вас же не смущает, что перед началом работы с FPU нужно включить CP10/CP11 в регистрах CPU?

Это не включение/выключение, это настройка доступа

Quote

B3.2.20 Coprocessor Access Control Register, CPACR
                         The CPACR characteristics are:

                         Purpose                        Specifies the access privileges for coprocessors.

 

 

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


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

1 минуту назад, dimka76 сказал:

Это не включение/выключение, это настройка доступа...

Не суть, я имею ввиду то, что процессорные части не все сразу "готовы" к работе.

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


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

В 29.07.2022 в 16:42, Arlleex сказал:

FPU в Cortex-M - это в первую очередь сопроцессор, и как минимум факт наличия или отсутствия его в Cortex-M4(-F) указывает на то, что это, все-таки, отдельный узел, хоть и реализован очень тесно связанным с CPU.

В x86 FPU изначально был реализован именно как сопроцессор. Даже физически отдельный. Но даже когда x86 CPU и FPU слились в одном чипе, там всё равно оставались специальные команды в целочисленном ядре, для синхронизации работы с FPU (ожидание завершения операций FPU).

Вот это - именно настоящий сопроцессор. Отдельно работающий. А в Cortex-M - это всего лишь один из узлов CPU. И параллельная работа CPU и FPU в Cortex-M тоже невозможна.

В 29.07.2022 в 16:42, Arlleex сказал:

А что мешает? Вас же не смущает, что перед началом работы с FPU нужно включить CP10/CP11 в регистрах CPU?

Не смущает. Если так смотреть, то можно любой блок CPU назвать "отдельным узлом". Например - блок работы с невыровненными данными. И сказать, что биты управления CPU, включающие/отключающие fault-ы по невыровненному доступу - "битами отключения тактирования блока невыровненного доступа".  :wink:

В 29.07.2022 в 16:42, Arlleex сказал:

Что мешало китайцам протащить HCLK к FPU через ключ, управляемый битом в регистре управления, который рулит, в том числе, и клоками периферийных узлов?

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

В 29.07.2022 в 16:42, Arlleex сказал:

Останов тактирования FPU, возможно, был бы полезен для сокращения энергопотребления, если МК на базе M4F хочется использовать без плавучки.

Тогда нужны механизмы включения и отключения тактирования FPU (внутри процессора). А значит - нужно внесение изменений в ядро. А значит - это будет уже не Cortex-M. И скорей всего такие художества запрещены по условиям лицензии ARM. И хорошо! Ибо при такой доработке, скорей всего багов бы наделали больше, чем получили пользы.

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


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

On 7/29/2022 at 7:45 PM, jcxz said:

И скорей всего такие художества запрещены по условиям лицензии ARM.

Не запрещены. Просто ARM за разрешение на внесение таких изменений берёт дополнительные деньги, продавая лицензию.

У ARM несколько видов и уровней лицезирования. Например, Эппл купила самую дорогую, дающую право на использование только системы команд и возможности самостоятельной реализации алгоритмов исполнения. Поэтому Эппл по системе команд- это ARM, что делает его совместимым со всем инструментарием от ARM, но вот под капотом там совсем не ARM, хотя местами может на законных основаниях быть и ARM.

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

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


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

1 час назад, jcxz сказал:

Тогда нужны механизмы включения и отключения тактирования FPU (внутри процессора). А значит - нужно внесение изменений в ядро...

Само существование FPU в ядре опционально, я уж не говорю про какие-то ключи разрешения тактов. ARM лицензирует модель, а не конкретную реализацию, в которую нельзя лезть. Покупаешь лицензию, вдупляешь в исходный код и дорабатываешь под себя, по необходимости. Тем более у ARM-а в описании на архитектуру всяких implementation-defined настроек целый вагон с небольшим.

Цитата

А в Cortex-M - это всего лишь один из узлов CPU...

Называть можно как угодно, тем не менее все указывает на то, что это именно обособленная горсть транзисторов на кристалле. Со своими входами/выходами, линиями прерываний и клоками. Поэтому категоричного запрета останавливать тактирование FPU не прослеживается.

Цитата

И параллельная работа CPU и FPU в Cortex-M тоже невозможна.

А это как посмотреть. Согласно описанию на архитектуру ARMv7-M,

Цитата

A4.10 Coprocessor instructions
Coprocessors execute the same instruction stream as the processor, ignoring non-coprocessor instructions and coprocessor instructions for other coprocessors. Coprocessor instructions that cannot be executed by any coprocessor hardware cause a UsageFault exception and indicate the reason as follows:
• If the Coprocessor Access Register denies access to a coprocessor, the processor sets the UFSR.NOCP flag to 1 to indicate that the coprocessor does not exist.
• If the coprocessor access is permitted but the instruction is unknown, the processor sets the UFSR.UNDEFINSTR flag to 1 to indicate that the instruction is UNDEFINED.

Т.е. сопроцессор в данном случае декодирует только "свои" инструкции, но в силу того, что в Cortex-M4 лишь 1 исполнительный блок (в отличие, от, например, Cortex-M7), исполняемый поток обычных инструкций CPU и инструкций FPU становится единым, он не может распараллелиться. А в Cortex-M7 - может. А механизм сопроцессора там такой же, просто другая версия (которая поддерживает двойную точность). По этой причине в Cortex-M4 не нужны

Цитата

специальные команды в целочисленном ядре, для синхронизации работы с FPU (ожидание завершения операций FPU).

потому что CPU будет ждать завершения исполнения команд FPU в конвейере, наравне с другими "своими" командами CPU. Поэтому логически декодеры вполне могут быть отдельными у FPU и CPU.

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


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

On 7/29/2022 at 8:40 PM, Arlleex said:

вдупляешь в исходный код и дорабатываешь под себя, по необходимости

Нет. Чем больше хочешь внести изменений в код, тем дороже лицензия. Минимальная стоимость у лицензия, которая запрещает модификацию кода ARM, а разрешает только добавления к нему.

 

On 7/29/2022 at 8:40 PM, Arlleex said:

Тем более у ARM-а в описании на архитектуру всяких implementation-defined настроек целый вагон с небольшим.

Вот-вот. Разрешены только те особенности, которые разрешает ARM.

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


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

1 час назад, tonyk_av сказал:

Вот-вот. Разрешены только те особенности, которые разрешает ARM.

При этом ни у кого из нас нет корки Cortex-M4F (хоть даже закрытой, как, например, IP Cortex-M3 в Xilinx Vivado), чтобы посмотреть, чего там за клоки из этой корки торчат наружу. А то может оказаться, что там не один CORTEX_M4_HCLK заходит, а целая группа (а я как минимум уже 2 сигнала отдельной синхронизации знаю, о чем ARM даже сам пишет), среди которых и FPU_HCLK окажется, а мы тут обсуждаем и гадаем:biggrin:

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


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

Итак, рассуждения рассуждениями, но суровая практика - это другое. Я выяснил, что за FPU у них там имеется в виду. Глянул я даташит на APM32F103 и на секунду прифигел, что у Cortex-M3 завалялся FPU:biggrin: Оказалось, всего лишь периферия, которая (как выше рассказывал jcxz) умеет молотить float-ы на заранее оговоренном количестве операций: сложение/вычитание, умножение, тангенсы и т.д. А в F4 перекочевало копипастом, видимо. Это объясняет ваапще все.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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