Mar_K
Участник-
Постов
46 -
Зарегистрирован
-
Посещение
Весь контент Mar_K
-
Зравствуйте! Скрестил FreeRTOS, графическую либу LVGL и HAL (его использует пока только LVGL) на STM32f746 disco. Заметил следующее: 1) Если не вызывать диспетчер задач и поместить функцию lv_event_handler в бесконечный цикл, не включать DCache и ICache, то производительность одна. Если включить последние 2, то ожидаемо производительность возрастает в разы. 2) Если тотже цикл с вызвовом lv_event_handler поместить в таск и запустить диспетчер задач, то независимо от того включены ли кэши производительность низкая как при выключенных кэшах Пробовал различные комбинации размещения кучи LVGL и FreeRTOS : внутренняя память и внешняя. Драйвер дисплея (от LVGL) использует DMA с буфером во внешнем ОЗУ, работает на прерываниях. Дополнительно с помощью MPU отметил область буфера для DMA как некэшируемую. Один фиг! Еще пробовал разносить xPortSysTickHandler и Hal_IncTick на разные таймеры. Также пробовал lv_tick_inc помещать в отдельную задачу с задержкой. Вобщем, ничего не помогает -- тупо тормозит причем на простом GUI. В чем может быть причина? Правильно ли я понимаю, что причина может быть в том, что при переключении задач FreeRTOS инвалидирует кэш?
-
opensource ядро PCIe аналог Xilinx
Mar_K ответил Mar_K тема в ISA/PCI/PCI-X/PCI Express
Возможно. Напремер, легаси контроллер диска. Набор ATA регистров - 8 байт, альтернативный статус 1 - 4 байт. -
opensource ядро PCIe аналог Xilinx
Mar_K ответил Mar_K тема в ISA/PCI/PCI-X/PCI Express
Главное для чего мне нужны исходники -- поправить минимальный размер BAR. Если существует бесплатная корка у которой можно выставить размер BAR до 1 байта, то пускай она будет без исходников -- это не страшно. -
opensource ядро PCIe аналог Xilinx
Mar_K ответил Mar_K тема в ISA/PCI/PCI-X/PCI Express
Может быть... А где его исходники взять? -
opensource ядро PCIe аналог Xilinx
Mar_K ответил Mar_K тема в ISA/PCI/PCI-X/PCI Express
Вы имеете ввиду Endpoint for PCI Express 3.7? у него исходников вроде как нет. Это нужно для того чтобы полностью прикинуться legacy девайсом, у которого размеры некоторых BAR равены 1 байту. -
opensource ядро PCIe аналог Xilinx
Mar_K опубликовал тема в ISA/PCI/PCI-X/PCI Express
Добрый день! Стоит задача заменить HW ядро на SW в уже готовом проекте на spartan 6. Пытаюсь найти opensource ядро pci express 1 lane аналог Integrated Block у Xilinx (то есть только до transaction layer без блока dma, но с поддержкой 6 BAR-ов, и legacy msi). Есть ли таковые и откуда можно скачать? -
Тренировка линии SATA I/II и хард WD1200BEVT != true
Mar_K опубликовал тема в IDE/ATA/SATA/SAS/SCSI/CF
Камень spartan6 150T. Кит от avnet. Ситуация такова, что набор дисков от Сигейта дружат с моим контроллером, а также некий SSD (производителя не помню, брал у коллеги потестить). Но диск от Вестерна отказывается дружить (WD1200BEVT). Разумеется, он работает с материнкой. Смотрел чипскопом. Не приходит COMWAKE от диска, вместо него приходит COMINIT. Предположил, что диск не видит OOB посылки от моего контроллера. Погуглил и нашел case на сайте xilinx, там человеку помогло изменение параметра differential voltage swing, попробовал поменять в своем контроллере (стояло дефолтное значение 000). Выставил все единицы. Теперь тренировка проходит на 1-й скорости, но на второй -- не алё. Однако, проходит не больше 50 мс и натренированный на 1-й диск почему-то снова высылает COMINIT, что, естественно, сбрасывает соединение и тренировка начинается снова. Какие только параметры я не крутил у трансивера (из доступных в визарде)-- бесполезно. Вобщем, как быть? -
5) Все 8 бит нулями или только бит nIEN ? Нужно только его.
-
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
По поводу 2 -- вы себя накрутили. У меня ридер фифиошки как раз этими флагами управляется, а синхронизируется только сигнал разрешения работы этого ридера. Я еще не настолько псих чтобы дизайнить как вы написали, и не вижу в теме моего поста с описанием того, что у меня именно так сделано. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Все именно так. Дело не в констреинтах. Вобщем я был наивен, когда полагал что без синхронизации пока для небольшого теста можно обойтись, хотя до этого всегда делал сразу по нормальному, а потом и вовсе забыл про синхронизацию сигнала разрешения чтения FIFO специальным блоком в 200 МГц домене. Как результат 1.5 недели наблюдения эпических глюков и бессонных ночей с обтеканием потом, который вытирался полотенцем из UCF. Не забивайте на синхронизацию, люди. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Нет не использую. Вчера до поздней ночи игрался с констрейнтами и пришел к выводу, что я просто не понимаю как их описать правильно. Если эти сигналы не появляются в отчете об ошибках, то схема работает на 200 МГц стабильно, но при этом в других местах в отчете появляются ошибки, там где они раньше не вылезали. В проекте до недавнего времени было 2 тактовых домена (62.5 и 75 МГц) и все разводилось и роботало четко. Но после добавления третьего (200 МГц) начались такие вот странности. Причем схема, которая тактируется от 200 МГц отдельно укладывается в плис без ошибок. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Понизил частоту с 200 до 160 МГц. Работает стабильно. А на 200 нет. Может джитер адский? К сожалению нет возможности посмотреть так как нет хорошего осцила в наличии. У меня кит от Avnet. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Понял. Значит можно просто забить на это, а проблема остается в неправильной обработке. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Тоже больше склоняюсь к этому варианту. Делал diff с рабочей версией по svn, но пока принципиальной разницы не нашел.. -
FIFO generator 9.1
Mar_K ответил Mar_K тема в Работаем с ПЛИС, области применения, выбор
Клоки генерятся разными PLL и подключены через bufg естественно. Про 5 наносекунд, они не были никак вычислены, а просто взяты от балды. Род глюков таков, что если всего в фифо записывается 64 слова, то прочитается, например, 63. -
FIFO generator 9.1
Mar_K опубликовал тема в Работаем с ПЛИС, области применения, выбор
Проект на spartan6 -3 grade. Два тактовых домена 75 и 200 МГц. Передаю данные между ними с использованием FIFO (fifo generator 9.1), разрядность которого 64 бита чтение и запись. Тайминг аналайзер пишет, что все констрейyты выполнены, однако, в секции "Unconstrained" есть проваленные по hold time именно внутри самого FIFO (грейкаунтер похоже: U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/wr_pntr_gc_4 to U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].rd_stg_inst/Q_4). Соответственно проект глючит. У меня несколько вопросов: 1) Реально ли получить работающий FIFO с такими параметрами в данном кристале? 2) Как правильно написать ограничения? По поводу второго вопроса читал DS317, но там для 16 разрядного случая. Еще задавал timespec на оба клока и устанавливал maxdelay datapathonly на передачу данных между ними равную 5ns. После чего из секции unconstrained эти пути пропадали и ошибок вообще не наблюдалось в аналайзере, но в работающем железе по прежнему глюки. Если вместо 200 МГц запустить, на, скажем, 150 МГц то все гут. -
Да. Клок от внутреннего генератора. Пробовал на разных клоках 1-8МГц -- один фиг. Все, разобрался. Дело было не в машине. Забыл волшебный флаг линкеру указать -mmcu=atmega8. В результате прога начиналась не с main :) Всем спасибо.
-
Делал уже так. Все равно не работает. Такой код написал, чтобы легче было проверять какой бит глючит. А первые две строки для перестраховки. Кстати, проверил на порту D -- таже фигня.
-
Запаял сей микроконтроллер в плату. Прошивка заливается по SPI. Код: int main(void) { asm("cli"); SPCR &= ~(1<<SPE); SFIOR &= ~(1<<PUD); DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); PORTB = 0x00; while(1) { PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); _delay_ms(1000); PORTB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7)); _delay_ms(1000); } return 0; } 1) Если включать все биты и выключать тоже все, то на всех кроме бита 4 держится напряжение 5 вольт, а на бите 4 меняется 0-5-0-5. 2) Если выключить хотя бы один любой бит (DDRn = 0 && PORTn = 0 всегда), а все остальные переключать, то на ножке бита n держится уровень напряжения 5 вольт, а все остальные биты переключатся. На замыкание соседние пины проверял .. Смотрел какой код генерит avr-g++ -- все ок. Что это, баг или фича? PS: до того как припаял эту микруху, на точно такойже плате стояла atmega8 и такого не наблюдалось.
-
Раньше учился только по даташитам, статьям, книгам, исходникам, и т.п. Сходил в прошлом году на тренинги от Xilinx по PCIe и MGT, результат не заставил себя ждать. Сэкономил массы времени. Плюс поддержка. Всегда можно позвонить и задать вопрос профессионалам. После тренингов уже знаешь куда смотреть, что почитать, появляется чувство уверенности. Единственное, не порадовало качество печатного материала (хреново напечатано), который мне выдали, но к нему и обращаться почти не приходилось.
-
Sata HBA
Mar_K ответил Mar_K тема в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Вобщем, как выяснил, проблема не в размерах BAR. Для того, чтобы BIOS увидил контроллер и произвел загрузку с него нужно написать драйвер и положить его в XROM. А операционки дальше грузят свои драйвера. -
Sata HBA
Mar_K ответил Mar_K тема в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Продолжаю свой рассказ. Нашел кучу багов в своей sata корке, естественно, то что не тестировал ранее из-за большой сложности и повылезло. Сечас в linux нормально определяется диск, могу с помощью dd прочитать любое количество секторов, начиная с любого. Судя по логам, диск конфигурируется в PIO4 mode. Пробую читать 8 мегабайт блоками по 1КБ, скорость еле дотягивала до 1 МБ/с. Попробовал записать на диск и все повисло, этого я и ждал, так как это дело еще не отлажено. С этим я разберусь В винде ситуация прежняя -- ресурсы выделены, но в BAR'ы никто не пишет, соответственно диск не определяется, мой контроллер в диспетчере висит со значком конфликта. BIOS также нефига не видит его. Все-таки склоняюсь к тому, что это из-за BAR'ов по 128 байт..., BIOS и винда проверяют размер при выделении ресурсов (наверное). У кого какие соображения по этому поводу? -
Sata HBA
Mar_K ответил Mar_K тема в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Сейчас ситуация следующая. Установил ClassCode = 0x010105 (то есть в IDE контроллер с двумя каналами в native PCI mode). BIOS контроллер находит, и ставит ему прерывание 14 или 15, но никаких обращений в BAR'ы не делает, в BIOS Setup попрежнему без изменений. В window смотрю в PCITree, что IO выделено для всех BAR'ов, но при загрузке никаках обращений к BAR'ам также не происходит. В диспетчере устройств попрежнему ошибка( устройство не использует ресурсов так как, наверное, в его работе присутсвуют ошибки) В Linux ситуация немного иная. При загрузке во все 4 BAR'a есть обращения. Для первого канала в регистр device control пишется значение 0x0A, затем из регистра status командного блока АТА читается статуст (чипскоп показывает 0x50 что говорит, что устройство готово к использованию). Для второго канала выполняются теже действия. Посмотрел в логах. Ошибок нет, устройству назначен драйвер ata_piix. На этом все. Сам диск не определяется. -
Sata HBA
Mar_K ответил Mar_K тема в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Попробовал указать нужные значения BAR'ов вручную в исходниках pcie корки. В XP драйвер устанавливается, но ресурсы опять же не выделяются (пишет, что не хватает ресурсов). В PCI Tree почему-то все BAR'ы моей платы теперь имеют размер 8 байт, хотя я указывал разные значения (4, 8, 16 байт). То есть установить меньше 128 байт на IO BAR можно в обход гуя, но вот как оно работать будет...и будет ли? Направьте пожалуйста на путь истинный. -
Sata HBA
Mar_K опубликовал тема в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Добрый день. Написал Sata2 контроллер для virtex5vfx. Поддерживает DMA, PIO -- как в спецификации написано, реализованы ata-шные теневые регистры. Предполагается работа в режие legacy. Прикрутил к нему интерфейс pci express gen1. Для этого использую PCI express end point block plus. Пока задача минимум, чтобы его увидел bios и увидел сам диск. Работа в режиме PIO пока. Выделил 4 IO BAR'а по 128 байт (на ATA command и DISK control интерфейсы). Пробовал прописать Class Code = 0x010185 и 0x010601. В BIOS ничего нового не появляется. Загружаю винду (XP SP3), в диспетчере устройств моя плата определяется как "Стандартный двухканальный контроллер IDE", но ресурсы IO ей не выделяются (пишет, что не хватает ресурсов). Посмотрел как у других контроллеров BAR'ы реализованы с помощью проги PCITree. Там такая схема: BAR0,BAR2 -- IO 8 bytes, BAR1,BAR3 -- IO 4 bytes, BAR4,BAR5 -- IO 16 bytes. Корка от Xilinx не позволяет выделить меньше 128 байт на IO BAR. Интересует несколько вопросов: 1) Могут ли быть проблемы именно из-за того что у меня BAR'ы по 128 байт? Если да, то как сделать их правильными по 4,8,16? 2) Какие еще танцы нужны, чтобы диск увиделся операционкой?