СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-7
надлежности дескрипторов, бит own_i у дескриптора, принадлежащего конт роллеру, должен быть равен нулю. В противном случае автомат возвраща ется в режим ожидания и затем перио дически, по истечении времени тай мера, считывает дескриптор из внеш ней памяти. В случае, если бит own_i равен нулю, автомат переходит в следующее состо яние – RX_FIFO_BLOCK . В этом состоя нии автомат ожидает окончания при ёма пакета блокоминтерфейса с физи ческим уровнем, который записывает данные в память FIFO. При совпадении вычисленной и полученной контроль ных сумм автомат переходит в состоя ние RX_FRAG_WRITE и копирует дан ные из FIFO в адресное пространство внешней памяти, указанное в текущем дескрипторе. Если контрольные сум мыне совпадают, блок данных не запи сывается во внешнюю память. Однако этот блок данных уже содержится в па мяти FIFO, поэтому конечный автомат переходит в состояние RX_SCROLL , в котором происходит увеличение адре са чтения на размер принятого пакета. Приёмник может хранить в памяти до 32 пакетов данных, прежде чем они будут скопированы во внешнюю память. Для этого в модуле rx_mac организован массив 16 битных слов, хранящий размер принятого паке та, и массив битов достоверности данных: reg [15:0] packet_size [0:31]; reg data_valid [0:31]; Доступ к этому массиву осуществля ется по принципу памяти FIFO, т.е. имеется адрес для чтения и для записи. При получении пакета инкрементиру ется адрес записи, а при копировании пакета во внешнююпамять инкремен тируется адрес чтения. После успешного копирования па кета данных во внешнюю память ко нечный автомат переходит в состоя ние RX_ADVANCE . В этом состоянии происходит обновление текущего дескриптора – бита принадлежности own_i , бита успешности приёма пакета и поля размера принятого пакета, куда записывается фактический размер принятого пакета данных в байтах. В этом состоянии также проверяется по ле дескриптора link . Если это поле рав но нулю, автомат переходит в состоя ние RX_IDLE и ждёт дальнейшего об новления указателя дескриптора rxdp драйвером. Если же поле link не равно нулю, то это ненулевое значение ко пируется в регистр rxdp , сбрасывается бит crdd_i и автомат также переходит в состояние ожидания. Но в связи с тем, что указатель дескриптора уже был об новлён, сразу же происходит переход в состояние RX_DESC_READ , в котором копируется новый дескриптор. Таким образом, драйвер может инициализи ровать массив связанных дескрипто ров и затем блоками считывать данные из внешнего буфера. Как упоминалось выше, обмен дан ными с внешней памятьюпроисходит через шину Wishbone. Рассмотрим бо лее подробно работу контроллера этой шины. К ОНТРОЛЛЕР ШИНЫ W ISHBONE Модуль контроллерашины располо жен в файле wb_cntr_g.v . Этот модуль имеет в своём составе конечный авто мат, изображённый на рисунке 9. В со стоянии WB_IDLE автомат находится в режиме ожидания; WB_BREAD – цикл чтения данных, инициированный мо дулями r x_bufmgr или tx_bufmgr ; WB_BWRITE – цикл записи данных, инициированныймодулями rx_bufmgr или tx_bufmgr . Эти два состояния ис пользуются для чтения/записи деск рипторов и данных; WB_EXWRITE – за пись данных в адресное пространство контроллера внешними устройствами. В этом состоянии внешний драйвер инициализирует управляющие реги стры контроллера, которые находятся в адресном пространстве шины Wish bone. Обмен данными осуществляется 32 битными словами. С ИСТЕМА НА КРИСТАЛЛЕ Поскольку сетевой контроллер об менивается данными с внешней па мятью и требует инициализации, для тестирования его работы требуется ряд вспомогательных устройств. На рисунке 10 изображена блок схема системы на кристалле с указанием верхних модулей всех устройств. Верх ний модуль системы на кристалле на ходится в файле sopc.v . Входной дифференциальный такто вый сигнал 200 МГц преобразуется в две частоты – 30 и 125 МГц. Частота 125МГц используется в цепях передат чика в блоке интерфейса с физичес ким уровнем ( tx_mac ) и также является тактовым сигналом для PHY. Для пере дачи тактовой частотына внешний вы вод ПЛИС (clock forwarding) использу ется примитив ODDR2 , шаблон кото рого имеется в среде PlanAhead. Приёмная цепь интерфейса физи ческого уровня ( rx_mac ) тактируется внешней частотой 125 МГц, генериру емой PHY. Все остальные модули рабо тают на частоте 30 МГц. Контроллер памяти обеспечивает чтение/запись памяти через шину Wishbone и также имеет встроенную память, реализованнуюна внутренних блоках памяти ПЛИС. Этого объёма вполне достаточно для тестирования сетевого контроллера. Задачей контроллера шины Wish bone является декодирование адреса и мультиплексирование шины соответ ствующим образом. Сетевой контрол лерможет обмениваться данными с па мятью в режиме чтения и записи. Контроллер UART может считывать данные из памяти, а также записывать данные как в память, так и в регистры сетевого контроллера, в зависимости от адреса. При построении системы использовался UART, описанный в [5]. ПРОГРАММИРОВАНИЕ 70 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2011 WB_ BWRITE WB_ BREAD WB_ EXWRITE WB_ IDLE rd_i int_wr_i we_i && cyc_i && stb_i ~cyc_i xfer_done_o xfer_done_o Рис. 9. Конечный автомат контроллера шины Wishbone © СТА-ПРЕСС
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy