TverBASS
Jan 25 2010, 10:01
Возникла вот необходимость сделать железку с Ethernet'ом. В качестве Phy был выбран et1011, рулить им будет virtex4(без аппаратной поддержки gmii). С нуля описывать gmii не хотелось, потому решено было воспользоваться наработками товарища Gao Jon, стянутыми с Open Cores. И все бы ничего, да уж больно бедновата документация на это творение. И что меня удивило, это что нет шума вокруг этого проекта,хотя вроде штука вроде работает...
Мои вопросы вероятнее всего будут адресованы тем кто уже работал с этой реализацией МАК уровня, хотя возможно вы предложите альтернативные решения, более описанные и уже освоенные.
Вызвал трудности Host Interface. Как я понимаю он одновременно выполняет конфигурирование МАК модуля и по miim может работать с phy. Host interface это 16-битная шина данных на чтение,16 бит на запись, 8 бит адреса(?) и два управляющих сигнала. Как по этому интерфейсу изменять регистры самого мак модуля ясно, а как по нему посылать в et1011 32 битные слова не очевидно.
Так же не очень понятно назначение сигналов RX_mac_BE(1:0) и TX_mac_BE(1:0).
В общем если кто то имел опыт решения подобных проблем,поделитесь пожалуйста.
AndreiUS
Jan 28 2010, 06:51
Проще написать самому на верилоге модуль GMII-интерфейса, тем более там особо хитрого ничего нет, чем разбираться в уже кем-то написанном. Немного посложнее дело с RGMII. А eth1011, про который вы говорите, это случайно не Marvell 88E1011?
TverBASS
Feb 1 2010, 13:10
Это LSI ET1011. Но думаю от Марвела не сильно отличается. Тот же GMII и тот же MIIM.
PavelTs
Feb 2 2010, 11:37
Ну раз никто ничего не написал, то попробую чуть поумничать, хотя по-моему буду освещать тривиальные понятия, которые Вам скорее всего знакомы. Так что не судите строго. Сам по себе MII и GMII для FPGA не представляет ничего сложного. Мы реализовали это для второго циклона. Работает без проблем. Главное в этом деле правильно развести плату и согласовать волновые сопротивления терминирующими резисторами и правиьным расчетом трасс. Тоже самое касается и высокочастотной части, которая находится в сторону "меди". Если согласующие резисторы находятся внутри корпуса микросхемы, то проблем скорее всего не возникнет. Теперь, что касается управления. В нашем девайсе используются линии MDIO и MDCLK, т.е. управление по последовательному порту, и мы это сделали на обычном микроконтроллере, который управляет всеми элементами нашего девайса. Там как раз все эти 16 разрядов данных и 8 адреса, как Вы и писали. Достаточно подробно это все описано в документах на DP83865 NSC, что есть в открытом доступе. Основная часть регистров - это первые 4, по-моему, они стандартизованы для всех Phy Ethertnet, но могу и ошибаться. По крайней мере 0-й точно АБСОЛЮТНО у всех одинаковый, а там как раз идут настройки скорости порта, разрешение Auto Negotiation и т.д. Т.е. самое главное Вы сможете почерпнуть оттуда. Другой вопрос, что реализовывать всю алгоритмику Вам придется в ПЛИСе, что как мне кажется, не удобно. Кроме того, наверняка Вам понадобятся и другие функции микросхемы, которые подключаются через специфические регистры.
Сам по себе MAC уровень, т.е. формирование 802.3 пакетов мы не реализовывали, т.к. задачи не стояло, мы сделали прозрачную железку. Поэтому по конкретно этому вопросу помочь врядли смогу. Да, добавлю, что мы использовали Phy DP83865 и 88E1119 от Marvell. Marvell рулит, т.к. ваще безпроблемная микросхема и потребляет не много, т.е. греется не сильно, можно не ставить радиатор.
Удачи в реализации!!!
TverBASS
Feb 2 2010, 13:57
Спасибо за ответ!действительно, почти все это мне знакомо. Реализация GMII самостоятельно меня не пугает но требует времени и отладки. Куда как приятней взять готовое МАС core и подсовывать в него 32 битные слова, не заботясь о преамбулах и CRC. Опробовал я творение товарища Gao. Принимать пакеты оно уже начало. А вот с отправкой так и не разобрался. Не шлет ничего

К тому же смысл некоторых сигналов остался неясен.
По поводу управления PHY микроконтроллером. Нету на плате микроконтроллера у меня) потому все эти сдвиги и конфигурирования надо делать на ПЛИСе. Не сомневаюсь что задача решена, зачем решать ее опять? еще попробую поразбираться с передачей и если не оживет придется МАС писать заново
TverBASS
Feb 5 2010, 13:51
Спасибо тем кто откликнулся! удалось разобраться. уже реализован ARP запрос-ответ. Mac core явно рабочее. Не стоит изобретать велосипед и описывать заново MII и GMII, этой штукой вполне можно пользоваться. Моей ошибкой было то,что не завел сразу TXCLK который используется в MII, но который не нужен в GMII. В МАК модуле этот сигнал запускает начальное конфигурирование и управляет клоковыми мультиплексорами,потому он нужен обязательно.
Но как ни крути бедность документации на это tri-mode ethernet MAC core дает иногда о себе знать....
des333
Mar 18 2010, 22:12
Цитата(TverBASS @ Jan 25 2010, 13:01)

Так же не очень понятно назначение сигналов RX_mac_BE(1:0) и TX_mac_BE(1:0).
Если, вдруг, еще не разобрались, BE - byte enable, показывает число валидных байтов в последнем слове.
msn-spb
Mar 24 2010, 14:04
Доброго времени суток.
Есть необходимость синтезировать данную core от Gao... до данного момента с корками еще не работал.
Запустил скрипт в ModelSim но ничего из этого не вышло....
Объясните алгоритм действий при работе с core, чтобы ее оживить и получить синтезируемый модуль
msn-spb
Mar 31 2010, 10:20
Спасибо за исчерпывающий ответ!!!
Цитата(TverBASS @ Feb 2 2010, 17:57)

Спасибо за ответ!действительно, почти все это мне знакомо. Реализация GMII самостоятельно меня не пугает но требует времени и отладки. Куда как приятней взять готовое МАС core и подсовывать в него 32 битные слова, не заботясь о преамбулах и CRC. Опробовал я творение товарища Gao. Принимать пакеты оно уже начало. А вот с отправкой так и не разобрался. Не шлет ничего

К тому же смысл некоторых сигналов остался неясен.
По поводу управления PHY микроконтроллером. Нету на плате микроконтроллера у меня) потому все эти сдвиги и конфигурирования надо делать на ПЛИСе. Не сомневаюсь что задача решена, зачем решать ее опять? еще попробую поразбираться с передачей и если не оживет придется МАС писать заново
Hello, I hope you'd not have a problem to read my post.
I created new testbench to check functionality of the MAC- tx would work if all control registers preloaded with a default values from set_reg_data.tcl file.
MDIO port is not completed but I will add it myself.
Question: Have you been able to meet timing 125MHz. Spartan6 fails by 0.4 ns (CRC path)?
des333
Jun 19 2010, 20:41
Цитата(agate @ Jun 19 2010, 22:39)

Hello, I hope you'd not have a problem to read my post.
I created new testbench to check functionality of the MAC- tx would work if all control registers preloaded with a default values from set_reg_data.tcl file.
MDIO port is not completed but I will add it myself.
Question: Have you been able to meet timing 125MHz. Spartan6 fails by 0.4 ns (CRC path)?
В русскоязычных разделах форума принято писать по-русски.
Если нет возможности писать русскими буквами - данный ресурс Вам поможет:
http://www.translit.ru/
TverBASS
Jul 19 2010, 07:57
По поводу 0.4 нс. Да,были проблемы с фазой клока. На задержки не обращали внимание, от ошибок неправильного защелкивания данных боролись принудительным сдвигом фазы 125мгц. пока работа встала, MDIO не проверял, но его реализации там так и не нашел.
Спасибо за ответ про BE!
.4 нсек рассосался сам ка только поставил ПЛЛ . МДИО контроллер там есть , его надо только подключить через контрольные регистры. Все вроде рабочее.
TverBASS
Sep 23 2010, 08:13
msn-spb:
добавляйте все файлы *.v в проект и головным модулем будет модуль TOP. Я сам работаю со схематикой, потому по модулю TOP создаю символ и вставляю в основной проект. По поводу встроенного файла для симуляции не знаю,не пробовал.
Друзья, если кто то продолжает работать с этой ethernet коркой, подскажите,нет ли у кого проблем с RX_EOP? в 99 процентах случаев все ок, но иногда после конца пакета этот сигнал уходит в высокое и так и держится до следующего пакета. это у меня такая проблема или это баг?
Использьзуя тестбенч, приведенный в этом проекте, хотел произвести симмуляцию в Modelsim. В результате получил следующие варнинги
Warning: (vsim-PLI-3003) bench/verilog/User_int_sim.v(122): [TOFD] - System task or function '$ip_32W_gen' is not defined.
# Region: /tb_top/U_User_int_sim
# ** Warning: (vsim-PLI-3003) bench/verilog/User_int_sim.v(150): [TOFD] - System task or function '$ip_32W_check' is not defined.
# Region: /tb_top/U_User_int_sim
и сигнал данных нулевой. Как я понял из этого:
always @ (posedge Clk_user)
if (Tx_mac_wa&&CPU_init_end)
$ip_32W_gen("../data/config.ini",operation,data);
else
begin
operation <=0;
data <=0;
end
необходимо подключить эти две библиотеки к моделсиму. Вопрос - каким образом это сделать?
ИльяКи
May 23 2011, 05:51
Цитата(Xuck @ Apr 26 2011, 12:33)

Использьзуя тестбенч, приведенный в этом проекте, хотел произвести симмуляцию в Modelsim. В результате получил следующие варнинги
Warning: (vsim-PLI-3003) bench/verilog/User_int_sim.v(122): [TOFD] - System task or function '$ip_32W_gen' is not defined.
# Region: /tb_top/U_User_int_sim
# ** Warning: (vsim-PLI-3003) bench/verilog/User_int_sim.v(150): [TOFD] - System task or function '$ip_32W_check' is not defined.
# Region: /tb_top/U_User_int_sim
и сигнал данных нулевой. Как я понял из этого:
always @ (posedge Clk_user)
if (Tx_mac_wa&&CPU_init_end)
$ip_32W_gen("../data/config.ini",operation,data);
else
begin
operation <=0;
data <=0;
end
необходимо подключить эти две библиотеки к моделсиму. Вопрос - каким образом это сделать?
Посмотри там в папке тестбенча есть верилоговские файлы которые генерят тестовые последовательности. А с подключением этих библиотек можешь не заморачиваться.
Denisnovel
Sep 1 2011, 11:09
Работаю с этим ядром на стратиксе 2. Прием пакета получился, но регистры не инициализируются при сбросе. Поэтому сигнал Tx_mac_wa все время ноль. Заменив регистры на константы, передача заработала.Пробывал Заводить клок на Tx_clk, как описано выше, результат тот же. Почему при сбросе регистры не устанавливаюстя в исзодное значение.
CODE
always @ (posedge Clk_SYS or posedge Reset)
if (Reset)
Tx_mac_wa <=0;
else if (Fifo_data_count>=16'h0009/*Tx_Hwmark_pl*/)
Tx_mac_wa <=0;
else if (Fifo_data_count<16'h0008/*Tx_Lwmark_pl*/)
Tx_mac_wa <=1;
puzoman
Sep 5 2011, 07:52
Доброго времени суток! Использую данную корку, на прием и передачу все работает. НО, не могу настроить MAC_TX_add_prom_en. Как я понимаю запись '1' в данный регистр позволяет записывать свой(какой хочу) MAC адрес источника назначения при передачи пакета. Никак не получается... Не понимаю какие сначала надо регистры писать MAC_TX_add_prom_data или MAC_TX_add_prom_wr или MAC_TX_add_prom_en. Подскажите пожалуйста!
puzoman
Sep 7 2011, 04:01
Разобрался...Заработало!
puzomanУ меня возникла аналогичная проблема:
Цитата
Доброго времени суток! Использую данную корку, на прием и передачу все работает. НО, не могу настроить MAC_TX_add_prom_en. Как я понимаю запись '1' в данный регистр позволяет записывать свой(какой хочу) MAC адрес источника назначения при передачи пакета. Никак не получается... Не понимаю какие сначала надо регистры писать MAC_TX_add_prom_data или MAC_TX_add_prom_wr или MAC_TX_add_prom_en. Подскажите пожалуйста!
Не могли бы Вы помочь разобраться?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.