본문 바로가기

[FPGA]/Zynq(MPSOC)

Zynq UltraScale+ MPSoC 보드 초기화 테스트 - Giga Etherent 전송 속도 테스트

Zynq UltraScale+ MPSoC 보드 테스트 - Giga Etherent TCP 전송 속도 테스트

 

 

Zynq UltraScale+ MPSoC 보드는 ZU2EG 가 적용되어 있고 Quad-core Cortex-A53 @1.5GHz CPU로 AP를 구동한다. Giga Ethernet을 이용한 EtherCAT 사용 검토가 필요해 Giga Ethernet 통신을 테스트 해보았다.

 

우선 TCP/IP 통신 테스트를 해보자.

기본 예제로 제공되는 lwIP 스택 TCP예제로 루프백 테스트를 해보면 좋을것 같다.

 

 

기본 제공 예제를 좀 수정해서 TCP루프백 테스트 해보니 96Mbps 정도가 나온다.

예전 EtherCAT 테스트용으로 제작했던 STM32F429 보드와 TCP속도 비교를 해보면 좋을것 같다.

(너무 예전이고 코어 자체가 비교가 안되지만..)

 

 

 


Zynq UltraScale+ MPSoC TCP/IP TCP 수정코드

 

 

err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
/* do not read the packet if we are not in ESTABLISHED state */
if (!p) {
tcp_close(tpcb);
tcp_recv(tpcb, NULL);
return ERR_OK;
}

/* indicate that the packet has been received */
tcp_recved(tpcb, p->len);

/* echo back the payload */
/* in this case, we assume that the payload is < TCP_SND_BUF */
if (tcp_sndbuf(tpcb) > p->len) {
err = tcp_write(tpcb, p->payload, p->len, 1);
} else
xil_printf("no space in tcp_sndbuf\n\r");

/* free the received pbuf */
pbuf_free(p);

return ERR_OK;
}

 

 

dhcp_start(echo_netif);
dhcp_timoutcntr = 24;

while(((echo_netif->ip_addr.addr) == 0) && (dhcp_timoutcntr > 0))
xemacif_input(echo_netif);

if (dhcp_timoutcntr <= 0) {
if ((echo_netif->ip_addr.addr) == 0) {
xil_printf("DHCP Timeout\r\n");
xil_printf("Configuring default IP of 192.168.1.10\r\n");
IP4_ADDR(&(echo_netif->ip_addr),  192, 168,   1, 10);
IP4_ADDR(&(echo_netif->netmask), 255, 255, 255,  0);
IP4_ADDR(&(echo_netif->gw),      192, 168,   1,  1);
}
} print_ip_settings(&ipaddr, &netmask, &gw);

#endif
/* start the application (web server, rxtest, txtest, etc..) */
start_application();

/* receive and process packets */
while (1) {
if (TcpFastTmrFlag) {
tcp_fasttmr();
TcpFastTmrFlag = 0;
}
if (TcpSlowTmrFlag) {
tcp_slowtmr();
TcpSlowTmrFlag = 0;
}
xemacif_input(echo_netif);
transfer_data();
}

 

 

반응형