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

Проблемы с MDIO. Не отвечает host controller 10Gemac on Virtex5

Нужно запустить шину MDIO для настройки PHY. Для этого использую IP-core Ten Gigabit Ethernet MAC v10.1. Создал FSM (код прилагается).

После записи в host controller данных, при чтении из того же регистра - получили нулевое значение (записывали не ноль).

Последовательность установки сигналов выполнена согласно ДШ ug148 на IP-core. Помогите разобраться, в чём проблема.

mdio_read_fsm.v

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


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

Смотря что Вас интересует. По результатам операций должен запуститься MDIO controller. Все управляющие последовательности выдаются правильно, но на MDC выходе вместо частоты - ноль, а MDIO в z состоянии.

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


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

Я не могу разобраться в вашем автомате, и верилог плохо знаю и, честно говоря, подозреваю, что написать можно понятнее.

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

Если с ним ядро будет вести себя как нужно, то этот модуль можно использовать в качестве reference-model для отладки синтезируемого автомата.

 

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


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

Спасибо. Но те сигналы которые сформированы , вполне соответствуют моему представлению о "нужных" сигналах для данного ядра. Отличается лишь поведение ядра (отсутствие частоты на выходе MDC контроллера MDIO) :)

Диаграмму сигналов привожу.

 

Диаграмму привел для переделанного кода, который записывает данные в регистр с адресом 0х340, а затем считывает из этого регистра.

Правда записанных данных я не увидел.

 

Новый код выкладываю.

post-55270-1283364868_thumb.png

hc_fsm.v

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

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


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

Я не очень разбираюсь в верилоге, но как у вас формируется сингнал start?

Если я правильно понимаю, то у вас start всегда 0 и вы всегда находитесь в состоянии IDLE.

 

Ага, в новом коде start меняет значение по reset-у, а на диаграмме у вас reset "0", и опять же вы сидите в состоянии IDLE, ожидая start, который никогда не придет.

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


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

сингнал start изначально находится в единице (инициализируется значением) :

 

initial

begin

state = IDLE;

start = 1'b1; // <------

......

end

 

по входу в состоянии IDLE первый раз, в данном коде, просто осуществляется переход в следующее состояние WR_CFG_MGMT,

по второму фронту в состоянии WR_CFG_MGMT устанавливаются нужные сигналы,

по третьему фронту в состоянии WR_CFG_MGMT снимаются управляющие сигналы, переход в состояние RD_CFG_MGMT,

по четвёртому , в состоянии RD_CFG_MGMT выставляются управляющие сигналы на чтение из регистра

по пятому в состоянии RD_CFG_MGMT снимаются управляющие сигналы, переход в состояние TRY_DATA,

по шестому - host контроллер должен был выставить данные на host_rd_data , установка wr_en для уарта, переход в состояние IDLE

по седьмому - в другой ветке IDLE снимаем сигнал wr_en уарта, а также все остальные сигналы.

 

Заранее согласен, что можно было добавить больше состояний. Тем не менее переходы выполняются корректно, и к самой машине состояний вроде как претензий, кроме наглядности кода, нет.

 

 

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


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

сингнал start изначально находится в единице (инициализируется значением) :

 

initial

begin

state = IDLE;

start = 1'b1; // <------

......

end

 

по входу в состоянии IDLE первый раз, в данном коде, просто осуществляется переход в следующее состояние WR_CFG_MGMT,

по второму фронту в состоянии WR_CFG_MGMT устанавливаются нужные сигналы,

по третьему фронту в состоянии WR_CFG_MGMT снимаются управляющие сигналы, переход в состояние RD_CFG_MGMT,

по четвёртому , в состоянии RD_CFG_MGMT выставляются управляющие сигналы на чтение из регистра

по пятому в состоянии RD_CFG_MGMT снимаются управляющие сигналы, переход в состояние TRY_DATA,

по шестому - host контроллер должен был выставить данные на host_rd_data , установка wr_en для уарта, переход в состояние IDLE

по седьмому - в другой ветке IDLE снимаем сигнал wr_en уарта, а также все остальные сигналы.

 

Заранее согласен, что можно было добавить больше состояний. Тем не менее переходы выполняются корректно, и к самой машине состояний вроде как претензий, кроме наглядности кода, нет.

 

это я понял.

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


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

Нужно запустить шину MDIO для настройки PHY. Для этого использую IP-core Ten Gigabit Ethernet MAC v10.1. Создал FSM (код прилагается).

После записи в host controller данных, при чтении из того же регистра - получили нулевое значение (записывали не ноль).

Последовательность установки сигналов выполнена согласно ДШ ug148 на IP-core. Помогите разобраться, в чём проблема.

Я когда то очень давно этим занимался, но только для 10/100. И делал все как то гораздо проще...

У меня на сайте есть статья, наверное от 2002 года. Там описание моего проекта. И в том числе, контроллера MDIO...

Удачи!

 

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


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

Я когда то очень давно этим занимался, но только для 10/100. И делал все как то гораздо проще...

У меня на сайте есть статья, наверное от 2002 года. Там описание моего проекта. И в том числе, контроллера MDIO...

Удачи!

 

Возможно "проще" объясняется тем, что для 10/100/1000 использовался MDIO интерфейс, согласно IEEE 802.3 clause 22. Тогда как для 10G оборудования уже применяется MDIO интерфейс согласно IEEE 802.3 clause 45.

Но дело даже не в MDIO. Не отвечает, как выяснилось на данный момент host controller 10-Gigabit Ethernet MAC IP core. Нужен этот контроллер для того, что бы как раз включить MDIO.

 

Знает ли кто, возможно есть некие особенности при работе с host controller ЕМАС' ов Xilinx? Так как судя по документации на ядро всё должно работать "с полуоборота".

 

p.s «если монету подбросить,то она упадет и точно встанет на ребро, если, конечно, не зависнет в воздухе» - понравилось :)

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


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

Всё, проблема с host controller решена. Нашли в в стартовом проекте к ядру файлик тест бенча. Посмотрели на форму сигналов необходимую для работы host controller - сигналы "слегка" :) отличались от тех, что были в официальной документации. Сделали формирование сигналов как в тест - бенче - заработало.

Всем спасибо.

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


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

Не могли бы вы по горячим следам написать, какие именно сигналы отличаются?

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

 

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


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

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

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

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

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

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

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

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

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

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