Guest User

Untitled

a guest
Apr 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 6.02 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date:    15:35:13 12/07/2011
  6. -- Design Name:
  7. -- Module Name:    LCD_banner - Behavioral
  8. -- Project Name:
  9. -- Target Devices:
  10. -- Tool versions:
  11. -- Description:
  12. --
  13. -- Dependencies:
  14. --
  15. -- Revision:
  16. -- Revision 0.01 - File Created
  17. -- Additional Comments:
  18. --
  19.  
  20. library IEEE;
  21.  
  22. use IEEE.STD_LOGIC_1164.ALL;
  23. use IEEE.STD_LOGIC_ARITH.ALL;
  24. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  25.  
  26.  
  27.  
  28.  
  29. -- Uncomment the following library declaration if using
  30. -- arithmetic functions with Signed or Unsigned values
  31. --use IEEE.NUMERIC_STD.ALL;
  32.  
  33. -- Uncomment the following library declaration if instantiating
  34. -- any Xilinx primitives in this code.
  35. --library UNISIM;
  36. --use UNISIM.VComponents.all;
  37.  
  38. entity LCD_banner is
  39.     Port ( iCLK : in  STD_LOGIC;
  40.            inRST : in  STD_LOGIC;
  41.            iREADY : in  STD_LOGIC;
  42.            oMSG : out  STD_LOGIC_VECTOR (7 downto 0);
  43.               iPREKIDACI: in STD_LOGIC_VECTOR(3 downto 0);
  44.               oEN: out STD_LOGIC
  45.              
  46.               );
  47.  
  48. end LCD_banner;
  49.  
  50. architecture Behavioral of LCD_banner is
  51.  
  52.     type tSTATES is (INIT,CLEAR,WAIT_LCD,SEND_CHAR,NEXT_CHAR,WAIT_HS,WAIT_LCD2,ROTATE);
  53.     type tMEMORIJA is array (0 TO 31) OF STD_LOGIC_VECTOR(7 downto 0);
  54.  
  55.  
  56. constant SS: STD_LOGIC_VECTOR(7 downto 0):= x"53";              --"01010011";  --x"53";
  57. constant e: STD_LOGIC_VECTOR(7 downto 0) := x"65";              --"01100101";  --x"65";
  58. constant b: STD_LOGIC_VECTOR(7 downto 0) := x"62";              --"01100010";  --x"62";
  59. constant a: STD_LOGIC_VECTOR(7 downto 0) := x"61";              --"01100001";  --x"61";
  60. constant s: STD_LOGIC_VECTOR(7 downto 0) := x"73";              --"01110011"; --x"73";
  61. constant t: STD_LOGIC_VECTOR(7 downto 0) := x"74";              --"01110100";  --x"74" ;
  62. constant i: STD_LOGIC_VECTOR(7 downto 0) := x"69";              --"01101001";  --x"69";
  63. constant n: STD_LOGIC_VECTOR(7 downto 0) := x"6E";              --"01101110";  --x"6E"
  64. constant NN: STD_LOGIC_VECTOR(7 downto 0):= x"4E";              --"01001110";  --x"4E"
  65. constant o: STD_LOGIC_VECTOR(7 downto 0) := x"6F";              --"01101111";  --x"6F"
  66. constant v: STD_LOGIC_VECTOR(7 downto 0) := x"76" ;             --"01110110";  --x"76"
  67. constant k: STD_LOGIC_VECTOR(7 downto 0) :=x"6B" ;              --"01101011";  --x"6B"
  68. constant rzmk: STD_LOGIC_VECTOR(7 downto 0) :=x"20";         --
  69. constant BRISI : STD_LOGIC_VECTOR (7 downto 0):=x"1B";
  70.  
  71.  
  72. constant sROM: tMEMORIJA :=( SS,e,b,a,s,t,i,a,n,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,
  73.                            NN,o,v,a,k,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk,rzmk);
  74. signal sRAM : tMEMORIJA;
  75. signal sINDEX : STD_LOGIC_VECTOR (4 downto 0);
  76. signal sSTATE : tSTATES:=INIT;
  77. signal sMSG : STD_LOGIC_VECTOR (7 downto 0):="00000000";
  78. signal sEN : STD_LOGIC:='0';
  79. signal sCOUNT : STD_LOGIC_VECTOR( 16 DOWNTO 0 );
  80. signal sPrekidaci: STD_LOGIC_VECTOR(7 downto 0);
  81.  
  82.  
  83.  
  84.  
  85. begin
  86.  
  87.  
  88. process (iCLK, inRST) begin
  89.       if(inRST='0') then
  90.          sSTATE<=INIT;
  91.             sCOUNT<="00000000000000000";
  92.       elsif(iCLK'event and iCLK='1') then
  93.             case sSTATE is
  94.                 when INIT =>
  95.                     if(iREADY='1') then
  96.                         sSTATE <= CLEAR;
  97.                     else
  98.                         sSTATE<=INIT;
  99.                     end if;
  100.                 when CLEAR =>
  101.                     if (iREADY='0') then
  102.                         sSTATE <= WAIT_LCD;
  103.                     else
  104.                         sSTATE<= CLEAR;
  105.                     end if;
  106.                 when WAIT_LCD =>
  107.                     if (iREADY='1') then
  108.                         sSTATE<=SEND_CHAR;
  109.                     else
  110.                         sSTATE<=WAIT_LCD;
  111.                         end if;
  112.                 when SEND_CHAR =>
  113.                     if (iREADY='0') then
  114.                         sSTATE <= WAIT_LCD2;
  115.                     else
  116.                         sSTATE<= SEND_CHAR;
  117.                     end if;
  118.                 when WAIT_LCD2 =>
  119.                     if (iREADY='1') then
  120.                         sSTATE <= NEXT_CHAR;
  121.                     else
  122.                         sSTATE<= WAIT_LCD2;
  123.                     end if;
  124.                 when NEXT_CHAR =>
  125.                     if (sINDEX=x"1F") then --last char?
  126.                         sSTATE <= WAIT_HS;
  127.                     else
  128.                         sSTATE<= SEND_CHAR;
  129.                     end if;
  130.                 when WAIT_HS =>
  131.                    if(sCOUNT=x"16D3C") then   --93500
  132.                    sSTATE<=ROTATE;
  133.                    sCOUNT<="00000000000000000";
  134.                else
  135.                  sCOUNT<=sCOUNT+1;
  136.                  sSTATE<=WAIT_HS;
  137.                end if;
  138.                  when ROTATE=>
  139.                          sSTATE<=CLEAR;
  140. --              when others =>
  141. --                  sSTATE <= WAIT_LCD;
  142.             end case;  
  143.         end if;
  144.            
  145.            
  146. END process;
  147.  
  148.  
  149.  
  150.  
  151. process (iPREKIDACI) begin
  152.     case (iPREKIDACI) is
  153.             when "0001"=>
  154.                 sPrekidaci<= "0011" &  "0001";
  155.             when "0010"=>
  156.                         sPrekidaci<= "0011" & "0010";
  157.             when "0011"=>
  158.                         sPrekidaci<="0011" & "0011";
  159.             when "0100"=>
  160.                         sPrekidaci<="0011" & "0100";
  161.             when "0101"=>
  162.                         sPrekidaci<="0011" & "0101";
  163.             when "0110"=>
  164.                         sPrekidaci<="0011" & "0110";
  165.             when "0111"=>
  166.                         sPrekidaci<="0011" & "0111";
  167.             when "1000"=>
  168.                         sPrekidaci<="0011" & "1000";
  169.             when "1001"=>
  170.                         sPrekidaci<="0011" & "1001";
  171.             when "1010"=>
  172.                         sPrekidaci<="0100" & "0001";
  173.             when "1011"=>
  174.                         sPrekidaci<="0100" & "0010";
  175.             when "1100"=>
  176.                         sPrekidaci<="0100" & "0011";
  177.             when "1101"=>
  178.                         sPrekidaci<="0100" & "0100";
  179.             when "1110"=>
  180.                         sPrekidaci<="0100" & "0101";
  181.             when "1111"=>
  182.                         sPrekidaci<="0100" & "0110";
  183.             when others =>
  184.                         sPrekidaci<="0011" & "0000";
  185.    end case;
  186. end process;
  187.  
  188.  
  189.  
  190. -----------------------------------------------------------
  191. -- ENABLE CONTROL
  192. process (iCLK) begin
  193.  
  194.  
  195. if (iCLK'event and iCLK='1') then
  196.     case sSTATE is
  197.         when CLEAR =>
  198.             sEN <= '1';
  199.         when SEND_CHAR =>
  200.             sEN <='1';
  201.         when others =>
  202.             sEN<= '0';
  203.     end case;
  204. end if;
  205.  
  206. end process;   
  207. -- -------------------------
  208.  
  209.        
  210.        
  211. process (iCLK) begin
  212.  
  213. if (iCLK'event and iCLK='1') then
  214.     case sSTATE is
  215.         when INIT =>
  216.             sRAM <=sROM;
  217.  
  218.          sINDEX<="00000";
  219.         when CLEAR =>
  220.             sMSG<= BRISI;
  221.         when SEND_CHAR =>
  222.            
  223.          
  224.             sMSG<=sRAM(CONV_INTEGER(sINDEX));
  225.      
  226.         when NEXT_CHAR =>
  227.             if (sINDEX=x"1F") then
  228.                 sINDEX <= "00000";
  229.             else
  230.                 sINDEX <= sINDEX +1;
  231.             end if;
  232.         when ROTATE =>
  233.             sRAM(0 to 31) <= sRAM(1 to 14) & sRAM (0) & sPrekidaci & sRAM (17 to 30) & sRAM(16) & rzmk ;
  234.         when others =>
  235.             sRAM <= sRAM;
  236.            
  237.     end case;
  238.        
  239. end if;
  240. end process;
  241.  
  242.  
  243. oEN <= sEN;
  244. oMSG <= sMSG;
  245.  
  246. end Behavioral;
Add Comment
Please, Sign In to add comment