User Tag List

Показано с 1 по 10 из 232

Тема: Эмуляция 1801ВП1-128 в ПЛИС

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Инициализация регистра перед началом вычисления суммы производится нулем. Запись вычисленной суммы на диск выполняется в инвертированном виде (значит при чтении она будет считана также проинвертированной). Корректность прочитанного блока + инвертированная сумма определяется по равенству регистра значению 0xFFFF.
    Контроллеры DEC и IBM ( если верить документации ) вычисляют CRC так:

    1. Начальное значение CRC = 0xFFFF ;
    2. Старший бит идёт первым ;
    3. Запись вычисленной суммы без инверсии.

    Т.е. по сути - это одно и то же, только инверсия результата выполняется до начала вычисления CRC, а не после.

    ...

    Вычисление CRC начинается в момент записи маркера, поэтому возникают два вопроса:

    1. Что именно запускает генератор CRC при записи:

    1.1. Установка бита WM (9) ;
    1.2. То же + байт 0xA1 в сдвиговом регистре.

    2. Если генератор CRC в ходе записи не был запущен - будет ли выполнена запись CRC ( 0xFFFF ) в момент пропуска требования ?

    ---------- Post added at 13:08 ---------- Previous post was at 12:16 ----------

    Цитата Сообщение от Vslav Посмотреть сообщение
    алгоритм уже завтра на свежую голову восстановлю
    Похоже, что алгоритм такой. Байтовый вариант выглядит так:
    Код:
    unsigned short crc16( unsigned char byte, int step )
    {
    	static unsigned short crc = 0;
    	if( step == 0 ) { crc = 0; }
    	crc ^= unsigned short ( byte ) << 8;
    	for( int i = 0 ; i < 8 ; i++ ) {
    		if( crc & 0x8000 )
    			crc = (crc << 1) ^ 0x1021;
    		else
    			crc = crc << 1;
    	}
    	return crc;
    }


    ---------- Post added at 13:27 ---------- Previous post was at 13:08 ----------

    Также ( если я правильно понял ) при чтении CRC проверяется так - если требование выполнено, то содержимое регистра данных интерпретируется как данные и включается в расчёт CRC, если же требование не выполнено - содержимое регистра данных интерпретируется как инверсное значение CRC, прибавляется к рассчитанному значению CRC и результат проверяется на равенство 0xFFFF.

    Но тогда получается, что если продолжать забирать данные из регистра данных - инверсное значение CRC будет прочитано как обычные данные и чтение пойдёт дальше.

    А что в таком случае произойдёт при считывании маркера:

    1. Чтение продолжится, но произойдёт сброс генератора CRC и расчёт CRC начнётся заново со считанного байта 0xA1 ;
    2. Произойдёт что-то ещё..
    Последний раз редактировалось Patron; 14.12.2013 в 12:14.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ЮТ-88: Реализация на ПЛИС (DE1)
    от Santechnik в разделе ЮТ-88
    Ответов: 61
    Последнее: 13.05.2022, 08:22
  2. Вопрос по ПЛИС
    от Zloy в разделе Несортированное железо
    Ответов: 23
    Последнее: 17.10.2015, 17:12
  3. Аксель на ПЛИС
    от iceoflame в разделе Amiga
    Ответов: 163
    Последнее: 25.03.2012, 14:51
  4. Список версий 1801ВП1 и 1801РЕ2
    от CodeMaster в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 28.02.2012, 22:39
  5. 1801вп1-128
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 0
    Последнее: 29.05.2010, 11:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •