Перейти к содержанию
    

Всем привет. Есть ли у кого-нибудь опыт в реализации проекта xilinx tri mode ethernet mac ? На RGMII гигабитный PHY.

У меня появилось несколько вопросов:

1. RGMII - Reduce Gigabit Media Independent Interface. RGMII использует половину цепей, используемых в GMII интерфейсе. Всего 12 контактов, и среди них TXD и RXD по [3:0], т.е. по 4 цепи.

Но, генерируемая корка MAC-а (tri mode ethernet mac) в xilinxe при выборе RGMII интерфейса выдает TXD и RXD по [7:0], т.е. по 8 цепей, (как обычный GMII). Вопрос, я же не могу свой PHY с 4-мя цепями коннектить только на половину цепей, что выходит из мака? Что с этим делать?

2. Если я правильно разобрался, то на GTX_CLK (клок на phy) и на tx_axi_clk (клок на mac)(опять же все применимо к rgmii) нужно подавать 125mhz clk ?

3. Я пробую протащить пакеты через MAC. Подаю на вход [7:0] tx_axis_mac_tdata (Frame data to be transmitt) вместе с tx_axis_mac_tvalid (TX Data Valid), но пакеты не попадают на PHY (и на выходе мака нету). Почему не проходят, как правильно отправить? Есть ли пример?

Заранее спасибо за терпение)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я разобрался с вопросами которые выше.

Появился новый.

Покажу две картинки. Первая иллюстрирует, что идет на вход MAC, а вторая что появляется на выходе.

Как мы помним ethernet frame состоит из следующих частей: Preamble 7 byte, Start of Frame Delimiter (SFD) 1 byte, Destination Address 6 byte, Source Address 6 byte, Length/Type 2 byte, Data 0-1500 byte, Pad 0-46 byte, FCS 4 byte

Мой MAC устроен таким образом, что я на его вход подаю только DA,SA,L/T,DATA а на выходе все остальное он добавляет сам и далее все идет на PHY Data.

Но на выходе c MAC, как мы видим на 2-ой картинке он, действительно добавляет недостающие части фрейма, например Preamble и т.д. НО! Destination Address и Source Address вместо 6 byte адреса выдает только 1 byte тоесть неполный адрес.

Есть ли идеи почему он обрезает DA и SA ? Ведь, как я понимаю, на вход PHY должен приходить адрес полностью.

 

1-ая картинка:

post-84716-1432909395_thumb.jpg

 

2-ая картинка:

post-84716-1432909426_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой MAC устроен таким образом, что я на его вход подаю только DA,SA,L/T,DATA а на выходе все остальное он добавляет сам и далее все идет на PHY Data.

Не помню, чтобы его можно было настраивать таким образом. Описание (ug138) сейчас посмотрел и тоже не нашел. Может покажете, как вы его так подключили.

По-моему можно задать только свой MAC-адрес и только для проверки принятых пакетов, а не отправляемых.

 

А еще хорошо бы в ChipScope и управляющие сигналы вывести, а не только данные, в XC6SLX100 памяти полно.

 

Еше раз описание посмотрел, а вы сигнала emacclienttxack дожидаетесь (Figure 7-7)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я разобрался с вопросами которые выше.

Появился новый.

Покажу две картинки. Первая иллюстрирует, что идет на вход MAC, а вторая что появляется на выходе.

Как мы помним ethernet frame состоит из следующих частей: Preamble 7 byte, Start of Frame Delimiter (SFD) 1 byte, Destination Address 6 byte, Source Address 6 byte, Length/Type 2 byte, Data 0-1500 byte, Pad 0-46 byte, FCS 4 byte

Мой MAC устроен таким образом, что я на его вход подаю только DA,SA,L/T,DATA а на выходе все остальное он добавляет сам и далее все идет на PHY Data.

Но на выходе c MAC, как мы видим на 2-ой картинке он, действительно добавляет недостающие части фрейма, например Preamble и т.д. НО! Destination Address и Source Address вместо 6 byte адреса выдает только 1 byte тоесть неполный адрес.

Есть ли идеи почему он обрезает DA и SA ? Ведь, как я понимаю, на вход PHY должен приходить адрес полностью.

 

1-ая картинка:

post-84716-1432909395_thumb.jpg

 

2-ая картинка:

post-84716-1432909426_thumb.jpg

К сожалению я затрудняюсь сказать что-либо глядя на Ваши картинки, но когда я с ним разбирался я взял за основу пример который генерится визардом (AddresSwap как то так этот модуль называется). я с одной стороны подключил Chip scope с другой комп с Wireshark. Mac в исполнении Xilinx формирует преамбулу, SFD и FCS. все остальное тело пакета надо грузить через интерфейс данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы в хексе напишите, что вы получаете, вместе с приамбулами и т.д. А, то нет желания побитово декодировать. Всю посылку.

От себя добавлю,когда парился с RGMII, ждал ETHERNET пакета. Мне приходили данные, я ничё понять не мог - заголовки и тело не соответствовали формату пакетов ethernet, пока не допёрло: ПРОЦ сначала шлёт ARP запрос на предмет "прозвонки" связи. И только после этого слал нужные мне данные.

 

Ещё! Не забываем, что RGMII - даблрэйт. Первый нибл забираем по переднему фронту, а второй нибл по заднему.

Изменено пользователем Trashy_2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению я затрудняюсь сказать что-либо глядя на Ваши картинки, но когда я с ним разбирался я взял за основу пример который генерится визардом (AddresSwap как то так этот модуль называется). я с одной стороны подключил Chip scope с другой комп с Wireshark. Mac в исполнении Xilinx формирует преамбулу, SFD и FCS. все остальное тело пакета надо грузить через интерфейс данных.
очень верный способ, на мой взгляд. Плюс ко всему там тестбенч написан, который можете запустить даже в Isim и посмотреть что к чему. Так же есть дока официальная на корку UG138 "LogiCORE IP Tri-Mode Ethernet MAC v4.5" там все ответы на интересующие Вас вопросы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не успел написать. Я разобрался, в чем дело, на прошлой неделе. Но косяк еще не устранил, т.к. в программировании я оч. слаб.

Там дело в том, что первые байты DA и SA уже прошли а handshaking приходит позже, соответственно эти первые байты на выходе обрезались.

Теперь нужно сделать так, чтобы первый байт отправлялся до тех пор пока не придет handshaking и далее остальное.

 

А по поводу модуля AddresSwap, надо глянуть.

 

Глянул, не нашел. Есть только Multiply Adder и Adder Subtracter.

 

Как написать простой код, чтобы первый байт отправлялся до тех пор пока не придет какой-либо внешний сигнал, а как только он приходит отправляются следующие байты? =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"LogiCORE IP Tri-Mode Ethernet MAC v4.5"

 

А что бы эту корку юзать, надо денежку заносить куда то или она халявная?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что бы эту корку юзать, надо денежку заносить куда то или она халявная?

 

webpack покупаешь и все в нем халява

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как на Verilog описать задержку первого байта до прихода emacclienttxack ?

 

post-84716-1433239757_thumb.jpg

Изменено пользователем NSergeevich

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как на Verilog описать задержку первого байта до прихода emacclienttxack ?

 

post-84716-1433239757_thumb.jpg

 

можно написать конечный автомат, который будет висеть в состояние до того момента как придет emacclienttxack, и находясь в новом состоянии будет выдавать новые данные на clientemactxd. Опять же настоятельно рекомендую посмотреть пример. В примере между MAC контроллером и модулем client_side вставлен FIFO, и соблюдение всех рукопожатий ложится на этот модуль, Вам же остается просто кидать данные в FIFO и следить чтобы он не переполнился, если вы работаете на передачу.

 

Может быть, кто-нибудь использовал конструкцию The wait statement в верилоге ?

 

Для верификации сколько хош :)

 

UPD: я может чего не так понял , если вы пользуете ядро под номером 4.6 то в папке куда у вас сгенирировалась корка есть папка example_design в ней и смотрите пример

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно написать конечный автомат, который будет висеть в состояние до того момента как придет emacclienttxack, и находясь в новом состоянии будет выдавать новые данные на clientemactxd. Опять же настоятельно рекомендую посмотреть пример. В примере между MAC контроллером и модулем client_side вставлен FIFO, и соблюдение всех рукопожатий ложится на этот модуль, Вам же остается просто кидать данные в FIFO и следить чтобы он не переполнился, если вы работаете на передачу.

 

 

 

Для верификации сколько хош :)

 

UPD: я может чего не так понял , если вы пользуете ядро под номером 4.6 то в папке куда у вас сгенирировалась корка есть папка example_design в ней и смотрите пример

 

 

Где этот пример-то посмотреть? У меня в папке экземпл дезайна нету.

И модуль дополнительный мне не нужен т.к. код осуществляющий передачу ethernet frame-а простой и не грамоздкий. Только нужно понять как этот конечный автомат правильно написать, чтобы первый байт отправлялся непрерывно пока не придет внешний emacclienttxack, а как пришел - все остальное

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только нужно понять как этот конечный автомат правильно написать, чтобы первый байт отправлялся непрерывно пока не придет внешний emacclienttxack, а как пришел - все остальное

А чего тут такого сложного ? Берете карандаш ,листок , бумагу ... Рисуете состояния и правила перехода из них, затем плавно переносите на HDL. Тема fsm verilog/VHDL гуглится хорошо. Я же вроде бы писал :

можно написать конечный автомат, который будет висеть в состояние до того момента как придет emacclienttxack, и находясь в новом состоянии будет выдавать новые данные на clientemactxd.

 

Или Вам еще не доводилось описывать конечные автоматы ? Вы на каком языке собрались это делать ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чего тут такого сложного ? Берете карандаш ,листок , бумагу ... Рисуете состояния и правила перехода из них, затем плавно переносите на HDL. Тема fsm verilog/VHDL гуглится хорошо. Я же вроде бы писал :

 

 

Или Вам еще не доводилось описывать конечные автоматы ? Вы на каком языке собрались это делать ?

 

 

Verilog. Делал светофор на диодах =))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...