Читайте также: |
|
Модуль сопряжения предназначен для приема данных через 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.
Модуль для тестирования соединения
Данный модуль предназначен для мгновенного ответа пользователю после прихода определенного сообщения, то есть когда у пользователя появляются сомнения в работоспособности соединения по USB, он запускает программу, отсылающую определенное сообщение, и ждет прихода ответного. Если ответ есть, значит соединение работает, если нет, значит возникли неполадки.
Порты модуля можно разбить на 4 группы:
· системные;
· шина принятых по USBданных;
· передача информации в модуль сопряжения;
· управление мьютексом.
Системные сигналы: тактовый сигнал (clk) и сигнал сброса (reset).
Прием и передача информации в модуль сопряжения с USB осуществляется по протоколу, единообразному для всех устройств, которым необходимо передавать информацию через канал USB. Процесс передачи описан в предыдущем параграфе.
Управление мьютексом осуществляется с помощью трех портов:
1. Захват мьютекса o_get – импульс, выставляемый модулем для захвата мьютекса.
2. Освобождение мьютекса o_ret – импульс, выставляемый модулем для освобождения мьютекса.
3. Флаг выданного управления i_got – входной сигнал от мьютекса, высокий уровень показывает, что данному модулю выдано управление модулем сопряжения.
Блок цифровой обработки сигналов
Блок цифровой обработки сигналов обеспечивает запись оцифрованного сигнала в буфер, обнаружение принятых сигналов, генерацию управляющих сигналов, формирование информационных сообщений в соответствии с установленным протоколом обмена и передачи сформированных сообщений в центральный модуль обработки.
Управляется блок ЦОС командами от МЦО.
Блок ЦОС состоит из следующих модулей:
1. Буфер принятых отсчетов;
2. Модуль БПФ;
3. Модуль контроля обнаружителя;
4. Модуль обнаружителя по спектру;
5. Модуль обнаружителя во временной области;
6. Модуль осциллографа
Обобщенная структурная схема блока ЦОС приведена на рисунке 8.
Рассмотрим отдельно каждый модуль блока.
Модуль БПФ
Модуль v_fft представляет собой реализацию быстрого преобразования Фурье, выполняемого непрерывно по всем приходящим отсчетам с размером ядра преобразования, равным целой степени двойки. Модуль обладает следующими параметрами:
p_fft_depth – степень двойки для указания размера ядра;
p_signal_width – разрядность одной квадратуры входного сигнала;
p_coef_width – разрядность одной квадратуры коэфициента преобразования Фурье.
Модуль обладает следующими портами
i_signal_1 – первый сигнальный вход для подачи комплексного сигнала с шириной шины в два раза больше, чем p_signal_width;
i_signal_2 – второй сигнальный вход для подачи комплексного сигнала с шириной шины в два раза больше, чем p_signal_width;
i_valid – признак готовности данных на входе;
i_clk – вход тактового сигнала;
i_reset – вход сброса:
o_signal_1 – первый выход комплексного отсчета спектра с шириной шины в два раза больше, чем p_signal_width;
o_signal_2 - второй выход комплексного отсчета спектра с шириной шины в два раза больше, чем p_signal_width;
o_valid – признак готовности отсчетов спектра;
o_first – признак первой пары спектральных отсчетов в выходном пакете;
o_last – признак последней пары спектральных отсчетов в выходном пакете.
Работа модуля начинается после подачи на вход i_clk тактового сигнала. Первым после поступления тактового сигнала подается сигнал синхронного сброса i_reset. Минимальная длительность импульса сигнала сброса равна одному периоду i_clk.
На входы i_signal_1 и i_signal_2 подаются два комплексных отсчета входного сигнала, взятых в соседние моменты времени. Оба сигнала сопровождаются единичным уровнем сигнала i_valid.
После записи отсчетов ( пар сигналов i_signal_1 и i_signal_2) модуль начинает производить оценку спектра записанной реализации. Оценка спектра происходит конвейерным методом, поэтому сразу же после окончания записи первой реализации в отсчетов можно сразу же начинать записывать следующую реализацию. По факту модуль позволяет производить преобразование входного сигнала, имеющего тактовую частоту оцифровки в два раза превышающую тактовую частоту модуля БПФ, без разрывов сигнала i_valid.
Через тактов модуль БПФ выставляет результаты расчета спектра на выходные шины o_signal_1 и o_signal_2, сопровождая их признаком готовности данных на выходе o_valid.
Отсчеты спектра выставляются попарно, начиная с нулевого и первого, заканчивая и . Первая пара отсчетов сопровождается единичным уровнем сигнала o_first, последняя пара единичным уровнем сигнала o_last. Длительность единичных уровней составляет один период тактовой частоты.
Модуль состоит из двух последовательно включающихся ядер БПФ преобразования v_fft_core. Каждый из модулей v_fft_core является модулем конвейерного БПФ преобразования, состоящим из последовательно включенных модулей v_fft_layer. Каждый модуль v_fft_layer содержит оперативную память, достаточную для хранения одной выборки, устройство кодирования адреса записи и адреса чтения в соответствии с алгоритмом БПФ с прореживанием по частоте.
Приходящая на модуль v_fft_core выборка записывается в оперативную память v_fft_layer с порядковым номером ноль. После этого запись в нулевой слой прекращается, после чего производится обработка выборки (взвешенное попарное суммирование отсчетов) в соответствии с алгоритмом. После этого отсчеты пишутся в следующий слой.
Суммарное время обработки в слое равно времени поступления одной выборки. Таким образом, через тактов после окончания записи выборки в слой, слой заканчивает обработку. Аналогичным образом работают все остальные слои.
Это означает, что в каждый момент времени внутри одного ядра v_fft_core слои с четными номерами производят параллельную обработку, а слои с нечетными номерами ожидают результатов обработки от слоев с четными номерами, либо слои с нечетными номерами производят параллельную обработку, а слои с четными номерами ожидают результатов обработки от слоев с нечетными номерами.
То есть ядро v_fft_core позволяет обработать каждую вторую выборку, поступающую на его вход.
Два ядра v_fft_core одного модуля v_fft работают в смещенном режиме – когда в одном ядре четные слои обрабатывают информацию, во втором ядре обработкой занимаются нечетные слои, и наоборот.
Это позволяет производить предварительное разделение на частотные каналы на частоте меньшей, чем скорость поступления данных.
На выходе модуля v_fft располагается мультиплексор, коммутирующий выходы модулей v_fft_core на один выход v_fft в зависимости от активности выходного v_fft_layer заданного v_fft_core.
+
Рисунок 8 – Структурная схема блока ЦОС
Дата добавления: 2015-10-28; просмотров: 148 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Блок обмена информацией по USB (микросхема FT245RQ) | | | Модуль контроля обнаружителя |