uart_rx: ein prozessmodell. spart weitere 3 logic elements :P
[hwmod.git] / src / textmode_vga / textmode_vga_struct.vhd
1 -------------------------------------------------------------------------\r
2 --\r
3 -- Filename: textmode_vga_struct.vhd\r
4 -- =========\r
5 --\r
6 -- Short Description:\r
7 -- ==================\r
8 --   Structual implementation of the toplevel entity.\r
9 --\r
10 -------------------------------------------------------------------------\r
11 \r
12 library ieee;
13 use ieee.std_logic_1164.all;
14 use work.math_pkg.all;
15 use work.textmode_vga_pkg.all;
16 use work.textmode_vga_component_pkg.all;
17 use work.font_pkg.all;
18
19 architecture struct of textmode_vga is
20   signal is_data_line : std_logic;
21   signal is_eol : std_logic;
22   signal char_line_cnt : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
23   signal char_height_pixel : std_logic_vector(log2c(CHAR_HEIGHT) - 1 downto 0);
24   signal rgb : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto 0);
25   signal char_cnt : std_logic_vector(log2c(COLUMN_COUNT) - 1 downto 0);
26   
27   signal mem_data, char_data : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE - 1 downto 0);
28   signal mem_col_address : std_logic_vector(log2c(COLUMN_COUNT) - 1 downto 0);
29   signal mem_row_address : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
30   signal mem_scroll_address : std_logic_vector(log2c(LINE_COUNT) - 1 downto 0);
31   signal mem_wr : std_logic;
32   signal ack_vga, command_req_vga : std_logic;
33   signal command_vga : std_logic_vector(CHAR_SIZE - 1 downto 0);
34   signal command_data_vga : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE - 1 downto 0);
35   signal decoded_char : std_logic_vector(0 to CHAR_WIDTH - 1);
36   signal blink : std_logic;
37   signal background_color, cursor_color : std_logic_vector(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto 0);
38   signal cursor_state : CURSOR_STATE_TYPE;
39 begin
40   textmode_vga_h_sm_inst :  textmode_vga_h_sm
41     port map
42     (
43       sys_clk => vga_clk,
44       sys_res_n => vga_res_n,
45       background_color => background_color,
46       char_cnt => char_cnt,
47       char_line_cnt => char_line_cnt,
48       cursor_column => mem_col_address,
49       cursor_line => mem_row_address,
50       cursor_color => cursor_color,
51       cursor_state => cursor_state,
52       decoded_char => decoded_char,
53       color => char_data(RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE - 1 downto CHAR_SIZE),
54       is_data_line => is_data_line,
55       is_eol => is_eol,    
56       hsync_n => hsync_n,
57       rgb => rgb,
58       blink => blink
59     );
60   r <= rgb(RED_BITS + GREEN_BITS + BLUE_BITS - 1 downto GREEN_BITS + BLUE_BITS);
61   g <= rgb(GREEN_BITS + BLUE_BITS - 1 downto BLUE_BITS);
62   b <= rgb(BLUE_BITS - 1 downto 0);
63
64   textmode_vga_v_sm_inst : textmode_vga_v_sm
65     port map
66     (
67       sys_clk => vga_clk,
68       sys_res_n => vga_res_n,
69       is_data_line => is_data_line,
70       char_line_cnt => char_line_cnt,
71       char_height_pixel => char_height_pixel,
72       is_eol => is_eol,
73       vsync_n => vsync_n
74     );
75     
76   video_memory_inst : video_memory
77     generic map
78     (
79       DATA_WIDTH => RED_BITS + GREEN_BITS + BLUE_BITS + CHAR_SIZE,
80       ROW_ADDR_WIDTH => log2c(LINE_COUNT),
81       COL_ADDR_WIDTH => log2c(COLUMN_COUNT)
82     )
83     port map
84     (
85       vga_clk => vga_clk,
86       vga_col_address => char_cnt,
87       vga_row_address => char_line_cnt,
88       vga_data => char_data,      
89       sm_col_address => mem_col_address,
90       sm_row_address => mem_row_address,
91       sm_data => mem_data,
92       sm_wr => mem_wr,
93       sm_scroll_address => mem_scroll_address
94     );
95
96   font_rom_inst : font_rom
97     port map
98     (
99       vga_clk => vga_clk,
100       char => char_data(CHAR_SIZE - 1 downto 0),
101       char_height_pixel => char_height_pixel,
102       decoded_char => decoded_char
103     );
104
105   console_sm_inst : console_sm
106     port map
107     (
108       vga_clk => vga_clk,
109       vga_res_n => vga_res_n,
110       command => command_vga,
111       command_data => command_data_vga,
112       command_req => command_req_vga,
113       ack => ack_vga,
114       column_address => mem_col_address,
115       row_address => mem_row_address,
116       data => mem_data,
117       wr => mem_wr,
118       scroll_address => mem_scroll_address,
119       background_color => background_color,
120       cursor_color => cursor_color,
121       cursor_state => cursor_state
122     );
123   
124   console_sm_sync_inst : console_sm_sync
125     generic map
126     (
127       SYNC_STAGES => SYNC_STAGES
128     )
129     port map
130     (
131       sys_clk => sys_clk,
132       sys_res_n => sys_res_n,
133       command_sys => command,
134       command_data_sys => command_data,
135       free_sys => free,      
136       vga_clk => vga_clk,
137       vga_res_n => vga_res_n,
138       command_vga => command_vga,
139       command_data_vga => command_data_vga,
140       command_req_vga => command_req_vga,
141       ack_vga => ack_vga
142     );
143
144   blink_interval_inst : interval
145     generic map
146     (
147       CLK_FREQ => VGA_CLK_FREQ,
148       INTERVAL_TIME_MS => BLINK_INTERVAL_MS
149     )
150     port map
151     (
152       clk => vga_clk,
153       res_n => vga_res_n,
154       active => blink
155     );
156 end architecture struct;