Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос к тем, кто юзал Xilinx Tri-mode Ethernet MAC core
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Alexium
Здравствуйте.
Делаю дипломную работу. Хочу использовать Ethernet для связи FPGA c ПК. А именно - пытаюсь задействовать Xilinx Tri-mode Ethernet MAC core, ибо времени очень мало, писать контроллер самому уже некогда.
Проблема такая: на прием оно работает (с глюками, но это уже не так важно). А вот на передачу - ни в какую. Сто раз весь код перепроверил - ошибок не вижу.

Ядро сгенерировано в режиме 10/100 Мбит/с, полный дуплекс.
В руководстве пользователя (UG) ясно написано, как выполнять передачу:

"When the client wants to transmit a frame, it places the first column of data onto the clientemactxd port and asserts a ‘1’ onto clientemactxdvld. When the MAC core has read this first byte of data, it asserts the emacclienttxack signal; on the next and subsequent clock-enabled rising edge, the client must provide the remainder of the data for the frame. The end of frame is signalled to the MAC core by taking clientemactxdvld low."

Вот временная диаграмма:


Вот процесс, который управляет нужными сигналами:

Код
TXTransmitLoop: process (TXDataAck, rst, TXStartTransmission)
begin
    if rst = '1' then
        TXTransmitterState <= idle;
        TXCounter <= 0;
        debug(0) <= '0';
        TXByteValid <= '0';
        debug(9 downto 2) <= (others=>'0');
    else
        if TXTransmitterState = idle and TXStartTransmission = '1' then
            TXTransmitterState <= awaitingACK;
            TXCounter <= 0;
            debug(0) <= '0';
        elsif rising_edge(TX_CLK) then
            if TXTransmitterState = awaitingACK then
                TXByteValid <= '1';
                if TXDataAck = '1' then
                    TXCounter <= TXCounter + 1;
                    TXTransmitterState <= transmitting;
                    TXByteValid <= '1';
                end if;
            elsif TXTransmitterState = transmitting then
                if TXCounter < (TXNumberOfBytesToSend - 1) then
                    TXCounter <= TXCounter + 1;
                    debug(0) <= '0';
                    debug(9 downto 2) <= conv_std_logic_vector(TXCounter, 8);
                else
                    TXTransmitterState <= idle;
                    TXCounter <= 0;
                    debug(0) <= '1';
                    TXByteValid <= '0';
                end if;
            end if;
        end if;
    end if;
end process;


TXByteValid у меня - это clientemactxdvld по UG, TXDataACK - emacclienttxack.
Параллельно процесс меняет счетчик, который адресует буфер передатчика (оттуда выбирается байт для передачи). Но это неважно. Процесс работает как надо, проходит полный цикл, все в порядке. Проблема: даже не включается светодиод на сетевом разъеме, который означает сетевую активность.
Все подключения сигналов перепроверил, ошибок не нашел. Уже не знаю, что думать.

Вот код модуля целиком.

Спасибо всем, кто потратил время и дочитал до конца. Ну и заранее спасибо за помощь.
AndrewS6
Возможно, что некорректно сконфигурирован эзернетовский PHY. На сетевом разъеме второй светодиод, означающий наличие физического соединения на заданной скорости, горит вообще?
Alexium
Цитата(AndrewS6 @ Mar 3 2011, 09:21) *
Возможно, что некорректно сконфигурирован эзернетовский PHY.

Возможно, но я его не конфигурирую. Я подаю конфигурационный вектор на вход МАС-контроллера, остальное - его задача (конечно, я не уверен, что там все работает, как надо, но ведь это все-таки платный фирменный ip-core...).

Цитата(AndrewS6 @ Mar 3 2011, 09:21) *
На сетевом разъеме второй светодиод, означающий наличие физического соединения на заданной скорости, горит вообще?

2 Один светодиод (10/100) светится в режиме 100Мбит/с, когда есть линк. Линк есть. Второй светодиод нормально выключен, мигает во время приема. Во время попыток передачи он ни разу не мигнул.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.