Как мне найти следующий бит, который нужно изменить в коде Грея за постоянное время?

У меня есть небольшой 8-битный процессор, который имеет декодер N-to-M на некоторых выходных линиях - например, для случая от 5 до 32 бит, I запись 00101 и бит 5 изменяет состояние. Единственный интерфейс для вывода - это изменение состояния, обратного чтения нет.

Устройство подсчитывает быстро (но случайно) происходящие события и должно предоставлять этот счет как код «изменения одного бита» другому устройству. Выходные контакты считываются параллельно другим устройством, и может быть прочитан так быстро или экономно, как решит другое устройство, поэтому подсчет необходим.

Мне НЕ нужно использовать стандартный двоичный рефлексивный код Грея - я могу использовать любой однобитовый код изменения.

Однако я хочу иметь возможность отслеживать следующий бит для эффективного изменения.

У меня нет инструкции «LowestBitSet», и нахождение самого младшего бита, установленного в четырех 8-битных регистрах, требует большого количества циклов - поэтому я не могу использовать этот «общий» подход:

  Keep binary counter A
  Find B as A XOR (A+1)
  Bit to change is LowestBitSet in B 

Я хочу вычислить это как минимум в памяти и регистров, насколько это возможно, а память определенно слишком ограничена для любой большой таблицы поиска. Продолжительность цикла - более важный фактор.

Есть предложения по алгоритмам?

12
задан frLich 10 January 2011 в 16:00
поделиться