|
|
|
|
|
LIBRARY ieee;
|
|
|
USE ieee.std_logic_1164.ALL;
|
|
|
USE ieee.numeric_std.ALL;
|
|
|
USE IEEE.std_logic_signed.ALL;
|
|
|
|
|
|
LIBRARY techmap;
|
|
|
USE techmap.gencomp.ALL;
|
|
|
use techmap.allclkgen.all;
|
|
|
|
|
|
library gaisler;
|
|
|
use gaisler.uart.all;
|
|
|
use gaisler.misc.all;
|
|
|
|
|
|
library grlib;
|
|
|
use grlib.stdlib.all;
|
|
|
use grlib.amba.all;
|
|
|
use grlib.devices.all;
|
|
|
|
|
|
LIBRARY std;
|
|
|
USE std.textio.ALL;
|
|
|
|
|
|
LIBRARY lpp;
|
|
|
USE lpp.general_purpose.ALL;
|
|
|
USE lpp.lpp_amba.all;
|
|
|
USE lpp.lpp_lfr_management.ALL;
|
|
|
|
|
|
ENTITY testbench IS
|
|
|
port (
|
|
|
CLK50 : in std_logic;
|
|
|
LEDS : inout std_logic_vector(7 downto 0);
|
|
|
SW : in std_logic_vector(4 downto 1);
|
|
|
Trigger : out STD_LOGIC_VECTOR(3 DOWNTO 0);
|
|
|
uart_txd : out std_logic; -- DSU tx data
|
|
|
uart_rxd : in std_logic -- DSU rx data
|
|
|
);
|
|
|
END;
|
|
|
|
|
|
ARCHITECTURE behav OF testbench IS
|
|
|
|
|
|
SIGNAL TSTAMP : INTEGER := 0;
|
|
|
SIGNAL clk_50 : STD_LOGIC := '0';
|
|
|
SIGNAL clk : STD_LOGIC := '0';
|
|
|
SIGNAL rstn : STD_LOGIC;
|
|
|
SIGNAL rst : STD_LOGIC;
|
|
|
SIGNAL resetn : STD_LOGIC;
|
|
|
SIGNAL rstraw : STD_LOGIC;
|
|
|
|
|
|
--AMBA bus standard interface signals--
|
|
|
signal apbi : apb_slv_in_type;
|
|
|
signal apbo : apb_slv_out_vector := (others => apb_none);
|
|
|
signal ahbsi : ahb_slv_in_type;
|
|
|
signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
|
|
|
signal ahbmi : ahb_mst_in_type;
|
|
|
signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
|
|
|
|
|
|
|
|
|
signal dui : uart_in_type;
|
|
|
signal duo : uart_out_type;
|
|
|
|
|
|
SIGNAL SPW_Tickout : std_logic:='0';
|
|
|
SIGNAL CoarseTime : STD_LOGIC_VECTOR(31 DOWNTO 0):=(others=>'0');
|
|
|
SIGNAL FineTime : STD_LOGIC_VECTOR(15 DOWNTO 0):=(others=>'0');
|
|
|
SIGNAL SubFineTime : integer range 0 to 49999999:=0;
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
|
|
|
clk_25:PROCESS(clk_50)
|
|
|
BEGIN
|
|
|
IF clk_50'EVENT AND clk_50 = '1' THEN
|
|
|
clk <= not clk;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
resetn <= SW(1);
|
|
|
LEDS <= CoarseTime(7 downto 0);
|
|
|
|
|
|
uart_txd <= duo.txd;
|
|
|
dui.rxd <= uart_rxd;
|
|
|
|
|
|
clk_pad : clkpad generic map (tech => spartan6) port map (CLK50, clk_50);
|
|
|
|
|
|
resetn_pad : inpad generic map (tech => spartan6) port map (resetn, rst);
|
|
|
rst0 : rstgen -- reset generator (reset is active LOW)
|
|
|
port map (rst, clk, '1', rstn, rstraw);
|
|
|
----------------------------------------------------------------------
|
|
|
--- AHB CONTROLLER --------------------------------------------------
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
ahb0 : ahbctrl -- AHB arbiter/multiplexer
|
|
|
generic map (defmast => 0, split => 1,
|
|
|
rrobin => 1, ioaddr => 16#FFF#,
|
|
|
nahbm => 1, nahbs => 1)
|
|
|
|
|
|
port map (rstn, clk, ahbmi, ahbmo, ahbsi, ahbso);
|
|
|
|
|
|
|
|
|
dcom0: ahbuart -- Debug UART
|
|
|
generic map (hindex => 0, pindex => 0, paddr => 0)
|
|
|
port map (rstn, clk, dui, duo, apbi, apbo(0), ahbmi, ahbmo(0));
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
--- APB Bridge ------------------------------------------------------
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
apb0 : apbctrl -- AHB/APB bridge
|
|
|
generic map (hindex => 0, haddr => 16#800#)
|
|
|
port map (rstn, clk, ahbsi, ahbso(0), apbi, apbo );
|
|
|
|
|
|
|
|
|
spw_time:PROCESS(clk,rstn)
|
|
|
BEGIN
|
|
|
IF rstn = '0' THEN
|
|
|
SPW_Tickout <= '0';
|
|
|
SubFineTime <= 0;
|
|
|
ELSIF clk'EVENT AND clk = '1' THEN
|
|
|
if SubFineTime = 24999999 then
|
|
|
SubFineTime <= 0;
|
|
|
SPW_Tickout <= '1';
|
|
|
else
|
|
|
SPW_Tickout <= '0';
|
|
|
SubFineTime <= SubFineTime + 1;
|
|
|
end if;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
--- APB_ADVANCED_TRIGGER_v -> Device Under Test ---------------------
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
DUT: APB_ADVANCED_TRIGGER_v
|
|
|
generic map(
|
|
|
pindex => 1,
|
|
|
paddr => 1,
|
|
|
count => 4
|
|
|
)
|
|
|
port map(
|
|
|
rstn => rstn,
|
|
|
clk => clk,
|
|
|
apbi => apbi,
|
|
|
apbo => apbo(1),
|
|
|
|
|
|
SPW_Tickout => SPW_Tickout,
|
|
|
CoarseTime => CoarseTime,
|
|
|
FineTime => FineTime,
|
|
|
|
|
|
Trigger => Trigger
|
|
|
);
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
-- APB_LFR_MANAGEMENT ---------------------------------------------------------
|
|
|
-------------------------------------------------------------------------------
|
|
|
apb_lfr_management_1 : apb_lfr_management
|
|
|
GENERIC MAP (
|
|
|
tech => spartan6,
|
|
|
pindex => 2,
|
|
|
paddr => 2,
|
|
|
pmask => 16#fff#,
|
|
|
NB_SECOND_DESYNC => 60) -- 60 secondes of desynchronization before CoarseTime's MSB is Set
|
|
|
PORT MAP (
|
|
|
clk25MHz => clk,
|
|
|
resetn_25MHz => rstn,
|
|
|
grspw_tick => SPW_Tickout,
|
|
|
apbi => apbi,
|
|
|
apbo => apbo(2),
|
|
|
HK_sample => (others=>'0'),
|
|
|
HK_val => '0',
|
|
|
HK_sel => open,
|
|
|
DAC_SDO => OPEN,
|
|
|
DAC_SCK => OPEN,
|
|
|
DAC_SYNC => OPEN,
|
|
|
DAC_CAL_EN => OPEN,
|
|
|
coarse_time => CoarseTime,
|
|
|
fine_time => FineTime,
|
|
|
LFR_soft_rstn => open
|
|
|
);
|
|
|
|
|
|
|
|
|
END;
|
|
|
|