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

📄 video_segmentation.vhd

📁 酒吧灯光控制工程在FPGA中的实现源代码.rar 觉得有用就下,也可作为例子学习
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--***********************************************
ENTITY VIDEO_SEGMENTATION IS
 PORT(
      RED:IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
    GREEN:IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
     BLUE:IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
       DE:IN  STD_LOGIC;
       HS:IN  STD_LOGIC;
       VS:IN  STD_LOGIC;
     DCLK:IN  STD_LOGIC;
     DATA:OUT STD_LOGIC_VECTOR(23 DOWNTO 0);
  ADDRESS:OUT STD_LOGIC_VECTOR(13 DOWNTO 0);
       OE:OUT STD_LOGIC;
       WE:OUT STD_LOGIC
       );
   END VIDEO_SEGMENTATION;
--************************************************
ARCHITECTURE A OF VIDEO_SEGMENTATION IS
  CONSTANT HOLD_HS_CONSTANT:STD_LOGIC_VECTOR(8 DOWNTO 0):="000100100";--"100101100";
  CONSTANT HOLD_PIXEL_CONSTANT:STD_LOGIC_VECTOR(8 DOWNTO 0):="110111100";
  SIGNAL  HOLD_HS_COUNTER:STD_LOGIC_VECTOR(8 DOWNTO 0); 
  SIGNAL  HOLD_PIXEL_COUNTER:STD_LOGIC_VECTOR(8 DOWNTO 0);
  SIGNAL  HS_COUNTER:STD_LOGIC_VECTOR(10 DOWNTO 0);
  SIGNAL  PIXEL_COUNTER:STD_LOGIC_VECTOR(10 DOWNTO 0);
  SIGNAL  HS_ADDR_COUNTER:STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL  PIXEL_ADDR_COUNTER:STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL  ADDRESS_COUNTER_L:STD_LOGIC_VECTOR(8 DOWNTO 0);
  SIGNAL  ADDRESS_COUNTER_H:STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL  H_START:STD_LOGIC;
  SIGNAL  V_START:STD_LOGIC;
  SIGNAL  V_PANEL:STD_LOGIC;
  SIGNAL  H_PANEL:STD_LOGIC;
  SIGNAL  PANEL:STD_LOGIC;
  SIGNAL  WE_T:STD_LOGIC;
   BEGIN 
     PROCESS(HS)
      BEGIN
       IF VS='0'THEN
          HOLD_HS_COUNTER<="000000000";
       ELSIF HS'EVENT AND HS='1'THEN
       -- IF DE='1'THEN
          IF HOLD_HS_COUNTER=HOLD_HS_CONSTANT THEN
              HOLD_HS_COUNTER<=HOLD_HS_COUNTER;
         ELSE
              HOLD_HS_COUNTER<=HOLD_HS_COUNTER+1;
           END IF;
         -- END IF;
        END IF;
      END PROCESS;  
      H_START<='1' WHEN HOLD_HS_COUNTER=HOLD_HS_CONSTANT ELSE
               '0';
         --*********************** 
     PROCESS(HS)
      BEGIN
        IF VS='0'THEN
         HS_COUNTER<="00000000000";
        ELSIF HS'EVENT AND HS='1'THEN        
            IF H_START='1'  THEN 
              HS_COUNTER<=HS_COUNTER+1; 
            END IF;
        END IF;
       END PROCESS;
       --************************
    PROCESS(DCLK)
      BEGIN
        IF HS='0'THEN
          HOLD_PIXEL_COUNTER<="000000000";
        ELSIF DCLK'EVENT AND DCLK='1'THEN
          IF DE='1'THEN
           IF HOLD_PIXEL_COUNTER=HOLD_PIXEL_CONSTANT THEN
              HOLD_PIXEL_COUNTER<=HOLD_PIXEL_COUNTER;
           ELSE
              HOLD_PIXEL_COUNTER<=HOLD_PIXEL_COUNTER+1;
           END IF;
          END IF;
        END IF;
       END PROCESS;

    V_START<='1' WHEN HOLD_PIXEL_COUNTER=HOLD_PIXEL_CONSTANT ELSE
             '0';

               --***********************
     PROCESS ( DCLK )
       BEGIN
         IF HS='0' THEN
           PIXEL_COUNTER<="00000000000";
          ELSIF DCLK'EVENT AND DCLK='1' THEN
            IF DE='1'THEN
              IF V_START='1' THEN
                 PIXEL_COUNTER<=PIXEL_COUNTER+1;
               -- IF PIXEL_COUNTER(7 DOWNTO 0)="11111110" THEN
                --   PIXEL_COUNTER(10 DOWNTO 8)<=PIXEL_COUNTER(10 DOWNTO 9)+1;
                  -- PIXEL_COUNTER(7 DOWNTO 0)<="00000000";
              --  ELSE
                 --  PIXEL_COUNTER(7 DOWNTO 0)<=PIXEL_COUNTER(7 DOWNTO 0)+1;
               -- END IF;
              END IF;
            END IF;
         END IF;
       END PROCESS; 
               --************************
    V_PANEL<='1'WHEN V_START='1' AND PIXEL_COUNTER(10 DOWNTO 8)="000" ELSE
             '0';
    H_PANEL<='1'WHEN H_START='1' AND HS_COUNTER(10 DOWNTO 4)="0000000"ELSE
             '0';
    PANEL<='1' WHEN V_PANEL='1'AND H_PANEL='1'ELSE
           '0';
   PROCESS(DCLK)
     BEGIN
       IF VS='0'THEN
          ADDRESS_COUNTER_L<="100001111";
          ADDRESS_COUNTER_H<="0000";
       ELSIF DCLK'EVENT AND DCLK='1'THEN
          IF PANEL='1'THEN
            IF ADDRESS_COUNTER_L="011110100"THEN
              ADDRESS_COUNTER_L<="011101111";              
            ELSIF ADDRESS_COUNTER_L="000111100" THEN
                 ADDRESS_COUNTER_L<="000110111";
            ELSIF ADDRESS_COUNTER_L="000011101" THEN
                 ADDRESS_COUNTER_L<="000010111";
            ELSIF ADDRESS_COUNTER_L="000010011" THEN
                 ADDRESS_COUNTER_L<="000001111";
            ELSIF ADDRESS_COUNTER_L="000000000"THEN
                 ADDRESS_COUNTER_L<="100001111";
                 ADDRESS_COUNTER_H<=ADDRESS_COUNTER_H+1;
            ELSE 
               ADDRESS_COUNTER_L<=ADDRESS_COUNTER_L-1; 
            END IF;          
          END IF;
       END IF;
      END PROCESS;
     
   WE<='0'WHEN PANEL='1'AND DCLK='0' ELSE
       '1';
    OE<='1';
   ADDRESS<='0' & ADDRESS_COUNTER_H & ADDRESS_COUNTER_L;
  PROCESS(DCLK)
    BEGIN
     IF DCLK'EVENT AND DCLK='1'THEN
        DATA<=RED(7 DOWNTO 0)&GREEN(7 DOWNTO 0)& BLUE(7 DOWNTO 0);
      END IF;
    END PROCESS;
  END A;
   

  
  


  

  

                                                                                  

⌨️ 快捷键说明

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