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

📄 blkram_gpio.vhd

📁 ULTRACTR的源码
💻 VHD
字号:

--*****************************************************************************
--	Module: BlockRAM GPIO Interface
--*****************************************************************************
--
--     XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
--     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.
--     
--     (c) Copyright 2002 Xilinx, Inc.
--     All rights reserved.
-- 
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Filename:     blkram_gpio.v
-- 
-- Description:    
-- Module creates a 32 bit input and 32 bit latched output via a block ram interface
--	bram address 0 = data to be written to GPIO (read from BRAM)
--  bram address 4 = data read from GPIO (write to BRAM address)
--
-- Design Notes:
-- 
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Author:  APD/SEG
-- History: 2003.08.08 - initial release
-- 
--
-------------------------------------------------------------------------------

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

-- synthesis translate_off
LIBRARY UNISIM;
USE UNISIM.VCOMPONENTS.ALL;
-- synthesis translate_on


--/////////////////////////////////////////////////////////////////////////////

-- Module Declaration

--/////////////////////////////////////////////////////////////////////////////


ENTITY uc_gpio_ref IS
   GENERIC (
      --/////////////////////////////////////////////////////////////////////////////
      -- PARAMETER DECLARATION
      --/////////////////////////////////////////////////////////////////////////////
      C_FAMILY                       :  string(1 TO 8) := "virtex2p";    
      C_NUM_WE                       :  integer := 4;    
      C_PORT_DWIDTH                  :  integer := 32;    
      C_PORT_AWIDTH                  :  integer := 32);
   PORT (
      UC_Rst                  : IN std_logic;   
      UC_Clk                  : IN std_logic;   
      UC_GPIO_Dout_A          : OUT std_logic_vector(0 TO C_PORT_DWIDTH - 1);   
      UC_GPIO_Din_A           : IN std_logic_vector(0 TO C_PORT_DWIDTH - 1);   
      UC_BRAM_Rst_B           : OUT std_logic;   
      UC_BRAM_Clk_B           : OUT std_logic;   
      UC_BRAM_EN_B            : OUT std_logic;   
      UC_BRAM_WEN_B           : OUT std_logic_vector(0 TO C_NUM_WE - 1);   
      UC_BRAM_Addr_B          : OUT std_logic_vector(0 TO C_PORT_AWIDTH - 1);   
      UC_BRAM_Din_B           : IN std_logic_vector(0 TO C_PORT_DWIDTH - 1);   
      UC_BRAM_Dout_B          : OUT std_logic_vector(0 TO C_PORT_DWIDTH - 1));   
END ENTITY uc_gpio_ref;

ARCHITECTURE translated OF uc_gpio_ref IS


   --/////////////////////////////////////////////////////////////////////////////
   -- Signal Declaration
   --/////////////////////////////////////////////////////////////////////////////
   SIGNAL bram_wr                  :  std_logic;   
   SIGNAL temp_BRAM_WEN_B          :  std_logic_vector(0 TO C_NUM_WE - 1);   
   -- block ram address 4 for writes and 0 for reads
   SIGNAL temp_xhdl8               :  std_logic_vector(3 DOWNTO 0);   
   -- set write enables equal to 1 when writing to RAM	
   SIGNAL temp_xhdl9               :  std_logic_vector(31 DOWNTO 0);   
   SIGNAL UC_GPIO_Dout_A_xhdl1     :  std_logic_vector(0 TO C_PORT_DWIDTH - 1);   
   SIGNAL UC_BRAM_Rst_B_xhdl2      :  std_logic;   
   SIGNAL UC_BRAM_Clk_B_xhdl3      :  std_logic;   
   SIGNAL UC_BRAM_EN_B_xhdl4       :  std_logic;   
   SIGNAL UC_BRAM_WEN_B_xhdl5      :  std_logic_vector(0 TO C_NUM_WE - 1);   
   SIGNAL UC_BRAM_Addr_B_xhdl6     :  std_logic_vector(0 TO C_PORT_AWIDTH - 1);   
   SIGNAL UC_BRAM_Dout_B_xhdl7     :  std_logic_vector(0 TO C_PORT_DWIDTH - 1);   

BEGIN
   UC_GPIO_Dout_A <= UC_GPIO_Dout_A_xhdl1;
   UC_BRAM_Rst_B <= UC_BRAM_Rst_B_xhdl2;
   UC_BRAM_Clk_B <= UC_BRAM_Clk_B_xhdl3;
   UC_BRAM_EN_B <= UC_BRAM_EN_B_xhdl4;
   UC_BRAM_WEN_B <= UC_BRAM_WEN_B_xhdl5;
   UC_BRAM_Addr_B <= UC_BRAM_Addr_B_xhdl6;
   UC_BRAM_Dout_B <= UC_BRAM_Dout_B_xhdl7;
   UC_BRAM_EN_B_xhdl4 <= '1' ;
   UC_BRAM_Clk_B_xhdl3 <= UC_Clk ;
   UC_BRAM_Rst_B_xhdl2 <= UC_Rst ;
   UC_BRAM_Dout_B_xhdl7 <= UC_GPIO_Din_A ;
   temp_xhdl8 <= "0100" WHEN bram_wr = '1' ELSE "0000";
   UC_BRAM_Addr_B_xhdl6 <= "0000000000000000000000000000" & temp_xhdl8 ;
   temp_xhdl9 <= "11111111111111111111111111111111" WHEN bram_wr = '1' ELSE "00000000000000000000000000000000";
   UC_BRAM_WEN_B_xhdl5 <= temp_xhdl9(3 DOWNTO 0) ;

   PROCESS (UC_Clk)
   BEGIN
      IF (UC_Clk'EVENT AND UC_Clk = '1') THEN
         IF (UC_Rst = '1') THEN
            bram_wr <= '0';    
         ELSE
            bram_wr <= NOT bram_wr;    
         END IF;
      END IF;
   END PROCESS;

   PROCESS (UC_Clk)
   BEGIN
      IF (UC_Clk'EVENT AND UC_Clk = '1') THEN
         IF (bram_wr = '1') THEN
            UC_GPIO_Dout_A_xhdl1 <= UC_BRAM_Din_B;    
         END IF;
      END IF;
   END PROCESS;

END ARCHITECTURE translated;

⌨️ 快捷键说明

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