FPGA Font IBM default 8x16
/*
* crom.v
*
* This file implements a Character ROM for translating ASCII
* character codes into 8x16 pixel image.
*
* The input to the module is:
* 1) 8 bit ASCII code,
* 2) column select, 0..7, which indicates which of the 8 pixels of the character
* image will be returned
* 3) row select, 0..15, which indicates which of the 16 rows of pixels of the character
* image will be returned
*/
module ascii_rom_pix(
input clk,
input [2:0] col,
input [3:0] row,
input [7:0] ascii,
output pixel);
wire [7:0] row_of_pixels;
wire [4:0] low_ascii;
wire [2:0] hi_ascii;
assign low_ascii = ascii[4:0];
wire [7:0] pixel_row_00_1f;
wire [7:0] pixel_row_20_3f;
wire [7:0] pixel_row_40_5f;
wire [7:0] pixel_row_60_7f;
wire [7:0] pixel_row_80_9f;
wire [7:0] pixel_row_a0_bf;
wire [7:0] pixel_row_c0_df;
wire [7:0] pixel_row_e0_ff;
pc_vga_8x16_00_to_1f U1 (clk, row, low_ascii, pixel_row_00_1f);
pc_vga_8x16_20_to_3f U2 (clk, row, low_ascii, pixel_row_20_3f);
pc_vga_8x16_40_to_5f U3 (clk, row, low_ascii, pixel_row_40_5f);
pc_vga_8x16_60_to_7f U4 (clk, row, low_ascii, pixel_row_60_7f);
pc_vga_8x16_80_to_9f U5 (clk, row, low_ascii, pixel_row_80_9f);
pc_vga_8x16_a0_to_bf U6 (clk, row, low_ascii, pixel_row_a0_bf);
pc_vga_8x16_c0_to_df U7 (clk, row, low_ascii, pixel_row_c0_df);
pc_vga_8x16_e0_to_ff U8 (clk, row, low_ascii, pixel_row_e0_ff);
assign hi_ascii = ascii[7:5];
assign row_of_pixels = (hi_ascii == 0) ? pixel_row_00_1f :
(hi_ascii == 1) ? pixel_row_20_3f :
(hi_ascii == 2) ? pixel_row_40_5f :
(hi_ascii == 3) ? pixel_row_60_7f :
(hi_ascii == 4) ? pixel_row_80_9f :
(hi_ascii == 5) ? pixel_row_a0_bf :
(hi_ascii == 6) ? pixel_row_c0_df :
(hi_ascii == 7) ? pixel_row_e0_ff : 1'bx;
assign pixel = (col == 0) ? row_of_pixels[7] :
(col == 1) ? row_of_pixels[6] :
(col == 2) ? row_of_pixels[5] :
(col == 3) ? row_of_pixels[4] :
(col == 4) ? row_of_pixels[3] :
(col == 5) ? row_of_pixels[2] :
(col == 6) ? row_of_pixels[1] :
(col == 7) ? row_of_pixels[0] : 1'bx;
endmodule // ascii_rom_pix