---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
--
|
--
|
-- Title : test_pkg.vhd
|
-- Title : test_pkg.vhd
|
-- Author : Dmitry Smekhov
|
-- Author : Dmitry Smekhov
|
-- Company : Instrumental System
|
-- Company : Instrumental System
|
--
|
--
|
-- Version : 1.0
|
-- Version : 1.0
|
--
|
--
|
---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
--
|
--
|
-- Description : Пакет для тестирования ambpex5.
|
-- Description : Пакет для тестирования ambpex5.
|
--
|
--
|
---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
|
|
|
|
library ieee;
|
library ieee;
|
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
use ieee.std_logic_arith.all;
|
use ieee.std_logic_arith.all;
|
use ieee.std_logic_unsigned.all;
|
use ieee.std_logic_unsigned.all;
|
use ieee.std_logic_textio.all;
|
use ieee.std_logic_textio.all;
|
use std.textio.all;
|
use std.textio.all;
|
|
|
|
|
library work;
|
library work;
|
use work.cmd_sim_pkg.all;
|
use work.cmd_sim_pkg.all;
|
use work.block_pkg.all;
|
use work.block_pkg.all;
|
use work.trd_pkg.all;
|
use work.trd_pkg.all;
|
|
|
|
|
|
|
package test_pkg is
|
package test_pkg is
|
|
|
--! Инициализация теста
|
--! Инициализация теста
|
procedure test_init(
|
procedure test_init(
|
fname: in string --! имя файла отчёта
|
fname: in string --! имя файла отчёта
|
);
|
);
|
|
|
--! Завершение теста
|
--! Завершение теста
|
procedure test_close;
|
procedure test_close;
|
|
|
|
|
|
|
--! Запуск DMA с неправильным дескриптором
|
--! Запуск DMA с неправильным дескриптором
|
procedure test_dsc_incorrect (
|
procedure test_dsc_incorrect (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
--! Запуск DMA на приём одного блока 4 кБ
|
--! Запуск DMA на приём одного блока 4 кБ
|
procedure test_read_4kb (
|
procedure test_read_4kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
|
|
--! Чтение 8 кБ из тетрады DIO_IN
|
--! Чтение 8 кБ из тетрады DIO_IN
|
procedure test_adm_read_8kb (
|
procedure test_adm_read_8kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
--! Проверка обращений к блоку MAIN
|
--! Проверка обращений к блоку MAIN
|
procedure test_block_main (
|
procedure test_block_main (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
--! Чтение 16 кБ с использованием двух блоков дескрипторов
|
--! Чтение 16 кБ с использованием двух блоков дескрипторов
|
procedure test_adm_read_16kb (
|
procedure test_adm_read_16kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
--! Запись 16 кБ с использованием двух блоков дескрипторов
|
--! Запись 16 кБ с использованием двух блоков дескрипторов
|
procedure test_adm_write_16kb (
|
procedure test_adm_write_16kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
);
|
);
|
|
|
end package test_pkg;
|
end package test_pkg;
|
|
|
package body test_pkg is
|
package body test_pkg is
|
|
|
FILE log: text;
|
FILE log: text;
|
|
|
shared variable cnt_ok, cnt_error: integer;
|
shared variable cnt_ok, cnt_error: integer;
|
|
|
-- Инициализация теста
|
-- Инициализация теста
|
procedure test_init(
|
procedure test_init(
|
fname: in string -- имя файла отчёта
|
fname: in string -- имя файла отчёта
|
) is
|
) is
|
begin
|
begin
|
|
|
file_open( log, fname, WRITE_MODE );
|
file_open( log, fname, WRITE_MODE );
|
cnt_ok:=0;
|
cnt_ok:=0;
|
cnt_error:=0;
|
cnt_error:=0;
|
|
|
end test_init;
|
end test_init;
|
|
|
-- Завершение теста
|
-- Завершение теста
|
procedure test_close is
|
procedure test_close is
|
variable str : LINE; -- pointer to string
|
variable str : LINE; -- pointer to string
|
begin
|
begin
|
|
|
std.textio.write( str, string'(" " ));
|
std.textio.write( str, string'(" " ));
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
write( str, string'("Проверка завершена" ));
|
write( str, string'("Проверка завершена" ));
|
writeline( log, str );
|
writeline( log, str );
|
write( str, string'("Число успешных тестов: " ));
|
write( str, string'("Число успешных тестов: " ));
|
write( str, cnt_ok );
|
write( str, cnt_ok );
|
writeline( log, str );
|
writeline( log, str );
|
write( str, string'("Число ошибочных тестов: " ));
|
write( str, string'("Число ошибочных тестов: " ));
|
write( str, cnt_error );
|
write( str, cnt_error );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
|
file_close( log );
|
file_close( log );
|
|
|
end test_close;
|
end test_close;
|
|
|
|
|
|
|
--! Запуск DMA с неправильным дескриптором
|
--! Запуск DMA с неправильным дескриптором
|
procedure test_dsc_incorrect (
|
procedure test_dsc_incorrect (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
variable error : integer:=0;
|
begin
|
begin
|
|
|
write( str, string'("TEST_DSC_INCORRECT" ));
|
write( str, string'("TEST_DSC_INCORRECT" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
---- Формирование блока дескрипторов ---
|
---- Формирование блока дескрипторов ---
|
for ii in 0 to 127 loop
|
for ii in 0 to 127 loop
|
adr:= x"00100000";
|
adr:= x"00100000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
end loop;
|
end loop;
|
|
|
int_mem_write( cmd, ret, x"00100000", x"03020100" );
|
int_mem_write( cmd, ret, x"00100000", x"03020100" );
|
int_mem_write( cmd, ret, x"001001FC", x"FF00AA00" );
|
int_mem_write( cmd, ret, x"001001FC", x"FF00AA00" );
|
|
|
---- Программирование канала DMA ----
|
---- Программирование канала DMA ----
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
|
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 23, x"0000A400" ); -- LOCAL_ADR
|
block_write( cmd, ret, 4, 23, x"0000A400" ); -- LOCAL_ADR
|
|
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
wait for 10 us;
|
wait for 10 us;
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
|
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data( 15 downto 0 )=x"A021" ) then
|
if( data( 15 downto 0 )=x"A021" ) then
|
write( str, string'(" - Ok" ));
|
write( str, string'(" - Ok" ));
|
cnt_ok := cnt_ok + 1;
|
|
else
|
else
|
write( str, string'(" - Error" ));
|
write( str, string'(" - Error" ));
|
cnt_error := cnt_error + 1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
|
|
|
-- вывод в файл --
|
|
writeline( log, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( log, str );
|
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
|
|
end test_dsc_incorrect;
|
end test_dsc_incorrect;
|
|
|
|
|
--! Запуск DMA приём одного блока 4 кБ
|
--! Запуск DMA приём одного блока 4 кБ
|
procedure test_read_4kb (
|
procedure test_read_4kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
|
variable error : integer:=0;
|
variable error : integer:=0;
|
variable dma_complete : integer;
|
variable dma_complete : integer;
|
|
|
begin
|
begin
|
|
|
write( str, string'("TEST_READ_4KB" ));
|
write( str, string'("TEST_READ_4KB" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
---- Формирование блока дескрипторов ---
|
---- Формирование блока дескрипторов ---
|
for ii in 0 to 127 loop
|
for ii in 0 to 127 loop
|
adr:= x"00100000";
|
adr:= x"00100000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
end loop;
|
end loop;
|
|
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100004", x"00000100" );
|
int_mem_write( cmd, ret, x"00100004", x"00000100" );
|
|
|
|
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001FC", x"762C4953" );
|
int_mem_write( cmd, ret, x"001001FC", x"762C4953" );
|
|
|
---- Программирование канала DMA ----
|
---- Программирование канала DMA ----
|
block_write( cmd, ret, 4, 8, x"00000025" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 8, x"00000025" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
|
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 23, x"0000A400" ); -- LOCAL_ADR
|
block_write( cmd, ret, 4, 23, x"0000A400" ); -- LOCAL_ADR
|
|
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
wait for 20 us;
|
wait for 20 us;
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
|
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data( 8 )='1' ) then
|
if( data( 8 )='1' ) then
|
write( str, string'(" - Дескриптор правильный" ));
|
write( str, string'(" - Дескриптор правильный" ));
|
else
|
else
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
error := error + 1;
|
error := error + 1;
|
end if;
|
end if;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( error=0 ) then
|
if( error=0 ) then
|
|
|
---- Ожидание завершения DMA ----
|
---- Ожидание завершения DMA ----
|
dma_complete := 0;
|
dma_complete := 0;
|
for ii in 0 to 100 loop
|
for ii in 0 to 100 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data(5)='1' ) then
|
if( data(5)='1' ) then
|
write( str, string'(" - DMA завершён " ));
|
write( str, string'(" - DMA завершён " ));
|
dma_complete := 1;
|
dma_complete := 1;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=1 ) then
|
if( dma_complete=1 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
|
|
wait for 1 us;
|
wait for 1 us;
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=0 ) then
|
if( dma_complete=0 ) then
|
write( str, string'("Ошибка - DMA не завершён " ));
|
write( str, string'("Ошибка - DMA не завершён " ));
|
writeline( log, str );
|
writeline( log, str );
|
error:=error+1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
end if;
|
end if;
|
|
|
for ii in 0 to 3 loop
|
for ii in 0 to 3 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
writeline( log, str );
|
writeline( log, str );
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
end loop;
|
end loop;
|
|
|
|
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
|
|
write( str, string'(" Прочитано: " ));
|
write( str, string'(" Прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00800000";
|
adr:= x"00800000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
|
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
|
|
|
-- вывод в файл --
|
writeline( log, str );
|
writeline( log, str );
|
if( error=0 ) then
|
if( error=0 ) then
|
write( str, string'(" Тест завершён успешно " ));
|
write( str, string'("TEST finished successfully" ));
|
cnt_ok := cnt_ok + 1;
|
cnt_ok := cnt_ok + 1;
|
else
|
else
|
write( str, string'(" Тест не выполнен " ));
|
write( str, string'("TEST finished with ERR" ));
|
cnt_error := cnt_error + 1;
|
cnt_error := cnt_error + 1;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
|
|
end test_read_4kb;
|
end test_read_4kb;
|
|
|
|
|
--! Чтение 8 кБ из тетрады DIO_IN
|
--! Чтение 8 кБ из тетрады DIO_IN
|
procedure test_adm_read_8kb (
|
procedure test_adm_read_8kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
|
variable error : integer:=0;
|
variable error : integer:=0;
|
variable dma_complete : integer;
|
variable dma_complete : integer;
|
|
|
begin
|
begin
|
|
|
write( str, string'("TEST_ADM_READ_8KB" ));
|
write( str, string'("TEST_ADM_READ_8KB" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
---- Формирование блока дескрипторов ---
|
---- Формирование блока дескрипторов ---
|
for ii in 0 to 127 loop
|
for ii in 0 to 127 loop
|
adr:= x"00100000";
|
adr:= x"00100000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
end loop;
|
end loop;
|
|
|
--- Дескриптор 0 ---
|
--- Дескриптор 0 ---
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100004", x"00000111" ); -- переход к следующему
|
int_mem_write( cmd, ret, x"00100004", x"00000111" ); -- переход к следующему
|
|
|
--- Дескриптор 1 ---
|
--- Дескриптор 1 ---
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"0010000C", x"00000110" ); -- остановка
|
int_mem_write( cmd, ret, x"0010000C", x"00000110" ); -- остановка
|
|
|
|
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001FC", x"D6644953" );
|
int_mem_write( cmd, ret, x"001001FC", x"D6644953" );
|
|
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
|
|
---- Программирование канала DMA ----
|
---- Программирование канала DMA ----
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
|
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 23, x"00019000" ); -- LOCAL_ADR
|
block_write( cmd, ret, 4, 23, x"00019000" ); -- LOCAL_ADR
|
|
|
|
|
---- Подготовка тетрады ----
|
---- Подготовка тетрады ----
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1600" ); -- DMAR0 - от тетрады 6 --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1600" ); -- DMAR0 - от тетрады 6 --
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1F#, x"0001" ); -- Размер блока = 4 кБ --
|
trd_wait_cmd( cmd, ret, 1, 16#1F#, x"0001" ); -- Размер блока = 4 кБ --
|
|
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
|
|
trd_wait_cmd( cmd, ret, 6, 0, x"2038" ); -- запуск тетрады DIO_IN
|
trd_wait_cmd( cmd, ret, 6, 0, x"2038" ); -- запуск тетрады DIO_IN
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1E#, x"0020" ); -- Запуск тестовой последовательности --
|
trd_wait_cmd( cmd, ret, 1, 16#1E#, x"0020" ); -- Запуск тестовой последовательности --
|
|
|
wait for 20 us;
|
wait for 20 us;
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
|
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data( 8 )='1' ) then
|
if( data( 8 )='1' ) then
|
write( str, string'(" - Дескриптор правильный" ));
|
write( str, string'(" - Дескриптор правильный" ));
|
else
|
else
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
error := error + 1;
|
error := error + 1;
|
end if;
|
end if;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( error=0 ) then
|
if( error=0 ) then
|
|
|
---- Ожидание завершения DMA ----
|
---- Ожидание завершения DMA ----
|
dma_complete := 0;
|
dma_complete := 0;
|
for ii in 0 to 100 loop
|
for ii in 0 to 100 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data(5)='1' ) then
|
if( data(5)='1' ) then
|
write( str, string'(" - DMA завершён " ));
|
write( str, string'(" - DMA завершён " ));
|
dma_complete := 1;
|
dma_complete := 1;
|
|
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
|
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=1 ) then
|
if( dma_complete=1 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
|
|
wait for 1 us;
|
wait for 1 us;
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=0 ) then
|
if( dma_complete=0 ) then
|
write( str, string'("Ошибка - DMA не завершён " ));
|
write( str, string'("Ошибка - DMA не завершён " ));
|
writeline( log, str );
|
writeline( log, str );
|
error:=error+1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
end if;
|
end if;
|
|
|
for ii in 0 to 3 loop
|
for ii in 0 to 3 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
writeline( log, str );
|
writeline( log, str );
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
end loop;
|
end loop;
|
|
|
|
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
|
|
write( str, string'(" Блок 0 - прочитано: " ));
|
write( str, string'(" Блок 0 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00800000";
|
adr:= x"00800000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
write( str, string'(" Блок 1 - прочитано: " ));
|
write( str, string'(" Блок 1 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00801000";
|
adr:= x"00801000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
|
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
|
|
|
-- вывод в файл --
|
writeline( log, str );
|
writeline( log, str );
|
if( error=0 ) then
|
if( error=0 ) then
|
write( str, string'(" Тест завершён успешно " ));
|
write( str, string'("TEST finished successfully" ));
|
cnt_ok := cnt_ok + 1;
|
cnt_ok := cnt_ok + 1;
|
else
|
else
|
write( str, string'(" Тест не выполнен " ));
|
write( str, string'("TEST finished with ERR" ));
|
cnt_error := cnt_error + 1;
|
cnt_error := cnt_error + 1;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
end test_adm_read_8kb;
|
end test_adm_read_8kb;
|
|
|
|
|
--! Проверка обращений к блоку MAIN
|
--! Проверка обращений к блоку MAIN
|
procedure test_block_main (
|
procedure test_block_main (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
|
variable error : integer:=0;
|
variable error : integer:=0;
|
variable dma_complete : integer;
|
variable dma_complete : integer;
|
|
|
begin
|
begin
|
|
|
write( str, string'("TEST_BLOCK_MAIN" ));
|
write( str, string'("TEST_BLOCK_MAIN" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
block_write( cmd, ret, 4, 16#08#, x"0000AA55" );
|
block_write( cmd, ret, 4, 16#08#, x"0000AA55" );
|
block_read( cmd, ret, 4, 16#08#, data );
|
block_read( cmd, ret, 4, 16#08#, data );
|
write( str, string'("БЛОК 4: " )); hwrite( str, data ); writeline( log, str );
|
write( str, string'("БЛОК 4: " )); hwrite( str, data ); writeline( log, str );
|
|
|
wait for 10 us;
|
wait for 10 us;
|
|
|
-- write( str, "Константы:" );
|
write( str, "Константы:" );
|
-- writeline( log, str );
|
writeline( log, str );
|
-- for ii in 0 to 5 loop
|
for ii in 0 to 5 loop
|
-- write( str, "Блок " );
|
write( str, "Блок " );
|
-- write( str, ii );
|
write( str, ii );
|
-- for jj in 0 to 7 loop
|
for jj in 0 to 7 loop
|
-- block_read( cmd, ret, ii, jj, data );
|
block_read( cmd, ret, ii, jj, data );
|
-- write( str, " " );
|
write( str, " " );
|
-- hwrite( str, data );
|
hwrite( str, data );
|
-- end loop;
|
end loop;
|
-- writeline( log, str );
|
writeline( log, str );
|
-- end loop;
|
end loop;
|
--
|
|
--
|
|
-- writeline( log, str );
|
|
--
|
|
-- block_read( cmd, ret, 0, 16#10#, data );
|
|
-- write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
--
|
|
-- block_write( cmd, ret, 80, 16#08#, x"00000100" );
|
|
--
|
|
-- block_read( cmd, ret, 0, 16#10#, data );
|
|
-- write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
--
|
|
-- block_write( cmd, ret, 80, 16#08#, x"00000200" );
|
|
--
|
|
-- block_read( cmd, ret, 0, 16#10#, data );
|
|
-- write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
--
|
|
--
|
|
-- writeline( log, str );
|
|
-- if( error=0 ) then
|
|
-- write( str, " Тест завершён успешно " );
|
|
-- cnt_ok := cnt_ok + 1;
|
|
-- else
|
|
-- write( str, " Тест не выполнен " );
|
|
-- cnt_error := cnt_error + 1;
|
|
-- end if;
|
|
|
|
for ii in 0 to 127 loop
|
|
|
writeline( log, str );
|
|
|
|
block_read( cmd, ret, 0, 16#10#, data );
|
|
write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
|
|
block_write( cmd, ret, 80, 16#08#, x"00000100" );
|
|
|
|
block_read( cmd, ret, 0, 16#10#, data );
|
|
write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
|
|
block_write( cmd, ret, 80, 16#08#, x"00000200" );
|
|
|
|
block_read( cmd, ret, 0, 16#10#, data );
|
|
write( str, "STATUS: " ); hwrite( str, data ); writeline( log, str );
|
|
|
|
|
|
for ii in 0 to 7 loop
|
|
|
block_write( cmd, ret, 4, 16#08#, x"0000AA55" );
|
block_write( cmd, ret, 4, 16#08#, x"0000AA55" );
|
block_read( cmd, ret, 4, 8, data );
|
block_read( cmd, ret, 4, 8, data );
|
write( str, string'("READ: " )); hwrite( str, data( 15 downto 0 ) ); writeline( log, str );
|
write( str, string'("READ: " )); hwrite( str, data( 15 downto 0 ) ); writeline( log, str );
|
if( data/=x"0000AA55" ) then
|
if( data/=x"0000AA55" ) then
|
error:=error+1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
end loop;
|
end loop;
|
|
|
|
|
|
|
|
-- вывод в файл --
|
|
writeline( log, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
end test_block_main;
|
end test_block_main;
|
|
|
|
|
|
|
|
|
--! Чтение 16 кБ с использованием двух блоков дескрипторов
|
--! Чтение 16 кБ с использованием двух блоков дескрипторов
|
procedure test_adm_read_16kb (
|
procedure test_adm_read_16kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
|
variable error : integer:=0;
|
variable error : integer:=0;
|
variable dma_complete : integer;
|
variable dma_complete : integer;
|
variable kk : integer;
|
variable kk : integer;
|
variable status : std_logic_vector( 15 downto 0 );
|
variable status : std_logic_vector( 15 downto 0 );
|
|
|
begin
|
begin
|
|
|
write( str, string'("TEST_ADM_READ_16KB" ));
|
write( str, string'("TEST_ADM_READ_16KB" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
---- Формирование блока дескрипторов ---
|
---- Формирование блока дескрипторов ---
|
for ii in 0 to 256 loop
|
for ii in 0 to 256 loop
|
adr:= x"00100000";
|
adr:= x"00100000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
end loop;
|
end loop;
|
|
|
--- Блок 0 ---
|
--- Блок 0 ---
|
|
|
--- Дескриптор 0 ---
|
--- Дескриптор 0 ---
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100004", x"00000111" ); -- переход к следующему дескриптору
|
int_mem_write( cmd, ret, x"00100004", x"00000111" ); -- переход к следующему дескриптору
|
|
|
--- Дескриптор 1 ---
|
--- Дескриптор 1 ---
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"0010000C", x"00000112" ); -- переход к следующему блоку
|
int_mem_write( cmd, ret, x"0010000C", x"00000112" ); -- переход к следующему блоку
|
|
|
--- Дескриптор 2 ---
|
--- Дескриптор 2 ---
|
int_mem_write( cmd, ret, x"00100010", x"00001002" ); -- адрес следующего дескриптора
|
int_mem_write( cmd, ret, x"00100010", x"00001002" ); -- адрес следующего дескриптора
|
int_mem_write( cmd, ret, x"00100014", x"00000000" );
|
int_mem_write( cmd, ret, x"00100014", x"00000000" );
|
|
|
|
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001FC", x"14644953" );
|
int_mem_write( cmd, ret, x"001001FC", x"14644953" );
|
|
|
|
|
--- Блок 1 ---
|
--- Блок 1 ---
|
|
|
--- Дескриптор 0 ---
|
--- Дескриптор 0 ---
|
int_mem_write( cmd, ret, x"00100200", x"00008020" );
|
int_mem_write( cmd, ret, x"00100200", x"00008020" );
|
int_mem_write( cmd, ret, x"00100204", x"00000111" ); -- переход к следующему дескриптору
|
int_mem_write( cmd, ret, x"00100204", x"00000111" ); -- переход к следующему дескриптору
|
|
|
--- Дескриптор 1 ---
|
--- Дескриптор 1 ---
|
int_mem_write( cmd, ret, x"00100208", x"00008030" );
|
int_mem_write( cmd, ret, x"00100208", x"00008030" );
|
int_mem_write( cmd, ret, x"0010020C", x"00000110" ); -- остановка
|
int_mem_write( cmd, ret, x"0010020C", x"00000110" ); -- остановка
|
|
|
|
|
int_mem_write( cmd, ret, x"001003F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001003F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001003FC", x"D67C4953" );
|
int_mem_write( cmd, ret, x"001003FC", x"D67C4953" );
|
|
|
|
|
|
|
---- Программирование канала DMA ----
|
---- Программирование канала DMA ----
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 8, x"00000027" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
|
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 23, x"00019000" ); -- LOCAL_ADR
|
block_write( cmd, ret, 4, 23, x"00019000" ); -- LOCAL_ADR
|
|
|
|
|
---- Подготовка тетрады ----
|
---- Подготовка тетрады ----
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1600" ); -- DMAR0 - от тетрады 6 --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1600" ); -- DMAR0 - от тетрады 6 --
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1F#, x"0001" ); -- Размер блока = 4 кБ --
|
trd_wait_cmd( cmd, ret, 1, 16#1F#, x"0001" ); -- Размер блока = 4 кБ --
|
|
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
|
|
trd_wait_cmd( cmd, ret, 6, 0, x"2038" ); -- запуск тетрады DIO_IN
|
trd_wait_cmd( cmd, ret, 6, 0, x"2038" ); -- запуск тетрады DIO_IN
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1E#, x"06A0" ); -- Запуск тестовой последовательности --
|
trd_wait_cmd( cmd, ret, 1, 16#1E#, x"06A0" ); -- Запуск тестовой последовательности --
|
|
|
wait for 20 us;
|
wait for 20 us;
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
|
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data( 8 )='1' ) then
|
if( data( 8 )='1' ) then
|
write( str, string'(" - Дескриптор правильный" ));
|
write( str, string'(" - Дескриптор правильный" ));
|
else
|
else
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
error := error + 1;
|
error := error + 1;
|
end if;
|
end if;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( error=0 ) then
|
if( error=0 ) then
|
|
|
kk:=0;
|
kk:=0;
|
loop
|
loop
|
|
|
trd_status( cmd, ret, 6, status );
|
trd_status( cmd, ret, 6, status );
|
write( str, string'("TRD_STATUS: " )); hwrite( str, status );
|
write( str, string'("TRD_STATUS: " )); hwrite( str, status );
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'(" STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'(" STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
|
|
if( data(4)='1' ) then
|
if( data(4)='1' ) then
|
write( str, string'(" - завершено чтение блока " ));
|
write( str, string'(" - завершено чтение блока " ));
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
kk:=kk+1;
|
kk:=kk+1;
|
if( kk=4 ) then
|
if( kk=4 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
|
|
end loop;
|
end loop;
|
|
|
---- Ожидание завершения DMA ----
|
---- Ожидание завершения DMA ----
|
dma_complete := 0;
|
dma_complete := 0;
|
for ii in 0 to 100 loop
|
for ii in 0 to 100 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data(5)='1' ) then
|
if( data(5)='1' ) then
|
write( str, string'(" - DMA завершён " ));
|
write( str, string'(" - DMA завершён " ));
|
dma_complete := 1;
|
dma_complete := 1;
|
|
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
|
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=1 ) then
|
if( dma_complete=1 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
|
|
wait for 1 us;
|
wait for 1 us;
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=0 ) then
|
if( dma_complete=0 ) then
|
write( str, string'("Ошибка - DMA не завершён " ));
|
write( str, string'("Ошибка - DMA не завершён " ));
|
writeline( log, str );
|
writeline( log, str );
|
error:=error+1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
end if;
|
end if;
|
|
|
for ii in 0 to 3 loop
|
for ii in 0 to 3 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
writeline( log, str );
|
writeline( log, str );
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
end loop;
|
end loop;
|
|
|
|
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
|
|
write( str, string'(" Блок 0 - прочитано: " ));
|
write( str, string'(" Блок 0 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00800000";
|
adr:= x"00800000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
write( str, string'(" Блок 1 - прочитано: " ));
|
write( str, string'(" Блок 1 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00801000";
|
adr:= x"00801000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
write( str, string'(" Блок 2 - прочитано: " ));
|
write( str, string'(" Блок 2 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00802000";
|
adr:= x"00802000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
|
|
write( str, string'(" Блок 3 - прочитано: " ));
|
write( str, string'(" Блок 3 - прочитано: " ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
for ii in 0 to 15 loop
|
for ii in 0 to 15 loop
|
|
|
adr:= x"00803000";
|
adr:= x"00803000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_read( cmd, ret, adr, data );
|
int_mem_read( cmd, ret, adr, data );
|
|
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
write( str, ii ); write( str, string'(" " )); hwrite( str, data );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
end loop;
|
end loop;
|
|
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
|
|
|
-- вывод в файл --
|
writeline( log, str );
|
writeline( log, str );
|
if( error=0 ) then
|
if( error=0 ) then
|
write( str, string'(" Тест завершён успешно " ));
|
write( str, string'("TEST finished successfully" ));
|
cnt_ok := cnt_ok + 1;
|
cnt_ok := cnt_ok + 1;
|
else
|
else
|
write( str, string'(" Тест не выполнен " ));
|
write( str, string'("TEST finished with ERR" ));
|
cnt_error := cnt_error + 1;
|
cnt_error := cnt_error + 1;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
|
|
end test_adm_read_16kb;
|
end test_adm_read_16kb;
|
|
|
|
|
|
|
|
|
--! Запись 16 кБ с использованием двух блоков дескрипторов
|
--! Запись 16 кБ с использованием двух блоков дескрипторов
|
procedure test_adm_write_16kb (
|
procedure test_adm_write_16kb (
|
signal cmd: out bh_cmd; --! команда
|
signal cmd: out bh_cmd; --! команда
|
signal ret: in bh_ret --! ответ
|
signal ret: in bh_ret --! ответ
|
)
|
)
|
is
|
is
|
|
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable adr : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable data : std_logic_vector( 31 downto 0 );
|
variable str : line;
|
variable str : line;
|
|
|
variable error : integer:=0;
|
variable error : integer:=0;
|
variable dma_complete : integer;
|
variable dma_complete : integer;
|
variable kk : integer;
|
variable kk : integer;
|
variable status : std_logic_vector( 15 downto 0 );
|
variable status : std_logic_vector( 15 downto 0 );
|
|
|
begin
|
begin
|
|
|
write( str, string'("TEST_ADM_WRITE_16KB" ));
|
write( str, string'("TEST_ADM_WRITE_16KB" ));
|
writeline( log, str );
|
writeline( log, str );
|
|
|
---- Формирование блока дескрипторов ---
|
---- Формирование блока дескрипторов ---
|
for ii in 0 to 256 loop
|
for ii in 0 to 256 loop
|
adr:= x"00100000";
|
adr:= x"00100000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
int_mem_write( cmd, ret, adr, x"00000000" );
|
end loop;
|
end loop;
|
|
|
---- Заполнение памяти ----
|
---- Заполнение памяти ----
|
for ii in 0 to 256 loop
|
for ii in 0 to 256 loop
|
adr:= x"00800000";
|
adr:= x"00800000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
data:=x"00A00000";
|
data:=x"00A00000";
|
data:=data + ii;
|
data:=data + ii;
|
int_mem_write( cmd, ret, adr, data );
|
int_mem_write( cmd, ret, adr, data );
|
end loop;
|
end loop;
|
|
|
for ii in 0 to 1023 loop
|
for ii in 0 to 1023 loop
|
adr:= x"00801000";
|
adr:= x"00801000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
data:=x"00A10000";
|
data:=x"00A10000";
|
data:=data + ii;
|
data:=data + ii;
|
int_mem_write( cmd, ret, adr, data );
|
int_mem_write( cmd, ret, adr, data );
|
end loop;
|
end loop;
|
|
|
for ii in 0 to 256 loop
|
for ii in 0 to 256 loop
|
adr:= x"00802000";
|
adr:= x"00802000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
data:=x"00A20000";
|
data:=x"00A20000";
|
data:=data + ii;
|
data:=data + ii;
|
int_mem_write( cmd, ret, adr, data );
|
int_mem_write( cmd, ret, adr, data );
|
end loop;
|
end loop;
|
|
|
for ii in 0 to 256 loop
|
for ii in 0 to 256 loop
|
adr:= x"00803000";
|
adr:= x"00803000";
|
adr:=adr + ii*4;
|
adr:=adr + ii*4;
|
data:=x"00A30000";
|
data:=x"00A30000";
|
data:=data + ii;
|
data:=data + ii;
|
int_mem_write( cmd, ret, adr, data );
|
int_mem_write( cmd, ret, adr, data );
|
end loop;
|
end loop;
|
|
|
--- Блок 0 ---
|
--- Блок 0 ---
|
|
|
--- Дескриптор 0 ---
|
--- Дескриптор 0 ---
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100000", x"00008000" );
|
int_mem_write( cmd, ret, x"00100004", x"00000011" ); -- переход к следующему дескриптору
|
int_mem_write( cmd, ret, x"00100004", x"00000011" ); -- переход к следующему дескриптору
|
|
|
--- Дескриптор 1 ---
|
--- Дескриптор 1 ---
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"00100008", x"00008010" );
|
int_mem_write( cmd, ret, x"0010000C", x"00000012" ); -- переход к следующему блоку
|
int_mem_write( cmd, ret, x"0010000C", x"00000012" ); -- переход к следующему блоку
|
|
|
--- Дескриптор 2 ---
|
--- Дескриптор 2 ---
|
int_mem_write( cmd, ret, x"00100010", x"00001002" ); -- адрес следующего дескриптора
|
int_mem_write( cmd, ret, x"00100010", x"00001002" ); -- адрес следующего дескриптора
|
int_mem_write( cmd, ret, x"00100014", x"00000000" );
|
int_mem_write( cmd, ret, x"00100014", x"00000000" );
|
|
|
|
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001001FC", x"14A44953" );
|
int_mem_write( cmd, ret, x"001001FC", x"14A44953" );
|
|
|
|
|
--- Блок 1 ---
|
--- Блок 1 ---
|
|
|
--- Дескриптор 0 ---
|
--- Дескриптор 0 ---
|
int_mem_write( cmd, ret, x"00100200", x"00008020" );
|
int_mem_write( cmd, ret, x"00100200", x"00008020" );
|
int_mem_write( cmd, ret, x"00100204", x"00000011" ); -- переход к следующему дескриптору
|
int_mem_write( cmd, ret, x"00100204", x"00000011" ); -- переход к следующему дескриптору
|
|
|
--- Дескриптор 1 ---
|
--- Дескриптор 1 ---
|
int_mem_write( cmd, ret, x"00100208", x"00008030" );
|
int_mem_write( cmd, ret, x"00100208", x"00008030" );
|
int_mem_write( cmd, ret, x"0010020C", x"00000010" ); -- остановка
|
int_mem_write( cmd, ret, x"0010020C", x"00000010" ); -- остановка
|
|
|
|
|
int_mem_write( cmd, ret, x"001003F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001003F8", x"00000000" );
|
int_mem_write( cmd, ret, x"001003FC", x"D6BC4953" );
|
int_mem_write( cmd, ret, x"001003FC", x"D6BC4953" );
|
|
|
|
|
|
|
---- Программирование канала DMA ----
|
---- Программирование канала DMA ----
|
block_write( cmd, ret, 4, 8, x"00000023" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 8, x"00000023" ); -- DMA_MODE
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
|
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 20, x"00100000" ); -- PCI_ADRL
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 21, x"00100000" ); -- PCI_ADRH
|
block_write( cmd, ret, 4, 23, x"0001D000" ); -- LOCAL_ADR
|
block_write( cmd, ret, 4, 23, x"0001D000" ); -- LOCAL_ADR
|
|
|
|
|
---- Подготовка тетрады ----
|
---- Подготовка тетрады ----
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_test_mode( cmd, ret, 0 ); -- переход в рабочий режим --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1700" ); -- DMAR0 - от тетрады 7 --
|
trd_wait_cmd( cmd, ret, 0, 16, x"1700" ); -- DMAR0 - от тетрады 7 --
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1D#, x"0001" ); -- Размер блока = 4 кБ --
|
trd_wait_cmd( cmd, ret, 1, 16#1D#, x"0001" ); -- Размер блока = 4 кБ --
|
|
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
trd_wait_cmd( cmd, ret, 1, 16#0F#, x"0001" ); -- Подключение выхода генератора к DIO_IN --
|
|
|
trd_wait_cmd( cmd, ret, 7, 0, x"2038" ); -- запуск тетрады DIO_OUT
|
trd_wait_cmd( cmd, ret, 7, 0, x"2038" ); -- запуск тетрады DIO_OUT
|
|
|
trd_wait_cmd( cmd, ret, 1, 16#1C#, x"0020" ); -- Запуск тестовой последовательности --
|
trd_wait_cmd( cmd, ret, 1, 16#1C#, x"0020" ); -- Запуск тестовой последовательности --
|
|
|
wait for 20 us;
|
wait for 20 us;
|
|
|
|
|
for ii in 0 to 20 loop
|
for ii in 0 to 20 loop
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
|
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data( 8 )='1' ) then
|
if( data( 8 )='1' ) then
|
write( str, string'(" - Дескриптор правильный" ));
|
write( str, string'(" - Дескриптор правильный" ));
|
error := 0;
|
error := 0;
|
exit;
|
exit;
|
else
|
else
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
write( str, string'(" - Ошибка чтения дескриптора" ));
|
error := error + 1;
|
error := error + 1;
|
wait for 10 us;
|
wait for 10 us;
|
end if;
|
end if;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
end loop;
|
end loop;
|
|
|
|
|
if( error=0 ) then
|
if( error=0 ) then
|
|
|
kk:=0;
|
kk:=0;
|
loop
|
loop
|
|
|
trd_status( cmd, ret, 6, status );
|
trd_status( cmd, ret, 6, status );
|
write( str, string'("TRD_STATUS: " )); hwrite( str, status );
|
write( str, string'("TRD_STATUS: " )); hwrite( str, status );
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'(" STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'(" STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
|
|
if( data(4)='1' ) then
|
if( data(4)='1' ) then
|
write( str, string'(" - завершено чтение блока " ));
|
write( str, string'(" - завершено чтение блока " ));
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
kk:=kk+1;
|
kk:=kk+1;
|
if( kk=4 ) then
|
if( kk=4 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
|
|
end loop;
|
end loop;
|
|
|
---- Ожидание завершения DMA ----
|
---- Ожидание завершения DMA ----
|
dma_complete := 0;
|
dma_complete := 0;
|
for ii in 0 to 100 loop
|
for ii in 0 to 100 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
if( data(5)='1' ) then
|
if( data(5)='1' ) then
|
write( str, string'(" - DMA завершён " ));
|
write( str, string'(" - DMA завершён " ));
|
dma_complete := 1;
|
dma_complete := 1;
|
|
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
block_write( cmd, ret, 4, 16#11#, x"00000010" ); -- FLAG_CLR - сброс EOT
|
|
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=1 ) then
|
if( dma_complete=1 ) then
|
exit;
|
exit;
|
end if;
|
end if;
|
|
|
wait for 1 us;
|
wait for 1 us;
|
|
|
end loop;
|
end loop;
|
|
|
writeline( log, str );
|
writeline( log, str );
|
|
|
if( dma_complete=0 ) then
|
if( dma_complete=0 ) then
|
write( str, string'("Ошибка - DMA не завершён " ));
|
write( str, string'("Ошибка - DMA не завершён " ));
|
writeline( log, str );
|
writeline( log, str );
|
error:=error+1;
|
error:=error+1;
|
end if;
|
end if;
|
|
|
end if;
|
end if;
|
|
|
for ii in 0 to 3 loop
|
for ii in 0 to 3 loop
|
|
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
block_read( cmd, ret, 4, 16, data ); -- STATUS
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
write( str, string'("STATUS: " )); hwrite( str, data( 15 downto 0 ) );
|
writeline( log, str );
|
writeline( log, str );
|
wait for 500 ns;
|
wait for 500 ns;
|
|
|
end loop;
|
end loop;
|
|
|
|
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL - STOP
|
|
|
|
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000010" ); -- DMA_CTRL - RESET FIFO
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000000" ); -- DMA_CTRL
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
-- block_write( cmd, ret, 4, 9, x"00000001" ); -- DMA_CTRL - START
|
|
|
|
|
|
-- вывод в файл --
|
writeline( log, str );
|
writeline( log, str );
|
if( error=0 ) then
|
if( error=0 ) then
|
write( str, string'(" Тест завершён успешно " ));
|
write( str, string'("TEST finished successfully" ));
|
cnt_ok := cnt_ok + 1;
|
cnt_ok := cnt_ok + 1;
|
else
|
else
|
write( str, string'(" Тест не выполнен " ));
|
write( str, string'("TEST finished with ERR" ));
|
cnt_error := cnt_error + 1;
|
cnt_error := cnt_error + 1;
|
end if;
|
end if;
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
writeline( log, str );
|
|
|
|
-- вывод в консоль --
|
|
writeline( output, str );
|
|
if( error=0 ) then
|
|
write( str, string'("TEST finished successfully" ));
|
|
cnt_ok := cnt_ok + 1;
|
|
else
|
|
write( str, string'("TEST finished with ERR" ));
|
|
cnt_error := cnt_error + 1;
|
|
end if;
|
|
writeline( output, str );
|
|
writeline( output, str );
|
|
|
|
|
end test_adm_write_16kb;
|
end test_adm_write_16kb;
|
|
|
end package body test_pkg;
|
end package body test_pkg;
|
|
|
|
|