Example Design with FPGA Transceiver

Efinix provides the flollowing example design. The example design targets Titanium Ti375 N1156 Development Kit.

Figure 1. Triple Speed Ethernet MAC Core's Transceiver Example Design

The example design illustrates the connectivity among the Triple Speed Ethernet MAC, FPGA 1G PCS, and the user’s logic, as shown in Figure 1. The user’s logic consists of 2 pattern generators and 2 checkers (denoted by efx_mac1gbe_exp_pat_gen and efx_mac1gbe_exp_checker modules respectively), APB modules (denoted by efx_mac1gbe_exp_apb_master and efx_mac1gbe_exp_apb_decoder), and a virtual I/O debugger.

The APB decoder decodes the APB address and routes the APB request to the corresponding APB slaves based on the address map in Table 1. The APB master contains a built-in RAM that captures the APB_PRDATA and the APB_PADDRESS of all APB Read commands. Ports ram_dout_d and ram_dout_a display the captured APB_PRDATA and the corresponding APB_PADDRESS.

Table 1. Address Map for the Transceiver Example Design
Start Address End Address Registers
PCS
0xC0_0400 0xC0_043F PCS (Lane 0) registers
0xC0_04C0 0xC0_04FF PCS (Lane 3) registers
MAC
0xE0_0000 0xE0_01FF MAC (Lane 0) Configuration Registers
0xE0_3000 0xE0_31FF MAC (Lane 3) Configuration Registers

Upon the assertion of IN_USER, the example design awaits the PLL to lock. The assertion of PLL_LOCK releases the resets in the Triple Speed Ethernet MAC core and the FPGA PCS. This is followed by the PHY power-up sequence handshake, resulting in the assertion of PHY_INIT_DONE. Upon the assertion of PHY_INIT_DONE, the APB modules become operational and are used to write the corresponding signal_ok register bit to 1, enabling the RX path, as depicted in the Titanium SGMII 1G and 2.5G User Guide.

After achieving synchronization status, the pattern generator starts transmitting data frames into the TX AXI ST interface of the Triple Speed Ethernet MAC core. Throughout the operation, the checker actively checks the RX path of the Triple Speed Ethernet MAC core for error frame and assertion of RX_AXI_TUSER. Test passes when ln_data_cnt and ln_frame_cnt are incremented with ln_err_cnt and ln_bad_frame_cnt remaining 0.