Hardware Reference
In-Depth Information
20
when 0 => return "00110000"; --"0" on LCD
21
when 1 => return "00110001"; --"1" on LCD
22
when 2 => return "00110010"; --"2" on LCD
23
when 3 => return "00110011"; --"3" on LCD
24
when 4 => return "00110100"; --"4" on LCD
25
when 5 => return "00110101"; --"5" on LCD
26
when 6 => return "00110110"; --"6" on LCD
27
when 7 => return "00110111"; --"7" on LCD
28
when 8 => return "00111000"; --"8" on LCD
29
when 9 => return "00111001"; --"9" on LCD
30
when others => return "00111111"; --"?" on LCD
31
end case;
32
end bcd_to_lcd;
33
34
--FSM-related declarations:
35
type state is (FunctionSet1, FunctionSet2, FunctionSet3,
36
FunctionSet4, ClearDisplay, DisplayControl, EntryMode,
37
WriteHourT, WriteHourU, WriteColon1, WriteMinT, WriteMinU,
38
WriteColon2, WriteSecT, WriteSecU, ReturnHome);
39
signal pr_state, nx_state: state;
40
41
--Other signal declarations:
42
signal secU, secT, minU, minT, hourU, hourT: natural range 0 to 9;
43
signal limit: natural range 0 to fclk;
44
45 begin
46
47
--PART I: CLOCK BLOCK--------------------------
48
49
--Speed-up factors:
50
limit <= fclk/8192 when hour='1' else
51
fclk/256 when min='1' else
52
fclk/8 when sec='1' else
53
fclk;
54
55
--Clock design:
56
process (clk, rst_clock)
57
variable counter1: natural range 0 to fclk;
58
variable counter2: natural range 0 to 10;
59
variable counter3: natural range 0 to 6;
60
variable counter4: natural range 0 to 10;
61
variable counter5: natural range 0 to 6;
62
variable counter6: natural range 0 to 10;
63
variable counter7: natural range 0 to 3;
64
begin
65
if rst_clock='1' then
66
counter1 := 0;
67
counter2 := 0;
68
counter3 := 0;
69
counter4 := 0;
70
counter5 := 0;
71
counter6 := 0;
72
counter7 := 0;
73
elsif rising_edge(clk) then
74
counter1 := counter1 + 1;
75
if counter1=limit then
Search WWH ::




Custom Search