frL*_*ich 12 language-agnostic algorithm gray-code
我有一个小的8位处理器,在某些输出线上有一个N对M解码器 - 例如,对于5到32位的情况,我写00101和位5改变状态.输出的唯一接口是change-state,没有回读.
设备快速(但随机)发生事件计数,并应将此计数作为"单个位更改"代码提供给另一个设备.输出引脚由另一个器件并行读取,并且可以像其他器件决定的那样快速或少量地读取,因此计数是必要的.
我不需要使用标准的Binary Reflective Gray代码 - 我可以使用任何单位更改代码.
但是,我希望能够跟踪下一位有效更改的位.
我没有"LowestBitSet"指令,并且在四个8位寄存器中找到最低位设置是循环消耗 - 所以我不能使用这种"常见"方法:
Keep binary counter A
Find B as A XOR (A+1)
Bit to change is LowestBitSet in B
Run Code Online (Sandbox Code Playgroud)
我希望在尽可能少的内存和寄存器中计算它,并且对于任何大型查找表来说内存肯定是太受限制了.周期时间是更重要的因素.
关于算法的任何建议?
小智 1
“算法 L”第 10 页Knuth, Donald E.“生成所有 n 元组”。《计算机编程的艺术》,第 4A 卷:枚举和回溯,前分册 2a,2004 年 10 月 15 日似乎很理想。对于您的设备,步骤 L4 将是“change_state(j)”。