fe7741d0413ae2c6f68dd81c74afe140b9aa7e59
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

22) 
23) BEGIN
24) 
Stefan Schuermans read peripherals with one c...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

47)     END PROCESS p_next;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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