4.3. Simulation
The testbench provides basic functionality such as the startup and waits for lock and send and receive a few packets using the ROM-based packet generator.
Important: Before the simulation, you must generate tile-related files and specify the colocate assignment in the .qsf file to map F-Tile Auto-Negotiation and Link Training for Ethernet Intel® FPGA IP to the F-Tile Ethernet Intel FPGA Hard IP for successful simulation as shown below.
- Append the eth_f_hw.qsf file as shown below:
- Use the following syntax to colocate assignments:
set_instance_assignment -name IP_COLOCATE \ -from <ANLT IP hierarchical path> -to <Ethernet hierarchical path> <tile type>
- Example:
set_instance_assignment -name IP_COLOCATE \ -from kr_dut|eth_anlt_f_0 -to IP_INST[0].hw_ip_top|dut|eth_f_0 F_TILE
- Use the following syntax to colocate assignments:
- At the command prompt, navigate to the hardware_test_design folder in your example design:
cd <your_design_path>/hardware_test_design
- Run the following command to generate eth_f_hw_tiles files:
quartus_tlg eth_f_hw
- At the command prompt, change to the testbench simulation directory.
CD <design_example_dir>/ex_*G/sim
- Run the IP setup simulation:
ip-setup-simulation --quartus project=../../hardware_test_design/eth_f_hw.qpf
- Add the following macro to your simulation run script for AN/LT enabled designs:
- For FGT
+define+INTC_SIM_AN_LT_ENABLE
- For FHT
+define+RTL
Note: In generated design example, the colocate assignments are already available in qsf file by default. Therefore, steps 1 to 5 can be skipped in the design example. - For FGT
Figure 14. F-Tile Ethernet Intel FPGA Hard IP Simulation Design Example Block Diagram with Enabled Auto-Negotiation and Link Training
The following steps show the simulation testbench flow:
- Assert global resets (i_rst_n and i_reconfig_rst) to reset the F-Tile Ethernet Intel FPGA Hard IP and F-Tile Auto-Negotiation and Link Training for Ethernet Intel® FPGA IP.
- Wait until configuration settings load.
- Wait until resets acknowledgment. The o_rst_ack_n signal goes low.
- Deasserts the global resets, i_rst_n and i_reconfig_rst.
- Wait until auto-negotiation is complete. The data mode begins.
- Wait until link training is complete.
- Wait until o_tx_lanes_stable bit is set to 1, indicating TX path is ready.
- Wait until o_rx_pcs_ready bit is set to 1, indicating RX path is ready.
- Instruct packet client to transmit data. Write hw_pc_ctrl[0]=1'b1 to start the packet generator.
- Read TX packet data information from 0x20 - 0x34 registers. Read register in sequential order.
- Read RX packet data information from 0x38 - 0x4C registers. Read register in sequential order.
- Compare the counters to ensure 16 packets were sent and received.
- Instruct packet client to stop data transmission. Write hw_pc_ctrl[2:0]=3'b100 to stop the packet generator. Clear counters.
- Perform Avalon® memory-mapped interface test. Write and read Ethernet IP registers.
- 0x104: Scratch register
- 0x108: IP soft reset register
- 0x214: TX MAX source address register [31:0]
- 0x218: TX MAX source address register [47:32]
- 0x21C: RX MAX frame size register
- Perform Avalon® memory-mapped interface 2 test to read and write operation transceiver registers.
The following sample output illustrates a successful simulation test run.
---TX reset sequence completed -----
---RX reset sequence completed -----
---Starting Data mode after completing AN ----
---IP_INST[ 0] Test 0; ---Total 16 packets to send-----
------IP_INST[ 0] Start pkt gen TX-----
------Checking Packet TX/RX result-----
------------ 16 packets Sent; 0 packets Received--------
------ALL 16 packets Sent out---
------------ 16 packets Sent; 16 packets Received--------
------ALL 16 packets Received---
------TX/RX packet check OK---
****Starting AVMM Read/Write****
====>MATCH! ReaddataValid = 1 Readdata = abcdef01 Expected_Readdata = abcdef01
====>MATCH! ReaddataValid = 1 Readdata = 00000007 Expected_Readdata = 00000007
====>MATCH! ReaddataValid = 1 Readdata = 00000000 Expected_Readdata = 00000000
====>MATCH! ReaddataValid = 1 Readdata = 9d228c3a Expected_Readdata = 9d228c3a
====>MATCH! ReaddataValid = 1 Readdata = 4338b586 Expected_Readdata = 4338b586
====>MATCH! ReaddataValid = 1 Readdata = deadc0de Expected_Readdata = deadc0de
====>MATCH! ReaddataValid = 1 Readdata = deadc0de Expected_Readdata = deadc0de
====>MATCH! ReaddataValid = 1 Readdata = 00000000 Expected_Readdata = 00000000
====>MATCH! ReaddataValid = 1 Readdata = 22334455 Expected_Readdata = 22334455
====>MATCH! ReaddataValid = 1 Readdata = 00000011 Expected_Readdata = 00000011
====>MATCH! ReaddataValid = 1 Readdata = 000005ee Expected_Readdata = 000005ee
====>MATCH! ReaddataValid = 1 Readdata = 01234567 Expected_Readdata = 01234567
====>MATCH! ReaddataValid = 1 Readdata = 000089ab Expected_Readdata = 000089ab
743830ns Try to access AVMM2 begin...
743830ns write 0x00000065 to xcvr 0 address 0x103c004
744795ns Try to access AVMM2 end...
744890ns read from address 0x103c004
====>MATCH! ReaddataValid = 1 Readdata = 00000065 Expected_Readdata = 00000065
...
758740ns Try to access AVMM2 end...
758840ns Try to access AVMM2 begin...
758840ns write 0x0000006c to xcvr 7 address 0x103c00b
759825ns Try to access AVMM2 end...
759920ns read from address 0x103c00b
====>MATCH! ReaddataValid = 1 Readdata = 0000006c Expected_Readdata = 0000006c
760900ns Try to access AVMM2 end...
**** AVMM Read/Write Operation Completed for IP_INST[ 0]****
** Testbench complete
**
Note: The simulation completion may take a longer time. To confirm the simulation is progressing successfully, verify the intermediate outputs from the System Console such as bringing the base and AN/LT IP out of resets, IP resetting sequence, Auto-negotiation and link training auto-connection completion, and others.