--- Quote Start ---
please attach some code and the signaltapdata from your control-packet
--- Quote End ---
That's my state machine:
process (av_reset,av_clk,state_streaming,av_st_ready,go_bit,width_val,height_val,blend_val,width_count,height_count)
begin
if (av_reset = '1') or (go_bit = '0') then
--if (av_reset = '1') then
width_count <= "0000000000000000";
height_count <= "0000000000000000";
av_st_data_sig <= X"0000";
av_st_valid_sig <= '0';
av_st_start_pack_sig <= '0';
av_st_end_pack_sig <= '0';
state_streaming <= SEND_ID_CONTROL_PACK;
elsif (rising_edge(av_clk)) then
case state_streaming is
when SEND_ID_CONTROL_PACK =>
av_st_data_sig <= X"00FF";
av_st_end_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_start_pack_sig <= '1';
av_st_valid_sig <= '1';
state_streaming <= SEND_CONTROL_1PACK;
else
av_st_start_pack_sig <= '0';
av_st_valid_sig <= '0';
state_streaming <= SEND_ID_CONTROL_PACK;
end if;
when SEND_CONTROL_1PACK =>
av_st_data_sig <= "0000" & width_val_std(11 downto 8) & "0000" & width_val_std(15 downto 12);
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_valid_sig <= '1';
state_streaming <= SEND_CONTROL_2PACK;
else
av_st_valid_sig <= '0';
state_streaming <= SEND_CONTROL_1PACK;
end if;
when SEND_CONTROL_2PACK =>
av_st_data_sig <= "0000" & width_val_std(3 downto 0) & "0000" & width_val_std(7 downto 4);
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_valid_sig <= '1';
state_streaming <= SEND_CONTROL_3PACK;
else
av_st_valid_sig <= '0';
state_streaming <= SEND_CONTROL_2PACK;
end if;
when SEND_CONTROL_3PACK =>
av_st_data_sig <= "0000" & height_val_std(11 downto 8) & "0000" & height_val_std(15 downto 12);
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_valid_sig <= '1';
state_streaming <= SEND_CONTROL_4PACK;
else
av_st_valid_sig <= '0';
state_streaming <= SEND_CONTROL_3PACK;
end if;
when SEND_CONTROL_4PACK =>
av_st_data_sig <= "0000" & height_val_std(3 downto 0) & "0000" & height_val_std(7 downto 4) ;
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_valid_sig <= '1';
state_streaming <= SEND_CONTROL_5PACK;
else
av_st_valid_sig <= '0';
state_streaming <= SEND_CONTROL_4PACK;
end if;
when SEND_CONTROL_5PACK =>
--av_st_data_sig <= X"000" & "0011";
av_st_data_sig <= X"000" & "0010";
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
av_st_valid_sig <= '1';
av_st_end_pack_sig <= '1';
--state_streaming <= SEND_ID_VIDEO_PACK;
state_streaming <= WAIT1CYCLE;
else
av_st_valid_sig <= '0';
av_st_end_pack_sig <= '0';
state_streaming <= SEND_CONTROL_5PACK;
end if;
when WAIT1CYCLE =>
av_st_start_pack_sig <= '0';
av_st_valid_sig <= '0';
av_st_end_pack_sig <= '0';
state_streaming <= SEND_ID_VIDEO_PACK;
when SEND_ID_VIDEO_PACK =>
av_st_data_sig <= X"0000";
av_st_end_pack_sig <= '0';
--if (av_st_ready = '1') and (go_bit = '1') then
if (av_st_ready = '1') then
av_st_start_pack_sig <= '1';
av_st_valid_sig <= '1';
state_streaming <= SEND_VIDEO_PACK;
else
av_st_start_pack_sig <= '0';
av_st_valid_sig <= '0';
state_streaming <= SEND_ID_VIDEO_PACK;
end if;
when SEND_VIDEO_PACK =>
av_st_data_sig <= X"1080"; --è il nero
av_st_start_pack_sig <= '0';
if (av_st_ready = '1') then
width_count <= width_count + 1;
av_st_valid_sig <= '1';
else
width_count <= width_count;
av_st_valid_sig <= '0';
end if;
if ((width_count = (width_val - 1) ) and (height_count = (height_val - 1))) then
av_st_end_pack_sig <= '1';
else
av_st_end_pack_sig <= '0';
end if;
if ((width_count = (width_val - 1) ) and (av_st_ready = '1')) then
state_streaming <= CHECK_END_FRAME;
else
state_streaming <= SEND_VIDEO_PACK;
end if;
when CHECK_END_FRAME =>
width_count <= "0000000000000000";
av_st_valid_sig <= '0';
av_st_start_pack_sig <= '0';
av_st_end_pack_sig <= '0';
if (height_count = (height_val - 1)) then
--FRAME TERMINATO
height_count <= "0000000000000000";
state_streaming <= SEND_ID_CONTROL_PACK;
else
height_count <= height_count + 1;
state_streaming <= SEND_VIDEO_PACK;
end if;
when others =>
state_streaming <= SEND_ID_CONTROL_PACK;
end case;
end if;
end process;