c2b040193a777c09bdc595c95492b57a2521db87
Stefan Schuermans added file headers

Stefan Schuermans authored 12 years ago

1) -- MIPS I system
2) -- Copyright 2011-2012 Stefan Schuermans <stefan@schuermans.info>
3) -- Copyleft GNU public license V2 or later
4) --          http://www.gnu.org/copyleft/gpl.html
5) 
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

6) LIBRARY IEEE;
7) USE IEEE.STD_LOGIC_1164.ALL;
8) USE IEEE.NUMERIC_STD.ALL;
9) USE work.io_lcd_pins.all;
10) 
11) ENTITY e_io_lcd IS
12)     PORT (
13)         rst:       IN  std_logic;
14)         clk:       IN  std_logic;
15)         o_rd_data: OUT std_logic_vector(31 DOWNTO 0);
16)         i_wr_data: IN  std_logic_vector(31 DOWNTO 0);
17)         i_wr_en:   IN  std_logic_vector( 3 DOWNTO 0);
18)         pin_o_lcd: OUT t_io_lcd_pins
19)     );
20) END ENTITY e_io_lcd;
21) 
22) ARCHITECTURE a_io_lcd OF e_io_lcd IS
23) 
24)     SIGNAL n_lcd: t_io_lcd_pins;
Stefan Schuermans add initial values for regi...

Stefan Schuermans authored 12 years ago

25)     SIGNAL r_lcd: t_io_lcd_pins := (data => (OTHERS => '0'),
26)                                     e => '0', rs => '0', rw => '0');
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

27) 
28) BEGIN
29) 
Stefan Schuermans read peripherals with one c...

Stefan Schuermans authored 12 years ago

30)     p_next: PROCESS(r_lcd, i_wr_data, i_wr_en)
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

31)     BEGIN
32)         IF i_wr_en(0) = '1' THEN
33)             n_lcd.data <= i_wr_data(7 DOWNTO 0);
34)         ELSE
35)             n_lcd.data <= r_lcd.data;
36)         END IF;
37)         IF i_wr_en(1) = '1' THEN
38)             n_lcd.e <= i_wr_data(8);
39)         ELSE
40)             n_lcd.e <= r_lcd.e;
41)         END IF;
42)         IF i_wr_en(2) = '1' THEN
43)             n_lcd.rs <= i_wr_data(16);
44)         ELSE
45)             n_lcd.rs <= r_lcd.rs;
46)         END IF;
47)         IF i_wr_en(3) = '1' THEN
48)             n_lcd.rw <= i_wr_data(24);
49)         ELSE
50)             n_lcd.rw <= r_lcd.rw;
51)         END IF;
Stefan Schuermans read peripherals with one c...

Stefan Schuermans authored 12 years ago

52)     END PROCESS p_next;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

53) 
54)     p_sync: PROCESS(rst, clk)
55)     BEGIN
56)         IF rst = '1' THEN
57)             r_lcd.data <= (OTHERS => '0');
58)             r_lcd.e    <= '0';
59)             r_lcd.rs   <= '0';
60)             r_lcd.rw   <= '0';
61)         ELSIF rising_edge(clk) THEN
62)             r_lcd <= n_lcd;
63)         END IF;
64)     END PROCESS p_sync;
65) 
Stefan Schuermans read peripherals with one c...

Stefan Schuermans authored 12 years ago

66)     p_read: PROCESS(rst, clk)
67)     BEGIN
68)         IF rst = '1' THEN
69)             o_rd_data <= (OTHERS => '0');
70)         ELSIF rising_edge(clk) THEN
71)             o_rd_data( 7 DOWNTO  0) <= r_lcd.data;
72)             o_rd_data( 8)           <= r_lcd.e;
73)             o_rd_data(15 DOWNTO  9) <= (OTHERS => '0');
74)             o_rd_data(16)           <= r_lcd.rs;
75)             o_rd_data(23 DOWNTO 17) <= (OTHERS => '0');
76)             o_rd_data(24)           <= r_lcd.rw;
77)             o_rd_data(31 DOWNTO 25) <= (OTHERS => '0');
78)         END IF;
79)     END PROCESS p_read;
80) 
81)     pin_o_lcd <= r_lcd;
82)