1 |
3 |
liubenoff |
--------------------------------------------------------------------------------
|
2 |
8 |
liubenoff |
-- Entity: display_driver_w_decoder
|
3 |
3 |
liubenoff |
-- Date:2017-01-06
|
4 |
|
|
-- Author: GL
|
5 |
|
|
--
|
6 |
|
|
-- Description: Top module for display driver with decoder
|
7 |
|
|
--! @file
|
8 |
|
|
--! @brief Display Driver With Decoder Top Level Module
|
9 |
|
|
--------------------------------------------------------------------------------
|
10 |
|
|
|
11 |
|
|
library ieee;
|
12 |
|
|
use ieee.std_logic_1164.all;
|
13 |
|
|
use ieee.numeric_std.all;
|
14 |
|
|
|
15 |
8 |
liubenoff |
--! @brief Top entity of the display driver.
|
16 |
|
|
--! @details Top entity of the decoder architecture. Module description also goes here.
|
17 |
|
|
entity display_driver_w_decoder is
|
18 |
3 |
liubenoff |
port (
|
19 |
|
|
clk : in std_logic; --! input clock, xx MHz.
|
20 |
|
|
reset : in std_logic; --! active high
|
21 |
|
|
|
22 |
8 |
liubenoff |
ascii_in: in std_logic_vector(7 downto 0); --! input ASCII code to display
|
23 |
5 |
liubenoff |
wr_en : in std_logic; --! active high write enable to store the ASCII code in a register
|
24 |
3 |
liubenoff |
|
25 |
|
|
--! Typically the data fed to display (single or multiple) is provided for single display at a time.
|
26 |
9 |
liubenoff |
--! If multiple displays are required scan signal must be additionally provided (according typical dynamic display indication).
|
27 |
5 |
liubenoff |
--!
|
28 |
|
|
--! \section disp_data_bit_mapping Display Segment Bit Mapping
|
29 |
6 |
liubenoff |
--! |Bit Number | 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|0 |
|
30 |
5 |
liubenoff |
--! |:--------: |:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
31 |
6 |
liubenoff |
--! |Display Segment| dp| m| l| k| j| i| h| g2| g1| f| e| d| c| b|a |
|
32 |
5 |
liubenoff |
--! Note that there is no standard way to name the segments.
|
33 |
8 |
liubenoff |
--! Current data bits correspondt to display segments according this picture: @image html https://www.maximintegrated.com/en/images/appnotes/3211/3211Fig02.gif
|
34 |
9 |
liubenoff |
disp_data_q : out std_logic_vector(14 downto 0)
|
35 |
3 |
liubenoff |
);
|
36 |
8 |
liubenoff |
end display_driver_w_decoder;
|
37 |
3 |
liubenoff |
|
38 |
8 |
liubenoff |
--! @brief Architecture definition of the display_driver_w_decoder
|
39 |
|
|
--! @details Architecture describes the structure of the module together with doxygen description for doumentation generatior
|
40 |
|
|
architecture display_driver_w_decoder_arch of display_driver_w_decoder is
|
41 |
3 |
liubenoff |
|
42 |
5 |
liubenoff |
signal ascii_reg: std_logic_vector(7 downto 0);
|
43 |
|
|
|
44 |
|
|
attribute syn_noprune: boolean;
|
45 |
|
|
attribute syn_noprune of ascii_reg: signal is true;
|
46 |
3 |
liubenoff |
begin
|
47 |
|
|
|
48 |
8 |
liubenoff |
--! \mainpage 14-segment Display Driver Info
|
49 |
5 |
liubenoff |
--!
|
50 |
|
|
--! \section intro_sec Introduction
|
51 |
|
|
--!
|
52 |
8 |
liubenoff |
--! The main purpose of this module is to be fed with ASCI symbol codes and it will output word lighting up the exact segments
|
53 |
|
|
--! on the 14-segment display to visualize the ASCII character. Current implementation uses input register to store the input code.
|
54 |
5 |
liubenoff |
--!
|
55 |
8 |
liubenoff |
--! ASCII symbols are coded in Byte having values from 0x00 to 0x7F. This range covers all the symbols in the decoding table.
|
56 |
|
|
--! The range is doubled because the symbols may be lit with DP on or off. More information may be found in MAX6955 datasheet.
|
57 |
|
|
--! Follows small revised quote of the most descriptive part related to decoding. Not applicable words are removed.
|
58 |
|
|
--!
|
59 |
|
|
--! ... includes 104-character ASCII font maps for 14-segment... . The characters follow the standard ASCII font, with the
|
60 |
|
|
--! addition of the following common symbols: GBP, EUR, Yen, degree, micro, plus/minus, arrow up, and arrow down.
|
61 |
|
|
--! Seven bits represent the 104-character font map; an 8th bit is used to select whether the decimal point (DP) is lit.
|
62 |
|
|
--! source: https://datasheets.maximintegrated.com/en/ds/MAX6955.pdf
|
63 |
|
|
--!
|
64 |
|
|
--! \section port_disp_data Display Data Out
|
65 |
|
|
--!
|
66 |
|
|
--! \subsection disp_data_bit_mapping Display Segment Bit Mapping
|
67 |
|
|
--! |Bit Number | 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|0 |
|
68 |
|
|
--! |:--------: |:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
69 |
|
|
--! |Display Segment| dp| m| l| k| j| i| h| g2| g1| f| e| d| c| b|a |
|
70 |
|
|
--! Note that there is no standard way to name the segments.
|
71 |
|
|
--! Current data bits correspondt to display segments according this picture: @image html https://www.maximintegrated.com/en/images/appnotes/3211/3211Fig02.gif
|
72 |
|
|
|
73 |
9 |
liubenoff |
ascii_decoder_module:entity work.ascii_decoder
|
74 |
6 |
liubenoff |
port map(
|
75 |
|
|
clk => clk,
|
76 |
|
|
reset => reset,
|
77 |
|
|
ascii_in => ascii_in,
|
78 |
8 |
liubenoff |
disp_data_q => disp_data_q
|
79 |
6 |
liubenoff |
);
|
80 |
5 |
liubenoff |
|
81 |
8 |
liubenoff |
end display_driver_w_decoder_arch;
|
82 |
3 |
liubenoff |
|