Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
我目前正在做一个电路仿真器的学校项目。该电路的组件之一可以是多路复用器,它具有n个输入,log2(n)选择器和1个输出。
我确定需要哪个输出的方法是执行以下操作:
生成(选择器数量)位格雷码表,并循环遍历该表并与选择器的值进行比较。无论匹配哪一行,都需要输出。
但是,对于较大的多路复用器(16:1、32:1),这变得相当慢。是否有一种更有效的方法来获得所需的输出,而不必比较每个可能的格雷码可能性?
等等。在一般情况下:
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
我目前正在做一个电路仿真器的学校项目。该电路的组件之一可以是多路复用器,它具有n个输入,log2(n)选择器和1个输出。
我确定需要哪个输出的方法是执行以下操作:
生成(选择器数量)位格雷码表,并循环遍历该表并与选择器的值进行比较。无论匹配哪一行,都需要输出。
但是,对于较大的多路复用器(16:1、32:1),这变得相当慢。是否有一种更有效的方法来获得所需的输出,而不必比较每个可能的格雷码可能性?
最佳答案
因此,您希望从[0,1]范围内的n个输入(选择器信号)构造一个[0,2n](所选输入的索引)范围内的唯一数字。
那是binary code!
将一个选择器信号分配为值1,将下一个信号分配为值2,然后分配4,依此类推。将它们加在一起。选择相应的编号输入。
unsigned selectedInput = 0;
if (selector1) selectedInput += 1; /* or |= */
if (selector2) selectedInput += 2;
if (selector3) selectedInput += 4;
等等。在一般情况下:
unsigned selectedInput = 0;
for (int i = 0; i < selectorCount; ++i)
if (selectors[i]) selectedInput |= 1u << i;
关于c - 优化多路复用器以提高性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53765987/
10-09 02:46