多路复用器背景
在很多FPGA设计中都使用了多路复用器,通过优化设计中的多路复用器逻辑,可以确保在ALTERA器件中得到一个最有效的逻辑实现。本文开始我们介绍多路复用器的背景以及不同的结构。
多路复用器分类
那么到底多路复用器是怎么产生的呢?我们首先来看ALTERA对于逻辑设计中多路复用器种类的划分,如下 所示,ALTERA将多路复用器分为三种,综合工具为根据对用户HDL代码的编译自行选择实现哪种多路复用器。
l 二进制多路复用器
n CASE语句
l 多路复用选择器
n CASE语句
n 状态机
n IF语句
l 带优先级多路复用器
n IF语句
从上述划分我们知道,不同HDL结构会产生不同类型的多路复用器,所以理解多路复用器是如何从HDL代码产生的,以及在综合的时候如何实现是我们优化多路复用器的第一步。
图1:二进制多路复用器示例
所谓二进制多路复用器,是其选择输入基于二进制编码选择位,如图1所示。Stratix系列从Stratix II开始采样了6-输入查找表结构,这种结构非常适合实现4:1多路复用器(4个数据和2个选择输入)。对于那些逻辑单元是4-输入查找表结构的器件,实现上述4:1二进制多路复用器需要两个4-输入查找表。更大的多路复用器一般由综合工具分解成4:1多路复用器块,有时也会在顶部产生一个2:1多路复用器。
第二种多路复用器叫多路复用选择器,这种复用器每一个选择线对应一个输入数据。这种多路复用器的选择线编码采样独热编码风格,如以下代码所示。
case (sel)
4'b0001: z = a;
4'b0010: z = b;
4'b0100: z = c;
4'b1000: z = d;
default: z = 1'bx;
endcase
多路复用选择器通常被创建成一组树形与门和或门。一个N输入多路复用选择器的结构一般效率低于相同结构的二进制多路复用器。然而,很多情况下,选择信号来自解码器的输出,此时Quartus II综合工具会尝试将选择器和解码器组合成一个二进制多路复用器。
从以上分类可知,这两种多路复用器都可由case语句综合而来,Quartus II如何判断生成二进制还是选择器复用器呢?可以基于以下两点来判断:
l 选择输入是否基于一个状态机的状态
l 选择输入是否只覆盖不到所有可能的八分之一
基于以上两点,如果答案是肯定,那么Quartus II会综合成多路复用选择器,剩下的case综合成二进制多路复用器。需要注意的是,Synplicity总是选择综合成多路复用选择器。
最后一种是有优先级的多路复用器,也即选择逻辑解码的时候带有优先级。选择信号选择当前输出一定是要安照一定的顺序来指定,这种结构通常是在VHDL或者Verilog里使用IF,ELSE,WHEN,SELECT和?:这些语句,如图2所示。
正如图2右侧所示,根据复用路数的多少,通过该结构链路的延时可能会很大。为了提升设计时序,在没有优先级要求的情况尽量避免使用优先级多路复用器。如果选择的顺序并不重要,那么推荐使用case语句来实现二进制多路复用器或多路复用选择器。
图2:带优先级多路复用器代码示例以及结构
文章评论(0条评论)
登录后参与讨论