Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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