«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

Co-Simulation/Дневник

Материал из Wiki
Перейти к: навигация, поиск
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]


2013-12-04

2013 12 10

Продолжаем обзор usb http://www.softelectro.ru/usb.html

  • Nuvola apps error.png документация не оставляет надежд хост инициирует опрос 1 раз в мс

Обращаем взор на LPT порт судя по инфе из вики [2]

Стандарт позволяет использовать интерфейс в нескольких режимах:
  • SPP (Standard Parallel Port) — однонаправленный порт, полностью совместим с интерфейсом Centronics.
  • Nibble Mode — позволяет организовать двунаправленный обмен данными в режиме SPP путём использования управляющих линий (4 бит) для передачи данных от периферийного устройства к контроллеру. Исторически это был единственный способ использовать Centronics для двустороннего обмена данными.
  • Byte Mode — редко используемый режим двустороннего обмена данными. Использовался в некоторых старых контроллерах до принятия стандарта IEEE 1284.
  • EPP (Enhanced Parallel Port) — разработан компаниями Intel, Xircom и Zenith Data Systems — двунаправленный порт, со скоростью передачи данных до 2МБайт/сек.(1991)
  • ЕСР (Extended Capabilities Port) — разработан компаниями Hewlett-Packard и Microsoft — в дополнение появились такие возможности, как наличие аппаратного сжатия данных, наличие буфера и возможность работы в режиме DMA.
  • 200px-Yes check.png до 2МБайт/сек.(1991)(было бы очень хорошо)

Ищем перевод стандарта

Описание работы порта на регистровом уровне с примерами на DELPHI

Описание работы SPP режима(до 2МБ/c) с временными диаграммами


Пример

Проба программки в епп режиме

2013 12 17

  • Делаем схему согласования LPT 5В и 3.3В FPGA
  • Используем буфер с тремя состояниями in74hc244a
    • Описание функций из драйвера (стр1)

Вопрос с режимом EPP решен

  • Все оказалось просто нужно было вкурить мануал повнимательнее
  • Для генерации управляющих сигналов и обмена даными в EPP-режиме согласно описанной диаграмме нужно производить запись или чтение дополнительные (этими регистрами EPP отличается от SPP режима) в регистры по адресу +3 или +4 от базового адреса (x378) (в десятичной форме это (dec)891 (dec)892 в шестнадцатеричной форме x37B, x37D)


Имя порта Смещение Режим Чтение / запись Описание
Порт данных SPP +0 SPP/EPP Запись Стандартный порт данных SPP. Без автостробирования.
Порт статуса SPP +1 SPP/EPP Чтение Чтение входов линий статуса интерфейса
Порт управления SPP +2 SPP/EPP Запись Устанавливает состояние выходных линий управления.
Порт адреса EPP +3 EPP Чтение / запись 200px-Yes check.pngГенерация цикла чтения или записи адреса с рукопожатием
Порт данных EPP +4 EPP Чтение / запись 200px-Yes check.pngГенерация цикла чтения или записи данных с рукопожатием
Не определено От +5 до +7 EPP N/A Используется по-разному в разных реализациях. Может использоваться для 16- и 32-разрядного ввода-вывода.


  • Я в первоначальных экспериментах использовал запись в регистр данных как в примере с +0 смещением.

Если писать в эти регистры, контроллер аппаратно выполняет управление служебными сигналами согласно диаграмме


Режим выдачи данных из порта (при записи программой в порт по адресу x37B)
Режим записи(прием) данных в порт (при чтении программой в по адресу x37D)


  • Запись и чтение из порта x37B, x37D – одинаковое для примера чтение одного, а запись в другой приведены... отличаются лишь тем, что для регистра по адресу x37B управляющий сигнал DataStrb#, а для регистра x37D сигнал AddrStrb#


LPT

драйвера


реальная скорость LPT

PCI

NEW