diff options
Diffstat (limited to 'FPGA/vhdl/lcd.vhd')
-rw-r--r-- | FPGA/vhdl/lcd.vhd | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/FPGA/vhdl/lcd.vhd b/FPGA/vhdl/lcd.vhd new file mode 100644 index 0000000..186aa52 --- /dev/null +++ b/FPGA/vhdl/lcd.vhd | |||
@@ -0,0 +1,89 @@ | |||
1 | library ieee; | ||
2 | use ieee.std_logic_1164.all; | ||
3 | use ieee.numeric_std.all; | ||
4 | |||
5 | entity lcd is | ||
6 | generic (board_frequency : real := 50_000_000.0); | ||
7 | port( | ||
8 | clk : in std_logic; | ||
9 | resetn : in std_logic; | ||
10 | |||
11 | -- User Interface | ||
12 | ready : out std_logic; | ||
13 | mode : in std_logic_vector(1 downto 0); | ||
14 | char : in std_logic_vector(7 downto 0); | ||
15 | address : in std_logic_vector(6 downto 0); | ||
16 | write_char : in std_logic; | ||
17 | write_address : in std_logic; | ||
18 | |||
19 | D : in std_logic; | ||
20 | C : in std_logic; | ||
21 | B : in std_logic; | ||
22 | |||
23 | -- lcd signals | ||
24 | lcd_data : inout std_logic_vector(7 downto 0); | ||
25 | lcd_on : out std_logic; | ||
26 | lcd_blon : out std_logic; | ||
27 | lcd_rs : out std_logic; | ||
28 | lcd_rw : out std_logic; | ||
29 | lcd_en : out std_logic | ||
30 | ); | ||
31 | end entity; | ||
32 | |||
33 | architecture rtl of lcd is | ||
34 | |||
35 | signal en_user : std_logic; | ||
36 | signal lcd_data_int : std_logic_vector(lcd_data'range); | ||
37 | signal lcd_rs_int : std_logic; | ||
38 | signal lcd_en_int : std_logic; | ||
39 | |||
40 | begin | ||
41 | |||
42 | -------------------------------- | ||
43 | -- lcd | ||
44 | -------------------------------- | ||
45 | lcd_on <= '1'; | ||
46 | lcd_blon <= '1'; | ||
47 | |||
48 | ctrl : entity work.lcd_Controller | ||
49 | port map( | ||
50 | Clk => clk, | ||
51 | resetn => resetn, | ||
52 | en_250kHz => en_user, | ||
53 | char => char, | ||
54 | D => D, | ||
55 | C => C, | ||
56 | B => B, | ||
57 | write_char => write_char, | ||
58 | mode => mode, | ||
59 | address => address, | ||
60 | write_address => write_address, | ||
61 | ready => ready, | ||
62 | lcd_data => lcd_data_int, | ||
63 | lcd_RS => lcd_rs_int, | ||
64 | lcd_RW => lcd_rw, | ||
65 | lcd_EN => lcd_en_int | ||
66 | ); | ||
67 | |||
68 | ck : entity work.clock_divider | ||
69 | generic map (board_frequency => 50_000_000.0, | ||
70 | user_frequency => 250_000.0 ) | ||
71 | port map ( | ||
72 | clk => clk, | ||
73 | resetn => resetn, | ||
74 | en_user => en_user | ||
75 | ); | ||
76 | process(resetn,clk) is | ||
77 | begin | ||
78 | if resetn = '0' then | ||
79 | lcd_data <= (others => '0'); | ||
80 | lcd_rs <= '0'; | ||
81 | lcd_en <= '0'; | ||
82 | elsif rising_edge (clk) then | ||
83 | lcd_data <= lcd_data_int; | ||
84 | lcd_rs <= lcd_rs_int; | ||
85 | lcd_en <= lcd_en_int; | ||
86 | end if; | ||
87 | end process; | ||
88 | end architecture; | ||
89 | \ No newline at end of file | ||