OSDev http://osdev.su/ |
|
Исходники Cortex-M1 и Cortex-M3 http://osdev.su/viewtopic.php?f=18&t=3552 |
Страница 1 из 1 |
Автор: | SII [ 27 ноя 2018, 21:13 ] | |||
Заголовок сообщения: | Исходники Cortex-M1 и Cortex-M3 | |||
Собсно, сабж, ежели кому интересно. В зашифрованном виде их ARM совместно с Xilinx'ом распространяют для использования на Xilinx'овых ПЛИСинах. Здесь исходники расшифрованы и разделены на файлы (не все модули свалены в пару файлов, а каждый в отдельном файле), ну и плюс в Cortex-M1 выкинуто почти всё, не относящееся собственно к процессору. В Cortex-M3 оставлены все файлы, поскольку там присутствует полная отладочная инфраструктура и т.п. полезности (в -M1 большей части этого просто нет, а оставшаяся -- кастрированная). Собираться в ISE собирается (вообще-то предназначено было для Vivado, ISE не поддерживается уже лет пять, но я предпочитаю ей пользоваться). Квартус поставил-таки, -M3 в общем и целом собирается (ругается только на модуль ITCM, но это -- встроенное в ПЛИС ОЗУ, а не сам проц и прочая инфраструктура, и его просто надо, похоже, подпилить, чтобы соответствовал ожиданиям Квартуса).
|
Автор: | Yoda [ 28 ноя 2018, 13:59 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 |
Обалдеть! Может быть у тебя ещё завалялись расшифрованные исходники NIOS II (или ссылка на них)? |
Автор: | SII [ 28 ноя 2018, 15:40 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 |
Неа, я ж с Альтерой дела не имел. Кортех-М3 вот есть со всеми его причиндалами, но надо дорезать по кускам. Ну и плюс все IP, что в ISE и Vivado присутствуют, тоже есть (и тоже надо пилить на части). |
Автор: | SII [ 06 дек 2018, 15:33 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 и Cortex-M3 |
Вообще, впечатление такое, что в ARM пишут, мягко говоря, неаккуратно, а зачастую и попросту неэффективно. Вот, наткнулся на такое, ковыряя NVIC (контроллер прерываний) в Cortex-M3: Код: assign int_pend_we = (opt_int_pend!=prev_int_pend); always @ (posedge fclk or negedge hreset_n) if (!hreset_n) prev_int_pend <= {INTS{1'b0}}; else if (int_pend_we) prev_int_pend <= opt_int_pend; Как видно, значения с шины opt_int_pend (это линии запросов прерываний) сохраняются в регистре prev_int_pend только в случае, если установлен int_pend_we, а он, в свою очередь, установлен, если содержимое prev_int_pend не совпадает с opt_int_pend. Таким образом, если состояние линий запросов прерываний не изменилось, регистр не меняется, если изменилось -- меняется, а соответственно, данный сигнал абсолютно бессмысленен. Между тем, при синтезе он съедает энное количество ресурсов. Например, при синтезе данного модуля для Virtex-6 при 256 запросах прерываний (для Cortex-M3 оно заявлено как максимально возможное, хотя сама архитектура допускает до 512, из коих 16 всегда стандартные, а остальные -- внешние линии IRQ) получилась потребность в 769 триггерах и 1490 LUTах, а при выкидывании сигнала opt_int_pend и простом приёме в регистр каждый такт -- те же 769 триггеров, но 1150 LUTов, т.е. на 350 меньше. UPD. Дооптимизировал сей модуль и получил в итоге 877 LUTов. |
Автор: | Yoda [ 07 дек 2018, 20:42 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 и Cortex-M3 |
Такие хвосты, как правило, получаются, когда сначала была одна версия кода, затем её упростили/изменили, а понять логику получившегося было некогда или неохота. Иногда кусок кода десять раз переписывается. Я иногда замечаю сходные моменты в своём коде, поэтому для надёжности иногда возвращаюсь к старому коду, перечитываю, вникаю и оптимизирую. А вообще хороших кодеров очень и очень мало, поэтому в любом достаточно большом проекте неизбежно будут попадаться откровенные ляпы. Хорошие кодеры в кодерах не задерживаются, перерастают в разработчиков и архитекторов. |
Автор: | Yoda [ 09 дек 2018, 01:16 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 и Cortex-M3 |
Там, наверное, ещё должен MicroBlaze заваляться... |
Автор: | SII [ 09 дек 2018, 03:35 ] |
Заголовок сообщения: | Re: Исходники Cortex-M1 и Cortex-M3 |
Есть, и в ISE, и в Vivado. Только резать надо-с, ибо они хранят все модули IP в виде одного файла, как правило. Он даже не всегда может быть напрямую синтезирован из-за дублирования объявлений (вероятно, когда синтез идёт из зашифрованного IP, это как-то разруливается специальным образом). А кто-нибудь, кстати говоря, сравнивал по функциональным возможностям MicroBlaze и NIOS? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |