-------------------------------------------------------------------------------- -- Copyright (c) 1995-2003 Xilinx, Inc. -- All Right Reserved. -------------------------------------------------------------------------------- -- ____ ____ -- / /\/ / -- /___/ \ / Vendor: Xilinx -- \ \ \/ Version : 8.2i -- \ \ Application : ISE -- / / Filename : top_tb0.vhw -- /___/ /\ Timestamp : Tue Feb 27 11:27:47 2007 -- \ \ / \ -- \___\/\___\ -- --Command: --Design Name: top_tb0 --Device: Xilinx -- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library UNISIM; use UNISIM.VComponents.all; USE IEEE.STD_LOGIC_TEXTIO.ALL; USE STD.TEXTIO.ALL; ENTITY top_tb0 IS END top_tb0; ARCHITECTURE testbench_arch OF top_tb0 IS COMPONENT top PORT ( POR : In std_logic; CLK_40MHZ : In std_logic; CLK_40MHZ_OK : In std_logic; CTRL : In std_logic; CTRL_OK : In std_logic; LOCKED : In std_logic; DATA : Out std_logic_vector (15 DownTo 0); HFn_B : In std_logic_vector (3 DownTo 0); FFn_B : In std_logic_vector (3 DownTo 0); RST_TIMERn : Out std_logic; DAC_LOADn : Out std_logic; DAC_DIN : Out std_logic; DAC_SCLK : Out std_logic; DAC_CSn_B : Out std_logic_vector (3 DownTo 0); RST4n_B : Out std_logic_vector (3 DownTo 0); RCLK4_B : Out std_logic_vector (3 DownTo 0); D_OEn_B : Out std_logic_vector (3 DownTo 0); ACQENnB0 : Out std_logic_vector (3 DownTo 0); ACQENnB1 : Out std_logic_vector (3 DownTo 0); ACQENnB2 : Out std_logic_vector (3 DownTo 0); ACQENnB3 : Out std_logic_vector (3 DownTo 0); ACLK : Out std_logic; RESETn : Out std_logic; SYSCLK : Out std_logic; ENABLEn_B : Out std_logic_vector (3 DownTo 0); TCLK : Out std_logic; RCLK3 : Out std_logic; ADCRST : Out std_logic; TMODE : Out std_logic; DR0 : Out std_logic; DR1 : Out std_logic; PT0 : Out std_logic; PT1 : Out std_logic; uD_OEn_B : Out std_logic_vector (3 DownTo 0); uDw : Out std_logic_vector (7 DownTo 0); uDr : In std_logic_vector (7 DownTo 0); SYNCn : Out std_logic ); END COMPONENT; SIGNAL POR : std_logic := '1'; SIGNAL CLK_40MHZ : std_logic := '0'; SIGNAL CLK_40MHZ_OK : std_logic := '0'; SIGNAL CTRL : std_logic := '0'; SIGNAL CTRL_OK : std_logic := '0'; SIGNAL LOCKED : std_logic := '0'; SIGNAL DATA : std_logic_vector (15 DownTo 0) := "0000000000000000"; SIGNAL HFn_B : std_logic_vector (3 DownTo 0) := "1111"; SIGNAL FFn_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL RST_TIMERn : std_logic := '0'; SIGNAL DAC_LOADn : std_logic := '0'; SIGNAL DAC_DIN : std_logic := '0'; SIGNAL DAC_SCLK : std_logic := '0'; SIGNAL DAC_CSn_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL RST4n_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL RCLK4_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL D_OEn_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL ACQENnB0 : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL ACQENnB1 : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL ACQENnB2 : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL ACQENnB3 : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL ACLK : std_logic := '0'; SIGNAL RESETn : std_logic := '0'; SIGNAL SYSCLK : std_logic := '0'; SIGNAL ENABLEn_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL TCLK : std_logic := '0'; SIGNAL RCLK3 : std_logic := '0'; SIGNAL ADCRST : std_logic := '0'; SIGNAL TMODE : std_logic := '0'; SIGNAL DR0 : std_logic := '0'; SIGNAL DR1 : std_logic := '0'; SIGNAL PT0 : std_logic := '0'; SIGNAL PT1 : std_logic := '0'; SIGNAL uD_OEn_B : std_logic_vector (3 DownTo 0) := "0000"; SIGNAL uDw : std_logic_vector (7 DownTo 0) := "00000000"; SIGNAL uDr : std_logic_vector (7 DownTo 0) := "00000000"; SIGNAL SYNCn : std_logic := '0'; SHARED VARIABLE TX_ERROR : INTEGER := 0; SHARED VARIABLE TX_OUT : LINE; constant PERIOD : time := 20 ns; constant DUTY_CYCLE : real := 0.5; constant OFFSET : time := 100 ns; BEGIN UUT : top PORT MAP ( POR => POR, CLK_40MHZ => CLK_40MHZ, CLK_40MHZ_OK => CLK_40MHZ_OK, CTRL => CTRL, CTRL_OK => CTRL_OK, LOCKED => LOCKED, DATA => DATA, HFn_B => HFn_B, FFn_B => FFn_B, RST_TIMERn => RST_TIMERn, DAC_LOADn => DAC_LOADn, DAC_DIN => DAC_DIN, DAC_SCLK => DAC_SCLK, DAC_CSn_B => DAC_CSn_B, RST4n_B => RST4n_B, RCLK4_B => RCLK4_B, D_OEn_B => D_OEn_B, ACQENnB0 => ACQENnB0, ACQENnB1 => ACQENnB1, ACQENnB2 => ACQENnB2, ACQENnB3 => ACQENnB3, ACLK => ACLK, RESETn => RESETn, SYSCLK => SYSCLK, ENABLEn_B => ENABLEn_B, TCLK => TCLK, RCLK3 => RCLK3, ADCRST => ADCRST, TMODE => TMODE, DR0 => DR0, DR1 => DR1, PT0 => PT0, PT1 => PT1, uD_OEn_B => uD_OEn_B, uDw => uDw, uDr => uDr, SYNCn => SYNCn ); PROCESS -- clock process for CLK_40MHZ BEGIN WAIT for OFFSET; CLOCK_LOOP : LOOP CLK_40MHZ <= '0'; WAIT FOR (PERIOD - (PERIOD * DUTY_CYCLE)); CLK_40MHZ <= '1'; WAIT FOR (PERIOD * DUTY_CYCLE); END LOOP CLOCK_LOOP; END PROCESS; PROCESS PROCEDURE CHECK_ACLK( next_ACLK : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ACLK /= next_ACLK) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ACLK=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ACLK); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ACLK); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ACQENnB0( next_ACQENnB0 : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ACQENnB0 /= next_ACQENnB0) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ACQENnB0=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ACQENnB0); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ACQENnB0); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ACQENnB1( next_ACQENnB1 : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ACQENnB1 /= next_ACQENnB1) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ACQENnB1=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ACQENnB1); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ACQENnB1); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ACQENnB2( next_ACQENnB2 : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ACQENnB2 /= next_ACQENnB2) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ACQENnB2=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ACQENnB2); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ACQENnB2); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ACQENnB3( next_ACQENnB3 : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ACQENnB3 /= next_ACQENnB3) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ACQENnB3=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ACQENnB3); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ACQENnB3); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ADCRST( next_ADCRST : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ADCRST /= next_ADCRST) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ADCRST=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ADCRST); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ADCRST); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DAC_CSn_B( next_DAC_CSn_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DAC_CSn_B /= next_DAC_CSn_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DAC_CSn_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DAC_CSn_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DAC_CSn_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DAC_DIN( next_DAC_DIN : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DAC_DIN /= next_DAC_DIN) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DAC_DIN=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DAC_DIN); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DAC_DIN); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DAC_LOADn( next_DAC_LOADn : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DAC_LOADn /= next_DAC_LOADn) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DAC_LOADn=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DAC_LOADn); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DAC_LOADn); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DAC_SCLK( next_DAC_SCLK : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DAC_SCLK /= next_DAC_SCLK) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DAC_SCLK=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DAC_SCLK); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DAC_SCLK); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DATA( next_DATA : std_logic_vector (15 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DATA /= next_DATA) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DATA=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DATA); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DATA); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DR0( next_DR0 : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DR0 /= next_DR0) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DR0=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DR0); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DR0); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_DR1( next_DR1 : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (DR1 /= next_DR1) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns DR1=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, DR1); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_DR1); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_D_OEn_B( next_D_OEn_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (D_OEn_B /= next_D_OEn_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns D_OEn_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, D_OEn_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_D_OEn_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_ENABLEn_B( next_ENABLEn_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (ENABLEn_B /= next_ENABLEn_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns ENABLEn_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, ENABLEn_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_ENABLEn_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_PT0( next_PT0 : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (PT0 /= next_PT0) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns PT0=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, PT0); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_PT0); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_PT1( next_PT1 : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (PT1 /= next_PT1) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns PT1=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, PT1); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_PT1); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_RCLK3( next_RCLK3 : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (RCLK3 /= next_RCLK3) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns RCLK3=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, RCLK3); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_RCLK3); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_RCLK4_B( next_RCLK4_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (RCLK4_B /= next_RCLK4_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns RCLK4_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, RCLK4_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_RCLK4_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_RESETn( next_RESETn : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (RESETn /= next_RESETn) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns RESETn=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, RESETn); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_RESETn); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_RST4n_B( next_RST4n_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (RST4n_B /= next_RST4n_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns RST4n_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, RST4n_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_RST4n_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_RST_TIMERn( next_RST_TIMERn : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (RST_TIMERn /= next_RST_TIMERn) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns RST_TIMERn=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, RST_TIMERn); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_RST_TIMERn); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_SYNCn( next_SYNCn : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (SYNCn /= next_SYNCn) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns SYNCn=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, SYNCn); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_SYNCn); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_SYSCLK( next_SYSCLK : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (SYSCLK /= next_SYSCLK) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns SYSCLK=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, SYSCLK); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_SYSCLK); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_TCLK( next_TCLK : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (TCLK /= next_TCLK) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns TCLK=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, TCLK); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_TCLK); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_TMODE( next_TMODE : std_logic; TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (TMODE /= next_TMODE) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns TMODE=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, TMODE); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_TMODE); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_uD_OEn_B( next_uD_OEn_B : std_logic_vector (3 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (uD_OEn_B /= next_uD_OEn_B) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns uD_OEn_B=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, uD_OEn_B); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_uD_OEn_B); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; PROCEDURE CHECK_uDw( next_uDw : std_logic_vector (7 DownTo 0); TX_TIME : INTEGER ) IS VARIABLE TX_STR : String(1 to 4096); VARIABLE TX_LOC : LINE; BEGIN IF (uDw /= next_uDw) THEN STD.TEXTIO.write(TX_LOC, string'("Error at time=")); STD.TEXTIO.write(TX_LOC, TX_TIME); STD.TEXTIO.write(TX_LOC, string'("ns uDw=")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, uDw); STD.TEXTIO.write(TX_LOC, string'(", Expected = ")); IEEE.STD_LOGIC_TEXTIO.write(TX_LOC, next_uDw); STD.TEXTIO.write(TX_LOC, string'(" ")); TX_STR(TX_LOC.all'range) := TX_LOC.all; STD.TEXTIO.Deallocate(TX_LOC); ASSERT (FALSE) REPORT TX_STR SEVERITY ERROR; TX_ERROR := TX_ERROR + 1; END IF; END; BEGIN -- ------------- Current Time: 265ns WAIT FOR 265 ns; CTRL_OK <= '1'; -- ------------------------------------- -- ------------- Current Time: 365ns WAIT FOR 100 ns; CLK_40MHZ_OK <= '1'; -- ------------------------------------- -- ------------- Current Time: 445ns WAIT FOR 80 ns; POR <= '0'; -- ------------------------------------- -- ------------- Current Time: 465ns WAIT FOR 20 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 485ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 505ns WAIT FOR 20 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 525ns WAIT FOR 20 ns; LOCKED <= '1'; -- ------------------------------------- -- ------------- Current Time: 545ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 865ns WAIT FOR 320 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 885ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 925ns WAIT FOR 40 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 965ns WAIT FOR 40 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1085ns WAIT FOR 120 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 1105ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1365ns WAIT FOR 260 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 1405ns WAIT FOR 40 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1425ns WAIT FOR 20 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 1445ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1525ns WAIT FOR 80 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1605ns WAIT FOR 80 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 1625ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 1665ns WAIT FOR 40 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 1685ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 3145ns WAIT FOR 1460 ns; HFn_B <= "0111"; -- ------------------------------------- -- ------------- Current Time: 3205ns WAIT FOR 60 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 3225ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 3305ns WAIT FOR 80 ns; HFn_B <= "1111"; -- ------------------------------------- -- ------------- Current Time: 4125ns WAIT FOR 820 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 4165ns WAIT FOR 40 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 4185ns WAIT FOR 20 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 4205ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 4265ns WAIT FOR 60 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 4285ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 4365ns WAIT FOR 80 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 4385ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 5425ns WAIT FOR 1040 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 5465ns WAIT FOR 40 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 5485ns WAIT FOR 20 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 5505ns WAIT FOR 20 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 5665ns WAIT FOR 160 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 5725ns WAIT FOR 60 ns; CTRL <= '0'; -- ------------------------------------- -- ------------- Current Time: 5765ns WAIT FOR 40 ns; CTRL <= '1'; -- ------------------------------------- -- ------------- Current Time: 5805ns WAIT FOR 40 ns; CTRL <= '0'; -- ------------------------------------- WAIT FOR 114215 ns; IF (TX_ERROR = 0) THEN STD.TEXTIO.write(TX_OUT, string'("No errors or warnings")); ASSERT (FALSE) REPORT "Simulation successful (not a failure). No problems detected." SEVERITY FAILURE; ELSE STD.TEXTIO.write(TX_OUT, TX_ERROR); STD.TEXTIO.write(TX_OUT, string'(" errors found in simulation")); ASSERT (FALSE) REPORT "Errors found during simulation" SEVERITY FAILURE; END IF; END PROCESS; END testbench_arch;