/** \file
|
/** \file
|
\brief Функции формирования и проверки массива данных
|
\brief Функции формирования и проверки массива данных
|
|
|
В файле содержится объявления функций для формирования и проверки массива данных.
|
В файле содержится объявления функций для формирования и проверки массива данных.
|
|
|
\author Dmitry Smekhov
|
\author Dmitry Smekhov
|
\version 1.0
|
\version 1.0
|
|
|
|
|
*/
|
*/
|
|
|
#ifndef TF_TestBufM2H
|
#ifndef TF_TestBufM2H
|
#define TF_TestBufM2H
|
#define TF_TestBufM2H
|
|
|
|
|
//! Проверка массива данных
|
//! Проверка массива данных
|
/** Класс содержит функции для проверки произвольных
|
/** Класс содержит функции для проверки произвольных
|
массивов.
|
массивов.
|
|
|
Тестовая последовательность представляет собой набор блоков.
|
Тестовая последовательность представляет собой набор блоков.
|
Размер блока задаётся кратным страницы размером 4 килобайта
|
Размер блока задаётся кратным страницы размером 4 килобайта
|
(512 слов по 64 бита)
|
(512 слов по 64 бита)
|
Первое 64-х разрядное слово в блоке содержит сигнатуру и порядковый номер.
|
Первое 64-х разрядное слово в блоке содержит сигнатуру и порядковый номер.
|
31..0 - сигнатура 0xA5A50123
|
31..0 - сигнатура 0xA5A50123
|
63..32 - порядковый номер блока
|
63..32 - порядковый номер блока
|
|
|
Содержимое блока зависит от его порядкового номера в последовательности.
|
Содержимое блока зависит от его порядкового номера в последовательности.
|
|
|
Содержимое блока:
|
Содержимое блока:
|
0 - Бегущая единица по 64-м разрядам
|
0 - Бегущая единица по 64-м разрядам
|
1 - Бегущий ноль по 64-м разрядам
|
1 - Бегущий ноль по 64-м разрядам
|
2 - Бегущая единица с инверсией по 64-м разрядам
|
2 - Бегущая единица с инверсией по 64-м разрядам
|
- Чётные номера слов - бегущая единица по 64-м разрядам
|
- Чётные номера слов - бегущая единица по 64-м разрядам
|
Нечётные номера - инверсия предыдущего слова
|
Нечётные номера - инверсия предыдущего слова
|
3 - Бегущая единица в блоке
|
3 - Бегущая единица в блоке
|
Номер слова сравнивается с номером блока (сравниваются восемь младший разрядов)
|
Номер слова сравнивается с номером блока (сравниваются восемь младший разрядов)
|
При совпадении - в слово записывается бегущая 1.
|
При совпадении - в слово записывается бегущая 1.
|
Остальные слова - значение ноль.
|
Остальные слова - значение ноль.
|
4 - Бегущий ноль с инверсией по 64-м разрядам
|
4 - Бегущий ноль с инверсией по 64-м разрядам
|
Чётные номера - бегущий ноль по 64-м разрядам
|
Чётные номера - бегущий ноль по 64-м разрядам
|
Нечётные номера - инверсия предыдущего слова
|
Нечётные номера - инверсия предыдущего слова
|
5 - Бегущий ноль а в блоке
|
5 - Бегущий ноль а в блоке
|
Номер слова сравнивается с номером блока (сравниваются восемь младший разрядов)
|
Номер слова сравнивается с номером блока (сравниваются восемь младший разрядов)
|
При совпадении - в слово записывается бегущий 0.
|
При совпадении - в слово записывается бегущий 0.
|
Остальные слова - значение 0xFFFFFFFFFFFFFFFF.
|
Остальные слова - значение 0xFFFFFFFFFFFFFFFF.
|
6,7 - Счётчик по 64-м разрядам
|
6,7 - Счётчик по 64-м разрядам
|
Чётные номера - значение счётчика
|
Чётные номера - значение счётчика
|
Нечётные номера - инверсия предыдущего слова
|
Нечётные номера - инверсия предыдущего слова
|
8,9 - Псевдослучайная последовательность
|
8,9 - Псевдослучайная последовательность
|
Формируется М-последовательность по 64 разрядам.
|
Формируется М-последовательность по 64 разрядам.
|
Начальное значение - 1
|
Начальное значение - 1
|
Слово формируется сдвигом на один разряд вправо.
|
Слово формируется сдвигом на один разряд вправо.
|
В младший разряд слова записывается значение x[63] xor x[62] xor x[60] xor x[59]
|
В младший разряд слова записывается значение x[63] xor x[62] xor x[60] xor x[59]
|
|
|
|
|
Для режима счётчика и псевдослучайной последовательности начальное значение
|
Для режима счётчика и псевдослучайной последовательности начальное значение
|
формируется при инициализации тестовой последовательности.
|
формируется при инициализации тестовой последовательности.
|
Для остальных режимов - при инициализации проверки блока
|
Для остальных режимов - при инициализации проверки блока
|
|
|
Функция buf_set() производит формирование массива.
|
Функция buf_set() производит формирование массива.
|
|
|
Функция buf_check() производит проверку массива на соответствие
|
Функция buf_check() производит проверку массива на соответствие
|
ожидаемому значению.
|
ожидаемому значению.
|
|
|
Функция buf_check_start() подготавливает внутренние переменные
|
Функция buf_check_start() подготавливает внутренние переменные
|
для проверки группы массивов.
|
для проверки группы массивов.
|
|
|
Функция check_result() возвращает результаты проверки группы
|
Функция check_result() возвращает результаты проверки группы
|
массивов.
|
массивов.
|
|
|
Функции report_word_error() и report_bit_error() подготавливают
|
Функции report_word_error() и report_bit_error() подготавливают
|
текстовую строку с отчётом в выполнении проверки группы массивов.
|
текстовую строку с отчётом в выполнении проверки группы массивов.
|
|
|
*/
|
*/
|
class TF_TestBufM2 {
|
class TF_TestBufM2 {
|
|
|
U32 bit_error0[64]; //!< Число ошибок типа принят 0
|
U32 bit_error0[64]; //!< Число ошибок типа принят 0
|
U32 bit_error1[64]; //!< Число ошибок типа принят 1
|
U32 bit_error1[64]; //!< Число ошибок типа принят 1
|
|
|
U32 max_cnt_error; //!< Заданное максимальное число ошибок
|
U32 max_cnt_error; //!< Заданное максимальное число ошибок
|
U32 max_bit_cnt; //!< Число бит в слове
|
U32 max_bit_cnt; //!< Число бит в слове
|
U32 buf_cnt_ok; //!< Число правильных массивов.
|
U32 buf_cnt_ok; //!< Число правильных массивов.
|
U32 buf_cnt_error; //!< Число неправильных массивов.
|
U32 buf_cnt_error; //!< Число неправильных массивов.
|
U32 word_cnt_error; //!< Число неправильных слов.
|
U32 word_cnt_error; //!< Число неправильных слов.
|
U32 buf_current; //!< Номер текущего массива.
|
U32 buf_current; //!< Номер текущего массива.
|
__int64 word_error[4*32]; //!< Список ошибок
|
__int64 word_error[4*32]; //!< Список ошибок
|
|
|
char str[10240]; //!< Буфер сообщений
|
char str[10240]; //!< Буфер сообщений
|
U32 block_mode; //!< Тип блока
|
U32 block_mode; //!< Тип блока
|
__int64 data_ex_cnt;
|
__int64 data_ex_cnt;
|
__int64 data_ex_noise;
|
__int64 data_ex_noise;
|
__int64 data_ex_psd;
|
__int64 data_ex_psd;
|
__int64 data_ex_inv;
|
__int64 data_ex_inv;
|
|
|
|
|
|
|
float *resData;
|
|
int FFT_size;
|
|
int numberOfSteps;
|
|
int numberOfFFTSizeSteps;
|
|
int m_chanMask;
|
|
|
|
U32 lowRange;
|
|
U32 topRange;
|
|
U32 fftSize;
|
|
|
|
|
|
public:
|
public:
|
|
|
TF_TestBufM2(); //!< Конструктор
|
TF_TestBufM2(); //!< Конструктор
|
~TF_TestBufM2(); //!< Деструктор
|
~TF_TestBufM2(); //!< Деструктор
|
|
|
|
|
//! Формирование массива
|
//! Формирование массива
|
void buf_set( U32 *buf, U32 n, U32 size, U32 mode ) ;
|
void buf_set( U32 *buf, U32 n, U32 size, U32 mode ) ;
|
|
|
inline U32 check( U32 index, __int64 d0, __int64 di0 );
|
inline U32 check( U32 index, __int64 d0, __int64 di0 );
|
|
|
//! Проверка массива
|
//! Проверка массива
|
U32 buf_check( U32 *buf, U32 n, U32 size, U32 mode );//, U32 *err, U32 size_err, U32 *bit_err, U32 bit_cnt );
|
U32 buf_check( U32 *buf, U32 n, U32 size, U32 mode );//, U32 *err, U32 size_err, U32 *bit_err, U32 bit_cnt );
|
|
|
//! Начало проверки группы массивов
|
//! Начало проверки группы массивов
|
void buf_check_start( U32 n_error, U32 bit_cnt );
|
void buf_check_start( U32 n_error, U32 bit_cnt );
|
|
|
//! Результаты проверки группы массивов
|
//! Результаты проверки группы массивов
|
U32 check_result( U32 *cnt_ok, U32 *cnt_error, U32 **error, U32 **bit0, U32 **bit1 );
|
U32 check_result( U32 *cnt_ok, U32 *cnt_error, U32 **error, U32 **bit0, U32 **bit1 );
|
|
|
//! Формирование отчёта по ошибкам
|
//! Формирование отчёта по ошибкам
|
char* report_word_error( void );
|
char* report_word_error( void );
|
|
|
//! Формирование отчёта распределения ошибок по битам
|
//! Формирование отчёта распределения ошибок по битам
|
char* report_bit_error( void );
|
char* report_bit_error( void );
|
|
|
//! Проверка псевдослучайной последовательности
|
//! Проверка псевдослучайной последовательности
|
U32 buf_check_psd( U32 *buf, U32 size );
|
U32 buf_check_psd( U32 *buf, U32 size );
|
|
|
//! Проверка двоично-инверсной последовательности
|
//! Проверка двоично-инверсной последовательности
|
U32 buf_check_inv( U32 *buf, U32 size );
|
U32 buf_check_inv( U32 *buf, U32 size );
|
|
|
|
|
};
|
};
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
#endif
|
#endif
|
|
|