资讯详情

从底层结构开始学习FPGA(4)----MUX多路选择器(Multiplexer)

系列目录和传送门

一、什么是MUX

二、FPGA内部的MUX

三、总结


系列目录和传送门

从底层结构学习FPGA》目录及传送门


一、什么是MUX

多路选择器MUX它是一个多输入和单输出的组合逻辑电路。n输入多路选择器是n路的数字开关。根据通道选择控制信号,从n输入中选择输出到公共输出端。

4选1的多路开关电路模型如下:

其真值表如下:

二、FPGA内部的MUX

在FPGA底层,MUX也是作为一种基本的逻辑单元而存在。下图是FPGA基本逻辑单元----SLICEL,可见其是由LUT、MUX、CARRY4和FF组成。

不同的用途LUT6和MUX组合级联可以实现所需的位数MUX了。

首先需要注意的是,如果只实现,MUX2、MUX3、和MUX不需要使用FPGA的MUX只需使用资源LUT6即可。关于LUT6:从底层学习FPGA(1)----LUT查找表

不妨先写个MUX4的Verilog代码,再用vivado来implementation一下,看看使用了些什么资源。Verilog代码如下:

module test(  input   A1,  input   A0,      input   D3,  input   D2,  input   D1,  input   D0,    output reg Y  );  always @(*)begin  case({A1,A0})   2'b00: Y = D0;     2'b01: Y = D1;    2'b10: Y = D2;    2'b11: Y = D3;    default:;  endcase  end  endmodule

用vivado门级电路分析如下:

嗯,这是一个标准MUX4.与上述电路图一致。

再来看看会综合(synthesis)什么:

可以看出,只用了一个LUT6。然后再看看在FPGA具体实现:

同样,只用了一个LUT6。既然MUX4都只用一个LUT6是可以实现的,所以MUX3、MUX2就当然也只需要一个LUT6了。

MUX实现使用4LUT6,其中LUT作为6的4个输入MUX4个输入,另外2个输入MUX4地址线MUX5~MUX8是如何实现的?(MUX5~MUX均采用3条地址线,可一起讨论)。

以下是讨论MUX例如,既然一个LUT6可以实现MUX4,那么2个LUT6 1个MUX2就可以实现MUX8的功能了。MUX8的Verilog形式:

module test(  input   A2,  input   A1,  input   A0,    input   D7,  input   D6,  input   D5,  input   D4,     input   D3,  input   D2,  input   D1,  input   D0,    output reg Y );  always @(*)begin  case({A2,A1,A0})   3'b000: Y = D0;     3'b001: Y = D1;    3'b010: Y = D2;    3'b011: Y = D3;    3'b100: Y = D4;     3'b101: Y = D5;    3'b110: Y = D6;    3'b111: Y = D7;     default:;  endcase end  endmodule

门级电路:

vivado综合:

综合结果为:2LUT6 1个MUXF7。MUXF7就是一个MUX2.但注意它的输入只能是LUT6的输出。

映射到FPGA:

那么从MUX8类推MUX16很容易:4个LUT6 2个MUX2 1个MUX2。MUX16的Verilog形式:

module test(  input   A3,  input   A2,  input   A1,  input   A0,   input   D15,  input   D14,  input   D13,  input   D12,     input   D11,  input   D10,  input   D9,  input   D8,   input   D7,  input   D6,  input   D5,  input   D4,     input   D3,  input   D2,  input   D1,  input   D0,    output reg Y );  always @(*)begin  case({A3,A2,A1,A0})   4'b0000: Y = D0;     4'b0001: Y = D1;    4'b0010: Y = D2;    4'b0011: Y = D3;    4'b0100: Y = D4;     4'b0101: Y = D5;    4'b0110: Y = D6;    4'b0111: Y = D7;    4'b1000: Y = D8;     4'b1001: Y = D9;    4'b1010: Y = D10;    4'b1011: Y = D11;    4'b1100: Y = D12;     4'b1101: Y = D13;    4'b1110: Y = D14;    4'b1111: Y = D15;      default:;  endase
end

endmodule

        门级电路:

        vivado综合:

        

        与料想的一致,三层级结构:  4个LUT6 + 2个MUXF7 + 1个MUXF8。

        映射到FPGA:

        再来看看上面出现的SLICEL的资源图:

        

        到这基本上就明白FPGA的独立MUX了:每个SLICE中都有2个MUXF7,其输入只能为LUT6的输出,而输出只能接到MUXF8;每个SLICE中都有1个MUXF8,其输入只能为MUXF7的输出。

        但是我们知道MUX2是可以用LUT6来实现的,也就是说 2个LUT6 + 1个MUXF7可以转换成2个LUT6 + 1个LUT6来实现MUX8;而4个LUT6 + 2个MUXF7+1个MUXF8可以转换成4个LUT6 + 1个LUT6来实现。那么既然LUT6可以实现MUX2的功能,FPGA里为何还要有固定的MUX这种结构?

        首先可以肯定的是用LUT6来实现MUX2的效率没有固定MUX2的效率高,因为有两个输入没有利用就意味着有资源是浪费的。其次,每个SLICE中只有4个LUT6,如果只用LUT6来实现MUX16则需要5个LUT6,那么第5个LUT6则势必会布线到其他Slice,这样就容易造成不好布线和拥堵,且4个LUT6的输出分别到达第五个LUT6的时间会不同,到达时间不一致则容易产生毛刺。

        而LUT6+MUX的构造则布线长度则是基本一致的,可以看下图:

        重点关注紫线,可以看到这个长度基本一致。如果要布线到另外Slice的LUT6的话,可以想象这条路径有多长和多难控制长度一致。

三、总结

3.1、每个SLICE中都有2个MUXF7 + 1个MUXF8。MUXF7 的输入只能为LUT6的输出,而输出只能接到MUXF8;MUXF8的输入只能为MUXF7的输出

3.2、MUX4可以由LUT6来实现,每个SLICE可以实现4个独立的MUX4

3.3、MUX8可以由2LUT6 + 1个MUXF7来实现,每个SLICE可以实现2个独立的MU8

3.4、MUX16可以由4LUT6 + 2个MUXF7 + 1个MUXF8来实现,每个SLICE可以实现1个独立的MU16

3.5、若大于16路的多路选择器则需要数个SLICE的资源进行级联来实现

标签: jk9301b01振动变送器b00正反转速传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台