«Случай — это псевдоним Бога, когда Он не хочет подписываться своим собственным именем.» А. Франс

Co-Simulation/Дневник

Материал из Wiki
< Co-Simulation
Версия от 11:23, 6 декабря 2013; Vidokq (обсуждение | вклад)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск
Co-Simulation

Литература

* PSL * VHDL * OS-VVM *

Содержание

2013-11-02 Анализ текущего состояния проекта

  • При запуске моделирования наблюдается следующее
Модельное время  модельная частота  Шина вх\вых    Время моделирования
1 мс             10 МГц               512\16         ~20 сек
1 мс             10 МГц               512\512        ~20 сек
1 мс             10 МГц               1024\1024      ~20 сек
  • установка буфера разной величины не влияет
  • получаем 1 мс - 10 МГц - 10000 переключений => 20 сек/10000 = 2 мс
  • анализ функций из драйвера микросхемы показывает..., что минимальная задержка при чтении буфера и записи в буфер 1 мс
  • Nuvola apps error.png так как за цикл работы эмулятора происходит пересылка туда и обратно, то напрашивается вывод, что время работы ограничивается этой задержкой.
  • 200px-Yes check.png TO-DO: попробовать установить задержу равную 0 и обрабатывать самому события приема и посылки данных.

Описание функций из драйвера (стр18)


2013-11-22 (Revision 31)

Проведена проверка скорости работы в режиме только отправки от ПК в FTDI-мост.....

  • С++ проект модифицирован для оправки.
  • VHDL-модель была скорректирована только для чтения из FTDI и ширина регистра установлена равной 256 бит (32 байта).
  • В результате получена скорость работы следующая: 10000 циклов посылки 64 Кбайт выполняется за 31 с = 20 Мбайт/с - предельная скорость .... так как буфер сделать больше нельзя (64 Кбайт предел), а при уменьшении пуза при обработке пакетов минимальная 120-240 мкс (плавает). Т.е. если посылать 1 байт, то между посылками будет пауза 120 -240 мкс..... при увеличении пачки посылаемых данных длительность паузы нивелируется за счет более быстрой работы во время передачи одного пакета.
  • Во время передачи пакета без задержек выполняется передача 512 байт, потом 10 мкс пауза (FTDI наполняет внутренний регистр) и снова 512 байт за ~10 мкс (потом снова пауза 10 мкс) и т.д.

2013-11-26

  • Анализ алгоритма работы USB-шины (с чего нужно было начинать) Статья с вики Шина_USB объясняет задержку время 2 мс(по 1 мс на прием и отправку, действия инициируются каждую мс) между посылкой и приемом информации

Nuvola apps error.pngВывод неутешительный ..... если наблюдаем не 10000 и более сигналов то usb не дает требуемой скорости.


2013-12-05 (по драйверам для PCI)

Изучаем материал по драйверам для pci (еще нужно глянуть на LAN)

А для системщика под виндой WinDDK вообще как вода для
страждущего. Разве только... кубик сухого льда не повредит.  Кстати,
надеюсь уже все в курсе, что существует конвертер из SOURCE-файлов(для утилиты BUILD) в проекты под VC 5.0/6.0 . Дешево и сердито. Стянул, кажется у NuMega...
 
Библиотеки функций (и классов) WinDK (C и C++ отдельно,
www.bluewatersystems.com) и Driver::Works (только C++, www.numega.com)
я получил на одном и том же диске (С/С++ для Профессионалов,
достало словечко). Оба пакета содержат хорошие Wizardы для Visual C++,
есть примеры для PCI/USB устройств, поддержка WDM-дров. Использую
WinDK, т.к. другой существенно (проверял) более громоздкий и слишком
удален от базового набора примитивов в WinDDK. Тогда как в WinDK они
используются прямо в рабочих структурах. Можно чередовать сервисные
библиотечные и стандартные функции (только если понимаешь, что делаешь
— RTFM), поскольку все прозрачно. IMHO WinDK это на 5, Driver::Works
на 4, но более распространен, судя по количеству примеров и ссылок. Ну
что поделаешь, NuMega -- авторитет 8)


Как написать драйвера? (любые в частности для PCI)

Numega Driver Studio имеет в своем составе аналогичный компонент: Driver Agent сгенерит все необходимое для использования универсального драйвера. Вы даже сможете создать свой файл .sys, который будет работать в составе ядра и делать там все, что вы запрограммируете, например обрабатывать прерывания. При этом вникать опять же ни во что не придется. За день разработаете свой драйвер.

Оба пакета содержат средства для написания настоящих драйверов, НО при помощи DriverStudio или WinDriver это делать значительно проще, чем при помощи только DDK, в дополнение они имеют хорошую документацию касающуюся общих вопросов драйверов, более читаемую чем в DDK. Кстати DDK для работы с ними необходимо установить.

Установив Numega Driver Works, Вы открываете студию (не Driver, а Microsoft Visual Studio), выбираете там NewProject и видете в окне мастера рядом с MFC App Wizard NT/WDM Driver Wizard Мастер за 9 шагов, сгенерит проект из которого получается драйвер и exe-шник, который этот драйвер тестирует. Кроме того в Driver Studio входит (я бы назвал это Driver Developmen Foundational Classes) набор классов, которые содержат все необходимое для разработки драйверов, так же как MFC для разработки приложений.

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

Универсальный драйвер, который позволяет обращаться к портам ввода-вывода. Больше он ничего не может, но в большинстве случаев можно обойтись и этим. Драйвер этот называется PortIo.sys и входит в состав примеров прилагаемых к Numega Driver Works. Я его скомпилировал, вам остается скачать и использовать. Драйвер предоставляет 4 функции: Open, Close, Read и Write. Есть тестовое приложение, которое демонстрирует как эти функции использовать. Чтобы установить драйвер надо: [1]

NEW