⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 user_logic.vhd

📁 本程序用于XILINX SARTEN-3E开发板上的LCD的控制,可以控制LCD的显示功能.
💻 VHD
字号:
-------------------------------------------------------------------------------- user_logic.vhd - entity/architecture pair---------------------------------------------------------------------------------- ***************************************************************************-- ** Copyright (c) 1995-2006 Xilinx, Inc.  All rights reserved.            **-- **                                                                       **-- ** Xilinx, Inc.                                                          **-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"         **-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND       **-- ** SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,        **-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,        **-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION           **-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,     **-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE      **-- ** FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY              **-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE               **-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR        **-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF       **-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS       **-- ** FOR A PARTICULAR PURPOSE.                                             **-- **                                                                       **-- ***************************************************************************---------------------------------------------------------------------------------- Filename:          user_logic.vhd-- Version:           1.00.a-- Description:       User logic.-- Date:              Thu May 31 18:29:16 2007 (by Create and Import Peripheral Wizard)-- VHDL Standard:     VHDL'93-------------------------------------------------------------------------------- Naming Conventions:--   active low signals:                    "*_n"--   clock signals:                         "clk", "clk_div#", "clk_#x"--   reset signals:                         "rst", "rst_n"--   generics:                              "C_*"--   user defined types:                    "*_TYPE"--   state machine next state:              "*_ns"--   state machine current state:           "*_cs"--   combinatorial signals:                 "*_com"--   pipelined or register delay signals:   "*_d#"--   counter signals:                       "*cnt*"--   clock enable signals:                  "*_ce"--   internal version of output port:       "*_i"--   device pins:                           "*_pin"--   ports:                                 "- Names begin with Uppercase"--   processes:                             "*_PROCESS"--   component instantiations:              "<ENTITY_>I_<#|FUNC>"-------------------------------------------------------------------------------- DO NOT EDIT BELOW THIS LINE --------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;library proc_common_v2_00_a;use proc_common_v2_00_a.proc_common_pkg.all;-- DO NOT EDIT ABOVE THIS LINE ----------------------USER libraries added here-------------------------------------------------------------------------------- Entity section-------------------------------------------------------------------------------- Definition of Generics:--   C_DWIDTH                     -- User logic data bus width--   C_NUM_CE                     -- User logic chip enable bus width---- Definition of Ports:--   Bus2IP_Clk                   -- Bus to IP clock--   Bus2IP_Reset                 -- Bus to IP reset--   Bus2IP_Data                  -- Bus to IP data bus for user logic--   Bus2IP_BE                    -- Bus to IP byte enables for user logic--   Bus2IP_RdCE                  -- Bus to IP read chip enable for user logic--   Bus2IP_WrCE                  -- Bus to IP write chip enable for user logic--   IP2Bus_Data                  -- IP to Bus data bus for user logic--   IP2Bus_Ack                   -- IP to Bus acknowledgement--   IP2Bus_Retry                 -- IP to Bus retry response--   IP2Bus_Error                 -- IP to Bus error response--   IP2Bus_ToutSup               -- IP to Bus timeout suppress------------------------------------------------------------------------------entity user_logic is  generic  (    -- ADD USER GENERICS BELOW THIS LINE ---------------    --USER generics added here    -- ADD USER GENERICS ABOVE THIS LINE ---------------    -- DO NOT EDIT BELOW THIS LINE ---------------------    -- Bus protocol parameters, do not add to or delete    C_DWIDTH                       : integer              := 32;    C_NUM_CE                       : integer              := 2    -- DO NOT EDIT ABOVE THIS LINE ---------------------  );  port  (    -- ADD USER PORTS BELOW THIS LINE ------------------    --USER ports added here    LCD_E                         : out std_logic;    LCD_RS                        : out std_logic;    LCD_RW                        : out std_logic;    lcddata_out                   : out std_logic_vector (7 downto 4);    -- ADD USER PORTS ABOVE THIS LINE ------------------    -- DO NOT EDIT BELOW THIS LINE ---------------------    -- Bus protocol ports, do not add to or delete    Bus2IP_Clk                     : in  std_logic;    Bus2IP_Reset                   : in  std_logic;    Bus2IP_Data                    : in  std_logic_vector(0 to C_DWIDTH-1);    Bus2IP_BE                      : in  std_logic_vector(0 to C_DWIDTH/8-1);    Bus2IP_RdCE                    : in  std_logic_vector(0 to C_NUM_CE-1);    Bus2IP_WrCE                    : in  std_logic_vector(0 to C_NUM_CE-1);    IP2Bus_Data                    : out std_logic_vector(0 to C_DWIDTH-1);    IP2Bus_Ack                     : out std_logic;    IP2Bus_Retry                   : out std_logic;    IP2Bus_Error                   : out std_logic;    IP2Bus_ToutSup                 : out std_logic    -- DO NOT EDIT ABOVE THIS LINE ---------------------  );end entity user_logic;-------------------------------------------------------------------------------- Architecture section------------------------------------------------------------------------------architecture IMP of user_logic is  --USER signal declarations added here, as needed for user logic  signal  clk_temp     : std_logic:='0';  signal  trans_flag   : std_logic;  ------------------------------------------  -- Signals for user logic slave model s/w accessible register example  ------------------------------------------  signal slv_reg0                       : std_logic_vector(0 to C_DWIDTH-1);  signal slv_reg1                       : std_logic_vector(0 to C_DWIDTH-1);  signal slv_reg_write_select           : std_logic_vector(0 to 1);  signal slv_reg_read_select            : std_logic_vector(0 to 1);  signal slv_ip2bus_data                : std_logic_vector(0 to C_DWIDTH-1);  signal slv_read_ack                   : std_logic;  signal slv_write_ack                  : std_logic;begin  --USER logic implementation added here  ------------------------------------------  -- Example code to read/write user logic slave model s/w accessible registers  --   -- Note:  -- The example code presented here is to show you one way of reading/writing  -- software accessible registers implemented in the user logic slave model.  -- Each bit of the Bus2IP_WrCE/Bus2IP_RdCE signals is configured to correspond  -- to one software accessible register by the top level template. For example,  -- if you have four 32 bit software accessible registers in the user logic, you  -- are basically operating on the following memory mapped registers:  --   --    Bus2IP_WrCE or   Memory Mapped  --       Bus2IP_RdCE   Register  --            "1000"   C_BASEADDR + 0x0  --            "0100"   C_BASEADDR + 0x4  --            "0010"   C_BASEADDR + 0x8  --            "0001"   C_BASEADDR + 0xC  --   ------------------------------------------  slv_reg_write_select <= Bus2IP_WrCE(0 to 1);  slv_reg_read_select  <= Bus2IP_RdCE(0 to 1);  slv_write_ack        <= Bus2IP_WrCE(0) or Bus2IP_WrCE(1);  slv_read_ack         <= Bus2IP_RdCE(0) or Bus2IP_RdCE(1);  -- implement slave model register(s)    trans_flag <= slv_reg1(29);    SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is  begin    if Bus2IP_Clk'event and Bus2IP_Clk = '1' then      if Bus2IP_Reset = '1' then        slv_reg0 <= (others => '0');        slv_reg1 <= (others => '0');      else        case slv_reg_write_select is          when "10" =>            for byte_index in 0 to (C_DWIDTH/8)-1 loop              if ( Bus2IP_BE(byte_index) = '1' ) then                slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);              end if;            end loop;          when "01" =>            for byte_index in 0 to (C_DWIDTH/8)-1 loop              if ( Bus2IP_BE(byte_index) = '1' ) then                slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);              end if;            end loop;          when others => null;        end case;      end if;    end if;  end process SLAVE_REG_WRITE_PROC;      fdiv  :   process(Bus2IP_Clk)            variable count : integer range 0 to 30 :=1;  begin 	 if Bus2IP_Clk'event and Bus2IP_Clk='1' then 			if count = 25 then 				 count := 0; 				 clk_temp <= not clk_temp;			else 				 count :=count +1;			end if;	  end if;	end process fdiv;   work  :  process(clk_temp)             variable  num   : integer range 1 to 9:=1;		      variable  statecontrol  : std_logic_vector(1 downto 0);		    begin 		if clk_temp'event and clk_temp='1' then			statecontrol :=slv_reg1(30 to 31); 			  case statecontrol is 				     when  "00"   => 					                          					                 LCD_RW <= '1';                                LCD_E  <= '0';                                num := 1;					                          					                  when  "01"   =>					 					         if trans_flag='1' then 								   LCD_RS <= '0';								   																						         if    num =1 then                          --????												LCD_RW  <= '0'; 												LCD_E   <= '1';												lcddata_out <= slv_reg0(24 to 27);												num:=num+1;																				 	   elsif num=2 then                           --??????                                    LCD_RW  <= '1'; 												LCD_E   <= '0';                                    num:=num+1;                                                                                  									   elsif num=3 then                           -- ????                                    LCD_RW   <= '0'; 												LCD_E    <= '1';												lcddata_out <= slv_reg0(28 to 31);												num:=num+1;													                                     		 						 		                              elsif num=4 then                           --??????                                    LCD_RW   <= '1'; 												LCD_E    <= '0';		                        end if;							    end if;																                   when    "10"    =>							           if trans_flag='1' then                               LCD_RS <= '1';																						           if    num =1 then                          --????												  LCD_RW   <= '0'; 												  LCD_E    <= '1';												  lcddata_out <= slv_reg0(24 to 27);												  num:=num+1;								 	     elsif num=2 then                           --??????                                      LCD_RW<= '1'; 												  LCD_E <= '0';                                      num:=num+1;                                                 									     elsif num=3 then                           -- ????                                      LCD_RW  <= '0'; 												  LCD_E <= '1';												  lcddata_out <= slv_reg0(28 to 31);												  num:=num+1;	                                                		 								 		                                elsif num=4 then                           --??????                                      LCD_RW  <= '1'; 												  LCD_E <= '0';                                end if;						           end if;					                       when  others         =>      LCD_E <='0';						            end case;	       end if;		end process work;  -- implement slave model register read mux  SLAVE_REG_READ_PROC : process( slv_reg_read_select, slv_reg0, slv_reg1 ) is  begin    case slv_reg_read_select is      when "10" => slv_ip2bus_data <= slv_reg0;      when "01" => slv_ip2bus_data <= slv_reg1;      when others => slv_ip2bus_data <= (others => '0');    end case;  end process SLAVE_REG_READ_PROC;  ------------------------------------------  -- Example code to drive IP to Bus signals  ------------------------------------------  IP2Bus_Data        <= slv_ip2bus_data;  IP2Bus_Ack         <= slv_write_ack or slv_read_ack;  IP2Bus_Error       <= '0';  IP2Bus_Retry       <= '0';  IP2Bus_ToutSup     <= '0';end IMP;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -