СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-7

шины с базовым адресом 0xFFF80000 . Регистр cr содержит флаги tx_en и rx_en , разрешающие работу передат чика и приёмника соответственно. Пе редатчик считывает данные из внеш ней памяти в свою внутреннюю па мять типа FIFO и затем передаёт данные блоку интерфейса с физичес ким уровнем. Для проверки целостнос ти данных вычисляется контрольная сумма CRC. Приёмник после получе ния данных от PHY записывает их во внутреннюю память FIFO и затем во внешнюю память после получения управления шинойWishbone. В случае ошибки контрольной суммы пакет данных игнорируется. Рассмотрим более подробно работу отдельных блоков канального уровня. К ОНТРОЛЛЕР БУФЕРА ПЕРЕДАТЧИКА Контроллер буфера передатчика со стоит из двух частей – управляющей схемыи конечного автомата, располо женных в файлах tx_bufmgr.v и tx_fsm.v соответственно. Задачей контроллера является чтение данных из внешней памяти во внутреннюю память FIFO и последующая передача этих данных блоку интерфейса с физическим уровнем. Организация буфера данных одина кова для приёмника и передатчика и изображена на рисунке 3. Каждый блок данных имеет свой дескриптор, состо ящий их четырёх 32 битных слов: ● link – указатель на дескриптор сле дующего блока данных; ● bufptr – указатель на данные этого блока; ● cmdsts – слово состояния и команд данного блока; ● extsts – дополнительное слово состо яния; Один блок содержит один пакет данных. Схема конечного автомата буфера передатчика изображена на рисунке 4. В начальный момент времени авто мат находится в режиме ожидания ( TX_IDLE ). Следующее состояние конт роллера – чтение дескриптора блока данных из внешней памяти, но для пе рехода в это состояние необходимо выполнить нескольких условий. Внеш няя управляющая программа – драй вер – должна инициализировать указа тель txdp , который является адресом первого слова дескриптора блока во внешней памяти. При этом флаг ctdd сбрасывается в нулевое значение, ука зывая на то, что загружен новый указа тель. Затем драйвер устанавливает в единичное значение нулевой бит управляющего регистра cr . Этот бит разрешает работу передатчика, и в контроллере буфера он называется cr_txen_i . Затем по таймеру конечный автомат переходит в состояние чтения одного дескриптора TX_DESC_READ . Задержка введена для того, чтобы в ре жиме ожидания контроллер не пере гружал шину Wishbone слишком час тыми запросами на чтение. В состоянии TX_DESC_READ контрол лер считывает четыре 32 битных сло ва из внешней памяти. После оконча ния цикла чтения анализируется 31 й бит слова cmdsts , который в конечном автомате называется own_i и является признаком принадлежности дескрип тора. Этот бит устанавливается в еди ницу производителем данных и в ноль – потребителем данных. Для дескрип торов передатчика производителем данных является драйвер, а контрол лер является потребителем данных. Для дескрипторов приёмника – наобо рот. Поэтому, как видно из рисунка 4, если бит own_i равен единице, значит, он был модифицирован драйвероми в данный момент принадлежит конт роллеру. Затем конечный автомат перехо дит в состояние подготовки чтения одного блока данных в память FIFO TX_FIFO_BLOCK . Если же бит own_i ра вен нулю, это значит, что дескриптор всё ещё принадлежит драйверу и не может быть использован контролле ром. В этом случае автомат возвраща ется в состояние ожидания на время, заданное константой TX_TIMER_EXP , или 16’h0100 циклов тактового сигна ла в данном примере. Циклы чтения дескриптора повторяются до тех пор, пока драйвер не установит в единицу 31 й бит слова cmdsts , т.е. бит own_i . В состоянии конечного автомата TX_FIFO_BLOCK происходит подготов ка к чтениюблока данных. Во первых, проверяется наличие свободного мес та в FIFO, т.е. равенство единице бита fifo_avail_i . Порог установки бита fifo_avail_i конфигурируется битами 8–15 регистра txcfg , который в блоке контроллера называется flth (fill thresh old). Этот регистр находится в файле регистров по глобальному адресу ши ны Wishbone ( WB_BASE + 8’h28 ). Биты frame_done_i и frag_read_i устанавли ПРОГРАММИРОВАНИЕ 66 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2011 link bufptr extsts cmdsts Данные Данные Данные TXDP link bufptr extsts cmdsts link bufptr extsts cmdsts Рис. 3. Структура дескрипторов TX_IDLE TX_ ADVANCE TX_FRAG _READ TX_FIFO _BLOCK TX_DESC _READ cr_txen_i && !ctdd_i && timer_exp_i xfer_done_buf && !own_i xfer_done_buf && own_i frag_read_i && !more_i xfer_done_buf fifo_avail_i && ~frame_done_i && ~frag_read_i xfer_done_buf Рис. 4. Конечный автомат контроллера буфера передатчика © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy