隐含式多路复用器
利用ALTERA器件内部逻辑结构可以实现一些隐式多路复用器,比如在我们使用同步复位、同步加载以及时钟使能的时候,或许就会被综合成这种隐式多路复用器。由于同步加载、清零以及使能在一个LAB内部都是共用的,所以只有在LAB内所有LE使用相同加载、清零或使能的时候这些信号才非常有用,而实际上这种情况也经常发生。
前面我们知道一个2:1多路复用器就要消耗一个LE,下面我们给出隐式多路复用器如何在一个LE中实现3:1和4:1等多路复用器的。
图1:使用单个LE实现3:1多路复用器
如图1所示,就是使用一个LE实现了3:1多路复用器,其中查找表实现了2:1,另外一个输入从DATA3进行,使用同步加载来实现选择线功能。
图2:只用一个LE实现4:1多路复用器
如图2所示,只使用了一个LE就实现一个4:1多路复用器。我们从图17就可以看到查找表的所有输入已经都被占用了,所以这时候无法再提供额外的输入。但是如果多路复用器如果有某个输入固定为0,那么如图2所示,就可以使用同步清零作为这个输入,如此就只用一个LE实现了一个4:1多路复用器。
最后我们来一种在单个LE实现的5:1多路复用器,其VHDL代码如下所示:
PROCESS (clk, reset)
BEGIN
IF reset=’1’ THEN
z <= 0;
ELSIF rising_edge(clk) THEN
IF enable=’1’ THEN
IF sclear THEN
z <= 0;
ELSIF sload THEN
z <= d2;
ELSE
IF sel=’1’ THEN
z <= d1;
ELSE z <= d0;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
上述代码中使用了IF-ELSE语句实现异步复位、同步时钟使能以及同步清零和同步加载,剩下的核心就是一个2:1多路复用选择器。根据前面的分析,同步加载和清零可以综合成多路复用器,所以至少可以得到前面博文所示的4:1多路复用器,那么综合器最后会如何处理时钟使能呢?答案是实现一个5:1多路复用器,而且只需使用一个LE,实现的结构如图3所示。
图3:使用单个LE实现5:1多路复用器
需要注意的是和图2一样,该多路复用器有一个输入固定为0,而且在时钟使能为0时,复用器的输出反馈到第五个输入。
接下来我们来看看如何使用这类多路复用器,图4展示了利用上述3:1多路复用器可以更有效地实现更大的12:1多路复用器,效率和使用之前介绍的线性多路复用器相当。
图4:利用3:1多路复用器更有效地实现更大多路复用器
图4是采用了同步加载端口,如果同时还采用同步复位端口,那么我们就可以实现如图5所示的12:1多路复用器。这种结构中,所有3:1复用器是同时复位,而不是单独某一个,这样可以使用一个或门来组合最终输出,而不像图20那样需要使用一个4:1多路复用器。一个或门可以放置到一个LE中,而一个4:1多路复用器则需要两个LE,这样图21所示的12:1多路复用器就只需5个LE。这个效率甚至高于之前讨论的线性Mux,相比二进制Mux则更是节约了38%的资源。
图5:采用同步复位实现更有效实现多路复用器
当然,要实现图5所示的多路复用器,设计者必须要将意图体现在代码中。通过上面分析,建议大家多使用上述这种所谓的隐含多路复用器,原因在于这种多路复用器依赖于寄存器功能,当多路复用器的输出经过寄存后,就非常利于使用。
文章评论(0条评论)
登录后参与讨论