Since quartus demands many files for compiling a project, all the project files are available for download in a zip file. All the files you'll need to compile & program are there.
Since the software for this project won't fit all on one page I'll only explain the main character rom entity & architecture. If you have any lasting questions about the software just go to the forums and ask!
The Character Generating Rom
Below is the entire code for a generic character generating rom. The character set included is limited to 4k bytes and all of it is used.
------------« Begin Code »------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
LIBRARY lpm;
USE lpm.lpm_components.ALL;
ENTITY Char_ROM IS
PORT( character_address : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
font_row, font_col : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
rom_mux_output : OUT STD_LOGIC);
END Char_ROM;
ARCHITECTURE struct OF Char_ROM IS
SIGNAL rom_data : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL rom_address : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
-- Small 8 by 8 Character Generator ROM for Video Display
-- Each character is eight 8-bits words of pixel data
char_gen_rom: lpm_rom
GENERIC MAP ( lpm_widthad => 9,
lpm_numwords => 512,
lpm_outdata => "UNREGISTERED",
lpm_address_control => "UNREGISTERED",
-- Reads in mif file for character generator font data
lpm_file => "char_set.mif",
lpm_width => 8)
PORT MAP ( address => rom_address, q => rom_data);
rom_address <= character_address & font_row;
-- Mux to pick off correct rom data bit from 8-bit word
-- for on screen character generation
rom_mux_output <= rom_data ( (CONV_INTEGER(NOT font_col(2 DOWNTO 0))));
END struct;
------------« End Code »------------
The Character RomThe LPM library gives us access to creating an lpm_rom. This rom is where our pre-made characters will be stored, specifically in the 'char_set.mif' file. The size of the rom & bit width is all set within this rom creation. Once it is created, we merely give the rom an row & column address and the pixel for that location is output via 'rom_mux_output'. The output 'rom_mux_output' should be directly connected to the Red, Green or Blue off the VGA module depending on which color you want to be output.