?? testsupport.vhd
字號:
-- ********************************************************************/
-- Copyright 2007 Actel Corporation. All rights reserved.
-- IP Engineering
--
-- ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
-- ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
-- IN ADVANCE IN WRITING.
--
-- File: testsupport.vhd
--
-- Description: Simple APB Bus Controller
-- Support package for testbench
--
-- Rev: 2.3 01Mar07 IPB : Production Release
--
-- Notes:
--
-- *********************************************************************/
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use work.support.all;
use work.textio.all;
package testsupport is
type TABCCONFIG is record
ID : integer range 0 to 9 ;
FAMILY : integer range 0 to 19 ;
APB_AWIDTH : integer range 1 to 16 ;
APB_DWIDTH : integer range 8 to 32 ;
APB_SDEPTH : integer range 1 to 16 ;
ICWIDTH : integer range 1 to 16 ;
ZRWIDTH : integer range 0 to 16 ;
IIWIDTH : integer range 1 to 32 ;
IFWIDTH : integer range 0 to 28 ;
IOWIDTH : integer range 1 to 32 ;
STWIDTH : integer range 1 to 8 ;
EN_RAM : integer range 0 to 1 ;
EN_AND : integer range 0 to 1 ;
EN_XOR : integer range 0 to 1 ;
EN_OR : integer range 0 to 1 ;
EN_ADD : integer range 0 to 1 ;
EN_INC : integer range 0 to 1 ;
EN_SHL : integer range 0 to 1 ;
EN_SHR : integer range 0 to 1 ;
EN_CALL : integer range 0 to 1 ;
EN_PUSH : integer range 0 to 1 ;
EN_ACM : integer range 0 to 1 ;
EN_MULT : integer range 0 to 3 ;
EN_DATAM : integer range 0 to 3 ;
EN_INT : integer range 0 to 2 ;
ISRADDR : integer range 0 to 65536;
DEBUG : integer range 0 to 1 ;
INSMODE : integer range 0 to 2 ;
INITWIDTH : integer range 1 to 16 ;
TESTMODE : integer range 0 to 99 ;
EN_IOREAD : integer range 0 to 1 ;
EN_IOWRT : integer range 0 to 1 ;
EN_ALURAM : integer range 0 to 1 ;
EN_INDIRECT : integer range 0 to 1 ;
end record;
function tostr( x : integer) return string;
function log2( x: integer ) return integer;
function log2z( x: integer ) return integer;
function APBsetup ( TN,FAMILY,INSMODE : integer) return TABCCONFIG;
function set_generic(TN,X,Y: integer ) return integer;
function override(X,Y: integer ) return integer;
function overrideP(X,Y: integer ) return integer;
procedure printerror ( ERRORS : inout integer; str : string);
procedure checksetup (su : TABCCONFIG);
component APBModel
generic ( ID : integer range 0 to 15;
DEBUG : integer range 0 to 1;
AWIDTH : integer range 1 to 16;
DWIDTH : integer range 8 to 32
);
port ( PCLK : in std_logic;
PRESETN : in std_logic;
-- APB Interface
PENABLE : in std_logic;
PWRITE : in std_logic;
PSEL : in std_logic;
PADDR : in std_logic_vector( AWIDTH-1 downto 0);
PWDATA : in std_logic_vector( DWIDTH-1 downto 0);
PRDATA : out std_logic_vector( DWIDTH-1 downto 0);
PREADY : out std_logic
);
end component;
component MAKEHEX
generic ( ENABLE : boolean;
ID : integer range 0 to 9 ;
FAMILY : integer range 0 to 21;
AWIDTH : integer range 1 to 16;
DWIDTH : integer range 8 to 32;
SDEPTH : integer range 1 to 16;
ICWIDTH : integer range 1 to 16;
IIWIDTH : integer range 1 to 32;
IFWIDTH : integer range 0 to 28;
TESTMODE : integer range 0 to 99
);
end component;
component INITGEN
generic ( ENABLE : boolean;
ID : integer range 0 to 9 ;
AWIDTH : integer range 1 to 16;
DWIDTH : integer range 8 to 32;
SDEPTH : integer range 1 to 16 ;
ICWIDTH : integer range 1 to 16;
INITWIDTH : integer range 1 to 16
);
port ( PCLK : in std_logic;
PRESETN : in std_logic;
-- RAM Initialization Port
INITDATVAL : out std_logic;
INITDONE : out std_logic;
INITADDR : out std_logic_vector(INITWIDTH-1 downto 0);
INITDATA : out std_logic_vector(8 downto 0)
);
end component;
end testsupport;
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use work.support.all;
package body testsupport is
function log2( x: integer ) return integer is
begin
case x is
when 1 => return(0);
when 2 => return(1);
when 4 => return(2);
when 8 => return(3);
when 16 => return(4);
when 32 => return(5);
when 64 => return(6);
when 128 => return(7);
when 256 => return(8);
when 512 => return(9);
when others => return(-1);
end case;
end log2;
function log2z( x: integer ) return integer is
begin
case x is
when 1 => return(1);
when 2 => return(1);
when 4 => return(2);
when 8 => return(3);
when 16 => return(4);
when 32 => return(5);
when 64 => return(6);
when 128 => return(7);
when 256 => return(8);
when others => return(-1);
end case;
end log2z;
function set_generic(TN,X,Y: integer ) return integer is
begin
if TN=0 then
return(X);
else
return(Y);
end if;
end set_generic;
function override(X,Y: integer ) return integer is
begin
if X=-1 then
return(Y);
else
return(X);
end if;
end override;
function overrideP(X,Y: integer ) return integer is
begin
case X is
when 1 => return(0);
when 2 => return(0);
when 3 => return(1);
when 4 => return(1);
when 5 => return(2);
when others => return(Y);
end case;
end overrideP;
-- This function creates the core configuration based on the testmode
-- NOTES
-- Builds 0-6 match the Synthesis
function APBsetup ( TN,FAMILY,INSMODE : integer) return TABCCONFIG is
variable setup : TABCCONFIG;
begin
setup.FAMILY := FAMILY;
setup.TESTMODE := TN;
setup.INSMODE := INSMODE;
setup.INITWIDTH := 8;
setup.ID := 0;
setup.DEBUG := 1;
-- Default settings
setup.ZRWIDTH := 8;
setup.IIWIDTH := 4;
setup.IFWIDTH := 4;
setup.IOWIDTH := 8;
setup.EN_CALL := 1;
setup.EN_MULT := 1;
setup.EN_INC := 1;
setup.EN_ADD := 1;
setup.EN_AND := 1;
setup.EN_OR := 1;
setup.EN_XOR := 1;
setup.EN_SHL := 1;
setup.EN_SHR := 1;
setup.EN_DATAM := 2;
setup.EN_RAM := 1;
setup.EN_ACM := 1;
setup.ICWIDTH := 8;
setup.STWIDTH := 4;
setup.EN_PUSH := 1;
setup.INITWIDTH := 16;
setup.EN_INT := 0;
setup.ISRADDR := 0;
setup.EN_IOREAD := 0;
setup.EN_IOWRT := 1;
setup.EN_ALURAM := 0;
setup.EN_MULT := 0;
setup.EN_INDIRECT:= 0;
case TN is
when 0 => -- Example for controlling CoreAI
setup.APB_AWIDTH := 8;
setup.APB_DWIDTH := 16;
setup.APB_SDEPTH := 1;
setup.ICWIDTH := 5;
setup.ZRWIDTH := 0;
setup.IIWIDTH := 1;
setup.IOWIDTH := 2;
setup.STWIDTH := 1;
setup.EN_RAM := 0;
setup.EN_AND := 1;
setup.EN_XOR := 0;
setup.EN_OR := 0;
setup.EN_ADD := 1;
setup.EN_INC := 0;
setup.EN_SHL := 0;
setup.EN_SHR := 0;
setup.EN_CALL := 0;
setup.EN_ACM := 1;
setup.EN_DATAM := 2;
setup.EN_INT := 0;
setup.EN_PUSH := 0 ;
setup.ISRADDR := 0;
when 1 => -- Build: Small 8 bit no adder
setup.APB_AWIDTH := 8 ;
setup.APB_DWIDTH := 8 ;
setup.APB_SDEPTH := 1 ;
setup.ICWIDTH := 5 ;
setup.ZRWIDTH := 0 ;
setup.IIWIDTH := 4 ;
setup.IOWIDTH := 8 ;
setup.STWIDTH := 1 ;
setup.EN_RAM := 0 ;
setup.EN_AND := 1 ;
setup.EN_XOR := 1 ;
setup.EN_OR := 0 ;
setup.EN_ADD := 0 ;
setup.EN_INC := 1 ;
setup.EN_SHL := 0 ;
setup.EN_SHR := 0 ;
setup.EN_CALL := 0 ;
setup.EN_ACM := 0 ;
setup.EN_DATAM := 2 ;
setup.EN_PUSH := 0 ;
setup.EN_INT := 0;
setup.ISRADDR := 0;
when 2 => -- Build: Small 16 bit
setup.APB_AWIDTH := 8 ;
setup.APB_DWIDTH := 16 ;
setup.APB_SDEPTH := 1 ;
setup.ICWIDTH := 5 ;
setup.ZRWIDTH := 0 ;
setup.IIWIDTH := 4 ;
setup.IOWIDTH := 8 ;
setup.STWIDTH := 1 ;
setup.EN_RAM := 0 ;
setup.EN_AND := 1 ;
setup.EN_XOR := 1 ;
setup.EN_OR := 0 ;
setup.EN_ADD := 1 ;
setup.EN_INC := 0 ;
setup.EN_SHL := 0 ;
setup.EN_SHR := 0 ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -