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

так нельзя. Значит, надо генерировать все на той, другой частоте.

 

Собственно, Вы же пишете - все делаете на 5 МГц. Так сделаете делитель на два (один триггер + инвертор), и подайте его выход на разрешение работы всех триггеров блока - весь блок станет работать "как бы" на уполовиненной частоте, но, по факту, на тех же 5 МГц.

 

Вообще я сделал просто делитель и из 40mhz делаю 2.5mhz и 5mhz. 2.5 питаю MDC с MDIO и еще MDIO пытаюcь сдвтнуть относительно вот этих 5. Так же можно?

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


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

Вообще я сделал просто делитель и из 40mhz делаю 2.5mhz и 5mhz. 2.5 питаю MDC с MDIO и еще MDIO пытаюcь сдвтнуть относительно вот этих 5. Так же можно?

Можно, но не нужно, ибо это через зад автогеном. А нужно, так:

Из 40 МГц сделать импульс длительностью один период 40 МГц и частотой 2.5 МГц, и его подать на разрешение работы всего блока целиком. На MDC подать 2.5 МГц - меандр, сделанный из этих же 40 МГц. Импульс разрешения должен быть сдвинут по фазе относительно MDC так, чтобы обеспечить все времянки (обеспечивается сравнением значения счетчика-делителя с нужным значением)

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


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

Можно, но не нужно, ибо это через зад автогеном. А нужно, так:

Из 40 МГц сделать импульс длительностью один период 40 МГц и частотой 2.5 МГц, и его подать на разрешение работы всего блока целиком. На MDC подать 2.5 МГц - меандр, сделанный из этих же 40 МГц. Импульс разрешения должен быть сдвинут по фазе относительно MDC так, чтобы обеспечить все времянки (обеспечивается сравнением значения счетчика-делителя с нужным значением)

 

Если можно, очень хотелось бы поподробнее как на veriloge написать сдвиг по фазе относительно чего либо=)

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


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

Если можно, очень хотелось бы поподробнее как на veriloge написать сдвиг по фазе относительно чего либо=)

 

Делаете делитель на 16:

 

reg [3:0] div_cnt;

always @(posedge clk)

div_cnt <= div_cnt + 1'b1;

 

 

Теперь подаете со старшего разряда меандр 2.5 МГц на MDC:

 

assign mdc = div_cnt[3];

 

Теперь формируете сигнал разрешения:

 

reg smi_en;

always @(posedge clk)

smi_en <= (div_cnt == 4'hE);

 

Итого получаете, что сигнал "smi_en" активен тогда, когда счетчик находится в значении "15", весь блок, разрешаемый этим сигналом, производит операцию, и в момент перехода div_cnt с значения 15 на 0 выдает на выход новое значение. Учитывая то, что на MDC идет старший бит этого счетчика, это будет совпадать со спадом на MDC. Меняя число в этом компараторе, можно получить 16 сдвигов фазы работы блока, разрешаемого по "smi_en" относительно MDC. И верилог тут не причем, точно также это бы делалось и на логике-рассыпухе...

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


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

Если преобразовывать частоты с помощью dcm (или mmcm) блоков, то там просто выставляете сдвиг по фазе, какой вам нужен и не паритесь.

А в верилоге подключаете стандартные блоки xilinx.

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

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


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

Итого получаете, что сигнал "smi_en" активен тогда, когда счетчик находится в значении "15"

я конечно не настаиваю, но 0xE - это все же 14 :)

 

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

человек делает SPI подобный интерфейс, с правильной времянкой. А это надо делать не из кучи внешних и сдвинутых клоков, а как SM говорит. Сделать общее кратное и на его основе всю времянку сформировать. Будет правильнее и синтезатор и анализатору и тому кто потом поддерживать будет.

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


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

я конечно не настаиваю, но 0xE - это все же 14 :)

smi_en появляется, когда счетчик == 14 и происходит фронт клока, ну а счетчик на этом же такте перекидывается на 15. Итого имеем smi_en==1 и счетчик==15. Туда я поставил триггер, так как сигнал разрешения следует формировать с выхода триггера с минимальной задержкой, так как это широко разветвленный сигнал (high fanout) будет, по всему блоку.

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


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

Делаете делитель на 16:

 

reg [3:0] div_cnt;

always @(posedge clk)

div_cnt <= div_cnt + 1'b1;

 

 

Теперь подаете со старшего разряда меандр 2.5 МГц на MDC:

 

assign mdc = div_cnt[3];

 

Теперь формируете сигнал разрешения:

 

reg smi_en;

always @(posedge clk)

smi_en <= (div_cnt == 4'hE);

 

Итого получаете, что сигнал "smi_en" активен тогда, когда счетчик находится в значении "15", весь блок, разрешаемый этим сигналом, производит операцию, и в момент перехода div_cnt с значения 15 на 0 выдает на выход новое значение. Учитывая то, что на MDC идет старший бит этого счетчика, это будет совпадать со спадом на MDC. Меняя число в этом компараторе, можно получить 16 сдвигов фазы работы блока, разрешаемого по "smi_en" относительно MDC. И верилог тут не причем, точно также это бы делалось и на логике-рассыпухе...

 

 

Спасибо тебе мужчина! Все получилось! Просто и гениально =)

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


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

Написал следующий код для порта RSTn (System reset, active low. Requires an external pull-up resistor) чипа Atheros AR8035:

 

RSTn.v

 

Пару десятков миллисекунд держит 0 (для того чтобы все напряжения успели выставиться и чип пришел в себя)

Далее ставит 1

Я полагаю так можно завести микросхему?

Насколько адекватный код?

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


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

у вас вроде спартан 6?

Он вроде как до того как все станет грузиться не будет, а как загрузиться начнет клоки настраивать. У PLL есть выход - клок валидный, от него и надо плясать. А если уже хочется еще задержать то уже только после этого момента ИМХО, можно доп таймер воткнуть...

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


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

у вас вроде спартан 6?

Он вроде как до того как все станет грузиться не будет, а как загрузиться начнет клоки настраивать. У PLL есть выход - клок валидный, от него и надо плясать. А если уже хочется еще задержать то уже только после этого момента ИМХО, можно доп таймер воткнуть...

 

Верно, уменя Spartan 6 XC6SLX100

Тоесть дополнительно можно не делать задержку в 10-30ms? Сам RSTn у меня притянут через резистор на землю.

Может быть можно в коде просто написать assign RSTn = 1; ?

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


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

Может быть можно в коде просто написать assign RSTn = 1; ?

написать то можно, только не понятно что это даст?

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


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

У меня все заработало PHY начал отвечать. Теперь буду конфигурить его и отправлять данные на ethernet.

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


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

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

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

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

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

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

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

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

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

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