Como encontro o próximo bit para mudar em um código Gray em tempo constante?

Eu tenho um pequeno processador de 8 bits que possui um decodificador N-M em algumas linhas de saída - por exemplo, no caso de 5 a 32 bits, escrevo 00101 e o bit 5 muda de estado. A única interface para a saída é change-state, não há read-back.

O dispositivo conta eventos que ocorrem rapidamente (mas aleatoriamente) e deve fornecer essa contagem como um código de 'único bit alterado' para outro dispositivo. Os pinos de saída são lidos em paralelo por outro dispositivo e podem ser lidos tão rapidamente ou com moderação quanto o outro dispositivo decidir, portanto, a contagem é necessária.

NÃO preciso usar o código cinza binário refletivo padrão - posso usar qualquer código de alteração de bit único.

No entanto, quero acompanhar o próximo bit para mudar com eficiência.

Eu não tenho uma instrução "LowestBitSet" e encontrar o conjunto de bits mais baixo em quatro registradores de 8 bits consome ciclo - portanto, não posso usar essa abordagem "comum":

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

Desejo calcular isso com o mínimo de memória e registros possível, e a memória é definitivamente muito restrita para qualquer tabela de pesquisa grande. O tempo do ciclo é o fator mais importante.

Alguma sugestão sobre algoritmos?

questionAnswers(7)

yourAnswerToTheQuestion