реклама на сайте
подробности

 
 
> Ethernet на ПЛИС, PHY+MAC+UDP/IP
Alexey_pashinov
сообщение Sep 4 2014, 07:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 6-03-14
Из: Зеленоград
Пользователь №: 80 823



Собрал проект, реализующий Ethernet (PHY+MAC+UDP/IP). Я формирую на ПЛИС'ке данные, которые хочу подать, на UDP. При отвправке самого первого пакета при выставлении сигнала sof, UDP/IP stack формирует arp запрос получателю, далее приходит отправителю ответ и после UDP/IP выствляет сигнал dst_rdy, который говорит о том что блок UDP/IP готов к приему данных для отправки. При передаче остальных пакетов сигнал dst_rdy выставляется почти сразу же после выставления sof (промежуток времени между их выставлением равен длине формируемого заголовка). Проблема заключается в следующем. При отправке самого первого пакета сигнал dst_rdy выставляется не сразу, может выставиться аж через 3-5 мин, может меньше может больше, а может и не выставиться. Но после того как это произошло (установилось видимо связь) дальнейшая передача пакетов происходит исправно. Кстати проблема возникает не всегда, например когда проверяю работу на 100 Мбит, зачастую передача работает и редко такое возникает, а когда проверяю на 1gb то наоборот зачастую не работает и только редко начинает работать сразу. Помогите разобраться с этим, буду очень признателен).

Могу выложить описание автомата формир отправку и диаграммы
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
HFSE
сообщение Jun 17 2015, 19:42
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 16-06-15
Пользователь №: 87 174



Да, спасибо доом13, я это уже пробовал к сожалению без изменений.
Вчера сделал простой автомат, который просто тупо выкидывает в сторону Micrel KSZ9021/KSZ9031 нужные данные через GMII<->RGMII преобразователь.
У меня такое чуство что я где-то что-то забыл или не то сделал.
Если кто сможет: просмотрите пожайлуста мой код. Буду очень благодарен.


CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity fsm is
Port (
RESET : in STD_LOGIC;
CLK_IN : in STD_LOGIC;
CLK_IN_90 : in STD_LOGIC;
LINK_EN : in STD_LOGIC;
TX_DATA_OUT : out STD_LOGIC_VECTOR (7 downto 0);
TX_ERR_OUT : out STD_LOGIC;
TX_EN_OUT : out STD_LOGIC;
TX_CLK_OUT : out STD_LOGIC
);
end fsm;

architecture Behavioral of fsm is

type FSM_STATE is ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
A11, A12, A13, A14, A15, A16, A17, A18, A19, A20,
A21, A211, A222, A22, A23, A24, A25, A26, A27, A28, A29, A30,
A31, A32, A33, A34, A35, A36, A37, A38, A39, A40,
A41, A42, A43, A44, A45, A46, A47, A48, A49, A50,
A51, A52, A53, A54, A55, A56, A57, A58, A59, A60,
A61, A62, A63, A64, A65, A66, A67, A68, A69, A70,
A71, A72, A73, A74, A75, A76, A77, A78, A79, A80,
A81, A82, A83, A84, A85, A86, A87, A88, A89, A90,
A91, A92, A93, A94, A95, A96, A97, A98, A99
);

signal STATE : FSM_STATE := A1;
signal NEXT_STATE : FSM_STATE;

signal data_buffer : std_logic_vector(7 downto 0) := x"00";

begin

Z : process(RESET, CLK_IN, LINK_EN)
begin

if (RESET = '0') then
STATE <= A1;
elsif (rising_edge(CLK_IN)) then
if (LINK_EN = '0') then
STATE <= NEXT_STATE;
else
STATE <= A1;
end if;
end if;

end process Z;

TX_DATA_OUT <= data_buffer;

FSM_PROC: process (STATE, CLK_IN, CLK_IN_90)
begin
case STATE is
-- Preable
when A1 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A2;
when A2 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A3;
when A3 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A4;
when A4 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A5;
when A5 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A6;
when A6 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A7;
when A7 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A8;
when A8 => data_buffer <= x"55"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A9;
when A9 => data_buffer <= x"D5"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A10;
-- MAC Destination
when A10 => data_buffer <= x"54"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A11;
when A11 => data_buffer <= x"EE"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A12;
when A12 => data_buffer <= x"75"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A13;
when A13 => data_buffer <= x"30"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A14;
when A14 => data_buffer <= x"86"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A15;
when A15 => data_buffer <= x"60"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A16;
--MAC Source
when A16 => data_buffer <= x"FF"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A17;
when A17 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A18;
when A18 => data_buffer <= x"12"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A19;
when A19 => data_buffer <= x"34"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A20;
when A20 => data_buffer <= x"56"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A21;
when A21 => data_buffer <= x"78"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A211;
-- Ethernet Typ <=> IP
when A211 => data_buffer <= x"08"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A222;
when A222 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A22;
-- IP Header
when A22 => data_buffer <= x"45"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A23; -- Version + IHL
when A23 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A24; -- TOS
when A24 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A25; -- Total Lengh
when A25 => data_buffer <= x"3A"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A26; -- Total Lengh
when A26 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A27; -- Identification
when A27 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A28; -- Identification
when A28 => data_buffer <= x"01"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A29; -- Flags
when A29 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A30; -- Fragment offset
when A30 => data_buffer <= x"FF"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A31; -- TTL
when A31 => data_buffer <= x"11"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A32; -- Protocol <=> UDP
-- IP Header Check Sum = IP Header + IP Source + IP Destin in Format x"0000"
when A32 => data_buffer <= x"1C"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A33;
when A33 => data_buffer <= x"CA"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A34;
--IP Source
when A34 => data_buffer <= x"C4"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A35;
when A35 => data_buffer <= x"FF"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A36;
when A36 => data_buffer <= x"0A"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A37;
when A37 => data_buffer <= x"01"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A38;
-- IP Dest
when A38 => data_buffer <= x"C4"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A39;
when A39 => data_buffer <= x"FF"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A40;
when A40 => data_buffer <= x"0A"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A41;
when A41 => data_buffer <= x"05"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A42;
--Port Source
when A42 => data_buffer <= x"C3"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A43;
when A43 => data_buffer <= x"50"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A44;
-- Port Dest
when A44 => data_buffer <= x"C3"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A45;
when A45 => data_buffer <= x"50"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A46;
-- UDP Lengh Payload = Port Source + Port Dest + Lengh Payload + UDP Checksum + Payload <=> 26
when A46 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A47;
when A47 => data_buffer <= x"1C"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A48;
-- UDP Checksum
when A48 => data_buffer <= x"62"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A49;
when A49 => data_buffer <= x"8D"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A50;
-- UDP Payload
when A50 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A51;
when A51 => data_buffer <= x"01"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A52;
when A52 => data_buffer <= x"02"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A53;
when A53 => data_buffer <= x"03"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A54;
when A54 => data_buffer <= x"04"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A55;
when A55 => data_buffer <= x"05"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A56;
when A56 => data_buffer <= x"06"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A57;
when A57 => data_buffer <= x"07"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A58;
when A58 => data_buffer <= x"08"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A59;
when A59 => data_buffer <= x"09"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A60;
when A60 => data_buffer <= x"10"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A61;
when A61 => data_buffer <= x"11"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A62;
when A62 => data_buffer <= x"12"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A63;
when A63 => data_buffer <= x"13"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A64;
when A64 => data_buffer <= x"14"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A65;
when A65 => data_buffer <= x"15"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A66;
when A66 => data_buffer <= x"16"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A67;
when A67 => data_buffer <= x"17"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A68;
when A68 => data_buffer <= x"18"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A69;
when A69 => data_buffer <= x"19"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A70;
-- CRC32 Checksum
when A70 => data_buffer <= x"B5"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A71;
when A71 => data_buffer <= x"B6"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A72;
when A72 => data_buffer <= x"5E"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A73;
when A73 => data_buffer <= x"B5"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '1'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A74;

when A74 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A75;
when A75 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A76;
when A76 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A77;
when A77 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A78;
when A78 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A79;
when A79 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A80;
when A80 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A81;
when A81 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A82;
when A82 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A83;
when A83 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A84;
when A84 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A85;
when A85 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A86;
when A86 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A87;
when A87 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A88;
when A88 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A89;
when A89 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A90;
when A90 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A91;
when A91 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A92;
when A92 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A93;
when A93 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= CLK_IN_90; NEXT_STATE <= A94;
when A94 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A95;
when A95 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A96;
when A96 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A97;
when A97 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A98;
when A98 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A99;
when A99 => data_buffer <= x"00"; TX_ERR_OUT <= '0'; TX_EN_OUT <= '0'; TX_CLK_OUT <= '0'; NEXT_STATE <= A1;



when others => NEXT_STATE <= A1;

end case;

end process FSM_PROC;



end Behavioral;
Причина редактирования: используйте теги codebox для оформления больших сегментов кода (с) модератор
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jun 18 2015, 02:16
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(HFSE @ Jun 18 2015, 01:42) *
Код
library IEEE;
.......
end Behavioral;

Жесть какая-то... Не проще ли пакет в инициализируемой блочной памяти держать и играть его оттуда чем плодить FSM на 99 состояний?
Причина редактирования: избыточное цитирование (с) модератор
Go to the top of the page
 
+Quote Post
HFSE
сообщение Jun 18 2015, 05:01
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 16-06-15
Пользователь №: 87 174



Цитата(Bad0512 @ Jun 18 2015, 02:16) *
Жесть какая-то... Не проще ли пакет в инициализируемой блочной памяти держать и играть его оттуда чем плодить FSM на 99 состояний?


Хорошо педметил, biggrin.gif Да полностью согласен, ПОЛНАЯ ЖЕСТь. Это всего лишь тест автомат, мне так легче было им управлять. В оригинале все идет через блочную память.
Но я просто понять не могу, почему когда посылаешь вот такой пакет, wireshark ничего не видет. Где может быть косяк. sad.gif
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jun 18 2015, 05:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(HFSE @ Jun 18 2015, 11:01) *
Но я просто понять не могу, почему когда посылаешь вот такой пакет, wireshark ничего не видет. Где может быть косяк. sad.gif

например, в кривых констрейнах на I/O
Go to the top of the page
 
+Quote Post
HFSE
сообщение Jun 18 2015, 06:22
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 16-06-15
Пользователь №: 87 174



Цитата(vadimuzzz @ Jun 18 2015, 05:03) *
например, в кривых констрейнах на I/O


Я это уже проверял выглядит вроде все в порядке.
Я так сделал чтобы фронт вападал как раз по середине (см. фото).

На фото показаны сигналы после GMII<-> RGMII преобразователя.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
HFSE
сообщение Jun 18 2015, 06:41
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 16-06-15
Пользователь №: 87 174



Цитата(HFSE @ Jun 18 2015, 06:22) *
Я это уже проверял выглядит вроде все в порядке.
Я так сделал чтобы фронт вападал как раз по середине (см. фото).

На фото показаны сигналы после GMII<-> RGMII преобразователя.



А вот так выглядят сигналы до GMII<-> RGMII преобразователя.

Цитата(mobidev @ Jun 18 2015, 06:30) *
Сразу оговорюсь, я пока что не специалист по FPGA, однако, как Вы без ARP собираетесь согласовывать IP адреса, поддерживать линк и прочее?


В этом и есть вопрос.
Если я правильно понял ARP нужен только для того что бы согласовать в сети какой МАC имеет какой IP.
Ну а если я например знаю точно какой МАC и IP адресс у PC.
Разве я не могу просто тупо послать в сторону PC UDP Пакет сразу после того как установилься Link . Для wireshark это должно быть все равно.
Или сетевая карта настолько умна что пока не получит ответ на ARP, все остальное просто игнорирует?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 18 2015, 07:34
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(HFSE @ Jun 18 2015, 09:41) *
Если я правильно понял ARP нужен только для того что бы согласовать в сети какой МАC имеет какой IP.
Ну а если я например знаю точно какой МАC и IP адресс у PC.
Разве я не могу просто тупо послать в сторону PC UDP Пакет сразу после того как установилься Link . Для wireshark это должно быть все равно.
Или сетевая карта настолько умна что пока не получит ответ на ARP, все остальное просто игнорирует?

Для нормального определения устройства в сети ARP нужен, в Вашем случае дело пока не в нём, а в железе. Wireshark будет видеть пакеты, если они есть в сети.
Для большей уверенности, что проблема не в компе, можете попробовать посылать пакеты с broadcast MAC-address.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alexey_pashinov   Ethernet на ПЛИС   Sep 4 2014, 07:56
- - billidean   При отправке самого первого пакета Ваш стек отправ...   Sep 4 2014, 09:07
- - Alexey_pashinov   Это я и пояснил во вступлении чтобы было понятно о...   Sep 4 2014, 09:29
- - billidean   Имея картину от сниффера (сохраненный файл), можно...   Sep 4 2014, 09:37
- - Socrates   FPGA Triple speed ethernet MAC + Micrel KSZ9021/KS...   Sep 4 2014, 13:21
- - Alexey_pashinov   Привожу скрин wireshark, в обоих случаях arp запро...   Sep 4 2014, 13:50
- - billidean   Эта картинка, как я понимаю, когда у Вас все хорош...   Sep 4 2014, 14:30
- - Alexey_pashinov   Проблема решилась. Оказывается неправильно подавал...   Sep 8 2014, 08:36
- - HFSE   Всем Привет. Я сейчас занимаюсь тем же самым что ...   Jun 16 2015, 19:46
|- - mobidev   Цитата(HFSE @ Jun 16 2015, 23:46) P.C. На...   Jun 18 2015, 06:30
- - doom13   Если плата отправляет пакет, то wireshark должен е...   Jun 16 2015, 20:03
|- - mobidev   Цитата(HFSE @ Jun 18 2015, 10:41) Если я ...   Jun 18 2015, 08:15
- - HFSE   Всем сапсибо за советы. Но до сих пор я не вижу па...   Jun 19 2015, 06:56
|- - Sergey_Bekrenyov   А зачем Вы TX_CLK_OUT в ноль опускаете? PHY не смо...   Jun 19 2015, 14:30
|- - HFSE   Цитата(Sergey_Bekrenyov @ Jun 19 2015, 15...   Jun 22 2015, 07:19
|- - Sergey_Bekrenyov   Цитата(HFSE @ Jun 22 2015, 10:19) Добрый ...   Jun 22 2015, 09:26
- - doom13   Пробуйте проверять соединение в разных сечениях (l...   Jun 19 2015, 07:12
- - NSergeevich   Всем привет! Мой проект (MAC + Phy) настроен т...   Jun 22 2015, 10:18
|- - mobidev   Цитата(NSergeevich @ Jun 22 2015, 14:18) ...   Jun 22 2015, 11:31
|- - NSergeevich   Цитата(mobidev @ Jun 22 2015, 14:31) QM q...   Jun 22 2015, 11:41
|- - mobidev   Цитата(NSergeevich @ Jun 22 2015, 15:41) ...   Jun 22 2015, 12:03
|- - doom13   Цитата(NSergeevich @ Jun 22 2015, 14:41) ...   Jun 22 2015, 12:27
|- - NSergeevich   Цитата(doom13 @ Jun 22 2015, 15:27) Рукам...   Jun 22 2015, 12:41
- - gosu-art   А promiscuous mode у вас включен? У меня, например...   Jun 22 2015, 10:30
|- - NSergeevich   Цитата(gosu-art @ Jun 22 2015, 13:30...   Jun 22 2015, 10:35
- - gosu-art   RE: Ethernet на ПЛИС   Jun 22 2015, 10:41
- - NSergeevich   C этим модом тоже самое   Jun 22 2015, 10:50
|- - HFSE   Цитата(NSergeevich @ Jun 22 2015, 11:50) ...   Jun 22 2015, 12:53
|- - mobidev   Цитата(HFSE @ Jun 22 2015, 16:53) правиль...   Jun 22 2015, 13:26
|- - NSergeevich   Цитата(HFSE @ Jun 22 2015, 15:53) Sergeev...   Jun 22 2015, 15:02
|- - Corvus   Цитата(NSergeevich @ Jun 22 2015, 18:02) ...   Jun 22 2015, 15:06
- - gosu-art   Код/// size 14 bytes logic [7:0] e...   Jun 22 2015, 12:54
- - krux   для формирования пакетов есть ещё такая интересная...   Jun 22 2015, 13:40
- - NSergeevich   подкиньте ресурс, где можно былобы почитать о всех...   Jun 22 2015, 16:00
|- - doom13   Цитата(NSergeevich @ Jun 22 2015, 19:00) ...   Jun 22 2015, 19:03
|- - gosu-art   Цитата(doom13 @ Jun 22 2015, 22:03) Вообщ...   Jun 22 2015, 19:23
||- - doom13   Цитата(gosu-art @ Jun 22 2015, 22:23...   Jun 22 2015, 20:02
|- - NSergeevich   Цитата(doom13 @ Jun 22 2015, 22:03) Вообщ...   Jun 23 2015, 07:39
|- - doom13   Цитата(NSergeevich @ Jun 23 2015, 10:39) ...   Jun 23 2015, 08:17
|- - NSergeevich   Цитата(doom13 @ Jun 23 2015, 11:17) Вот т...   Jun 23 2015, 08:48
|- - doom13   Цитата(NSergeevich @ Jun 23 2015, 11:48) ...   Jun 23 2015, 09:19
- - gosu-art   Основные параметры Код localparam SIZE_ETHER_HDR ...   Jun 22 2015, 18:39
- - NSergeevich   Может кто-нибудь сталкивался со следующей проблемо...   Jun 30 2015, 10:52
- - NSergeevich   В случае MII на 100mb интерфейса TXD[3... 0]: Tran...   Jul 10 2015, 13:30
- - HFSE   Цитата(NSergeevich @ Jul 10 2015, 14:30) ...   Jul 13 2015, 07:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 23:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016