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

MAC controller для Nexys 3 на Spartan 6

Как я понял настройка происходит автоматически. Потому как больше никаких воздействий кроме вышеописанных я оказать не могу. Как я разобрался сигналы MDC(клок) и MDI для чтения контрольных регистров трансивера, никаких настроек ими не производится.

Сигнал MDIO - двунаправленная линия, используется для чтения-записи регистров PHY. А настройка происходит автоматически при старте платы, судя по схеме, Ваш трансивер после старта работает в: "100Base-TX Half Duplex. Auto-negotiation enabled."

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


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

А ресет снять не надо с физики, через ее контрольный регистр?

Задан режим такой настройки, но она должна пройти, потом надо убедиться что Автонегатенация прошла, на какую скорость настроился трансивер - опять же по битам внутренних регистров.

Если я не ошибаюсь в зависимости от того на какую скорость настроилась физика будут разные режимы обмена по MII.

Кстати Half Duplex - это намек на то что мак контроллер должен правильно отрабатывать коллизии в линии)

 

так что поверните выключатель:)... воткните так сказать прибор в розетку)

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


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

судя по схеме, Ваш трансивер после старта работает в: "100Base-TX Half Duplex. Auto-negotiation enabled."

10К на ногах по схеме - это не похоже на pull-down. С учетом внутренних pull-up'ов (Datasheet, Table 7.10), думаю что посде старта будет "All capable. Auto-negotiation enabled"

 

А ресет снять не надо с физики, через ее контрольный регистр?

По умолчанию (после аппаратного ресета) этот ресет снят

 

Если я не ошибаюсь в зависимости от того на какую скорость настроилась физика будут разные режимы обмена по MII.

От скорости в коде управления физикой по MII ничего не меняется. Меняется от дуплекса (коллизия и все такое).

То есть, насколько я помню, отличие поведения физики от скорости только в том, что при приеме пакета по RXD - при 100 преамбула приходит полностью, при 10 приходит только SFD (хотя передавать преамбулу полностью надо в любом случае). По крайней мере 3 или 4 опробованных трансивера от разных производителей вели себя именно так. Если правильно построить приемную часть (т.е. ждать SFD после поднятия RXDV), то установленную скорость можно даже не анализировать. Ну если ее не надо например выводить на дисплей...

 

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


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

10К на ногах по схеме - это не похоже на pull-down. С учетом внутренних pull-up'ов (Datasheet, Table 7.10), думаю что посде старта будет "All capable. Auto-negotiation enabled"

Не нахожу в доке описание наличия внутренних pull-up'ов для пинов MODE[2:0]. Какой даташит Вы смотрите?

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


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

Не нахожу в доке описание наличия внутренних pull-up'ов для пинов MODE[2:0].

Datasheet на трансивер lan8710ai. Стр. 71. Table 7.10

nINT/TXER/TXD4 Pull-up

TXEN Pull-down

RXD0/MODE0 Pull-up

RXD1/MODE1 Pull-up

RXD2/RMIISEL Pull-down

RXD3/PHYAD2 Pull-down

RXER/RXD4/PHYAD0 Pull-down

RXCLK/PHYAD1 Pull-down

COL/CRS_DV/MODE2 Pull-up

CRS Pull-down

LED1/REGOFF Pull-down

LED2/nINTSEL Pull-up

MDIO Pull-up

nRST Pull-up

Это копи-паст из таблицы этого pdf

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


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

Datasheet на трансивер lan8710ai. Стр. 71. Table 7.10

nINT/TXER/TXD4 Pull-up

TXEN Pull-down

RXD0/MODE0 Pull-up

RXD1/MODE1 Pull-up

RXD2/RMIISEL Pull-down

RXD3/PHYAD2 Pull-down

RXER/RXD4/PHYAD0 Pull-down

RXCLK/PHYAD1 Pull-down

COL/CRS_DV/MODE2 Pull-up

CRS Pull-down

LED1/REGOFF Pull-down

LED2/nINTSEL Pull-up

MDIO Pull-up

nRST Pull-up

Это копи-паст из таблицы этого pdf

Нет такой таблицы вообще в даташите, тем более на 71 странице. Давайте сюда Ваш даташит.

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


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

http://ww1.microchip.com/downloads/en/DeviceDoc/8710a.pdf

 

30 страничка интересна. У вас MII или RMII?

Железно вабирается MII.

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


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

В моем даташите в названии lan8710ai-ezk.pdf, а по тексту lan8710i (без a). Не досмотрел, извиняюсь. Но в Вашем - наличие pull-up'ов показано в таблице 2.1 в графе buffer type (PU), а в таблице 2.9 раскрывается что PU это internal pull-up. Так вот в табл. 2.1 как раз все mode - PU.

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


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

с этой информацией все еще MII?

кстати еще про ресет после питания поглядите, может все таки дернуть ножечку?

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


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

В моем даташите в названии lan8710ai-ezk.pdf, а по тексту lan8710i (без a). Не досмотрел, извиняюсь. Но в Вашем - наличие pull-up'ов показано в таблице 2.1 в графе buffer type (PU), а в таблице 2.9 раскрывается что PU это internal pull-up. Так вот в табл. 2.1 как раз все mode - PU.

Да, соглашусь, подтяжка внутренняя есть, но работает всё же внешняя, можете посмотреть Nexys3 Board Manual на 11 стр. описан режим работы после старта:

MII mode interface

100Base-TX with auto negotiation enabled, advertising half-duplex, with CRS active duringreceive

PHY address = 000

 

 

Да, подтяжка рассчитана на ток 50 мкА, если взять напряжение питания 3.6 В, то получим сопротивление порядка 72 кОм. Т.о. 10 кОм на ногах по схеме - это pull-down.

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


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

Вот эту часть кода (включая .ucf) хотя бы можете выложить? Содержимое ROM и сторона ПК пока не нужны.

 

в схемантике

post-77312-1400734565_thumb.png

 

модули

чтение по 4 бита и формирование txen

module SerialToPar(
   input clk2x,
    input clk1x,
    input [7:0] Tx_data,
    input [6:0] addr_count,
    output  tx_en,
   output  [3:0] Tx_to_phy
    );
     
     
   reg tmp, cnt = 1'b1;
    reg [3:0] tx_tmp;
   
    
always @(posedge clk2x) begin
      cnt <= ~ cnt;
    end


always @(posedge clk2x) begin
      case (cnt)
         1'b1: tx_tmp <= Tx_data[7:4];
         1'b0: tx_tmp <= Tx_data[3:0];
   endcase
    end

//always @(posedge clk2x) begin
//      Tx_to_phy <= tx_tmp;
//   end
    assign Tx_to_phy = tx_tmp;
    
always@(addr_count) begin
     if (addr_count <= 72) begin
     tmp = 1'b1;
     end
     else begin
     tmp = 1'b0;
     end
     end
     
assign tx_en = tmp;
  
    
endmodule

 

 

клок для чтения ROM и счетчика адреса

module clk_gen(
    input tx_clk,
    output clk1x,
    output clk2x
    );
     
     reg [1:0] cnt = 2'b0;
     
     assign clk1x = ~cnt[0];
     
    always @(posedge tx_clk) begin
      cnt <= cnt + 2'b1;
    end


endmodule

 

UCF

## SMSC ethernet PHY
NET "PhyRstn"        LOC = "P3"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L2N,                            Sch name = ETH-RST
#NET "PhyCrs"         LOC = "N3"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L1N_VREF,                       Sch name = ETH-CRS
#NET "PhyCol"         LOC = "P4"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L2P,                            Sch name = ETH-COL
#NET "PhyClk25Mhz"    LOC = "N4"  | IOSTANDARD = "LVCMOS33";   #Unconnected if R172 is not loaded, Bank = 3, Pin name = IO_L1P, Sch name = ETH-CLK25MHZ

NET "PhyTxd<3>"      LOC = "T1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L33N_M3DQ13,                    Sch name = ETH-TXD3 
NET "PhyTxd<2>"      LOC = "T2"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L33P_M3DQ12,                    Sch name = ETH-TXD2
NET "PhyTxd<1>"      LOC = "U1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L32N_M3DQ15,                    Sch name = ETH-TXD1
NET "PhyTxd<0>"      LOC = "U2"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L32P_M3DQ14,                    Sch name = ETH-TXD0
NET "PhyTxEn"        LOC = "L2"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L37P_M3DQ0,                     Sch name = ETH-TX_EN
NET "PhyTxClk"       LOC = "L5"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L43P_GCLK23_M3RASN,             Sch name = ETH-TX_CLK
#NET "PhyTxEr"        LOC = "P2"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L34P_M3UDQS,                    Sch name = ETH-TXD4

#NET "PhyRxd<3>"      LOC = "M3"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L36P_M3DQ8,                     Sch name = ETH-RXD3
#NET "PhyRxd<2>"      LOC = "N1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L35N_M3DQ11,                    Sch name = ETH-RXD2
#NET "PhyRxd<1>"      LOC = "N2"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L35P_M3DQ10,                    Sch name = ETH-RXD1
#NET "PhyRxd<0>"      LOC = "P1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L34N_M3UDQSN,                   Sch name = ETH-RXD0
#NET "PhyRxDv"        LOC = "L1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L37N_M3DQ1,                     Sch name = ETH-RX_DV
#NET "PhyRxEr"        LOC = "M1"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L36N_M3DQ9,                     Sch name = ETH-RXD4
#NET "PhyRxClk"       LOC = "H4"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L44P_GCLK21_M3A5,               Sch name = ETH-RX_CLK

#NET "PhyMdc"         LOC = "M5"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L31N_VREF,                      Sch name = ETH-MDC
#NET "PhyMdio"        LOC = "L6"  | IOSTANDARD = "LVCMOS33";   #Bank = 3, Pin name = IO_L31P,

 

 

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


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

Да, соглашусь, подтяжка внутренняя есть, но работает всё же внешняя, можете посмотреть Nexys3 Board Manual на 11 стр. описан режим работы после старта:

MII mode interface

100Base-TX with auto negotiation enabled, advertising half-duplex, with CRS active duringreceive

PHY address = 000

Да, действительно полудуплекс. Но автоопределение включено, поэтому может ковыряние регистров и не понадобится (а может и понадобится). Это все выяснится после того как задышит трансивер.

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


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

Проект загрузил и проверил питающие. Напряжения соответствуют даеашиту. Внешние 25 МГц вижу, txclk и rx clk отсутствуют :laughing:

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


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

Проект загрузил и проверил питающие. Напряжения соответствуют даеашиту. Внешние 25 МГц вижу, txclk и rx clk отсутствуют :laughing:

 

Попробуйте сделать нормальный сигнал nReset, FPGA стартует, какое-то время (пару мс) держит PHY в состоянии сброса, выставляет nReset в 1.

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


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

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

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

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

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

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

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

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

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

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