VHDL中使用DE0的VGA

VHDL中使用DE0的VGA,vhdl,fpga,Vhdl,Fpga,我正在使用DE0FPGA制作一个简单的游戏。我在VHDL中的VGA有问题。我试图通过VGA在屏幕上显示一个简单的矩形,但什么也没有显示。这是我的密码。请帮我找到问题 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; ENTITY vga IS PORT( CLOCK_50:IN std_logic; VGA_HS,VGA_VS:OUT std_logic; VGA_R,VGA_G,VGA_B:OUT st

我正在使用DE0FPGA制作一个简单的游戏。我在VHDL中的VGA有问题。我试图通过VGA在屏幕上显示一个简单的矩形,但什么也没有显示。这是我的密码。请帮我找到问题

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY vga IS
PORT( 
CLOCK_50:IN std_logic;
VGA_HS,VGA_VS:OUT std_logic;
VGA_R,VGA_G,VGA_B:OUT std_logic_vector(3 downto 0));
END vga;
ARCHITECTURE main OF vga IS 
SIGNAL VGCLK :std_logic:='0';
COMPONENT scyn IS 
PORT( 
 clk : IN std_logic;
 Hsync,Vsync:OUT std_logic;
 R,G,B:OUT std_logic_vector(3 downto 0));
 END COMPONENT; 

 COMPONENT freq_div1 IS 
PORT ( clkin : IN std_logic ;
       clkout :OUT std_logic ) ; 

END COMPONENT freq_div1  ;
Begin
 freq : freq_div1 port map (CLOCK_50 , VGCLK ) ;
 sync1: scyn      PORT MAP (VGCLK,VGA_HS,VGA_VS,VGA_R,VGA_G,VGA_B);

END main;
分频器从50 MHZ的套件中获得25 MHZ

LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.all;    
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
ENTITY freq_div1 IS 
PORT ( clkin : IN std_logic ;
       clkout :OUT std_logic ) ; 
         END freq_div1  ;

ARCHITECTURE A OF freq_div1 IS 
BEGIN 
PROCESS (clkin )

   variable count  : std_logic_vector (1 downto 0) := "00";
begin
if (rising_edge (clkin )) THEN 
          count := count+1 ;
        end if;
        clkout <= count(0) ;
    end process ;
     END A ;
IEEE库;
使用IEEE.STD_LOGIC_1164.all;
使用ieee.std_logic_arith.all;
使用ieee.std_logic_unsigned.all;
实体freq_div1为
端口(clkin:标准逻辑中;
clkout:输出标准逻辑);
结束频率1;
freq_div1的架构A是
开始
过程(clkin)
变量计数:标准逻辑向量(1到0):=“00”;
开始
如果(上升沿(clkin)),则
计数:=计数+1;
如果结束;

clkout您可以注意到您的水平和垂直计数器关闭了1(0-799=每行800个时钟,0-524=每帧525行)。与不同颜色和大小的矩形进行比较。请注意,垂直同步看起来不同。此外,vga_r、vga_g和vga_b始终为“0000”。考虑模拟你的设计和故障排除。看一看,我相信这会导致一个乒乓球游戏。它显示了门廊的H和V计数器的数量以及VHDL代码示例VGA无法工作还有很多原因。可能是您的VGA控制器配置不正确。(英特尔)Altera有关于在DE0板上使用VGA控制器的特定文档。其他网站:。VGA颜色图案的代码作为参考设计包含在Terasic DE0 CD-ROM中。请在您的问题中正确缩进您的代码。我在youtube上看到了一个视频,我完全按照他说的做了
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE WORK.my.ALL;
ENTITY scyn IS 
PORT( 
 clk : IN std_logic;
 Hsync,Vsync:OUT std_logic;
 R,G,B:OUT std_logic_vector(3 downto 0));
 END scyn;
 ARCHITECTURE main OF scyn IS 
 SIGNAL RGB:std_logic_vector(3 downto 0);
 SIGNAL DRAW :std_logic;
 SIGNAL SQ_X1, SQ_Y1:INTEGER RANGE 0 TO 800:=0;
 SIGNAL Hpos: INTEGER RANGE 0 TO 800:=0;
 SIGNAL Vpos: INTEGER RANGE 0 TO 525:=0;
 BEGIN
 SQ_X1<= 480;
 SQ_Y1<=285;
PROCESS (clk)
BEGIN 
 IF (clk'EVENT AND  clk ='1') THEN 
 IF (DRAW='1') THEN 
 R<=RGB;
 G<=RGB;
 B<=RGB;
 ELSE 
 R<=(OTHERS =>'0');
 G<=(OTHERS =>'0');
 B<=(OTHERS =>'0');
 IF ( Hpos <800) THEN 
 Hpos<=Hpos+1;
 ELSE
 Hpos<=0;
 IF ( Vpos <525) THEN 
 Vpos<=Vpos+1;
 ELSE
 Vpos<=0;
 END IF; 
 END IF; 
 IF (Hpos >=16 AND Hpos<112) THEN 
 Hsync<='0';
 ELSE 
 Hsync<='1';
 END IF; 

  IF (Vpos>10 AND Hpos<12) THEN 
 Vsync<='0';
 ELSE 
 Vsync<='1';
 END IF; 
 IF ((Hpos>0 AND Hpos<160) OR (Vpos>0 AND Vpos<45)) THEN 
 R<=(OTHERS =>'0');
 G<=(OTHERS =>'0');
 B<=(OTHERS =>'0');
 END IF; 
 END IF; 
 END IF; 
 END PROCESS; 
 END main; 
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
PACKAGE my IS 
PROCEDURE SQ(SIGNAL Xcur,Ycur,Xpos,Ypos:IN INTEGER; SIGNAL RGB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DRAW :OUT std_logic);  
END my;
PACKAGE BODY my IS 
PROCEDURE SQ(SIGNAL Xcur,Ycur,Xpos,Ypos:IN INTEGER; SIGNAL RGB :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DRAW :OUT std_logic )  IS
BEGIN 
IF (Xcur>Xpos AND Xcur<(Xpos+100)  AND  Ycur>Ypos  AND Ycur <(Ypos+100))
THEN 
RGB <="1111";
DRAW<='1';
ELSE 
DRAW<='0';
END IF; 
END SQ; 
END my;