Forum Discussion
Altera_Forum
Honored Contributor
14 years ago10G Ethernet and 10G Base-R PHY Hardware Demonstration Design
Hi all,
I am trying to test board-to-board communication using a complete 10G Ethernet design that includes an Altera 10 GbE MAC + an Altera 10GBASE-R IP cores. My devices are Stratix IV GT and my boards are two identical Transceiver Signal Integrity Development Kits (EP4S100G2F40I1). I found a hardware demonstration design from Altera Wiki: http://www.alterawiki.com/wiki/10g_ethernet_and_10g_base_r_phy_interoperability_hardware_demonstration_design This design is for different board (100G SIV GT Development Board). So, I have changed pin assignment, regenerate as well as recompile the design for my board. Finally, I could run the demo script to test several loopback modes. My next plan is to test board-to-board communication with the two boards rather than looping back on the same board using the provided TCL scripts. As I am new to such task and there are a lot to grasp, I wonder where I should start to realize my purpose. So, if anyone has experience with this or similar designs, please give me a clue or some advice. Any help will be really appreciated. Thanks for reading this thread.18 Replies
- Altera_Forum
Honored Contributor
--- Quote Start --- My next plan is to test board-to-board communication with the two boards rather than looping back on the same board using the provided TCL scripts. As I am new to such task and there are a lot to grasp, I wonder where I should start to realize my purpose. --- Quote End --- You can probably run exactly the same design on both boards, and just connect them together. Try it and see what happens. If nothing works, then read the Tcl scripts and see what they are doing. Your current question is a little vague. Most people will not have your hardware setup, so cannot duplicate your system. So just start using the hardware and see how far you get. If you cannot understand what a particular SystemConsole Tcl sequence is doing, then you can ask specific questions, and you'll be more likely to get answers. Cheers, Dave - Altera_Forum
Honored Contributor
Thanks for your suggestions. Actually, I decide to use this example design because it provides not only the complete 10Gbps Ethernet subsystem but also the traffic controller and system controller so that I can simulate as well as test in hardware. And if I can use this for my boards and set up a board-to-board communication, I would only have to modify the MAC for my target application.
--- Quote Start --- You can probably run exactly the same design on both boards, and just connect them together. Try it and see what happens. If nothing works, then read the Tcl scripts and see what they are doing. --- Quote End --- I am trying to make some minor changes in Tcl scripts to disable the Loopback modes, and then try to test with local loopback (things happen on only one board with SMA connectors) first. If this works, I will then learn how to write a script for testing board-to-board mode. --- Quote Start --- Your current question is a little vague. Most people will not have your hardware setup, so cannot duplicate your system. --- Quote End --- It seems like no one uses same setup as me, unfortunately. --- Quote Start --- If you cannot understand what a particular SystemConsole Tcl sequence is doing, then you can ask specific questions, and you'll be more likely to get answers. --- Quote End --- I am learning Tcl scripting. Thank you. - Altera_Forum
Honored Contributor
I modified the scripts and made it work with local loopback (using SMA cables in one board). I then created a script to work with board-to-board mode and only the transmitter works that gives statistics in System Console. But the receiver is not working. I cannot write to register and the error msg is as below:
error: This transaction did not complete in 60 seconds. System Console is giving up. while executing "master_write_32 {/devices/EP4S(100G2|40G2)@1#USB-0/(link)/JTAG/(110:132 v1# 0)/phy_0/master} {0x1000004} {0x00000001}" while executing "master_write_32 $port_id $address $wdata" If you have any idea about the reason for this? Thanks and wait for your suggestions. - Altera_Forum
Honored Contributor
--- Quote Start --- I cannot write to register --- Quote End --- If you have two boards connected to one PC, then you need to make sure SystemConsole only uses one board at a time. Look at the Tcl scripts and see how the scripts track whether the 'master' service is open. With two boards, you need to open the 'master' service on the board, perform the read or write transaction, and then close the service. That way you can then read or write to the 'master' service on the other board. Cheers, Dave - Altera_Forum
Honored Contributor
--- Quote Start --- error: This transaction did not complete in 60 seconds. System Console is giving up. while executing "master_write_32 {/devices/EP4S(100G2|40G2)@1#USB-0/(link)/JTAG/(110:132 v1# 0)/phy_0/master} {0x1000004} {0x00000001}" while executing "master_write_32 $port_id $address $wdata" --- Quote End --- This error message indicates that SystemConsole did not get a response from the JTAG avalon master you are using. First please rule out all the common failures - there should be no timing analysis failures from Quartus; the clock should be running and reset should not be held asserted. Can you write to any other slaves using this master? If so then the problem may be in the slave which you have at address 0x1000000 so that might be worth investigating. - Altera_Forum
Honored Contributor
--- Quote Start --- If you have two boards connected to one PC, then you need to make sure SystemConsole only uses one board at a time. --- Quote End --- I have two boards connected to two PCs running the same 'sof' file. I create one TCL script for the transmitter that generates burst of packets and sends out as well as collects relevant statistics and print out. Another script for the receiver is to collect statistics of data received. The statistics at transmitter look nice but the receiver does not work. My understanding is that the scripts are used to access, read or/and write to a specific register of a component in the whole design. How are the register organized? are they inside the FPGA and randomly allocated? How does the author make sure that the register address and offsets assigned in the scripts match with the real address in the device? Here is an example of assigning address and offset for Generator component (one avalon slave interface): set GEN_BASE_ADDR 0x01000000 set GEN_START 0x0000000C set GEN_STOP 0x00000010 Thank you. - Altera_Forum
Honored Contributor
--- Quote Start --- I have two boards connected to two PCs running the same 'sof' file. I create one TCL script for the transmitter that generates burst of packets and sends out as well as collects relevant statistics and print out. Another script for the receiver is to collect statistics of data received. The statistics at transmitter look nice but the receiver does not work. --- Quote End --- When you access each board, are you making sure to open the correct device? SystemConsole 'get service paths master' will return the path to both boards. Do you select one entry for the transmitter and the other for the receiver? How do you know which is which? Hint: in the system design, make the DIP switches readable, and set them differently on each board :) --- Quote Start --- My understanding is that the scripts are used to access, read or/and write to a specific register of a component in the whole design. How are the register organized? are they inside the FPGA and randomly allocated? --- Quote End --- Since the system is being accessed using SystemConsole, its most likely implemented using SOPC Builder or Qsys. Open the system design with the appropriate tool and you will see the address map defined there. If both boards have the same .sof, then they both have the same address map, and you need to make sure you access the transmitter board or receiver board as appropriate. Cheers, Dave - Altera_Forum
Honored Contributor
Thanks Dave for your quick answer.
--- Quote Start --- When you access each board, are you making sure to open the correct device? SystemConsole 'get service paths master' will return the path to both boards. Do you select one entry for the transmitter and the other for the receiver? How do you know which is which? Hint: in the system design, make the DIP switches readable, and set them differently on each board :) --- Quote End --- I am not sure if I fully understood your point. As I understand, System Console command "get_service_paths master" will return a list of master services connected to the host PC. And because I use two different PCs, each connected to a board separately. So, each System Console gets the path to each board, and I don't have to select service for transmitter and receiver after command "get_service_paths master". Am I wrong here? --- Quote Start --- Since the system is being accessed using SystemConsole, its most likely implemented using SOPC Builder or Qsys. Open the system design with the appropriate tool and you will see the address map defined there. --- Quote End --- The design is composed of one Qsys based system (10Gbps MAC+ 10GBASE-R), one Traffic controller (in verilog) and one System controller (in verilog). I opened the Qsys system to see the base addresses of the MAC and the PHY but there are not. The base addresses should be assigned somewhere else. Usually, where people assign base address for a HDL-based component like Traffic controller? Thanks - Altera_Forum
Honored Contributor
--- Quote Start --- because I use two different PCs, each connected to a board separately. So, each System Console gets the path to each board, and I don't have to select service for transmitter and receiver after command "get_service_paths master". Am I wrong here? --- Quote End --- With two separate PC hosts, each host will only see one USB-Blaster, so you're ok. --- Quote Start --- I opened the Qsys system to see the base addresses of the MAC and the PHY but there are not. The base addresses should be assigned somewhere else. Usually, where people assign base address for a HDL-based component like Traffic controller? --- Quote End --- If the logic has registers, they should be accessible in Qsys. If the PHY is external and accessed via I2C (MDIO) then the Qsys memory map would contain an I2C controller. However, in the case of the Stratix IV GT, the MAC+PHY is all internal. If there is nothing in the Qsys memory map, then there are no registers implemented to control the ALTGX or ALTGX_RECONFIG components that the 10G logic is implemented on top of. Cheers, Dave - Altera_Forum
Honored Contributor
--- Quote Start --- If the logic has registers, they should be accessible in Qsys. If the PHY is external and accessed via I2C (MDIO) then the Qsys memory map would contain an I2C controller. However, in the case of the Stratix IV GT, the MAC+PHY is all internal. If there is nothing in the Qsys memory map, then there are no registers implemented to control the ALTGX or ALTGX_RECONFIG components that the 10G logic is implemented on top of. --- Quote End --- The 10G Ethernet is instantiated in top-level module. You can see the top module in the attachment. I think that I will need to study the design code and scripts more in order to make a board-to-board communication. Thanks a lot.