2013-11-25 1 views
1

Atlys Spartan 6 보드에서 HDMI 송신기 및 수신기를 구현했습니다. 제대로 작동합니다. 나는 1080p @ 60Hz를 사용하고있다. 보드는 1 픽셀을 취하여 디코드 한 다음 다시 인코딩하여 모니터로 전송합니다.프레임 시작 확인

이제 새 프레임의 시작을 식별해야합니다. 왜냐하면 나는 화면 중앙에 정사각형을 그려야하기 때문에 (FPGA 사용). 나는 HSYNC와 VSYNC가 모두 새로운 프레임의 시작을 암시하는 '1'이라고 생각했다. 그러나 그것이 사실이 아닌 것처럼 보입니다.

누구나 새로운 HDMI 프레임의 시작을 식별하는 방법을 알려줄 수 있습니까?

감사합니다.

+1

여기서 HSYNC와 VSYNC는 모두 '1'로 이동하여 실제로 새 프레임의 시작이어야합니다. 두 신호 모두에서 긍정적 인면을 찾고 있습니까? – Russell

+0

답장을 보내 주셔서 감사합니다 .... 항상 @ (posedge pclk) 시작 if (h_sync & v_sync) begin start = 1'b1; end 이것은 코드의 일부입니다. pclk는 픽셀 clk입니다. – user2389323

+0

가장자리를 찾기에 관하여이 포스트를 읽으십시오. 귀하가 귀하의 의견에 묘사 한 방식으로는 충분하지 않습니다. 신호의 이전 값, 신호의 현재 값을 등록하고 이전 값 = 0이고 현재 값 = 1 일 때 조건을 찾아야합니다. http://stackoverflow.com/questions/8413661/proper- way-for-signal-edge-detection-in-verilog를 사용합니다. – Russell

답변

2

새 프레임의 시작은 VSYNC가 '1'이상으로 변경되거나 (또는 ​​동시에 데이터 소스에 따라 다름) HSYNC가 '1'로 변경된 것입니다.

가장자리를 감지해야합니다. VHDL,이 같은 과정에서 :

process(clk) 
    variable last_hsync, last_vsync, got_vsync : std_logic; 
begin 
    if rising_edge(clk) then 
     if vsync = '1' and last_vsync = '0' then 
      got_vsync := '1'; 
     end if; 
     if got_vsync and hsync = '1' and last_hsync = '0' then 
      first_pixel <= '1'; 
     end if; 
     last_vsync := vsync; 
     last_hsync := hsync; 
    end if; 
end process; 

그 플래그 프레임의 부정 출발을 할 수있다 당신이 중간 프레임을 올 경우 - 당신이 중요한 경우, 이러한 경우를 관리하는 몇 가지 추가 상태를해야 할 수도 있지만, 의존 시스템의 .

+0

이 작품은 ... 난 충분히 당신을 감사하지 못할 ... – user2389323

+0

@ user2389323 : 다행 도움 - 녹색 진드기가 충분히 감사합니다 :) –