Хочу сделать реконфигурацию трансивера. Для этого собрал QSyS-системку по аналогии с an676 и вот этим товарищем. Вкратце:
- Clock Source 75MHz - это понятно;
- JTAG to Avalon Master - чтобы был доступ из System Console;
- Transceiver Reconfiguration Controller - настроен на 2 интерфейса, включена возможность реконфигурации через MIF;
- Cyclone V Transceiver Native PHY - настроен на 2 скорости;
- Transceiver PLL - дает опору для одной скорости;
- Fractional PLL - дает опору для второй скорости;
- Transceiver PHY Reset Controller - понятно;
- PIO - для выбора таблички MIF с настройками той или иной скорости;
Всё собирается, из System Console всё видно. Пытаюсь, по аналогии с an676, an664, an645 и конечно же xcvr_user_guide, читать-писать регистры реконфигуратора и получаю затык. Вопросы следующие:
1. В настройках Transceiver Reconfiguration Controller-а есть параметр Optional Interface Groupong. Никак не могу понять что он означает. Вот у меня два интерфейса используются - один для трансивера, второй - для PLL. Что в моем случае надо здесь вписать? Почему?
2. Чтобы заставить Reset Controller выполнить сброс - достаточно разок дернуть его самомо за ногу reset?
3. Вот мы сбросились, подключились к реконфигуратору (через System console), читаем все его регистры, получаем следующую картину:
Код
% dump_all 0
PMA Analog control registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
VOD (0x00) = 10
Pre-emphasis pre-tap (0x01) = 0
Pre-emphasis first post-tap (0x02) = 0
Pre-emphasis second post-tap (0x03) = 0
RX equalization DC gain (0x10) = 0
RX equalization control (0x11) = 0
AEQ registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
ADAPT_DONE (0x00) = 0
MODE (0x00) = 0
Equalization results (0x01) = 0
ATX PLL calibration registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
Control (0x00) = 0
Run calibration (0x01) = 0
PLL reconfiguration registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
Logical refclk selection (0x00) = 0
Logical PLL selection (0x01) = 0
refclk physical mapping (0x02) = 33554400
PLL physical mapping (0x03) = 16163
DCD registers dump (channel 0):
Control (0x00) = 0
Streamer registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
MIF base address (0x00) = 0
Clear error (0x01) = 0
MIF address mode (0x01) = 0
Start MIF stream (0x01) = 0
MIF or channel mismatch (0x02) = 0
PLL reconfiguration IP error (0x02) = 0
MIF opcode error (0x02) = 0
Invalid register access (0x02) = 0
PMA Analog control registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
VOD (0x00) = 10
Pre-emphasis pre-tap (0x01) = 0
Pre-emphasis first post-tap (0x02) = 0
Pre-emphasis second post-tap (0x03) = 0
RX equalization DC gain (0x10) = 0
RX equalization control (0x11) = 0
AEQ registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
ADAPT_DONE (0x00) = 0
MODE (0x00) = 0
Equalization results (0x01) = 0
ATX PLL calibration registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
Control (0x00) = 0
Run calibration (0x01) = 0
PLL reconfiguration registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
Logical refclk selection (0x00) = 0
Logical PLL selection (0x01) = 0
refclk physical mapping (0x02) = 33554400
PLL physical mapping (0x03) = 16163
DCD registers dump (channel 0):
Control (0x00) = 0
Streamer registers dump (channel 0):
feature status: busy = 0, error = 0, read = 0, write = 0
MIF base address (0x00) = 0
Clear error (0x01) = 0
MIF address mode (0x01) = 0
Start MIF stream (0x01) = 0
MIF or channel mismatch (0x02) = 0
PLL reconfiguration IP error (0x02) = 0
MIF opcode error (0x02) = 0
Invalid register access (0x02) = 0
Это, получается, как бы значения по умолчанию. Окей, но при попытке записать что-то в те или иные поля - мои значения либо не пишутся, либо пишутся как-то странно (по сигналтапу я вижу что на авалоновскую шину реконфигуратора все выставляется корректно). Например, несмотря на то, что VOD согласно документации может быть от 0 до 63, некоторые значения записываются неверно или не записываются вообще. Получаются как бы "дырки". Это нормально?
4. Есть какое-нибудь вменяемое описание того в какой последовательности правильно конфигурировать трансивер? А то везде все ограничиваются примером в духе "мы покажем как записать один произвольный регистр". Может там нужна особая последовательность записи?!
В итоге я хочу порегистрово его сконфигурировать и сделать скрипт для управления режимами его работы, что-то похожее на Transceiver Toolkit, только сильно проще и под свои нужды.
Спасибо.