综合时如何实现多路复用器
首先二进制多路复用器可以直接使用ALTERA的lpm_mux函数,我们来看4:1多路复用器如何使用四输入查找表来实现,前面我们已经提到实现这种多路复用器需要两个LE,如图1所示。
图1: 4:1多路复用器实现
图2:4:1多路复用器是如何工作的
如图2所示显示4:1多路复用器是如何工作的,S0选择复用器的输出是从A/B还是C/D之中产生,即S0等于0意味着C或D被选择输出。S1再在A/B和C/D中选择最终的输出。如图2所示,我们可以利用级联线来实现高速互联,而且这种级联线是一种比较正常的布线资源。
前面我们提到大的多路复用器,会被综合工具分解成小的多路复用器。现在我们来看如何使用树形2:1多路复用器来组成N:1多路复用器,如图3所示。
图3:树形2:1多路复用器组成N:1多路复用器
图3所示为创建较大多路复用器的标准技术,ASIC中也常用此技术。每一个2:1多路复用器使用了一个查找表,所以N:1多路复用器大体上要消耗N个LE(如果你仔细去数,实际上应该消耗了N-1个LE,这里我们只做大致估算)。如果将图3顶部从左手边开始,按照前面介绍的4:1多路复用器来实现,那么一个4:1多路复用器需要2个LE,那么结果就会如图4所示。
图4:树形4:1多路复用器组成N:1多路复用器
如图4所示,一个4:1消耗2个LE,因为中间合成需要消耗资源,所以N:1总体LE消耗大概是0.66N个LE。
对于多路复用选择器的实现,前面我们提到选择器就是一个树形的与门和或门,如图5所示,虚线框中为一个LE。该结构实现的N:1多路复用器消耗的LE资源应该也在N的三分之二左右,只是实际上这种结构比起前面的4:1结构要稍微多消耗一点点。
图5:多路复用选择器的实现
最后,对于带优先级多路复用器的实现,我们来看如图6所示的结构,这种实现结果来自于IF-THEN-ELSE代码结构。图中,每个2:1消耗一个LE,所以N:1总共需要N个LE(实际也是N-1个)。需要注意的是,前面也提到过,这种结构的时序延时比较差。
图6:带优先级多路复用器实现
不过,Quartus II可以对图6中结构进行优化,优化后的结构如图7所示。优化后,总体树形结构并未变得更大或更小,但是路径延时变得更小。如果设计中确实需要优先级多路复用器,那么Quartus II会以这种方式来实现。
图7:Quartus II对优先级多路复用器的优化
如图7所示,只要最前面四个选择线中任何一个为高,即选择左手边数据作为输出,否则选择右手边数据作为输出,在其它每两个MUX之间也是按照同样的道理进行选择。Sel 0具有最高的优先级。如此优化之后,LE的消耗没有发生变化,但是却减少了逻辑深度,优化了逻辑延时。
文章评论(0条评论)
登录后参与讨论