--- /dev/null
+-------------------------------------------------------------------------\r
+--\r
+-- Filename: textmode_vga_struct.vhd\r
+-- =========\r
+--\r
+-- Short Description:\r
+-- ==================\r
+-- Structual implementation of the toplevel entity.\r
+--\r
+-------------------------------------------------------------------------\r
+\r
+library ieee;
+use ieee.std_logic_1164.all;
+use work.math_pkg.all;
+use work.textmode_vga_pkg.all;
+use work.textmode_vga_component_pkg.all;
+use work.font_pkg.all;
+
+architecture struct of textmode_vga is
+ signal is_data_line : std_logic;
+ signal is_eol : std_logic;
+ signal char_line_cnt : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
+ signal char_height_pixel : std_logic_vector(log2c(CHAR_HEIGHT) - 1 downto 0);
+ signal rgb : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto 0);
+ signal char_cnt : std_logic_vector(log2c(COLUMN_COUNT) - 1 downto 0);
+
+ signal mem_data, char_data : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE - 1 downto 0);
+ signal mem_col_address : std_logic_vector(log2c(COLUMN_COUNT) - 1 downto 0);
+ signal mem_row_address : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
+ signal mem_scroll_address : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
+ signal mem_wr : std_logic;
+ signal ack_vga, command_req_vga : std_logic;
+ signal command_vga : std_logic_vector(CHAR_SIZE - 1 downto 0);
+ signal command_data_vga : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE - 1 downto 0);
+ signal decoded_char : std_logic_vector(0 to CHAR_WIDTH - 1);
+ signal blink : std_logic;
+ signal background_color, cursor_color : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto 0);
+ signal cursor_state : CURSOR_STATE_TYPE;
+begin
+ textmode_vga_h_sm_inst : textmode_vga_h_sm
+ port map
+ (
+ sys_clk => vga_clk,
+ sys_res_n => vga_res_n,
+ background_color => background_color,
+ char_cnt => char_cnt,
+ char_line_cnt => char_line_cnt,
+ cursor_column => mem_col_address,
+ cursor_line => mem_row_address,
+ cursor_color => cursor_color,
+ cursor_state => cursor_state,
+ decoded_char => decoded_char,
+ color => char_data(RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE - 1 downto CHAR_SIZE),
+ is_data_line => is_data_line,
+ is_eol => is_eol,
+ hsync_n => hsync_n,
+ rgb => rgb,
+ blink => blink
+ );
+ r <= rgb(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto GREEN_BITS + BLUE_BITS);
+ g <= rgb(GREEN_BITS + BLUE_BITS - 1 downto BLUE_BITS);
+ b <= rgb(BLUE_BITS - 1 downto 0);
+
+ textmode_vga_v_sm_inst : textmode_vga_v_sm
+ port map
+ (
+ sys_clk => vga_clk,
+ sys_res_n => vga_res_n,
+ is_data_line => is_data_line,
+ char_line_cnt => char_line_cnt,
+ char_height_pixel => char_height_pixel,
+ is_eol => is_eol,
+ vsync_n => vsync_n
+ );
+
+ video_memory_inst : video_memory
+ generic map
+ (
+ DATA_WIDTH => RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE,
+ ROW_ADDR_WIDTH => log2c(LINE_COUNT),
+ COL_ADDR_WIDTH => log2c(COLUMN_COUNT)
+ )
+ port map
+ (
+ vga_clk => vga_clk,
+ vga_col_address => char_cnt,
+ vga_row_address => char_line_cnt,
+ vga_data => char_data,
+ sm_col_address => mem_col_address,
+ sm_row_address => mem_row_address,
+ sm_data => mem_data,
+ sm_wr => mem_wr,
+ sm_scroll_address => mem_scroll_address
+ );
+
+ font_rom_inst : font_rom
+ port map
+ (
+ vga_clk => vga_clk,
+ char => char_data(CHAR_SIZE - 1 downto 0),
+ char_height_pixel => char_height_pixel,
+ decoded_char => decoded_char
+ );
+
+ console_sm_inst : console_sm
+ port map
+ (
+ vga_clk => vga_clk,
+ vga_res_n => vga_res_n,
+ command => command_vga,
+ command_data => command_data_vga,
+ command_req => command_req_vga,
+ ack => ack_vga,
+ column_address => mem_col_address,
+ row_address => mem_row_address,
+ data => mem_data,
+ wr => mem_wr,
+ scroll_address => mem_scroll_address,
+ background_color => background_color,
+ cursor_color => cursor_color,
+ cursor_state => cursor_state
+ );
+
+ console_sm_sync_inst : console_sm_sync
+ generic map
+ (
+ SYNC_STAGES => SYNC_STAGES
+ )
+ port map
+ (
+ sys_clk => sys_clk,
+ sys_res_n => sys_res_n,
+ command_sys => command,
+ command_data_sys => command_data,
+ free_sys => free,
+ vga_clk => vga_clk,
+ vga_res_n => vga_res_n,
+ command_vga => command_vga,
+ command_data_vga => command_data_vga,
+ command_req_vga => command_req_vga,
+ ack_vga => ack_vga
+ );
+
+ blink_interval_inst : interval
+ generic map
+ (
+ CLK_FREQ => VGA_CLK_FREQ,
+ INTERVAL_TIME_MS => BLINK_INTERVAL_MS
+ )
+ port map
+ (
+ clk => vga_clk,
+ res_n => vga_res_n,
+ active => blink
+ );
+end architecture struct;