【问题标题】:HDMI and Pixel Clock | FPGAHDMI 和像素时钟 | FPGA
【发布时间】:2020-02-29 21:10:52
【问题描述】:

嘿嘿,

我想从我的 Spartan 7(FPGA) 中获取 HDMI 信号。
分辨率:640 x 480 @ 60 Hz,像素时钟为 25.2MHz。
这意味着我总共将拥有(包括消隐时间)800 x 525 @ 60.0 Hz

但是监视器如何知道第一个时钟是哪个时钟?
在 HDMI 中没有像 VGA 中的 hsync 和 vsync 之类的东西,对吧?

例如,如果我通过 HDMI 运行我的数据并在之后连接显示器。
tf 如何知道下一帧开始的监视器?

这里只有 4 个感兴趣的是代码 ->

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;

Library UNISIM;
use UNISIM.vcomponents.all;

entity Takt is
    Port ( 
    CLK100MHZ             : in  STD_LOGIC;      -- Pin R2
    clk_out_p             : out STD_LOGIC;      -- Pin L18 (1)
    clk_out_n             : out STD_LOGIC;      -- Pin L17 (2)
    clk_out_25Mhz         : inout STD_LOGIC;    -- Pin M14 (3)
    clk_out_250Mhz        : out STD_LOGIC;      -- Pin N14 (4)
    controll_LED          : out STD_LOGIC       -- Pin E13 (LED4)
    );

end Takt;

architecture Behavioral of Takt is

    signal locked       : std_logic;

-- init clock
--25.20 MHz    800 x 525 @ 60.000000000 Hz    (exact) <-- go with that
--25.20 MHz    840 x 500 @ 60.000000000 Hz    (exact)
component myclock
port
 (-- Clock in ports
  clk_in1           : in     std_logic;
  -- Clock out ports
  clk_out1          : out    std_logic;
  clk_out2          : out    std_logic;
  -- Status and control signals
  reset             : in     std_logic;
  locked            : out    std_logic
 );
end component;

begin
--Controll LED einschalten
    controll_LED <= '1';

-- Erzeugen der ClockSignale durch pregenerated Code by clockingWizard tool by Xilinx
clock_inst : myclock
   port map ( 
  -- Clock out ports  
   clk_out1 => clk_out_25Mhz,
   clk_out2 => clk_out_250Mhz,
  -- Status and control signals                
   locked => locked,
   reset => '0',
   -- Clock in ports
   clk_in1 => CLK100MHZ
 );

 -- via OBUFDS buffern des signals und aufsplitten auf clk_p und clk_n
OBUFDS_inst : OBUFDS
   generic map (
      IOSTANDARD => "DEFAULT", -- Specify the output I/O standard
      SLEW => "SLOW")          -- Specify the output slew rate
   port map (
      O => clk_out_p,          -- Diff_p output (connect directly to top-level port)
      OB => clk_out_n,         -- Diff_n output (connect directly to top-level port)
      I => clk_out_25Mhz       -- Buffer input 
   );

--nach Xilinx ist DDR nötig wenn aus "externen" Speicher gelesen wird

end Behavioral;

【问题讨论】:

    标签: vhdl spartan


    【解决方案1】:

    当您询问“第一个时钟”时,我假设您的意思是图像的第一个像素。 您假设没有通过 HDMI 传输的 VSYNC 或 HSYNC 也是错误的。

    您至少应该看看 3 个重要的东西:HDMI、DVI 和 TDMA.

    TDMA 链接指向 Wikipedia,您会发现 HDMI 和 DVI 也链接在那里。 在尝试实现 HDMI 发送器之前,您需要了解它们。

    您的代码缺少很多东西,例如数据通道、TDMA 编码器、实际数据源等。您可能想考虑只使用 Vivado 中包含的 HDMI IP。

    【讨论】:

    【解决方案2】:

    我设法解决了我的问题。为了我之后的人。

    HDMI 的工作原理:
    - 您需要 3 个 8 位(Red Green Blue),一个像素时钟,例如 25Mhz,一个 10 倍像素时钟的时钟
    (以 1 个像素发送 10 位)以及 VGA 中的 Hsync 和 Vsync。
    - 现在你需要一个 TMDS-Encoder、一个 Serializer 和一个 Outputbuffer 来生成 diff-Signal

    序列化器和输出缓冲区的作用很明显,序列化和缓冲..
    TMDS 编码器是主要的 HDMI 素材。他从 8 位 -> 10 位 AND,回答我自己的问题,他在消隐时间发送我的 Hsync(C0) 和 Vsync(C1)
    帮了我很大的忙:TMDS Encoder Specification

    如果有兴趣,我可以上传我最终工作的代码。

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2017-08-01
      • 2021-02-14
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多