Перейти к содержанию
    

можно-то можно... только жутко дорого. И цена ошибки очень высока...

Заранее извиняюсь за offtopic. С дороговизной БМК и ценой ошибки полностью согласен. Но знаю прецеденты сборки схем на БМК, содержащих одновременно как многовходовые операционные усилители (6-8 входов и кучи обратных связей, позволяющих значительно уменьшить влияние деградации кристалла – например, от ионизирующего излучения), так и простенького цифрового интерфейсика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подскажи подробнее, пожалуйста, как ты генерировал ядро для езернета - тоже интересует данный вопрос, только пишу езернет на Спартане-3Е

 

Ehternet IP ядро подключил с помощью визарда, в EDK 9.2 уже готовое есть, но без лицензии.

С помощью визарда в EDK 9.2 прикрутил на отладочную плату, необходимые ядра. ОС установил Xilkernel , подключил библиотеки xilmfs и lwip. Затем добавил следующий application, для отправки UDP пакетов, вот кому интересно:

#include <stdio.h>
#include "xenv_standalone.h"
#include "xparameters.h"
#include "netif/xadapter.h"
#include <string.h>
#include "xmk.h"
#include "lwip/inet.h"
#include "lwip/sockets.h"
#include "lwipopts.h"
#ifdef XPAR_ETHERNET_MAC_BASEADDR
#define EMAC_BASEADDR  XPAR_ETHERNET_MAC_BASEADDR
#elif XPAR_LLTEMAC_0_BASEADDR 
#define EMAC_BASEADDR  XPAR_LLTEMAC_0_BASEADDR 
//#else
//#error
#endif
/* list of applications to be included */
#define APP_TXPERF
void
print_ip(char *msg, struct ip_addr *ip) 
{
    print(msg);
    xil_printf("%d.%d.%d.%d\n\r", ip4_addr1(ip), ip4_addr2(ip), 
            ip4_addr3(ip), ip4_addr4(ip));
}
void
print_ip_settings(struct ip_addr *ip, struct ip_addr *mask, struct ip_addr *gw)
{
    print_ip("Board IP: ", ip);
    print_ip("Netmask : ", mask);
    print_ip("Gateway : ", gw);
}
int main()
{
    xilkernel_main();
}
int tx_application_thread_my()
{
    int sock_my,i;
    struct sockaddr_in address;
    char buf[50000];
    /* initialize file system layer */
//    platform_init_fs();
    /* initialize devices */
    //platform_init_gpios();
    for(i=0;i<=50000;i++) buf[i]='r';
    if ((sock_my = lwip_socket(AF_INET, SOCK_DGRAM, 0)) < 0)    return;
    address.sin_family = AF_INET; 
    address.sin_port = htons(3425);
    address.sin_addr.s_addr = inet_addr("192.168.0.215"); 
    if (lwip_bind(sock_my, (struct sockaddr *)&address, sizeof (address)) < 0)        return;
            while(1)  {
        lwip_sendto(sock_my, buf, sizeof(buf), 0,(struct sockaddr *)&address, sizeof(address));
    }
        lwip_close(sock_my);
}
//void tx_application_thread_my();
void tx_application_thread();
//void rx_application_thread();
struct netif server_netif;
char buf_sdram[16*1024*1024];
int network_thread()
{
    struct netif *netif;
    struct ip_addr ipaddr, netmask, gw;
    /* the mac address of the board. this should be unique per board */
    unsigned char mac_ethernet_address[] = { 0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 };
    netif = &server_netif;
    /* initliaze IP addresses to be used */
    IP4_ADDR(&ipaddr,  192, 168,   0, 51);
    IP4_ADDR(&netmask, 255, 255, 255,  0);
    IP4_ADDR(&gw,      192, 168,   0,  215);
    /* print out IP settings of the board */
    print("\n\r\n\r");
    print_ip_settings(&ipaddr, &netmask, &gw);
    if (!xemac_add(netif, &ipaddr, &netmask, &gw, mac_ethernet_address, EMAC_BASEADDR)) {
        xil_printf("Error adding N/W interface\n\r");
        return -1;
    }
    netif_set_default(netif);
    /* specify that the network if is up */
    netif_set_up(netif);
    /* start packet receive thread - required for lwIP operation */
      sys_thread_new(xemacif_input_thread, netif, DEFAULT_THREAD_PRIO);
    /* now we can start application threads */
#ifdef APP_TXPERF
    /* start txperf thread */
    sys_thread_new(tx_application_thread_my, 0, DEFAULT_THREAD_PRIO);
#endif
    return 0;
}
int main_thread()
{
    /* initialize lwIP before calling sys_thread_new */
    lwip_init();
    /* any thread using lwIP should be created using sys_thread_new */
      sys_thread_new(network_thread, NULL, DEFAULT_THREAD_PRIO);
    return 0;
}

:05:

Изменено пользователем Nuts

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начинаю работать с ethernet на Spartsn 6. Сделал как описано, но SDK выдает ошибки

thumb-92B3_4D77CB73.jpg

Подскажите, что не так? Работаю в Xilinx 12.2.

Ниже прилепил mhs и mss файлы проекта.

Archive.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...