⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vga_sync.tdf

📁 ALTERA的FPGA的IP核的源代码,为使用ALTERA的FPGA的相关设计提供参考.
💻 TDF
字号:
TITLE "VGA_sync";

-- Version 1.0
-- Copyright Rune Baeverrud, October 6, 1997
-- You may use or distribute this function freely,
-- provided you do not remove this copyright notice.
-- If you have questions or comments, feel free to
-- contact me by email at r@acte.no 
-- World Wide WEB: http://193.215.128.3/freecore

INCLUDE "lpm_counter";
INCLUDE "lpm_compare";

SUBDESIGN VGA_sync
(
  SysClk: INPUT;
  Enable: INPUT=VCC;
  
  h_sync, v_sync           : OUTPUT;
  video, pix_en, frame     : OUTPUT;
  h_cnt[9..0], v_cnt[9..0] : OUTPUT;
)

VARIABLE
  h_state       : MACHINE WITH STATES (h_video, h_delay1, h_sync_now, h_delay2);
  v_state       : MACHINE WITH STATES (v_video, v_delay1, v_sync_now, v_delay2);
  h_counter     : LPM_COUNTER WITH (LPM_WIDTH=10);
  v_counter     : LPM_COUNTER WITH (LPM_WIDTH=10);
  v_enable      : NODE;
  h_cnt_1d[9..0]: DFF;
  v_cnt_1d[9..0]: DFF;
  frame_ff      : DFF;

BEGIN
  h_counter.clock = SysClk;
  v_counter.clock = SysClk;
  h_state.clk     = SysClk;
  v_state.clk     = SysClk;
  h_cnt_1d[].clk  = SysClk;
  v_cnt_1d[].clk  = SysClk;
  frame_ff.clk    = SysClk;

  h_counter.clk_en = Enable;
  h_state.ena      = Enable;

  v_enable = Enable AND LPM_COMPARE(h_counter.q[], 699,,) 
                        WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
                        RETURNS (.aeb);
  v_counter.clk_en = v_enable;
  v_state.ena      = v_enable;

  h_cnt_1d[] = h_counter.q[];
  h_cnt[]    = h_cnt_1d[];

  v_cnt_1d[] = v_counter.q[];
  v_cnt[]    = v_cnt_1d[];  

  video      = DFF(h_video AND v_video, SysClk,,);

  h_sync     = DFF(NOT h_sync_now, SysClk,,);
  v_sync     = DFF(NOT v_sync_now, SysClk,,);

  pix_en     = DFF(Enable AND h_video AND v_video, SysClk,,);
  frame      = DFF(frame_ff, SysClk,,);

  CASE h_state IS
    WHEN h_video =>
      IF LPM_COMPARE(h_counter.q[], 639,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           h_state = h_delay1;
      ELSE h_state = h_video;
      END IF;
    WHEN h_delay1 =>
      IF LPM_COMPARE(h_counter.q[], 658,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           h_state = h_sync_now;
      ELSE h_state = h_delay1;
      END IF;
    WHEN h_sync_now =>
      IF LPM_COMPARE(h_counter.q[], 755,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           h_state = h_delay2;
      ELSE h_state = h_sync_now;
      END IF;
    WHEN h_delay2 =>
      IF LPM_COMPARE(h_counter.q[], 799,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           h_state = h_video;
           h_counter.sclr = VCC;
      ELSE h_state = h_delay2;
      END IF;
  END CASE;

  CASE v_state IS
    WHEN v_video =>
      IF LPM_COMPARE(v_counter.q[], GND, 479,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           v_state = v_delay1;
      ELSE v_state = v_video;
      END IF;
    WHEN v_delay1 =>
      IF LPM_COMPARE(v_counter.q[], GND, 492,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           v_state = v_sync_now;
      ELSE v_state = v_delay1;
      END IF;
    WHEN v_sync_now =>
      IF LPM_COMPARE(v_counter.q[], GND, 494,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           v_state = v_delay2;
      ELSE v_state = v_sync_now;
      END IF;
    WHEN v_delay2 =>
      IF LPM_COMPARE(v_counter.q[], 524,,) 
         WITH (LPM_WIDTH=10, ONE_INPUT_IS_CONSTANT="YES") 
         RETURNS (.aeb) THEN
           v_state = v_video;
           v_counter.sclr = VCC;
           frame_ff = v_enable;
      ELSE v_state = v_delay2;
      END IF;
  END CASE;

END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -