Maverick_ 15 29 апреля, 2021 Опубликовано 29 апреля, 2021 · Жалоба Может есть у кого то литература/статьи как лучше это на vhdl/verilog сделать Может есть наработки которыми можете поделиться или где то видели/находили целевая FPGA arria10 PS я только начал смотреть в этом направлении - читаю что предлагает гугл :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 29 апреля, 2021 Опубликовано 29 апреля, 2021 · Жалоба Приветствую! 48 minutes ago, Maverick_ said: Может есть у кого то литература/статьи как лучше это на vhdl/verilog сделать А что тут сложного то? (акромя проблем со сном из необходимости читать на ночь жуткие RFC ). Основной по сложности будет вопрос "... а что же надо поддерживать из зверинца стандартов и в каком объеме". А дальше чисто технические трудности - какая целевая частота/разрядность шины. Как разбивать FSM парсинга по уровням - как в теории, в соответствии с уровнями стека, или делать все проще объединяя несколько уровней в одной FSM. Что делать при возможных ошибках, ... Ну и естественно чем и как проверять все то что вы напишете на соответствие "ночным кошмарам" Увы о таком в книжках обычно не пишут, так как обычно зависит это от особенностей вашего дизайна. Удачи! Rob. P.S. Для автоматизации такой рутины, packet processing, есть спец. язык P4. По нему много работ можно найти и я даже на github когда-то видел генераторы V/VHDL кода из него. У Xilinx был SDNet который тоже делал подобное. Но Low Latency такими генераторами не получить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 29 апреля, 2021 Опубликовано 29 апреля, 2021 (изменено) · Жалоба Если сетку никогда не парсили, наверное стоит пробежаться по википедии, там красивые статьи по струткурам пакета. Начиная от самого верхней структуры ethernet фрейма до ip4, ip6, tcp, udp. Потом можно свою сеть посниффить, записать dump (с помощью wireshark) и посмотреть как пакеты ходят в сетке и из чего состоят. Появится уже представления об ethernet фреймах. IP уровень в них не такой сложный. Ну а потом уже выяснять нюансы в rfc и на бою может Проверку парсера в симуляторе я делал просто: поназаписывал дампы с разных сетей, потом подгружал их в симулятор и гонял тесты. Изменено 29 апреля, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 29 апреля, 2021 Опубликовано 29 апреля, 2021 · Жалоба 2 hours ago, new123 said: Если сетку никогда не парсили, наверное стоит пробежаться по википедии, там красивые статьи по струткурам пакета. Начиная от самого верхней структуры ethernet фрейма до ip4, ip6, tcp, udp. Потом можно свою сеть посниффить, записать dump (с помощью wireshark) и посмотреть как пакеты ходят в сетке и из чего состоят. Появится уже представления об ethernet фреймах. IP уровень в них не такой сложный. Ну а потом уже выяснять нюансы в rfc и на бою может Проверку парсера в симуляторе я делал просто: поназаписывал дампы с разных сетей, потом подгружал их в симулятор и гонял тесты. С этого я и начал :) Совет как симулить принят Спасибо 3 hours ago, RobFPGA said: Приветствую! ... P.S. Для автоматизации такой рутины, packet processing, есть спец. язык P4. По нему много работ можно найти и я даже на github когда-то видел генераторы V/VHDL кода из него. У Xilinx был SDNet который тоже делал подобное. Но Low Latency такими генераторами не получить можете дать ссылку на язык P4? уже нашел https://github.com/p4lang/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Мой опыт: Курили RFC, Wiki, КиТ, Electronix 1. Взяли корку с OpenCores Ethernet, допилили под себя (чистый Verilog) 2. Сделали разбор ip4 (чистый Verilog) 3. Сделали разбор UDP (чистый Verilog) 4. Реализовали ARP ответы, таблицу (чистый Verilog) 5. Подняли буфер на несколько (не помню на столько точно) пакетов, по приоритетам, арбитраж (чистый Verilog) Конечная цель железки ретрансляция пакетов UDP с подменой MAC, IP согласно заложенной конфигурации. Сама конфигурация прилетала в конфигурационном UDP пакете. Spartan-6 Если актуально, пишите в личку. Могу скинуть все или часть исходников, если не найдется противопоказаний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lennox 0 1 мая, 2021 Опубликовано 1 мая, 2021 · Жалоба а Вы спросите у des333, они в Метротеке этим занимаются Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 11 мая, 2021 Опубликовано 11 мая, 2021 · Жалоба On 4/29/2021 at 5:18 PM, new123 said: Проверку парсера в симуляторе я делал просто: поназаписывал дампы с разных сетей, потом подгружал их в симулятор и гонял тесты. Приветствую. А дампы вы чем писали? Плисиной или wireshark'ом. Если последнее, то поделитесь, каквы pcap симулятору скармливали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 11 мая, 2021 Опубликовано 11 мая, 2021 · Жалоба Приветствую 15 minutes ago, DuHast said: Приветствую. А дампы вы чем писали? Плисиной или wireshark'ом. Если последнее, то поделитесь, каквы pcap симулятору скармливали. На github есть несколько очень полезных библиотек для работы Ethernet с пакетами - например sv_pkt_lib. В ней также есть пример как читать/писать pcap через С/С++ DPI. Но при желании можно сделать чтение/запись pcap и на чистом V/SV, будет даже проще чем через DPI. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 11 мая, 2021 Опубликовано 11 мая, 2021 (изменено) · Жалоба 2 hours ago, DuHast said: А дампы вы чем писали? Плисиной или wireshark'ом wireshark'ом я писал только точечно, если что то конкретно надо выделить. И прям из него экспортировал хекс, особо не утруждался. Массово дамп я писал в c++ из разных сетей (чтобы записать разновидный трафик ip4/ip6/vlan/tcp/udp...), заставляя весь трафик прогонять через свою утилиту. Записывал в хекс все и подгружал в симуляторе. С pcap я особо не заморачивался, сделал все предельно просто. Возможно что то есть специализированное, о чем пишет Rob. У меня все как то просто было, примерно вот так в цикле reg [31:0] tx_packet_size; reg [255:0] tx_packet [29:0]; dump_file = $fopen("dumps/example.bin","rb"); $fread (tx_packet_size, dump_file); $fread (tx_packet, dump_file); .... Изменено 11 мая, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 11 мая, 2021 Опубликовано 11 мая, 2021 · Жалоба Приветствую! Если грубо то работа с pcap это простой парсинг файла Есть две структуры заголовков - начального и пакетного // typedef struct packed { u32_t magic ; u16_t version_major; u16_t version_minor; u32_t thiszone ; u32_t sigfigs ; u32_t snaplen ; u32_t linktype ; } st_PCAP_HDR_t; // typedef struct packed { u32_t tv_sec ; u32_t tv_usec ; u32_t caplen ; u32_t len ; } st_PKT_HDR_t; открываем файл, сначала читаем начальный заголовок, а потом в цикле заголовок пакета и само тело пакета (если есть). st_PCAP_HDR_t pcap_hdr; bit [0: $bits(pcap_hdr)-1] pcap_tmp; ... fin_h = $fopen(fname,"rb"); ... res = $fread(pcap_tmp, fin_h); pcap_hdr.magic = n2h32(pcap_tmp[0 +: 32]); // byte swap pcap_hdr.version_major = n2h16(pcap_tmp[32 +: 16]); pcap_hdr.version_minor = n2h16(pcap_tmp[48 +: 16]); pcap_hdr.thiszone = n2h32(pcap_tmp[64 +: 32]); pcap_hdr.sigfigs = n2h32(pcap_tmp[96 +: 32]); pcap_hdr.snaplen = n2h32(pcap_tmp[128 +: 32]); pcap_hdr.linktype = n2h32(pcap_tmp[160 +: 32]); //... st_PKT_HDR_t pkt_hdr; bit [0: $bits(pkt_hdr)-1] pkt_tmp; u8_t pkt_data[]; while (!$feof(fin_h)) begin res = $fread(pkt_tmp, fin_h); pkt_hdr.tv_sec = n2h32(pkt_tmp[0 +: 32]); pkt_hdr.tv_usec= n2h32(pkt_tmp[32 +: 32]); pkt_hdr.caplen = n2h32(pkt_tmp[64 +: 32]); pkt_hdr.len = n2h32(pkt_tmp[96 +: 32]); if (pkt_hdr.caplen>0) begin res = fread_n_byte(fin_h, pkt_hdr.caplen, pkt_data); // read N bytes from file // process pkt_data ... end end //... $fclose(fin_h); Похоже делаем и для записи из сима в pcap, но естественно сами пишем в структуры нужные данные. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 12 мая, 2021 Опубликовано 12 мая, 2021 · Жалоба Возможно будет полезно: https://github.com/lucasbrasilino/net2axis https://fpga-systems.ru/publ/raznoe/interfaces/skript_net2axis/26-1-0-100 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 12 мая, 2021 Опубликовано 12 мая, 2021 · Жалоба Спасибо, за интересные мысли/идеи.. Будут еще предлагайте :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться