Skocz do zawartości

Dotmatrix dla monitora VGA640X480 - VHDL


Pomocna odpowiedź

WItam.

W projekcie za pomocą klawiatury PS2 można wpisywać znaki do wewnętrznej pamięci FPGA bram i wyświetlać je na monitorze VGA. By nie komplikować i tak już dość złożonego projektu wyświetlacz znaków jest monochromatyczny. Znaki są zaimplementowane w komórce pamięci 8X8 pikseli. Dopisałem też polskie znaki. Przyciski funkcyjne i klawiatura numeryczna nie jest zaimplementowana. Znaki zapisałem w pamięci CGROM wzorując się na tabeli poniżej.

Przycisk CAPS SCHIFT TAB ENTER DEL ALT są zaimplementowane . 

Maksymalna ilość znaków na wyświetlaczu 80X60 = 4800 znaków.

                                                                                                            image.thumb.png.f6458fbe426daecffef199ace19abdd0.png

Zdjęcie z uruchomionego programu:

                                                                                                             554720662_IMG_20240209_1913519991.thumb.jpg.25cc2681e34c785558c37167430db3dc.jpg

Dla ciekawych kody zamieściłem  poniżej

Pzdrawiam.

Program sprzęgający moduły:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DOTMATRIX_VGA640X480 is
    Port ( Clk : in  STD_LOGIC;
           Reset : in  STD_LOGIC;
           PS21_D : inout  STD_LOGIC;
           PS21_C : inout  STD_LOGIC;
           HS : out  STD_LOGIC;
           VS : out  STD_LOGIC;
           RGB : out  STD_LOGIC_VECTOR (7 downto 0)
			  );
end DOTMATRIX_VGA640X480;

architecture Behavioral of DOTMATRIX_VGA640X480 is

	COMPONENT VGA640X480
	PORT(
		Clk : IN std_logic;
		RGBIN : IN std_logic_vector(7 downto 0);    
		Cnt25 : INOUT std_logic_vector(1 downto 0);
		CntV : INOUT std_logic_vector(9 downto 0);
		CntH : INOUT std_logic_vector(9 downto 0);      
		RGB : OUT std_logic_vector(7 downto 0);
		HS : OUT std_logic;
		VS : OUT std_logic
		);
	END COMPONENT;
	
	signal Cnt25 : std_logic_vector (1 downto 0);
	signal CntH : std_logic_vector (9 downto 0);
	signal CntV : std_logic_vector (9 downto 0);
	signal RGBIN : std_logic_vector (7 downto 0);

	COMPONENT KURSOR
	PORT(
		Clk : IN std_logic;
		Reset : IN std_logic;
		KursorH : OUT std_logic_vector(6 downto 0);
		KursorV : OUT std_logic_vector(5 downto 0);
		CntH : IN std_logic_vector(6 downto 0);
		CntV : IN std_logic_vector(5 downto 0);
		KbD : IN std_logic_vector(7 downto 0);
		KbWE : IN std_logic;          
		VRAM_WR_EN : IN std_logic;          
		VRAM_WR_DEL : OUT std_logic;          
		Kurs : OUT std_logic
		);
	END COMPONENT;
	
	signal Kurs : std_logic;
	signal VRAM_WR_DEL : std_logic;
	signal KursorH : std_logic_vector(6 downto 0);
	signal KursorV : std_logic_vector(5 downto 0);

	COMPONENT KEYBOARD
	PORT(
		Clk : IN std_logic;
		Reset : IN std_logic;    
		PS2_D : INOUT std_logic;
		PS2_C : INOUT std_logic;      
		KbWE : OUT std_logic;
		VRAM_WR_EN : OUT std_logic;
		VRAM_WR_DEL : IN std_logic;
		KbD : OUT std_logic_vector(7 downto 0)
		);
	END COMPONENT;
	
	signal KbWE : std_logic;
	signal VRAM_WR_EN : std_logic;
	signal KbD : std_logic_vector(7 downto 0);

	COMPONENT CG_RAM
	PORT(
		Clk : IN std_logic;
		CntH : IN std_logic_vector(9 downto 0);
		CntV : IN std_logic_vector(8 downto 0);
		KbWE : IN std_logic;
		KbD : IN std_logic_vector(7 downto 0);
		CG_DO : OUT std_logic_vector(7 downto 0);
		KursorH : IN std_logic_vector(6 downto 0);
		KursorV : IN std_logic_vector(5 downto 0);          
		CG : OUT std_logic
		);
	END COMPONENT;
	
	signal CG : std_logic;

begin

	RGBIN <= "00111000" when ((Kurs = '1') or (CG = '1')) else "00000000";

	Inst_VGA640X480: VGA640X480 PORT MAP(
		Clk => Clk,
		Cnt25 => Cnt25,
		CntV => CntV,
		CntH => CntH,
		RGBIN => RGBIN,
		RGB => RGB,
		HS => HS,
		VS => VS
	);

	Inst_KURSOR: KURSOR PORT MAP(
		Kurs => Kurs,
		Clk => Clk,
		Reset => Reset,
		KursorH => KursorH,
		KursorV => KursorV,
		CntH => CntH(9 downto 3),
		CntV => CntV(8 downto 3),
		KbD => KbD,
		VRAM_WR_EN => VRAM_WR_EN,
		VRAM_WR_DEL => VRAM_WR_DEL,
		KbWE => KbWE
	);
	
	Inst_KEYBOARD: KEYBOARD PORT MAP(
		Clk => Clk,
		Reset => Reset,
		PS2_D => PS21_D,
		PS2_C => PS21_C,
		KbWE => KbWE,
		VRAM_WR_EN => VRAM_WR_EN,
		VRAM_WR_DEL => VRAM_WR_DEL,
		KbD => KbD
	);
	
	Inst_CG_RAM: CG_RAM PORT MAP(
		Clk => Clk,
		CntH => CntH,
		CntV => CntV(8 downto 0),
		CG => CG,
		CG_DO => open,
		KbWE => VRAM_WR_EN,
		KbD => KbD,
		KursorH => KursorH,
		KursorV => KursorV
	);


end Behavioral;

Moduł VGA:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity VGA640X480 is
    Port ( Clk : in  STD_LOGIC; --100MHz
           Cnt25 : inout  STD_LOGIC_VECTOR (1 downto 0) := "00";
           CntV : inout  STD_LOGIC_VECTOR (9 downto 0) := "0000000000";
           CntH : inout  STD_LOGIC_VECTOR (9 downto 0) := "0000000000";
           RGBIN : in  STD_LOGIC_VECTOR (7 downto 0);
           RGB : out  STD_LOGIC_VECTOR (7 downto 0);
           HS : out  STD_LOGIC;
           VS : out  STD_LOGIC
			  );
end VGA640X480;

architecture Behavioral of VGA640X480 is
	
	signal BL : std_logic;

begin

	process(Clk)
	begin
		if Clk'event and Clk = '0' then
			Cnt25 <= Cnt25 + 1;					--dzielnik częstotliwości
			if Cnt25 = "11" then
				if CntH = 799 then				--licznik pixeli
					CntH <= (others => '0');
				else
					CntH <= CntH + 1;
				end if;
				if CntH = 799 then
					if CntV = 524 then			--licznik linji
						CntV <= (others => '0');
					else
						CntV <= CntV + 1;
					end if;
				end if;
			end if;
		end if;
	end process;
	
	BL <= '1' when ((CntH < 640) and (CntV < 525)) else '0'; --dekoder obszaru obrazy wyświetlanego (aktywny = 1)
	HS <= '0' when ((CntH > 655) and (CntH < 753)) else '1'; --dekoder synchronizacji poziomej (aktywny = 0)
	VS <= '0' when ((CntV > 488) and (CntV < 491)) else '1'; --dekoder synchronizacji pionowej (aktywny = 0)
	RGB <= RGBIN when BL = '1' else (others => '0');         --wyświetlanie obrazu na monitorze (aktywny = 1)

end Behavioral;

Moduł kursor:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity KURSOR is
    Port ( Kurs : out  STD_LOGIC;
           Clk : in  STD_LOGIC;
           Reset : in  STD_LOGIC;
           KursorH : out  STD_LOGIC_VECTOR (6 downto 0);
           KursorV : out  STD_LOGIC_VECTOR (5 downto 0);
           CntH : in  STD_LOGIC_VECTOR (6 downto 0);
           CntV : in  STD_LOGIC_VECTOR (5 downto 0);
           KbD : in  STD_LOGIC_VECTOR (7 downto 0);
           VRAM_WR_EN : in  STD_LOGIC;
           VRAM_WR_DEL : out  STD_LOGIC;
           KbWE : in  STD_LOGIC
			  );
end KURSOR;

architecture Behavioral of KURSOR is

	signal Cnt : std_logic_vector (5 downto 0);
	signal RegH : std_logic_vector (6 downto 0);
	signal RegH1 : std_logic_vector (6 downto 0);
	signal RegV : std_logic_vector (5 downto 0);
	signal RegV1 : std_logic_vector (5 downto 0);
	signal Sel : std_logic_vector (2 downto 0);

begin

	Kurs <= '1' when ((CntH = RegH) and (CntV = RegV) and (Cnt(5) = '0')) else '0';
	KursorH <= RegH1 when ((KbD = X"66") and (KbWE = '1')) else RegH;
	RegH1 <= "1001111" when ((KbD = X"66") and (KbWE = '1') and (RegH = 0)) else (RegH - 1);
	KursorV <= RegV1 when ((KbD = X"66") and (KbWE = '1')) else RegV;
	RegV1 <= (RegV - 1) when ((KbD = X"66") and (KbWE = '1') and (RegH = 0)) else RegV;
	
	process(CntV(5))
	begin
		if CntV(5)'event and CntV(5) = '0' then
			Cnt <= Cnt + 1;
		end if;
	end process;
			
	process(KbD, KbWE, Clk, Reset, VRAM_WR_EN)
	begin
		if Reset = '0' then
			VRAM_WR_DEL <= '0';
			RegH <= (others => '0');
			RegV <= (others => '0');
			Sel <= (others => '0');
		else
			if Clk'event and Clk = '0' then
				if KbWE = '1' then
					if KbD = X"75" then 	 --U_ARROW
						Sel <= "001";
					elsif KbD = X"72" then  --D_ARROW
						Sel <= "010";
					elsif KbD = X"74" then  --R_ARROW
						Sel <= "011";
					elsif KbD = X"6B" then  --L_ARROW
						Sel <= "100";
					elsif KbD = X"66" then  --BKSP
						Sel <= "100";
					elsif KbD = X"5A" then  --ENTER
						Sel <= "101";
					elsif KbD = X"0D" then  --TAB
						Sel <= "110";
					elsif KbD = X"00" then  --DEL
						RegH <= (others => '0');
						RegV <= (others => '0');
						VRAM_WR_DEL <= '1';
						Sel <= "111";
					elsif VRAM_WR_EN = '1' then
						Sel <= "011";
					end if;
				else
					if Sel = "001" then
						if RegV = 0 then
							null;
							Sel <= "000";
						else
							RegV <= RegV - 1;
							Sel <= "000";
						end if;
					elsif Sel = "010" then
						if RegV = 59 then
							null;
							Sel <= "000";
						else
							RegV <= RegV + 1;
							Sel <= "000";
						end if;
					elsif Sel = "100" then
						if RegH = 0 then
							RegH <= "1001111";
							Sel <= "001";
						else
							RegH <= RegH - 1;
							Sel <= "000";
						end if;
					elsif Sel = "011" then
						if RegH = 79 then
							RegH <= "0000000";
							Sel <= "010";
						else
							RegH <= RegH + 1;
							Sel <= "000";
						end if;
					elsif Sel = "101" then
							RegH <= "0000000";
							Sel <= "010";
					elsif Sel = "110" then
						if RegH(6 downto 2) = "10011" then
							RegH <= "0000000";
							Sel <= "010";
						else
							RegH(6 downto 2) <= RegH(6 downto 2) + 1;
							RegH(1 downto 0) <= "00";
							Sel <= "000";
						end if;
					elsif Sel = "111" then
						if ((RegH = "1111111") and (RegV = "111111")) then
							VRAM_WR_DEL <= '0';
							RegH <= "0000000";
							RegV <= "000000";
							Sel <= "000";
						else
							RegH <= RegH + 1;
							if RegH = "1111111" then
								RegV <= RegV + 1;
							end if;
						end if;
					end if;
				end if;
			end if;
		end if;
	end process;


end Behavioral;

Moduł klawiatura:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity KEYBOARD is
    Port ( Clk : in  STD_LOGIC;
		   Reset : in  STD_LOGIC;
           PS2_D : inout  STD_LOGIC;
           PS2_C : inout  STD_LOGIC;
           VRAM_WR_EN : out  STD_LOGIC;
           VRAM_WR_DEL : in  STD_LOGIC;
           KbWE : inout  STD_LOGIC;
           KbD : out  STD_LOGIC_VECTOR (7 downto 0)
			  );
end KEYBOARD;

architecture Behavioral of KEYBOARD is

	signal D : std_logic_vector (9 downto 0) ;
	signal Din : std_logic_vector (7 downto 0) ;
	signal Del : std_logic_vector (7 downto 0) ;
	signal Din1 : std_logic_vector (7 downto 0) ;
	signal Din2 : std_logic_vector (7 downto 0) ;
	signal Cnt : std_logic_vector (7 downto 0) ;
	signal Cnt1 : std_logic_vector (13 downto 0) ;
	signal Clk1 : std_logic;
	
	signal PS2_Cin : std_logic;
	signal PS2_Cout : std_logic;
	signal PS2_Dout : std_logic;

	signal Brake : std_logic;
	signal Caps : std_logic;
	signal Caps_EN : std_logic;
	signal Num : std_logic;
	signal Scroll : std_logic;
	signal Ack : std_logic;
	signal Shift_L : std_logic;
	signal Shift_R : std_logic;
	signal Shift : std_logic;
	signal Shift_EN : std_logic;
	signal Space_EN : std_logic;
	signal Alt : std_logic;
	signal Alt_EN : std_logic;
	signal ParityGen : std_logic_vector (6 downto 0);
	signal Parity : std_logic;
	
   type PS2State_type is (idle, datain, sel, we, we1, rts, rts1, rts2, dataout); 
   signal PS2State : PS2State_type;


begin
		
		process(Clk, PS2_C)								--oczekiwanie na stabilny sygnał zegarowy z klawiatury
		begin
			if PS2_C = '1' then
				Cnt <= (others => '0');
				PS2_Cin <= '1';
			else
				if Clk'event and Clk = '0' then
					if PS2_C = '0' then
						if Cnt = "11111111" then
							PS2_Cin <= '0';
						else
							Cnt <= Cnt + 1;
						end if;
					end if;
				end if;
			end if;
		end process;
		
		with PS2State select
			Clk1 <= Clk when rts,
					  Clk when rts1,
					  Clk when sel,
					  Clk when we,
					  Clk when we1,
					  PS2_Cin when others;
		
		with PS2State select
	  PS2_Dout <= '0' when rts1,
					  '0' when rts2,
					  D(0) when dataout,
					  '1' when others;
		
		with PS2State select
	  PS2_Cout <= '0' when rts,
					  '0' when rts1,
					  '1' when others;
		
		process(Clk1, Reset, PS2State, PS2_D)		--wysłanie, odbieranie danych z klawiatury w maszynie stanów
		begin
			if Reset = '0' then
				D <= "1000000000";
				Din <= "00000000";
				KbD <= "00000000";
				KbWE <= '0';
				Shift_L <= '0';
				Shift_R <= '0';
				Cnt1 <= (others => '0');
				PS2State <= idle;
			else
				if Clk1'event and Clk1 = '0' then
					case PS2State is
					
					when idle =>
								D <= "1000000000";
								PS2State <= datain;
					
					when datain =>
							if D(0) = '1' then
								D <= "1000000000";
								Din <= D(8 downto 1);
								PS2State <= sel;
							else
								D <= PS2_D & D(9 downto 1);
							end if;
					
					when sel =>
							if Din = X"F0" then
								Brake <= '1';
								PS2State <= idle;
						elsif ((Din = X"58") and (Brake <= '0') and (Ack = '0')) then
								Din <= X"ED";
								Caps <= not Caps;
								PS2State <= rts;
						elsif ((Din = X"77") and (Brake <= '0') and (Ack = '0')) then
								Din <= X"ED";
								Num <= not Num;
								PS2State <= rts;
						elsif ((Din = X"7E") and (Brake <= '0') and (Ack = '0')) then
								Din <= X"ED";
								Scroll <= not Scroll;
								PS2State <= rts;
						elsif ((Din = X"FA") and (Brake = '0') and (Ack = '0')) then
								Din <= "00000" & Caps & Num & Scroll;
								Ack <= '1';
								PS2State <= rts;
						elsif ((Din = X"12") and (Brake = '0')) then
								Shift_L <= '1';
								PS2State <= idle;
						elsif ((Din = X"12") and (Brake = '1')) then
								Brake <= '0';
								Shift_L <= '0';
								PS2State <= idle;
						elsif ((Din = X"59") and (Brake = '0')) then
								Shift_R <= '1';
								PS2State <= idle;
						elsif ((Din = X"59") and (Brake = '1')) then
								Brake <= '0';
								Shift_R <= '0';
								PS2State <= idle;
						elsif ((Din = X"11") and (Brake = '0')) then
								Alt <= '1';
								PS2State <= idle;
						elsif ((Din = X"11") and (Brake = '1')) then
								Brake <= '0';
								Alt <= '0';
								PS2State <= idle;
						elsif Brake = '1' then
								Brake <= '0';
								PS2State <= idle;
						elsif Ack = '1' then
								Ack <= '0';
								PS2State <= idle;
							else
								KbD <= (Din2 + (Shift & "0000000")) and Del;
								PS2State <= we;
							end if;
					
					when we =>
								KbWE <= '1';
								PS2State <= we1;
					
					when we1 =>
								KbWE <= '0';
								PS2State <= idle;
					
					when rts =>	 --reqest to send
							if Cnt1 = "11111100000000" then
								Cnt1 <= (others => '0');
								PS2State <= rts1;
							else
								Cnt1 <= Cnt1 + 1;
							end if;
					
					when rts1 =>	 --reqest to send
							if Cnt1 = "00000100000000" then
								Cnt1 <= (others => '0');
								PS2State <= rts2;
							else
								Cnt1 <= Cnt1 + 1;
							end if;
							
					when rts2 =>	 --reqest to send
								D <= '1' & Parity & Din;
								PS2State <= dataout;
							
					when dataout => --przesył danych do klawiatury
							if D = "0000000001" then
								PS2State <= idle;
							else
								D <= '0' & D(9 downto 1);
							end if;
							
					end case;
				end if;
			end if;
		end process;
		
		ParityGen(0) <= Din(0) xor Din(1);			--generator parztstości
		ParityGen(1) <= Din(2) xor Din(3);
		ParityGen(2) <= Din(4) xor Din(5);
		ParityGen(3) <= Din(6) xor Din(7);
		ParityGen(4) <= ParityGen(0) xor ParityGen(1);
		ParityGen(5) <= ParityGen(2) xor ParityGen(3);
		ParityGen(6) <= ParityGen(4) xor ParityGen(5);
		Parity <= not ParityGen(6);
		
		Shift <= (((Shift_L or Shift_R) and (Shift_EN or Caps_EN)) or (Caps and Caps_EN));
		VRAM_WR_EN <= (KbWE and (Caps_EN or Shift_EN or Space_EN)) or VRAM_WR_DEL;
		Del <= "00000000" when Din = X"71" else "11111111";
		
		with Din select
			Caps_EN <= '1' when X"15", --Q
						  '1' when X"1D", --W
						  '1' when X"24", --E
						  '1' when X"2D", --R
						  '1' when X"2C", --T
						  '1' when X"35", --Y
						  '1' when X"3C", --U
						  '1' when X"43", --I
						  '1' when X"44", --O
						  '1' when X"4D", --P
						  '1' when X"1C", --A
						  '1' when X"1B", --S
						  '1' when X"23", --D
						  '1' when X"2B", --F
						  '1' when X"34", --G
						  '1' when X"33", --H
						  '1' when X"3B", --J
						  '1' when X"42", --K
						  '1' when X"4B", --L
						  '1' when X"1A", --Z
						  '1' when X"22", --X
						  '1' when X"21", --C
						  '1' when X"2A", --V
						  '1' when X"32", --B
						  '1' when X"31", --N
						  '1' when X"3A", --M
						  '0' when others; --
		
		with Din select
		  Shift_EN <= '1' when X"0E", --`
						  '1' when X"16", --1
						  '1' when X"1E", --2
						  '1' when X"26", --3
						  '1' when X"25", --4
						  '1' when X"2E", --5
						  '1' when X"36", --6
						  '1' when X"3D", --7
						  '1' when X"3E", --8
						  '1' when X"46", --9
						  '1' when X"45", --0
						  '1' when X"4E", ---
						  '1' when X"55", --=
						  '1' when X"54", --[
						  '1' when X"5B", --]
						  '1' when X"5D", --\
						  '1' when X"4C", --;
						  '1' when X"52", --'
						  '1' when X"41", --,
						  '1' when X"49", --.
						  '1' when X"4A", --/
						  '0' when others; --
		
		with Din select
		  Space_EN <= '1' when X"29", --SPACE
						  '1' when X"66", --PKSP
						  '0' when others; --
						  
		Din2 <= Din1 when ((Alt_EN = '1') and (Alt = '1')) else Din;
		
		with Din select
		    Alt_EN <= '1' when X"1C", --A
						  '1' when X"21", --C
						  '1' when X"24", --E
						  '1' when X"4B", --L
						  '1' when X"31", --N
						  '1' when X"44", --O
						  '1' when X"1B", --S
						  '1' when X"1A", --Z
						  '1' when X"22", --X
						  '0' when others; --
		
		with Din select
		      Din1 <= X"0C" when X"1C", --A
						  X"01" when X"21", --C
						  X"04" when X"24", --E
						  X"03" when X"4B", --L
						  X"07" when X"31", --N
						  X"05" when X"44", --O
						  X"0B" when X"1B", --S
						  X"0A" when X"1A", --Z
						  X"02" when X"22", --X
						  Din when others; --
		
		PS2_C <= 'Z' when PS2_Cout = '1' else '0';	--zmiana portów komunikacyjnych klawiatury z wejściowych na wyjściowe
		PS2_D <= 'Z' when PS2_Dout = '1' else '0';

end Behavioral;

Moduł sprzęgający pamięć VRAM i CGROM:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity CG_RAM is
    Port ( Clk : in  STD_LOGIC;
           CntH : in  STD_LOGIC_VECTOR (9 downto 0);
           CntV : in  STD_LOGIC_VECTOR (8 downto 0);
           CG : out  STD_LOGIC;
           KbWE : in  STD_LOGIC;
           KbD : in  STD_LOGIC_VECTOR (7 downto 0);
           CG_DO : out  STD_LOGIC_VECTOR (7 downto 0);
           KursorH : in  STD_LOGIC_VECTOR (6 downto 0);
           KursorV : in  STD_LOGIC_VECTOR (5 downto 0));
end CG_RAM;

architecture Behavioral of CG_RAM is

	COMPONENT ROM_8x8_256
	PORT(
		ROM_ADDR : IN std_logic_vector(10 downto 0);
		ROM_DI : IN std_logic_vector(7 downto 0);
		ROM_WE : IN std_logic;
		Clk : IN std_logic;          
		ROM_DO : OUT std_logic_vector(7 downto 0)
		);
	END COMPONENT;
	
	signal ROM_DO : std_logic_vector (7 downto 0);
	signal ROM_ADDR : std_logic_vector (10 downto 0);

	COMPONENT RAM_2048x8
	PORT(
		Clk : IN std_logic;
		WE : IN std_logic;
		ADDR_WE : IN std_logic_vector(10 downto 0);
		ADDR_RD : IN std_logic_vector(10 downto 0);
		DI : IN std_logic_vector(7 downto 0);          
		DO : OUT std_logic_vector(7 downto 0)
		);
	END COMPONENT;

	signal ADDR_WE : std_logic_vector (10 downto 0);
	signal ADDR_RD : std_logic_vector (10 downto 0);
	signal RAM_DO : std_logic_vector (7 downto 0);
	signal RAM_DO1 : std_logic_vector (7 downto 0);
	signal RAM_DO2 : std_logic_vector (7 downto 0);
	signal RAM_DO3 : std_logic_vector (7 downto 0);
	signal WE1 : std_logic;
	signal WE2 : std_logic;
	signal WE3 : std_logic;
begin

	with CntH(2 downto 0) select
		CG <= ROM_DO(7) when "000",
				ROM_DO(6) when "001",
				ROM_DO(5) when "010",
				ROM_DO(4) when "011",
				ROM_DO(3) when "100",
				ROM_DO(2) when "101",
				ROM_DO(1) when "110",
				ROM_DO(0) when others;
				
	ROM_ADDR <= (RAM_DO & CntV(2 downto 0));

	Inst_ROM_8x8_256: ROM_8x8_256 PORT MAP(
		ROM_ADDR => ROM_ADDR,
		ROM_DO => ROM_DO,
		ROM_DI => "00000000",
		ROM_WE => '0',
		Clk => Clk
	);
	
	WE1 <= '1' when ((KursorH(6 downto 5) = "00") and (KbWE = '1')) else '0';
	WE2 <= '1' when ((KursorH(6 downto 5) = "01") and (KbWE = '1')) else '0';
	WE3 <= '1' when ((KursorH(6 downto 5) = "10") and (KbWE = '1')) else '0';
	
	with CntH(9 downto 8) select
		RAM_DO <= RAM_DO1 when "00",
					 RAM_DO2 when "01",
					 RAM_DO3 when others;
					 
	ADDR_WE <= (KursorV(5 downto 0) & KursorH(4 downto 0));
	ADDR_RD <= (CntV(8 downto 3) & CntH(7 downto 3));
	CG_DO <= RAM_DO;
	
	Inst1_RAM_2048x8: RAM_2048x8 PORT MAP(
		Clk => Clk,
		WE => WE1,
		ADDR_WE => ADDR_WE,
		ADDR_RD => ADDR_RD,
		DI => KbD,
		DO => RAM_DO1
	);

	Inst2_RAM_2048x8: RAM_2048x8 PORT MAP(
		Clk => Clk,
		WE => WE2,
		ADDR_WE => ADDR_WE,
		ADDR_RD => ADDR_RD,
		DI => KbD,
		DO => RAM_DO2
	);

	Inst3_RAM_2048x8: RAM_2048x8 PORT MAP(
		Clk => Clk,
		WE => WE3,
		ADDR_WE => ADDR_WE,
		ADDR_RD => ADDR_RD,
		DI => KbD,
		DO => RAM_DO3
	);


end Behavioral;

Moduł CGROM z zapisanymi informacjami o znakach:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ROM_8x8_256 is
    Port ( ROM_ADDR : in  STD_LOGIC_VECTOR (10 downto 0);
           ROM_DO : out  STD_LOGIC_VECTOR (7 downto 0);
           ROM_DI : in  STD_LOGIC_VECTOR (7 downto 0);
           ROM_WE : in  STD_LOGIC;
           Clk : in  STD_LOGIC
			 );
end ROM_8x8_256;

architecture Behavioral of ROM_8x8_256 is
----------------------------------------------------------------------------
    type rom_type is array (0 to 2047) of std_logic_vector (7 downto 0);                 
  signal ROM : rom_type:= (X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--01
									X"04", X"08", X"1C", X"20", X"20", X"22", X"1C", X"00", --ć
									--02
									X"04", X"08", X"3E", X"04", X"08", X"10", X"3E", X"00", --ź
									--03
									X"18", X"08", X"0E", X"38", X"08", X"08", X"1E", X"00", --ł
									--04
									X"00", X"00", X"1C", X"22", X"3E", X"20", X"1C", X"04", --ę
									--05
									X"04", X"08", X"1C", X"22", X"22", X"22", X"1C", X"00", --ó
									--06
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--07
									X"04", X"08", X"2C", X"32", X"22", X"22", X"22", X"00", --ń
									--08
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--09
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--0A
									X"08", X"00", X"3E", X"04", X"08", X"10", X"3E", X"00", --ż
									--0B
									X"04", X"08", X"1E", X"20", X"1C", X"02", X"3C", X"00", --ś
									--0C
									X"00", X"00", X"1C", X"02", X"1E", X"22", X"1E", X"04", --ą
									--0D
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--0E
									X"10", X"08", X"04", X"00", X"00", X"00", X"00", X"00", -- `
									--0F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--10
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--11
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--12
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--13
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--14
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--15
					            X"00", X"00", X"1A", X"26", X"22", X"1E", X"02", X"02", --q
									--16
									X"08", X"18", X"08", X"08", X"08", X"08", X"1C", X"00", --1
									--17
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--18
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--19
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--1A
					            X"00", X"00", X"3E", X"04", X"08", X"10", X"3E", X"00", --z
									--1B
					            X"00", X"00", X"1E", X"20", X"1C", X"02", X"3C", X"00", --s
									--1C
									X"00", X"00", X"1C", X"02", X"1E", X"22", X"1E", X"00", --a
									--1D
					            X"00", X"00", X"22", X"22", X"2A", X"2A", X"14", X"00", --w
									--1E
									X"1C", X"22", X"02", X"04", X"08", X"10", X"3E", X"00", --2
									--1F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--20
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--21
									X"00", X"00", X"1C", X"20", X"20", X"22", X"1C", X"00", --c
									--22
					            X"00", X"00", X"22", X"14", X"08", X"14", X"22", X"00", --x
									--23
									X"02", X"02", X"1A", X"26", X"22", X"22", X"1E", X"00", --d
									--24
									X"00", X"00", X"1C", X"22", X"3E", X"20", X"1C", X"00", --e
									--25
									X"04", X"0C", X"14", X"24", X"3E", X"04", X"04", X"00", --4
									--26
									X"3E", X"04", X"08", X"04", X"02", X"22", X"1C", X"00", --3
									--27
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--28
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--29
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--2A
					            X"00", X"00", X"22", X"22", X"22", X"14", X"08", X"00", --v
									--2B
									X"0C", X"10", X"10", X"38", X"10", X"10", X"10", X"00", --f
									--2C
					            X"10", X"10", X"38", X"10", X"10", X"12", X"0C", X"00", --t
									--2D
					            X"00", X"00", X"2C", X"32", X"20", X"20", X"20", X"00", --r
									--2E
									X"3E", X"20", X"3C", X"02", X"02", X"22", X"1C", X"00", --5
									--2F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--30
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--31
					            X"00", X"00", X"2C", X"32", X"22", X"22", X"22", X"00", --n
									--32
									X"20", X"20", X"2C", X"32", X"22", X"22", X"3C", X"00", --b
									--33
					            X"20", X"20", X"2C", X"32", X"22", X"22", X"22", X"00", --h
									--34
									X"00", X"00", X"1E", X"22", X"22", X"1E", X"02", X"1C", --g
									--35
					            X"00", X"00", X"22", X"22", X"22", X"1E", X"02", X"1C", --y
									--36
									X"0C", X"10", X"20", X"3C", X"22", X"22", X"1C", X"00", --6
									--37
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--38
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--39
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--3A
					            X"00", X"00", X"34", X"2A", X"2A", X"2A", X"2A", X"00", --m
									--3B
					            X"04", X"00", X"0C", X"04", X"04", X"04", X"24", X"18", --j
									--3C
					            X"00", X"00", X"22", X"22", X"22", X"26", X"1A", X"00", --u
									--3D
									X"3E", X"22", X"04", X"08", X"10", X"10", X"10", X"00", --7
									--3E
									X"1C", X"22", X"22", X"1C", X"22", X"22", X"1C", X"00", --8
									--3F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--40
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--41
									X"00", X"00", X"00", X"00", X"18", X"18", X"08", X"10", -- ,
									--42
					            X"20", X"20", X"24", X"28", X"30", X"28", X"24", X"00", --k
									--43
					            X"08", X"00", X"18", X"08", X"08", X"08", X"1C", X"00", --i
									--44
					            X"00", X"00", X"1C", X"22", X"22", X"22", X"1C", X"00", --o
									--45
									X"1C", X"22", X"26", X"2A", X"32", X"22", X"1C", X"00", --0
									--46
									X"1C", X"22", X"22", X"1E", X"02", X"22", X"1C", X"00", --9
									--47
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--48
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--49
									X"00", X"00", X"00", X"00", X"00", X"18", X"18", X"00", -- .
									--4A
									X"00", X"02", X"04", X"08", X"10", X"20", X"00", X"00", -- /
									--4B
					            X"18", X"08", X"08", X"08", X"08", X"08", X"1C", X"00", --l
									--4C
									X"00", X"00", X"18", X"18", X"00", X"18", X"08", X"10", -- ;
									--4D
					            X"00", X"00", X"3C", X"22", X"22", X"3C", X"20", X"20", --p
									--4E
									X"00", X"00", X"00", X"3E", X"00", X"00", X"00", X"00", -- -
									--4F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--50
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--51
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--52
									X"18", X"08", X"08", X"00", X"00", X"00", X"00", X"00", -- '
									--53
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--54
									X"1C", X"10", X"10", X"10", X"10", X"10", X"1C", X"00", -- [
									--55
									X"00", X"00", X"3E", X"00", X"3E", X"00", X"00", X"00", -- =
									--56
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--57
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--58
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--59
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--5A
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--5B
									X"1C", X"04", X"04", X"04", X"04", X"04", X"1C", X"00", -- ]
									--5C
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--5D
									X"00", X"20", X"10", X"08", X"04", X"02", X"00", X"00", -- \
									--5E
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--5F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--60
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--61
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--62
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--63
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--64
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--65
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--66
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--67
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--68
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--69
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6A
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6B
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6C
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6D
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6E
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--6F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--70
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--71
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--72
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--73
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--74
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--75
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--76
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--77
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--78
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--79
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7A
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7B
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7C
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7D
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7E
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--7F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--80
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--81
									X"04", X"1C", X"22", X"20", X"20", X"22", X"1C", X"00", --Ć
									--82
									X"04", X"3E", X"04", X"08", X"10", X"20", X"3E", X"00", --Ź
									--83
									X"20", X"20", X"2C", X"30", X"20", X"20", X"3E", X"00", --Ł
									--84
									X"3E", X"20", X"20", X"3C", X"20", X"20", X"3E", X"02", --Ę
									--85
									X"04", X"1C", X"22", X"22", X"22", X"22", X"1C", X"00", --Ó
									--86
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--87
									X"04", X"2A", X"32", X"32", X"2A", X"26", X"22", X"00", --Ń
									--88
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--89
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--8A
									X"08", X"3E", X"04", X"08", X"10", X"20", X"3E", X"00", --Ż
									--8B
									X"04", X"1E", X"20", X"1C", X"02", X"02", X"3C", X"00", --Ś
									--8C
									X"1C", X"22", X"22", X"22", X"3E", X"22", X"24", X"02", --Ą
									--8D
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--8E
									X"00", X"00", X"10", X"2A", X"04", X"00", X"00", X"00", -- ~~
									--8F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--90
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--91
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--92
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--93
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--94
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--95
									X"1C", X"22", X"22", X"22", X"2A", X"24", X"1A", X"00", --Q
									--96
									X"08", X"08", X"08", X"08", X"08", X"00", X"08", X"00", --!
									--97
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--98
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--99
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--9A
									X"3E", X"02", X"04", X"08", X"10", X"20", X"3E", X"00", --Z
									--9B
									X"1E", X"20", X"20", X"1C", X"02", X"02", X"3C", X"00", --S
									--9C
									X"1C", X"22", X"22", X"22", X"3E", X"22", X"22", X"00", --A
									--9D
									X"22", X"22", X"22", X"2A", X"2A", X"2A", X"14", X"00", --W
									--9E
									X"1C", X"22", X"02", X"1A", X"2A", X"2A", X"1C", X"00", --@
									--9F
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--A0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--A1
									X"1C", X"22", X"20", X"20", X"20", X"22", X"1C", X"00", --C
									--A2
									X"22", X"22", X"14", X"08", X"14", X"22", X"22", X"00", --X
									--A3
									X"38", X"24", X"22", X"22", X"22", X"24", X"38", X"00", --D
									--A4
									X"3E", X"20", X"20", X"3C", X"20", X"20", X"3E", X"00", --E
									--A5
									X"08", X"1E", X"28", X"1C", X"0A", X"3C", X"08", X"00", --$
									--A6
									X"14", X"14", X"3E", X"14", X"3E", X"14", X"14", X"00", --#
									--A7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--A8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--A9
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--AA
									X"22", X"22", X"22", X"22", X"22", X"14", X"08", X"00", --V
									--AB
									X"3E", X"20", X"20", X"3C", X"20", X"20", X"20", X"00", --F
									--AC
									X"3E", X"08", X"08", X"08", X"08", X"08", X"08", X"00", --T
									--AD
									X"3C", X"22", X"22", X"3E", X"28", X"24", X"22", X"00", --R
									--AE
									X"30", X"32", X"04", X"08", X"10", X"26", X"05", X"00", --%
									--AF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--B0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--B1
									X"22", X"22", X"32", X"2A", X"26", X"22", X"22", X"00", --N
									--B2
									X"3C", X"22", X"22", X"3C", X"22", X"22", X"3C", X"00", --B
									--B3
									X"22", X"22", X"22", X"3E", X"22", X"22", X"22", X"00", --H
									--B4
									X"1C", X"22", X"20", X"2E", X"22", X"22", X"1E", X"00", --G
									--B5
									X"22", X"22", X"22", X"14", X"08", X"08", X"08", X"00", --Y
									--B6
									X"08", X"14", X"22", X"00", X"00", X"00", X"00", X"00", --^
									--B7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--B8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--B9
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--BA
									X"22", X"36", X"2A", X"22", X"22", X"22", X"22", X"00", --M
									--BB
									X"1C", X"04", X"04", X"04", X"04", X"24", X"18", X"00", --J 
									--BC
									X"22", X"22", X"22", X"22", X"22", X"22", X"1C", X"00", --U
									--BD
									X"18", X"24", X"28", X"10", X"2A", X"24", X"1A", X"00", --&
									--BE
									X"00", X"2A", X"1C", X"3E", X"1C", X"2A", X"00", X"00", --*
									--BF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--C0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--C1
									X"04", X"08", X"10", X"20", X"10", X"08", X"04", X"00", -- <
									--C2
									X"22", X"24", X"28", X"30", X"28", X"24", X"22", X"00", --K
									--C3
									X"1C", X"08", X"08", X"08", X"08", X"08", X"1C", X"00", --I
									--C4
									X"1C", X"22", X"22", X"22", X"22", X"22", X"1C", X"00", --O
									--C5
									X"10", X"08", X"04", X"04", X"04", X"08", X"10", X"00", --)
									--C6
									X"04", X"08", X"10", X"10", X"10", X"08", X"04", X"00", --(
									--C7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--C8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--C9
									X"10", X"08", X"04", X"02", X"04", X"08", X"10", X"00", -- >
									--CA
									X"1C", X"22", X"02", X"04", X"08", X"00", X"08", X"00", -- ?
									--CB
									X"20", X"20", X"20", X"20", X"20", X"20", X"3E", X"00", --L
									--CC
									X"00", X"00", X"18", X"18", X"00", X"18", X"18", X"00", -- :
									--CD
									X"3C", X"22", X"22", X"3C", X"20", X"20", X"20", X"00", --P
									--CE
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"3E", -- _
									--CF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--D0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D1
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D2
									X"14", X"14", X"14", X"00", X"00", X"00", X"00", X"00", -- "
									--D3
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D4
									X"04", X"08", X"08", X"10", X"08", X"08", X"04", X"00", -- {
									--D5
									X"00", X"08", X"08", X"3E", X"08", X"08", X"00", X"00", -- +
									--D6
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--D9
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--DA
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--DB
									X"10", X"08", X"08", X"04", X"08", X"08", X"10", X"00", -- }
									--DC
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--DD
									X"08", X"08", X"08", X"08", X"08", X"08", X"08", X"00", -- |
									--DE
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--DF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--E0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E1
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E2
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E3
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E4
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E5
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E6
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--E9
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--EA
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--EB
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--EC
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--ED
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--EE
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--EF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									
									--F0
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F1
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F2
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F3
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F4
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F5
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F6
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F7
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F8
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--F9
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FA
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FB
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FC
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FD
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FE
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00",
									--FF
									X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00"
									  );                        

----------------------------------------------------------------------------         

begin

----------------------------------------------------------------------------
	 
	process(Clk)
	begin
		if Clk'event and Clk = '0' then
			if ROM_WE = '1' then
				ROM(conv_integer(ROM_ADDR)) <= ROM_DI;
			else
				ROM_DO <= ROM(conv_integer(ROM_ADDR));
			end if;
		end if;
	end process;
					


end Behavioral;

Moduł pamięci VRAM:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity RAM_2048x8 is
    port (Clk  : in std_logic;
          WE   : in std_logic;
          ADDR_WE : in std_logic_vector(10 downto 0);
          ADDR_RD : in std_logic_vector(10 downto 0);
          DI   : in std_logic_vector(7 downto 0);
          DO   : out std_logic_vector(7 downto 0)
			 );
end RAM_2048x8;

architecture Behavioral of RAM_2048x8 is

    type ram_type is array (2047 downto 0) of std_logic_vector (7 downto 0);
    signal RAM: ram_type;

begin

	
    process (CLK)
    begin
		if CLK'event and CLK = '0' then
			if WE = '1' then
				RAM(conv_integer(ADDR_WE)) <= DI;
			end if;
				DO <= RAM(conv_integer(ADDR_RD)) ;
		end if;
    end process;


end Behavioral;

Plik UCF w puste miejsca po literze 'p' należy wpisać numer portu układu FPGA:

#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments

VCCAUX = 3.3 ;

#--------------------------
#--Clk = 100MHz
NET "Clk"  LOC = "p  "  ;
NET "Reset"  LOC = "p  "  ;
#--------------------------
NET "PS21_D"  LOC = "p  "  ;
NET "PS21_C"  LOC = "p  "  ;
#--------------------------
NET "HS"  LOC = "p  "  ;
NET "VS"  LOC = "p  "  ;
#--------------------------
NET "RGB<0>"  LOC = "p  "  ;
NET "RGB<1>"  LOC = "p  "  ;
NET "RGB<2>"  LOC = "p  "  ;
NET "RGB<3>"  LOC = "p  "  ;
NET "RGB<4>"  LOC = "p  "  ;
NET "RGB<5>"  LOC = "p  "  ;
NET "RGB<6>"  LOC = "p  "  ;
NET "RGB<7>"  LOC = "p  "  ;
#--------------------------

#PACE: Start of PACE Area Constraints

#PACE: Start of PACE Prohibit Constraints

#PACE: End of Constraints generated by PACE

 

Edytowano przez kroszkanorber
  • Lubię! 2
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.