Advertisement
Sarik_Kumpan

LCD_Control

Nov 22nd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.25 KB | None | 0 0
  1. -------------------------------------------------------------------------------
  2. -- Title : Synthesizable demo for design "lcd16x2_ctrl"
  3. -- Project :
  4. -------------------------------------------------------------------------------
  5. -- File : lcd16x2_ctrl_tb.vhd
  6. -- Author : <stachelsau@T420>
  7. -- Company :
  8. -- Created : 2012-07-28
  9. -- Last update: 2012-07-29
  10. -- Platform :
  11. -- Standard : VHDL'93/02
  12. -------------------------------------------------------------------------------
  13. -- Description: This demo writes writes a "hello world" to the display and
  14. -- interchanges both lines periodically.
  15. -------------------------------------------------------------------------------
  16. -- Copyright (c) 2012
  17. -------------------------------------------------------------------------------
  18. -- Revisions :
  19. -- Date Version Author Description
  20. -- 2012-07-28 1.0 stachelsau Created
  21. -------------------------------------------------------------------------------
  22.  
  23. library ieee;
  24. use ieee.numeric_std.all;
  25. use ieee.std_logic_1164.all;
  26. use ieee.std_logic_unsigned.all;
  27.  
  28.  
  29. -------------------------------------------------------------------------------
  30.  
  31. entity lcd16x2_ctrl_demo3 is
  32. port (
  33. clk, sleep : in std_logic;
  34. data_in : in std_logic_vector(11 downto 0);
  35. mode_select : in std_logic_vector(1 downto 0);
  36. lcd_e : out std_logic;
  37. lcd_rs : out std_logic;
  38. lcd_rw : out std_logic;
  39. lcd_db : out std_logic_vector(7 downto 4));
  40.  
  41. end entity lcd16x2_ctrl_demo3;
  42.  
  43. -------------------------------------------------------------------------------
  44.  
  45. architecture behavior of lcd16x2_ctrl_demo3 is
  46.  
  47. --
  48. signal timer : natural range 0 to 100000000 := 0;
  49. signal switch_lines : std_logic := '0';
  50. signal line1 : std_logic_vector(127 downto 0);
  51. signal line2 : std_logic_vector(127 downto 0);
  52.  
  53.  
  54. -- component generics
  55. constant CLK_PERIOD_NS : positive := 10; -- 100 Mhz
  56.  
  57. -- component ports
  58. signal rst : std_logic;
  59. signal line1_buffer : std_logic_vector(127 downto 0);
  60. signal line2_buffer : std_logic_vector(127 downto 0);
  61.  
  62. -- value of input
  63. signal data_buffer : std_logic_vector(7 downto 0) := X"31";
  64. signal count : integer range 0 to 10 := 0;
  65. signal status1_line1 : std_logic_vector(7 downto 0);
  66. signal bit_to_int : Integer;
  67. signal value_form_read : Integer;
  68. signal data : Integer;
  69. signal first_bit : Integer;
  70. signal second_bit : Integer;
  71. signal third_bit : Integer;
  72. --signal data_buffer : std_logic_vector(3 downto 0) := "1101";
  73. signal f : std_logic_vector(7 downto 0);
  74. signal s : std_logic_vector(7 downto 0);
  75. signal t : std_logic_vector(7 downto 0);
  76. signal ff : std_logic_vector(7 downto 0);
  77. signal ss : std_logic_vector(7 downto 0);
  78. signal tt : std_logic_vector(7 downto 0);
  79.  
  80. signal status1 : std_logic_vector(7 downto 0);
  81. signal status2 : std_logic_vector(7 downto 0);
  82. signal status3 : std_logic_vector(7 downto 0);
  83. signal status4 : std_logic_vector(7 downto 0);
  84. signal status5 : std_logic_vector(7 downto 0);
  85. signal status6 : std_logic_vector(7 downto 0);
  86.  
  87. begin -- architecture behavior
  88.  
  89. -- component instantiation
  90. DUT : entity work.lcd16x2_ctrl
  91. generic map (
  92. CLK_PERIOD_NS => CLK_PERIOD_NS)
  93. port map (
  94. clk => clk,
  95. rst => rst,
  96. lcd_e => lcd_e,
  97. lcd_rs => lcd_rs,
  98. lcd_rw => lcd_rw,
  99. lcd_db => lcd_db,
  100. line1_buffer => line1_buffer,
  101. line2_buffer => line2_buffer);
  102.  
  103. line1(127 downto 120) <= X"4f"; -- O
  104. line1(119 downto 112) <= X"73"; -- s
  105. line1(111 downto 104) <= X"63"; -- c
  106. line1(103 downto 96) <= X"69"; -- i
  107. line1(95 downto 88) <= X"6c"; -- l
  108. line1(87 downto 80) <= X"6c"; -- l
  109. line1(79 downto 72) <= X"6f"; -- o
  110. line1(71 downto 64) <= X"73"; -- s
  111. line1(63 downto 56) <= X"63"; -- c
  112. line1(55 downto 48) <= X"6f"; -- o
  113. line1(47 downto 40) <= X"70"; -- p
  114. line1(39 downto 32) <= X"65"; -- e
  115. line1(31 downto 24) <= X"20"; -- " "
  116. line1(23 downto 16) <= X"32"; -- 2
  117. line1(15 downto 8) <= X"43"; -- C
  118. line1(7 downto 0) <= X"48"; -- H
  119.  
  120. rst <= '0';
  121.  
  122. -- switch lines every second
  123. process(clk)
  124. begin
  125. if rising_edge(clk) then
  126.  
  127. if timer = 0 then
  128. timer <= 25000000;
  129.  
  130. if sleep = '1' then
  131.  
  132. line2(127 downto 120) <= X"20"; -- " "
  133. line2(119 downto 112) <= X"20"; -- " "
  134. line2(111 downto 104) <= X"20"; -- " "
  135. line2(103 downto 96) <= X"4d"; -- M
  136. line2(95 downto 88) <= X"6f"; -- o
  137. line2(87 downto 80) <= X"64"; -- d
  138. line2(79 downto 72) <= X"65"; -- e
  139. line2(71 downto 64) <= X"3a"; -- :
  140. line2(63 downto 56) <= X"53"; -- S
  141. line2(55 downto 48) <= X"6c"; -- l
  142. line2(47 downto 40) <= X"65"; -- e
  143. line2(39 downto 32) <= X"65"; -- e
  144. line2(31 downto 24) <= X"70"; -- p
  145. line2(23 downto 16) <= X"20"; -- " "
  146. line2(15 downto 8) <= X"20"; -- " "
  147. line2(7 downto 0) <= X"20"; -- " "
  148.  
  149. elsif sleep = '0' then
  150.  
  151. if mode_select = "00" then
  152.  
  153. line2(127 downto 120) <= X"20"; -- " "
  154. line2(119 downto 112) <= X"20"; -- " "
  155. line2(111 downto 104) <= X"20"; -- " "
  156. line2(103 downto 96) <= X"20"; -- " "
  157. line2(95 downto 88) <= X"4d"; -- M
  158. line2(87 downto 80) <= X"6f"; -- o
  159. line2(79 downto 72) <= X"64"; -- d
  160. line2(71 downto 64) <= X"65"; -- e
  161. line2(63 downto 56) <= X"3a"; -- :
  162. line2(55 downto 48) <= X"4f"; -- O
  163. line2(47 downto 40) <= X"66"; -- f
  164. line2(39 downto 32) <= X"66"; -- f
  165. line2(31 downto 24) <= X"20"; -- " "
  166. line2(23 downto 16) <= X"20"; -- " "
  167. line2(15 downto 8) <= X"20"; -- " "
  168. line2(7 downto 0) <= X"20"; -- " "
  169.  
  170. elsif mode_select = "01" then
  171.  
  172. line2(127 downto 120) <= X"20"; -- " "
  173. line2(119 downto 112) <= X"4d"; -- M
  174. line2(111 downto 104) <= X"6f"; -- o
  175. line2(103 downto 96) <= X"64"; -- d
  176. line2(95 downto 88) <= X"65"; -- e
  177. line2(87 downto 80) <= X"3a"; -- :
  178. line2(79 downto 72) <= X"53"; -- S
  179. line2(71 downto 64) <= X"69"; -- i
  180. line2(63 downto 56) <= X"6e"; -- n
  181. line2(55 downto 48) <= X"67"; -- g
  182. line2(47 downto 40) <= X"6c"; -- g
  183. line2(39 downto 32) <= X"65"; -- e
  184. line2(31 downto 24) <= X"43"; -- C
  185. line2(23 downto 16) <= X"48"; -- H
  186. line2(15 downto 8) <= X"31"; -- 1
  187. line2(7 downto 0) <= X"20"; -- " "
  188.  
  189. elsif mode_select = "10" then
  190.  
  191. line2(127 downto 120) <= X"20"; -- " "
  192. line2(119 downto 112) <= X"4d"; -- M
  193. line2(111 downto 104) <= X"6f"; -- o
  194. line2(103 downto 96) <= X"64"; -- d
  195. line2(95 downto 88) <= X"65"; -- e
  196. line2(87 downto 80) <= X"3a"; -- :
  197. line2(79 downto 72) <= X"53"; -- S
  198. line2(71 downto 64) <= X"69"; -- i
  199. line2(63 downto 56) <= X"6e"; -- n
  200. line2(55 downto 48) <= X"67"; -- g
  201. line2(47 downto 40) <= X"6c"; -- g
  202. line2(39 downto 32) <= X"65"; -- e
  203. line2(31 downto 24) <= X"43"; -- C
  204. line2(23 downto 16) <= X"48"; -- H
  205. line2(15 downto 8) <= X"32"; -- 2
  206. line2(7 downto 0) <= X"20"; -- " "
  207.  
  208. elsif mode_select = "11" then
  209.  
  210. line2(127 downto 120) <= X"4d"; -- C
  211. line2(119 downto 112) <= X"6f"; -- H
  212. line2(111 downto 104) <= X"64"; -- 1
  213. line2(103 downto 96) <= X"65"; -- :
  214. line2(95 downto 88) <= X"3a"; -- " "
  215. line2(87 downto 80) <= X"44"; -- .
  216. line2(79 downto 72) <= X"75"; -- " "
  217. line2(71 downto 64) <= X"61"; -- " "
  218. line2(63 downto 56) <= X"6c"; -- C
  219. line2(55 downto 48) <= X"43"; -- H
  220. line2(47 downto 40) <= X"68"; -- 2
  221. line2(39 downto 32) <= X"61"; -- :
  222. line2(31 downto 24) <= X"6e"; -- " "
  223. line2(23 downto 16) <= X"6e"; -- .
  224. line2(15 downto 8) <= X"65"; -- " "
  225. line2(7 downto 0) <= X"6c"; -- " "
  226.  
  227. end if;
  228.  
  229. end if;
  230.  
  231. else
  232. timer <= timer - 1;
  233.  
  234. end if;
  235. end if;
  236. end process;
  237.  
  238. line1_buffer <= line1; --when switch_lines = '1' else line1;
  239. line2_buffer <= line2; --when switch_lines = '1' else line2;
  240.  
  241. end architecture behavior;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement