我将此数字逻辑图作为answer发布到another stackoverflow question。它描述了一个逻辑系统,它将用Verilog或VHDL编码,最终在FPGA中实现。
alt text http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg
图中的编号框表示字段中的位。每个字段具有 K 位,并且 current 和 mask 的位将由计算机系统提供(使用锁存寄存器或等效物)。 next 中的位将被读回到同一计算机系统中。
只要在掩码字段中设置了至少一位,并且当前位字段中只设置了一位,我发布的解决方案就可以工作。想法是在计算机系统执行某项任务(原始问题中的调度操作)之后, next 位字段将成为当前位字段。
所以,我的问题是: 您如何修改此系统以便正确处理当前位字段全为零(未设置位)的特殊情况?目前,如果所有位都在当前为零,无论掩码中的位被设置为什么,输出也将为零。
理想情况下,如果 current 全为零,则 mask 中的最低设置位应设置在 next 中。系统还应保持可扩展到任意数量的位(K),而不必增加指数级的逻辑门。原始问题的精神是提出一种解决方案,可以直接实现任意数量的位。
答案 0 :(得分:2)
对我来说,我会告诉FPGA的用户,他们必须在输入时将其中一个位设置为1。
但是,如果这不是您首选的解决方案,那么将所有电流输入预先馈入大NOR门的想法有什么不对(这样只有当所有输入都为假时输出才为真)。所有当前线路也继续到其AND门,除了在进入AND门之前,Current [1]与NOR门的输出进行“或”运算
这样,如果所有电流都是假的,则Current [1]将进入AND门。
请记住,我理解布尔代数,但我从未在原始硬件上工作 - 我猜你需要将所有输入信号缓冲到AND门以确保正确的时序,但我怀疑你会知道比我好。
如果SO修复了它的代码/预阻塞,则保留下面的图表 - 最新的SO更新似乎已经填满了它们(让它们成比例,而不是固定宽度,字体)。无论如何,eJames的图形图表更好。
这是我的图表,略逊于你的图: - ):
+-------------------+
| |
| +---- |
Current[1]-----+------\ \ |
|NOR|o--+ |
Current[2-k]---+------/ / | |
| +---- | |
| +\ /+
| | \_/ |
+---+ | OR |
\ /Buffer \ /
+ ---
| |
+---+ +---+
|2-k| | 1 | <- These signals feed
+---+ +---+ into your AND gates.