Jump to content
    

MAC controller для Nexys 3 на Spartan 6

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

судя по схеме, Ваш трансивер после старта работает в: "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), то установленную скорость можно даже не анализировать. Ну если ее не надо например выводить на дисплей...

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Не нахожу в доке описание наличия внутренних 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

Share this post


Link to post
Share on other sites

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 странице. Давайте сюда Ваш даташит.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

В моем даташите в названии 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.

Share this post


Link to post
Share on other sites

Вот эту часть кода (включая .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,

 

 

Share this post


Link to post
Share on other sites

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

MII mode interface

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

PHY address = 000

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...