OpenCores
URL https://opencores.org/ocsvn/z80soc/z80soc/trunk

Subversion Repositories z80soc

[/] [z80soc/] [trunk/] [V0.7.3/] [DE1/] [vhdl/] [video.vhd] - Blame information for rev 46

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 46 rrred
-------------------------------------------------------------------------------------------------
2
-- This design is part of:
3
-- Z80SoC (Z80 System on Chip)
4
-- Ronivon Candido Costa
5
-- ronivon.costa@gmail.com
6
--
7
-- 2010 - 11 - 22
8
-- Fixed bug in video to allow resolutions up to 80x60
9
--
10
-- 2010 - 02 - 17 Update
11
-- Changed the entity to include signals for the char memory
12
-- The char memory is a dual port ram memory, and now
13
--     the char paterns can be modified by software.
14
-- 
15
--
16
library IEEE;
17
use  IEEE.STD_LOGIC_1164.all;
18
use  IEEE.STD_LOGIC_ARITH.all;
19
use  IEEE.STD_LOGIC_UNSIGNED.all;
20
 
21
ENTITY video is
22
        PORT(   CLOCK_25                : IN STD_LOGIC;
23
                        VRAM_DATA               : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
24
                        VRAM_ADDR               : OUT STD_LOGIC_VECTOR(13 DOWNTO 0);
25
                        VRAM_CLOCK              : OUT STD_LOGIC;
26
                        VRAM_WREN               : OUT STD_LOGIC;
27
                        CRAM_DATA               : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
28
                        CRAM_ADDR               : OUT STD_LOGIC_VECTOR(10 DOWNTO 0);
29
                        CRAM_WEB                : OUT STD_LOGIC;
30
                        VGA_R,
31
                        VGA_G,
32
                        VGA_B                   : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
33
                        VGA_HS,
34
                        VGA_VS                  : OUT STD_LOGIC);
35
END video;
36
 
37
ARCHITECTURE A OF video IS
38
 
39
    use work.z80soc_pack.all;
40
 
41
        -- Added for VDU support
42
        constant vid_width                      : std_logic_vector := "001010000"; -- 80 columns
43
        signal Clock_video                      : std_logic;
44
        signal VGA_R_sig                        : std_logic_vector(3 downto 0);
45
        signal VGA_G_sig                        : std_logic_vector(3 downto 0);
46
        signal VGA_B_sig                        : std_logic_vector(3 downto 0);
47
        signal pixel_row_sig            : std_logic_vector(9 downto 0);
48
        signal pixel_column_sig         : std_logic_vector(9 downto 0);
49
        signal pixel_clock_sig          : std_logic;
50
        signal char_addr_sig            : std_logic_vector(7 downto 0);
51
        signal font_row_sig                     : std_logic_vector(2 downto 0);
52
        signal font_col_sig                     : std_logic_vector(2 downto 0);
53
        signal pixel_sig                        : std_logic;
54
        signal video_on_sig                     : std_logic;
55
 
56
        constant sv1                            : integer := 3 + pixelsxchar - 1;
57
        constant sv2                            : integer := 9 + pixelsxchar - 1;
58
        constant cv1                            : integer := 0 + pixelsxchar - 1;
59
        constant cv2                            : integer := 2 + pixelsxchar - 1;
60
        signal fix                                      : integer;
61
 
62
COMPONENT VGA_SYNC
63
        PORT(   clock_25Mhz                                             : IN    STD_LOGIC;
64
                        red, green, blue                                : IN    STD_LOGIC_VECTOR(3 DOWNTO 0);
65
                        red_out, green_out, blue_out    : OUT   STD_LOGIC_VECTOR(3 DOWNTO 0);
66
                        horiz_sync_out, vert_sync_out,
67
                        video_on, pixel_clock                   : OUT   STD_LOGIC;
68
                        pixel_row, pixel_column                 : OUT   STD_LOGIC_VECTOR(9 DOWNTO 0));
69
END COMPONENT;
70
 
71
BEGIN
72
 
73
        VGA_R_sig <= "0000";
74
        VGA_G_sig <= "0000";
75
        VGA_B_sig <= pixel_sig & pixel_sig & pixel_sig & pixel_sig;
76
 
77
        -- Fonts ROM read
78
        -- Picks next letter for a 80 Columns x 30 Lines display
79
        VRAM_WREN <= '1';
80
        VRAM_CLOCK <= pixel_clock_sig;
81
        VRAM_ADDR <= pixel_row_sig(sv2 downto sv1) * conv_std_logic_vector(vid_cols,7) + pixel_column_sig(sv2 downto sv1);
82
 
83
        -- Fonts RAM read
84
        -- Takes the letter, calculates the position in the char memory to get the pixel pattern
85
        -- Plot the pixel in the video
86
        -- Using pixel_row(3 downto 1) has the effect of "shifting" (multiplying by 2)
87
        -- This will plot 2 pixels on video for every pixel defined on char memory
88
        CRAM_WEB <= '1';
89
        CRAM_ADDR <= VRAM_DATA & pixel_row_sig(cv2 downto cv1);
90
        fix <= 1 when pixelsxchar = 2 else 2;
91
        pixel_sig <= CRAM_DATA (CONV_INTEGER(NOT (pixel_column_sig(cv2 downto cv1) - fix)))  when
92
                    ( (pixel_row_sig < (pixelsxchar * 8 * vid_lines)) and (pixel_column_sig < (pixelsxchar * 8 * vid_cols)) ) else
93
                '0';
94
 
95
        vga_sync_inst: VGA_SYNC
96
                port map (
97
                        clock_25Mhz                     => CLOCK_25,
98
                        red                                     => VGA_R_sig,
99
                        green                           => VGA_G_sig,
100
                        blue                            => VGA_B_sig,
101
                        red_out                         => VGA_R,
102
                        green_out                       => VGA_G,
103
                        blue_out                        => VGA_B,
104
                        horiz_sync_out          => VGA_HS,
105
                        vert_sync_out           => VGA_VS,
106
                        video_on                        => video_on_sig,
107
                        pixel_clock                     => pixel_clock_sig,
108
                        pixel_row                       => pixel_row_sig,
109
                        pixel_column            => pixel_column_sig
110
        );
111
 
112
END A;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.