OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [projects/] [sp605_lx45t_wishbone/] [src/] [testbench/] [test_pkg.vhd] - Diff between revs 2 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 10
Line 28... Line 28...
use work.block_pkg.all;
use work.block_pkg.all;
use work.wb_block_pkg.all;
use work.wb_block_pkg.all;
 
 
package test_pkg is
package test_pkg is
 
 
--! Инициализация теста 
--! Initialising
procedure test_init(
procedure test_init(
                fname: in string        --! имя файла отчёта
                fname: in string        --! имя файла отчёта
        );
        );
 
 
--! Завершение теста            
--! Finished
procedure test_close;
procedure test_close;
 
 
 
 
 
 
--! Запуск DMA с неправильным дескриптором 
--! Start DMA with incorrect descriptor
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 кБ
--! Start DMA for one block 4 kB
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 
--! Read block_test_check 8 kB
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  --! ответ
                );
                );
 
 
Line 104... Line 104...
 
 
        FILE   log: text;
        FILE   log: text;
 
 
        shared variable cnt_ok, cnt_error: integer;
        shared variable cnt_ok, cnt_error: integer;
 
 
        -- Инициализация теста  
        -- Initialising
        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;
 
 
        -- Завершение теста             
        --! Finished
        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'("check completed" ));
                writeline( log, str );
                writeline( log, str );
                write( str, string'("Число успешных тестов:  " ));
                write( str, string'("the number of successful tests:  " ));
                write( str, cnt_ok );
                write( str, cnt_ok );
                writeline( log, str );
                writeline( log, str );
                write( str, string'("Число ошибочных тестов: " ));
                write( str, string'("the number of false test: " ));
                write( str, cnt_error );
                write( str, cnt_error );
                writeline( log, str );
                writeline( log, str );
 
 
 
 
                file_close( log );
                file_close( log );
 
 
 
                if( cnt_ok>0 and cnt_error=0 ) then
 
                        write( str, string'("TEST finished successfully") );
 
                        writeline( output, str );
 
                else
 
                        write( str, string'("TEST finished with ERR") );
 
                        writeline( output, str );
 
 
 
                end if;
 
 
        end test_close;
        end test_close;
 
 
 
 
 
 
--! Запуск DMA с неправильным дескриптором 
--! Start DMA with incorrect descriptor
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
Line 156... Line 165...
begin
begin
 
 
        write( str, string'("TEST_DSC_INCORRECT" ));
        write( str, string'("TEST_DSC_INCORRECT" ));
        writeline( log, str );
        writeline( log, str );
 
 
        ---- Формирование блока дескрипторов ---
        ---- Init block of descriptor ---
        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 program ----
        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 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( 15 downto 0 )=x"A021" ) then
        if( data( 15 downto 0 )=x"A021" ) then
Line 196... Line 205...
        block_write( cmd, ret, 4, 9, x"00000000" );             -- DMA_CTRL - STOP  
        block_write( cmd, ret, 4, 9, x"00000000" );             -- DMA_CTRL - STOP  
 
 
end test_dsc_incorrect;
end test_dsc_incorrect;
 
 
 
 
--! Запуск DMA приём одного блока 4 кБ
--! Start DMA for one block 4 kB
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
Line 215... Line 224...
begin
begin
 
 
        write( str, string'("TEST_READ_4KB" ));
        write( str, string'("TEST_READ_4KB" ));
        writeline( log, str );
        writeline( log, str );
 
 
        ---- Формирование блока дескрипторов ---
        ---- Init block of descriptor ---
        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;
Line 229... Line 238...
 
 
 
 
        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" );
 
 
        --wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000001" ); -- сброс
        --wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000001" ); -- reset
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000000" );
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000000" );
        wb_block_gen_read( cmd, ret, REG_BLOCK_ID, data ); -- чтение идентификатора блока
        wb_block_gen_read( cmd, ret, REG_BLOCK_ID, data ); -- read block id
        write( str, string'("BLOCK TEST_GEN  ID: " ));
        write( str, string'("BLOCK TEST_GEN  ID: " ));
        hwrite( str, data );
        hwrite( str, data );
        writeline( log, str );
        writeline( log, str );
 
 
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_SIZE, x"00000001" ); -- размер блока - 1 килобайт
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_SIZE, x"00000001" ); -- size of block = 4 kByte
 
 
 
 
        ---- Программирование канала DMA ----
        ---- DMA program ----
        block_write( cmd, ret, 4, 8, x"00000025" );             -- DMA_MODE - без запросов DMA 
        block_write( cmd, ret, 4, 8, x"00000025" );             -- DMA_MODE - without request
        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, TEST_GEN_WB_BURST_SLAVE );        -- LOCAL_ADR 
        block_write( cmd, ret, 4, 23, TEST_GEN_WB_BURST_SLAVE );        -- LOCAL_ADR 
 
 
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"000006A0" ); -- запуск тестовой последовательности
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"000006A0" ); -- start test sequence
 
 
        wait for 1 us;
        wait for 1 us;
 
 
        block_write( cmd, ret, 4, 9, x"00000001" );             -- DMA_CTRL - START 
        block_write( cmd, ret, 4, 9, x"00000001" );             -- DMA_CTRL - START 
 
 
Line 262... Line 271...
 
 
        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'(" - descriptor is correct" ));
        else
        else
                write( str, string'(" - Ошибка чтения дескриптора" ));
                write( str, string'(" - descriptor is incorrect" ));
                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 ----
                ---- Wait for DMA finished ----
                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 finished " ));
                                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
Line 295... Line 304...
                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'("Error - DMA not finished" ));
                        writeline( log, str );
                        writeline( log, str );
                        error:=error+1;
                        error:=error+1;
                end if;
                end if;
 
 
        end if;
        end if;
Line 314... Line 323...
        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'(" Read: " ));
        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";
Line 336... Line 345...
--      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 is correct" ));
                cnt_ok := cnt_ok + 1;
                cnt_ok := cnt_ok + 1;
        else
        else
                write( str, string'(" Тест не выполнен " ));
                write( str, string'("Test have ERRORS" ));
                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 );
 
 
end test_read_4kb;
end test_read_4kb;
 
 
 
 
--! Чтение 8 кБ из тетрады DIO_IN 
--! Read block_test_check 8 kB
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
Line 367... Line 376...
begin
begin
 
 
        write( str, string'("TEST_ADM_READ_8KB" ));
        write( str, string'("TEST_ADM_READ_8KB" ));
        writeline( log, str );
        writeline( log, str );
 
 
        ---- Формирование блока дескрипторов ---
        ---- Init block of descriptor ---
        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 ---
        --- Desctriptor 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" );   -- jump to next descriptor
 
 
        --- Дескриптор 1 ---
        --- Desctriptor 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" );   -- stop
 
 
 
 
        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" );
 
 
Line 396... Line 405...
        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, TEST_GEN_WB_BURST_SLAVE );        -- LOCAL_ADR 
        block_write( cmd, ret, 4, 23, TEST_GEN_WB_BURST_SLAVE );        -- LOCAL_ADR 
 
 
 
 
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000001" ); -- сброс
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000001" ); -- reset
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000000" );
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"00000000" );
        wb_block_gen_read( cmd, ret, REG_BLOCK_ID, data ); -- чтение идентификатора блока
        wb_block_gen_read( cmd, ret, REG_BLOCK_ID, data ); -- read block id
        write( str, string'("BLOCK TEST_GEN  ID: " ));
        write( str, string'("BLOCK TEST_GEN  ID: " ));
        hwrite( str, data );
        hwrite( str, data );
        writeline( log, str );
        writeline( log, str );
 
 
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_SIZE, x"00000001" ); -- размер блока - 1 килобайт
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_SIZE, x"00000001" ); -- size of block = 4 kByte
 
 
        block_write( cmd, ret, 4, 9, x"00000001" );             -- DMA_CTRL - START 
        block_write( cmd, ret, 4, 9, x"00000001" );             -- DMA_CTRL - START 
 
 
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"000006A0" ); -- запуск тестовой последовательности   
        wb_block_gen_write( cmd, ret, REG_TEST_GEN_CTRL, x"000006A0" ); -- start test sequence  
 
 
        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'(" - descriptor is correct" ));
        else
        else
                write( str, string'(" - Ошибка чтения дескриптора" ));
                write( str, string'(" - descriptor is incorrect" ));
                error := error + 1;
                error := error + 1;
        end if;
        end if;
 
 
        writeline( log, str );
        writeline( log, str );
 
 
Line 432... Line 441...
                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 finished " ));
                                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 - reset EOT 
 
 
                        end if;
                        end if;
                        writeline( log, str );
                        writeline( log, str );
 
 
                        if( dma_complete=1 ) then
                        if( dma_complete=1 ) then
Line 451... Line 460...
                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'("Error - DMA not finished " ));
                        writeline( log, str );
                        writeline( log, str );
                        error:=error+1;
                        error:=error+1;
                end if;
                end if;
 
 
        end if;
        end if;
Line 470... Line 479...
        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'(" Block 0 - read: " ));
        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";
Line 486... Line 495...
 
 
        end loop;
        end loop;
 
 
        writeline( log, str );
        writeline( log, str );
 
 
        write( str, string'(" Блок 1 - прочитано: " ));
        write( str, string'(" Block 1 - read: " ));
        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";
Line 508... Line 517...
--      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 is correct " ));
                cnt_ok := cnt_ok + 1;
                cnt_ok := cnt_ok + 1;
        else
        else
                write( str, string'(" Тест не выполнен " ));
                write( str, string'(" Test have ERRORS " ));
                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 );
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.