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

📄 testbnch.vhd

📁 Actel Fusion System Management Development Kit UART Example. Contains Libero design using CoreABC. P
💻 VHD
📖 第 1 页 / 共 4 页
字号:
-- ------------------------------------------------------------------------- --
-- ------------------------------------------------------------------------- --
--                                                                           --
-- File................: TESTBNCH.V                                        --
-- Function............: Test bench for GENERIC UARTapb                          --
-- Version.............: 3.1                                                --
-- Last Updated........: 03-08-07                                            --
-- Component of........: None                                                --
-- Components Required.: UARTapb                                                 --
-- Compilation Notes...:                                                     --
--                                                                           --
-- Revision History:                                                         --
--   3.1:   Coreconsole version along with APB interface testbench
--   3.00:  added fifo verification
--   2.00:  improve report
--   1.01:  Initial design                                                   --
--   1.00:  Initial design                                                   --
--                                                                           --
--                                                                           --
-- ------------------------------------------------------------------------- --
-- ------------------------------------------------------------------------- --
library ieee;
library std;
use ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
use ieee.std_logic_textio.all;
LIBRARY std;
use std.textio.all;
use work.tbpack.all;
use work.textio.all;
use work.misc.all;
use work.coreparameters.all;

ENTITY testbnch IS
   GENERIC (
      --  0=without fifo operation mode
      TX_FIFO                        :  integer := 0;    
      --  0=without fifo operation mode
      RX_FIFO                        :  integer := 0;    
      --  0=fifo depth is 256 bytes for devices
      --  (PA3/E, APA, AX, RTAX-S)
      -- DEVICE FAMILY 
      FAMILY                         :  integer := 15;    
      --  1=fifo depth is 16 bytes, FIFO_DEPTH_16
      --  is used for the testbench purpose only to
      --  support the devices(SX-A, RTSX-S)
      BAUD_VALUE                     :  integer := 1;    --  This value is selected only when FIXEDMODE is set to 1 
      FIXEDMODE                      :  integer := 0;    --  fixed or programmable mode, 0: programmable; 1:fixed
      PRG_BIT8                     :  integer := 0;    --  This bit value is selected only when FIXEDMODE is set to 1 
      PRG_PARITY                   :  integer := 0;    --  This value is selected only when FIXEDMODE is set to 1 
      -- The following parameter is used only in the testbench
      FIFO_DEPTH_16                  :  integer := 0);    
 END ENTITY testbnch;

ARCHITECTURE translated OF testbnch IS

COMPONENT CoreUARTapb 
   GENERIC (
      -- DEVICE FAMILY 
      FAMILY                         :  integer := 15;    
      -- UART configuration parameters
      TX_FIFO                        :  integer := 0;    --  1 = with tx fifo, 0 = without tx fifo
      RX_FIFO                        :  integer := 0;    --  1 = with rx fifo, 0 = without rx fifo
      BAUD_VALUE                     :  integer := 0;    --  Baud value is set only when fixed buad rate is selected 
      FIXEDMODE                      :  integer := 0;    --  fixed or programmable mode, 0: programmable; 1:fixed
      PRG_BIT8                       :  integer := 0;    --  This bit value is selected only when FIXEDMODE is set to 1 
      PRG_PARITY                     :  integer := 0);    --  This bit value is selected only when FIXEDMODE is set to 1 
   PORT (
      -- Inputs and Outputs
-- APB signals

      PCLK                    : IN std_logic;   --  APB system clock
      PRESETN                 : IN std_logic;   --  APB system reset
      PADDR                   : IN std_logic_vector(4 DOWNTO 2);   --  Address (used bits only)
      PSEL                    : IN std_logic;   --  Peripheral select signal
      PENABLE                 : IN std_logic;   --  Enable (data valid strobe)
      PWRITE                  : IN std_logic;   --  Write/nRead signal
      PWDATA                  : IN std_logic_vector(7 DOWNTO 0);   --  8 bit write data
      PRDATA                  : OUT std_logic_vector(7 DOWNTO 0);   --  8 bit read data
      -- transmit ready and receive full indicators

      TXRDY                   : OUT std_logic;   
      RXRDY                   : OUT std_logic;   
      -- FLAGS 

      PARITY_ERR              : OUT std_logic;   
      OVERFLOW                : OUT std_logic;   
      -- Serial receive and transmit data

      RX                      : IN std_logic;   
      TX                      : OUT std_logic);   
END COMPONENT ;

   CONSTANT xhdl_timescale         : time := 1 ns;

   TYPE xhdl_1 IS ARRAY (0 TO 511) OF std_logic_vector(7 DOWNTO 0);



   -------------------------------------------------
   -- component port listings
   -------------------------------------------------
   --  1=with fifo operation mode
   --  1=with fifo operation mode
   -------------------------------------------------
   -- internal signals
   -------------------------------------------------
   SIGNAL PCLK                     :  std_logic := '0';   
   SIGNAL PRESETN                  :  std_logic := '0';   
   SIGNAL UARTstatus1_data_out     :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL UARTstatus2_data_out     :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL UARTconfig1_bit8         :  std_logic;   
   SIGNAL UARTconfig1_parity_en    :  std_logic;   
   SIGNAL UARTconfig1_odd_n_even   :  std_logic;   
   SIGNAL UARTconfig2_bit8         :  std_logic;   
   SIGNAL UARTconfig2_parity_en    :  std_logic;   
   SIGNAL UARTconfig2_odd_n_even   :  std_logic;   
   SIGNAL PWDATA1                  :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL PWDATA2                  :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL txdata1                  :  std_logic;   
   SIGNAL rxdata1                  :  std_logic;   
   SIGNAL txdata2                  :  std_logic;   
   SIGNAL rxdata2                  :  std_logic;   
   SIGNAL PSEL1                    :  std_logic;   
   SIGNAL PSEL2                    :  std_logic;   
   SIGNAL count                    :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL tdata                    :  xhdl_1;   
   SIGNAL rdata                    :  xhdl_1;   
   SIGNAL wdata                    :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL wdata1                   :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL wdata2                   :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL rc                       :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL tc                       :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL i                        :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL passflag                 :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL par_err                  :  xhdl_1;   
   SIGNAL PWRITE1                  :  std_logic;   
   SIGNAL PWRITE2                  :  std_logic;   
   SIGNAL PENABLE1                 :  std_logic;   
   SIGNAL PENABLE2                 :  std_logic;   
   SIGNAL PADDR1                   :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL PADDR2                   :  std_logic_vector(8 DOWNTO 0);   
   SIGNAL UARTstatus1_overflow     :  std_logic;   
   SIGNAL UARTstatus1_parity_err   :  std_logic;   
   SIGNAL UARTstatus1_rxrdy        :  std_logic;   
   SIGNAL UARTstatus1_txrdy        :  std_logic;   
   SIGNAL UARTstatus2_overflow     :  std_logic;   
   SIGNAL UARTstatus2_parity_err   :  std_logic;   
   SIGNAL UARTstatus2_rxrdy        :  std_logic;   
   SIGNAL UARTstatus2_txrdy        :  std_logic;   



BEGIN

   -------------------------------------------------
   -- 2 Meg baud selection based on 33 MHZ clock
   -------------------------------------------------
   -------------------------------------------------
   -- drive clock
   -------------------------------------------------
   
   PROCESS
   BEGIN
      WAIT FOR 15 * xhdl_timescale;
      
      PCLK <= NOT PCLK;    
   END PROCESS;
   
   -------------------------------------------------
   -- component instantiations
   -------------------------------------------------
   make_UART1 : CoreUARTapb 
      GENERIC MAP (
         PRG_PARITY => PRG_PARITY,
         TX_FIFO => TX_FIFO,
         BAUD_VALUE => BAUD_VALUE,
         FAMILY => FAMILY,
         RX_FIFO => RX_FIFO,
         PRG_BIT8 => PRG_BIT8,
         FIXEDMODE => FIXEDMODE)
      PORT MAP (
         PCLK => PCLK,
         PRESETN => PRESETN,
         PADDR => PADDR1(4 DOWNTO 2),
         PSEL => PSEL1,
         PENABLE => PENABLE1,
         PWRITE => PWRITE1,
         PWDATA => PWDATA1,
         PRDATA => UARTstatus1_data_out,
         TXRDY => UARTstatus1_txrdy,
         RXRDY => UARTstatus1_rxrdy,
         PARITY_ERR => UARTstatus1_parity_err,
         OVERFLOW => UARTstatus1_overflow,
         RX => rxdata1,
         TX => txdata1);   
   
   make_UART2 : CoreUARTapb 
      GENERIC MAP (
         PRG_PARITY => PRG_PARITY,
         TX_FIFO => TX_FIFO,
         BAUD_VALUE => BAUD_VALUE,
         FAMILY => FAMILY,
         RX_FIFO => RX_FIFO,
         PRG_BIT8 => PRG_BIT8,
         FIXEDMODE => FIXEDMODE)
      PORT MAP (
         PCLK => PCLK,
         PRESETN => PRESETN,
         PADDR => PADDR2(4 DOWNTO 2),
         PSEL => PSEL2,
         PENABLE => PENABLE2,
         PWRITE => PWRITE2,
         PWDATA => PWDATA2,
         PRDATA => UARTstatus2_data_out,
         TXRDY => UARTstatus2_txrdy,
         RXRDY => UARTstatus2_rxrdy,
         PARITY_ERR => UARTstatus2_parity_err,
         OVERFLOW => UARTstatus2_overflow,
         RX => rxdata2,
         TX => txdata2);   
   
   rxdata1 <= txdata2 ;
   rxdata2 <= txdata1 ;

   xhdl_7 : PROCESS

   VARIABLE xhdl_initial : BOOLEAN := TRUE;

   PROCEDURE cpu_write1 (
         address                 : IN std_logic_vector(8 DOWNTO 0);   
         data                    : IN std_logic_vector(7 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      -- $display("CPU Write %04x = %04x",address,data);
      
      
      PWRITE1 <= '0';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE1 <= '0';    
      PSEL1 <= '1';    
      PADDR1 <= address;    
      PWDATA1 <= data;    
      PWRITE1 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE1 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PWRITE1 <= '0';    
      PENABLE1 <= '0';    
      PSEL1 <= '0';    
   END PROCEDURE cpu_write1;


   PROCEDURE cpu_write2 (
         address                 : IN std_logic_vector(8 DOWNTO 0);   
         data                    : IN std_logic_vector(7 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      -- $display("CPU Write %04x = %04x",address,data);
      
      
      PWRITE2 <= '0';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE2 <= '0';    
      PSEL2 <= '1';    
      PADDR2 <= address;    
      PWDATA2 <= data;    
      PWRITE2 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE2 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PWRITE2 <= '0';    
      PENABLE2 <= '0';    
      PSEL2 <= '0';    
   END PROCEDURE cpu_write2;

   PROCEDURE cpu_read2 (
         address                 : IN std_logic_vector(8 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PWRITE2 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE2 <= '0';    
      PSEL2 <= '1';    
      PADDR2 <= address;    
      PWRITE2 <= '0';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PENABLE2 <= '1';    
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      
      PWRITE2 <= '1';    
      PENABLE2 <= '0';    
      PSEL2 <= '0';    
      -- $display("CPU Read %04x = %04x",address, UARTstatus2_data_out);
      
      
   END PROCEDURE cpu_read2;

   -- This task does a cpu read
   PROCEDURE cpu_read1 (
         address                 : IN std_logic_vector(8 DOWNTO 0))IS
   
      
   BEGIN
      WAIT UNTIL (PCLK'EVENT AND PCLK = '0');
      

⌨️ 快捷键说明

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