VHDL中使用DE0的VGA
我正在使用DE0FPGA制作一个简单的游戏。我在VHDL中的VGA有问题。我试图通过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
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;