別のスタックオーバーフローの質問への回答として、このデジタル ロジック ダイアグラムを投稿しました。Verilog または VHDL でコーディングされ、最終的に FPGA に実装されるロジック システムについて説明します。
代替テキスト http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg
図の番号付きのボックスは、フィールド内のビットを表します。各フィールドにはKビットがあり、現在のビットとマスクのビットはコンピュータ システムによって提供されます (ラッチ レジスタまたは同等のものを使用)。次のビットは、同じコンピューター システムに読み戻されます。
私が投稿した解決策は、マスクフィールドに少なくとも 1 つのビットが設定されていて、現在のビット フィールドに正確に 1 つのビットが設定されている限り機能します。アイデアは、コンピューター システムが何らかのタスク (元の質問でのスケジューリング操作) を実行した後、次のビット フィールドが現在のビット フィールドになるというものです。
そこで、私の質問は次のとおり です。現在のビット フィールドがすべてゼロである (ビットが設定されていない)という特殊なケースを適切に処理するには、このシステムをどのように変更しますか? 現状では、 current のすべてのビットがゼロの場合、 maskのビットが何に設定されていても、出力もゼロになります。
理想的には、currentがすべてゼロの場合、 maskの最下位の設定ビットをnextに設定する必要があります。また、システムは、論理ゲートを指数関数的に追加することなく、任意のビット数 (K) まで拡張可能である必要があります。元の質問の精神は、任意の数のビットに対して簡単に実装できるソリューションを考え出すことでした。