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

torik

Свой
  • Публикаций

    2 113
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о torik

  • Звание
    Гуру

Контакты

  • Сайт
    http://
  • ICQ
    292-214-864

Посетители профиля

4 805 просмотров профиля
  1. Можно конечно запариться, но что толку - не работает когда перезагружаешь комп при включенной плате, кто это будет повторять. И еще такое наблюдение: та же самая ошибка происходит, если плата с плисиной не просто перезагружает комп, а отключает и включает ему питание. Т.е. ломается что-то внутри IP PCIe. И как ее сбросить, починить не понятно. Сигналтаб прикручен именно к Avalon c PCIe. И когда комп читает, на шине все отлично, а вот комп получает другое значение. Попробовали чтение исключительно словами 64 бит - ошибка сохраняется. И кстати, когда работали с windriver под виндой таких проблем вообще не возникало.
  2. При загрузке драйвера: int init_mmio(struct pci_dev* pdev, u8 __iomem **bar) { int ret = -EINVAL; u64 resource_flags = 0; resource_flags = pci_resource_flags(pdev, BAR_OFFSET); dev_info(&pdev->dev, "pci_resource_flags: 0x%llX", resource_flags); if (!(resource_flags & IORESOURCE_MEM)) { dev_err(&pdev->dev, "No IORESOURCE_MEM"); goto error; } ret = pci_request_regions(pdev, "electronix_sample"); if (ret != 0) { dev_err(&pdev->dev, "pci_request_regions failed"); goto error; } *bar = pcim_iomap(pdev, BAR_OFFSET, BAR_SIZE); if (!*bar) { dev_err(&pdev->dev, "pcim_iomap failed"); goto pci_release_regions; } dev_info(&pdev->dev, "init_mmio succeed"); return 0; pci_release_regions: pci_release_regions(pdev); error: return ret; } При выгрузке драйвера: pci_release_regions(); pci_disable_device(); devres_release_group(); Чтение данных: readb(bar[offset]); readw(bar[offset]); readl(bar[offset]); readq(bar[offset]); pci_resource_flags возвращает: IORESOURCE_MEM_64 IORESOURCE_SIZEALIGN IORESOURCE_PREFETCH IORESOURCE_MEM
  3. Попробуем. У альтеры есть пример драйвера под линукс?
  4. Во-первых - заказчик категорически против))) Во-вторых - запаришься смотреть исходники, там очень много специфических вещей, не имеющих отношения непосредственно к обмену...
  5. Сделали чтение через BAR0 исключительно 64битными словами. Все равно не помогло.
  6. Да, мы читаем байты напрямую. Да, авалон, но на нем все выглядит как надо во время чтения. Даже ресет, который генерит PCIe заведен на модули к ней подключенные.
  7. На компе линукс крутится. Драйвер самодельный. Раньше под виндой на windriver такого глюка не было. А конкретнее, что там можно дернуть?
  8. Всем привает. Есть плата с Cyclone V. К плисине подключен компьютер стандарта COM Express. Плисина - endpoint. Сперва включается плисина, затем она включает комп. Все работает. Затем, если перезагружаем комп (линукс, через консоль), то после его загрузки чтение данных из BAR0 идет с ошибкой, смещение какое-то нелепое. Опять перезагрузить - ошибка может уйти, а может остаться. Такое впечатление, что проблема в корке PCIe. Запись в BAR0 из компа проходит без ошибок. Но и при чтении смотрю шину корки PCIe, там все нормально, а комп получает другие данные! Когда комп перезагружается, он дергает nreset для корки PCI, с нее тоже ресет выходит, но ошибка возникает. Можно ли еще какую-то переинициализацию дли корки замутить? Настройки PCIe корки менял на все возможные варианты, не помогает... Описание логики ошибки: Проводится вычитка по одному байту с двух смещений, А и В, с ожидаемыми значениями А1 и В1. Если смещения находятся в пределах одного 64-битного слова - всё хорошо, результаты идентичны ожидаемым. Если же нет, то: 1) вычитаем байт со смещения А тысячу раз 2) вычитаем байт со смещением А 30 раз - каждый раз получим значение А1 3) вычитаем байт со смещением В 8 раз - каждый раз получим то же значение А1 4) вычитаем байт со смещением В - получим значение В1 5) вычитаем байт со смещением В 30 раз - каждый раз получим В1 6) вычитаем байт со смещением А 8 раз - каждый раз получим то же значение В1 7) вычитаем байт со смещением А - получим значение А1 8) вычитаем байт со смещением А 30 раз - каждый раз получим А1 Итого - задержка на 8 байт. От времени между чтениями не зависит.
  9. Должностные обязанности: – разработка принципиальных схем и печатных плат; – разработка прошивок для ПЛИС Altera; – разработка сопроводительной документации; – настройка, отладка и сопровождение разрабатываемых изделий. Требования: – знание цифровой / аналоговой схемотехники; – умение работать в САПР Altium Designer; – опыт работы с ПЛИС Altera и САПР Quartus II; – способность работать в команде. Преимуществом будет: – навыки работы с Qsys и Nios; – знание System Verilog / Verilog / VHDL; – желание работать и профессионально развиваться; – опыт в цифровой обработке сигналов; – опыт работы с DSP TI; – опыт в разработках видеоаппаратуры (ИК и ТВ камер). Условия: Обособленное подразделение в г. Великий Новгород специализируется на разработке высокотехнологичных оптико-электронных систем, развивает новые, перспективные направления деятельности компании. Мы предлагаем: – интересную работу в отличном коллективе; – оформление в соответствии с ТК РФ; – график работы: 5 дней в неделю, с 9.00 до 18.00; – полный рабочий день на территории работодателя; – кофе и печеньки. З/П обговаривается на собеседовании. Адрес: Великий Новгород, ул. Державина, д. 15 Контакты: smurov@qos.ru. т. 911 607 01 09.
  10. Такая задачка... Есть модуль qsys: Кодmodule SYNC #(     parameter num_sync = 4,                    //число выходов синхронизаци     parameter period_cnt = 1                    //счетчик на csi_clksys_clk, исходя из заданного периода ) (     input                                                                                    csi_reset_n,     input                                                                                    csi_clksys_clk,     //сигнал синхронизации     output            [(num_sync - 1) : 0]                                    coe_sync ); В tcl задается параметр period в мкс, из которого расчитывается значение счетчика period_cnt. А количество интерфесов coe_sync задается параметром num_sync. Кодadd_parameter num_sync NATURAL 1 set_parameter_property num_sync DEFAULT_VALUE 4 set_parameter_property num_sync DISPLAY_NAME "Number of sync signals" set_parameter_property num_sync TYPE NATURAL set_parameter_property num_sync UNITS None set_parameter_property num_sync ALLOWED_RANGES {1:16} set_parameter_property num_sync HDL_PARAMETER true #Период синхроимпульсов, мкс add_parameter period NATURAL 1 set_parameter_property period DEFAULT_VALUE 10000 set_parameter_property period DISPLAY_NAME "Period, mks" set_parameter_property period TYPE NATURAL set_parameter_property period UNITS None set_parameter_property period ALLOWED_RANGES {1:5000000} set_parameter_property period HDL_PARAMETER true #значение счетчика на системной частоте исходя из периода add_parameter period_cnt NATURAL 1 set_parameter_property period_cnt DERIVED true set_parameter_property period_cnt DISPLAY_NAME "Period cnt, ticks" set_parameter_property period_cnt TYPE NATURAL set_parameter_property period_cnt ALLOWED_RANGES {1:1000000000} set_parameter_property period_cnt HDL_PARAMETER true add_parameter clksys_rate INTEGER set_parameter_property clksys_rate SYSTEM_INFO CLOCK_RATE set_parameter_property clksys_rate SYSTEM_INFO_ARG clksys # # connection point sys_reset # add_interface sys_reset reset end set_interface_property sys_reset associatedClock clksys set_interface_property sys_reset synchronousEdges DEASSERT set_interface_property sys_reset ENABLED true add_interface_port sys_reset csi_reset_n reset_n Input 1 # # connection point clksys # add_interface clksys clock end set_interface_property clksys clockRate 0 set_interface_property clksys ENABLED true add_interface_port clksys csi_clksys_clk clk Input 1 proc elaborate {} {     # Generate sync ports     for {set i 0} {$i < [ get_parameter_value num_sync ]} {incr i} {         add_interface uart_sync$i conduit start         set_interface_property uart_sync$i associatedClock ""         set_interface_property uart_sync$i associatedReset ""         set_interface_property uart_sync$i ENABLED true                  add_interface_port sync$i coe_sync_$i sync_pulse Output 1         set_port_property coe_sync_$i FRAGMENT_LIST "coe_sync@$i"     }     # Считаем значение делителя из периода     set divider_var [ expr [ get_parameter_value clksys_rate] / 1000 * [ get_parameter_value period] / 1000 - 1]     set_parameter_value period_cnt $divider_var } Проблема в том, что вычисленный параметр period_cnt один на все интерфейсы sync. А хотелось бы, чтобы для каждого интерфейса был свой параметр. Число параметров чтобы задавалось параметром num_sync. В интерфейсе задания параметров модуля в qsys должны появиться num_sync строк с параметрами периода. Это возможно?
  11. Да, отключили кэш данных и все стало нормально. А если оставить кэш данных, то что надо сделать? Почему: Цитатая практически всегда добавляю к адресу 0x8000000, если работаю с IO ?
  12. В другом проекте точно такой же код с теми же модулями работает так как надо. В текущем проекте отличие в том, что перед модулями стоит pipeline bridge.
  13. Uart - это просто название. Там адресация word, а не symbol. И даже нет сигналов byteenable.