1 | --Die feste zeiten hier beziehen sich auf CPLD quarz oszi
|
2 | LIBRARY ieee ;
|
3 | USE ieee.std_logic_1164.all;
|
4 | use IEEE.STD_LOGIC_ARITH.ALL;
|
5 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
6 |
|
7 | ENTITY test IS
|
8 | PORT(
|
9 | clk, reset : in std_logic;
|
10 | init_fertig : out std_logic;
|
11 | init_out : out std_logic_vector(9 downto 0));
|
12 | END test;
|
13 |
|
14 | ARCHITECTURE struct of test is
|
15 |
|
16 | --der flag wird auf 1 gesetzt wenn die zeit verstrichen wurde
|
17 | signal delay_flag : std_logic;
|
18 | --hier wird je nach anforderung die benötigte zeit vorgegeben
|
19 | signal delay_time : std_logic_vector(10 downto 0):="00000000000";
|
20 | --für delay...
|
21 | signal count : std_logic_vector(10 downto 0):=(others=>'0');
|
22 |
|
23 | --braucht man nicht unbedingt, ist für ausgang an LCD
|
24 | signal sig_init_out : std_logic_vector(9 downto 0):="0000110000";
|
25 |
|
26 | signal init_suc : std_logic:='0';
|
27 |
|
28 | BEGIN
|
29 | init_out <= sig_init_out;
|
30 | init_fertig <= init_suc;
|
31 |
|
32 | process (clk,reset, init_suc)
|
33 | begin
|
34 | if (reset='0') then
|
35 | count <= (others=>'0');
|
36 | else
|
37 | if (clk'event and clk='1' and init_suc='0') then
|
38 | if (count = delay_time) then
|
39 | count <= (others=>'0');
|
40 | delay_flag <= '1';
|
41 | else
|
42 | count <= unsigned(count) + 1;
|
43 | delay_flag <= '0';
|
44 | end if;
|
45 | end if;
|
46 | end if;
|
47 | end process;
|
48 |
|
49 | process (delay_flag, reset)
|
50 | variable delay_nr : std_logic_vector(3 downto 0):=(others=>'0');
|
51 | begin
|
52 | if (reset='0') then
|
53 | init_suc <= '0';
|
54 | delay_nr := (others=>'0');
|
55 | sig_init_out <= "0000110000";
|
56 | delay_time <= "00000000000";
|
57 | else
|
58 | if (delay_flag = '1') then
|
59 | case delay_nr is
|
60 | when "0000" => sig_init_out <= "0000110000";
|
61 | delay_time <= "10000000001"; --4.1ms
|
62 | when "0001" => sig_init_out <= "0000110000";
|
63 | delay_time <= "00000011001"; --100us
|
64 | when "0010" => sig_init_out <= "0000110000";
|
65 | delay_time <= "00000011001"; --100us hier muss man nicht warten, sicherheit
|
66 | when "0011" => sig_init_out <= "0000111000";-- 8bit 2 liens, 5x7 per dot
|
67 | delay_time <= "00000001010"; --42us
|
68 | when "0100" => sig_init_out <= "0000001000";-- display off
|
69 | delay_time <= "00000001010"; --42us
|
70 | when "0101" => sig_init_out <= "0000001000";-- display clear
|
71 | delay_time <= "00110011010"; --1.64ms
|
72 | when "0110" => sig_init_out <= "0000000110";-- entry mode set, increase, display not shifted
|
73 | delay_time <= "00000001010"; --42us
|
74 | --hier init fertig, aber ich schalte mal display an :-)
|
75 | when "0111" => sig_init_out <= "0000001111";-- display on, curser on, blink on
|
76 | delay_time <= "00000001010"; --42us
|
77 | when "1000" => init_suc <= '1';
|
78 | when others => null;
|
79 | end case;
|
80 | delay_nr := unsigned(delay_nr)+1;
|
81 | end if;
|
82 | end if;
|
83 | end process;
|
84 |
|
85 | end struct;
|