Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Opisanie_Proekta_plus_AURORA_15_09_2015.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.02 Mб
Скачать
  1. Блок обмена информацией по usb (микросхема ft245rq)

Данный блок предназначен для приема и передачи информации через протокол обмена USB, тестирования соединения, осуществления передачи принятой от ПК информации модулям программного обеспечения в связи с установленным протоколом обмена и приема данных от них. В задачу блока также входит разделение команд управления модулем сопряжения от различных модулей для обеспечения корректности и стабильности работы программы.

Блок обмена информацией по USB состоит из следующих модулей:

  1. Мьютекс;

  2. Модуль сопряжения с микросхемойFT245RQ;

  3. Модуль для тестирования соединения.

Обобщенная структурная схема блока приведена на рисунке 7.

Рисунок 7 – Обобщенная структурная схема блока обмена информацией по USB

6.1. Протокол обмена

К протоколу обмена предъявляются следующие требования:

  1. Должна быть предусмотрена возможность разделения сообщений для разной аппаратуры;

  2. Должна быть предусмотрена возможность ответа на различные устройства;

  3. Сообщение может иметь различную длину;

  4. Должна быть предусмотрена пакетная передача (несколько сообщений).

Исходя из этих требований, был принят следующий протокол обмена (таблица 1).

Таблица 1 – Протокол обмена по каналу USB

Байты

Биты

Название

Примечание

1..0

15..0

SourcePort

Порт отправителя

3..2

31..16

DestPort

Порт получателя

5..4

47..32

ID

Уникальный идентификатор пакета

6

55

Lastmessage

Флаг последнего сообщения в пакете

6

54..48

Length

Длина сообщения в байтах

7

63..56

Number

Номер сообщения в пакете

8..7+Length

Data

Данные

Данный протокол можно успешно «встроить» в протокол обмена UDP; и с помощью последнего осуществлять обмен информации с разных устройств. То есть один ПК (сервер) подключен к аппаратуре, а с ним по сети Ethernet связываются другие ПК, которые могут передавать и принимать сообщения с отлаживаемой аппаратуры.

Рассмотрим каждый составляющий модуль блока в отдельности.

6.2. Мьютекс

Мьютекс предназначен для разделения потоков данных и управляющих воздействий от различных модулей и выдачи одного из них (того, кто первый успел захватить мьютекс) на вход модуля сопряжения.

На вход подаются:

  1. Шина запроса мьютекса (iGetCtrl);

  2. Шина освобождения мьютекса (iRetCtrl);

  3. Объединенные данные от всех модулей (iData);

  4. Сигнал сброса (iRst);

  5. Тактовый сигнал (C).

На выходе:

  1. Шина выданного управления (может содержать только единственный единичный сигнал во всей шине) (oGiveCtrl);

  2. Шина данных от того устройства, который захватил мьютекс (oData).

Шины запроса, освобождения и выданного управления имеют размерность равную количеству устройств, которым может понадобиться доступ к модулю сопряжения для записи информации.

6.3. Модуль сопряжения с микросхемой ft245rq

Модуль сопряжения предназначен для приема данных через USB, выдачи потребителям расшифрованной информации, соответствующей протоколу обмена, приема данных для передачи и, собственно сама передача данных по USB.

Модуль разбивается на два: модуль верхнего уровня (v_usb_ram), который осуществляет взаимодействие с внешними модулями, и модуль нижнего уровня (v_usb_ctrl), который реализует побайтовый прием и передачу данных в микросхему FT245RQ.

Рассмотрим модуль нижнего уровня.

Модуль нижнего уровня

Все входы/выходы модуля можно разделить на 4 группы:

  • системные;

  • связь с микросхемой;

  • выдача прочитанных данных;

  • прием записываемых данных.

Системные порты – тактовый сигнал (clk), сигнал глобального сброса (i_reset).

Выводы для связи с микросхемой (io_usb_data, o_read_l, o_wr, i_rfx_l, i_trx_l) и временные задержки на этих выводах соответствуют документации на микросхему. Следует отметить реализацию двунаправленной шины данных. В модуле используется триггер read_enable, от значения которого зависит, к чему подключается шина данных. При высоком выходном уровне данного триггера шина данных io_usb_data подтягивается к третьему состоянию (Z) для чтения информации, приходящих по ней; при низком выходном уровне шина подсоединяется к выходу регистра usb_send_data, для передачи данных в микросхему.

Группа, отвечающая за выдачу прочитанных данных, состоит из входа, разрешающего процесс чтения данных, и двух выходов: 8-битной параллельной шины данных и флага готовности данных к чтению.

Прием записываемых данных осуществляется через входы, отвечающие за старт передаваемых данных (i_start_transmit), параллельных данных ([7:0] i_data), флага корректности данных (i_valid), окончание данных (i_finish_transmit). Также есть сигналы, показывающие состояние выполнения передачи: флаг готовности к приему данных (o_rdy) и флаг передачи (o_sending).

Для корректной передачи данных необходимо:

  1. Подать импульс длиной один такт i_start_transmit;

  2. Дождаться флага готовности к приему;

  3. Выставить один байт данных (вывести данные на шину и подать импульс длиной один такт i_valid);

  4. Повторить 2 и 3 пункт при необходимости;

  5. После окончания передачи (момент заднего фронта сигнала o_sending) подать импульс об окончании передачи данных.

Внутренний цикл модуля основан на конечном автомате. Конечный автомат имеет основное состояние eWait. Из него он может перейти в две ветви: чтения (eReadCycle), записи (eTransmitCycle). В ветви чтения формируются выходные сигналы, запрашивающие чтение принятых данных (eSet_read_high), с определенными задержками (состояние eCountPeriods высчитывает задержку); и соответственно само чтение 8-ми бит данных, после чего через определенное время происходит возвращение в состояние eWait.

В ветви записи происходит ожидание прихода данных, затем переход в состояние eStartTrans, в котором сбрасывается флаг готовности и начинает формироваться управляющий сигнал записи данных. Через определенный цикл задержки (eCountPeriods) сигнал записи данных сбрасывается (состояние eSet_write_low) и происходит возврат (опять же через определенный период времени) в состояние eTransmitCycle. При приходе новых данных цикл записи повторяется. Выход из него (и из состояния eTransmitCycle) происходит, когда приходит сигнал об окончании записи данных, и конечный автомат возвращается в свое начальное состояние eWait.

Модуль верхнего уровня

Входы/выходы модуля верхнего уровня также можно разделить на 4 группы:

  • системные;

  • связь с микросхемой;

  • выдача принятого пакета данных потребителю;

  • прием пакета данных для передачи на микросхему.

Системные порты – тактовый сигнал (clk), сигнал глобального сброса (reset).

Выводы для связи с микросхемой транслируются из модуля нижнего уровня.

Выдача информационного пакета потребителю осуществляется следующим образом:

  1. Выставляется высокий уровень сигнала o_packet_start, по фронту которого можно считывать заголовок сообщения (o_source_port, o_dest_port, o_mes_id, o_last_packet, o_length_mes, o_number_mes). Сигнал o_packet_startдержится в активном состоянии до тех пор, пока не будет выдан первый байт пришедших данных.

  2. По мере прихода данных они выдаются на выход через o_packet_data и o_packet_data_valid. Последний сигнал является флагом корректности данных на выходе, и по нему должна происходить запись данных.

  3. По окончанию приема (когда принято количество, указанное в заголовке o_length_mes) выставляется импульсo_packet_finish длиною один такт, свидетельствующий об окончании сообщения.

  4. Далее при появлении данных повторяются операции, указанные в пунктах 1-3.

Прием сообщения для передачи на микросхему осуществляется похожим способом:

  1. Ожидается выставления сигнала o_rdy_transm, после чего можно осуществлять передачу данных.

  2. Выставляется импульс i_start_dataflow. По его фронту происходит считывание заголовка сообщения, выставленного на шине i_header.

  3. Далее происходит прием данных, а именно по единичному уровню сигналаi_validсчитываются данные на шине i_data. Выход из цикла приема данных осуществляется по приходу сигнала i_finish_dataflow.

  4. Далее происходит передача данных в модуль нижнего уровня, после чего возможно повторения приема сообщения для передачи на микросхему по пунктам 1-3.

Чтение и запись происходят независимо друг от друга.

Цикл чтения принятых данных

При побайтном чтении данных, приходящих с FT245RQ, осуществляется формирование сигналов для выдачи информационного пакета потребителям, а именно сначала формируется заголовок сообщения, затем передаются данные в соответствии с алгоритмом, описанным выше. При окончании формирования сообщения выставляется флаг finished_message, по которому заканчивается формирование сигналов (а именно выставляет импульс сигнала o_packet_finish).

Цикл записи данных для передачи через USB

Цикл записи основан на конечном автомате. Конечный автомат имеет основное состояние eWait_Read, которое ожидает прихода управляющих сигналов на запись сообщения от внешних модулей.

По сигналу i_start_dataflow автомат переходит в состояние eReceivingData, в котором осуществляется прием данных и запись их в оперативную память. По сигналу i_finish_dataflow осуществляется переход в цикл передачи данных на микросхему, а именно состояние eWait_rdy_transm. В нем он увеличивает адрес чтения оперативной памяти (если заголовок сообщения уже отправлен). По сигналу готовности модуля нижнего уровня автомат переходит в состояние eDelayWrite, необходимый для задержки чтения данных с оперативной памяти. В следующем состоянии eWrite_FTDI происходит передача байта данных (либо части заголовка, либо принятых от внешних модулей) в модуль нижнего уровня. После этого автомат возвращается в состояние eWait_rdy_transm.

После отправки всех принятых от внешних модулей данных автомат переходит в состояние ожидания флага об окончании передачи данных eWaitEndSending. После чего в состоянии eFinish_Write_FTDI выставляются все сигналы, необходимые для окончания передачи данных и для начала чтения, приходящих с микросхемы, после чего осуществляется возвращение в начальное состояние eWait_Read.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]