我试图将2位2对1多路复用器装入一个LUT。似乎LUT5_D
有5个输入和2个输出。我可以按照我的要求对LUT进行编程吗?
之前我使用过LUT3
,LUT4
。从virtex-5库指南来看,似乎要实例化LUT5_D
,我需要编写一个正确的init值,但是只有一个init值可以编程,所以实际上只会使用其中一个输出?或者两个输出都会随时给出相同的值?
LUT5_D #(
.INIT(32'h55550f0f),
) LUT5_D_inst
(.O(O), // General LUT output (1-bit)
.LO(LO), // Local LUT output (1-bit)
.I0(I0), // LUT input (1-bit)
.I1(I1), // LUT input (1-bit)
.I2(I2), // LUT input (1-bit)
.I3(I3), // LUT input (1-bit)
.I4(SEL));
答案 0 :(得分:1)
LUT5_D
不会做你想要的:两个输出是相同的(图书馆指南中的表格显示了这一点)。
2输出选项是LUT6_2
:
对于您的应用,您有两个输入(A和B),每个输入有两位(0,1),输出(Y)也有两位。
I0
作为选择输入I5
以始终选择顶部LUT5(逻辑1 IIRC)。I4:1
与A0
,B0
,A1
,B1
联系起来。 O6
然后是Y0
,O5
是Y1
我把它作为练习留给感兴趣的读者来提出INIT值:
I4
I3
和I0
之间的最高LUT5到MUX
I2
I1
和I0
之间导致底部LUT5到MUX
答案 1 :(得分:1)
不要编程INIT值。 LUT_MAP更容易,更易于维护:
(* LUT_MAP="yes" *)
module mux2(sel, a, b, o);
input sel;
input a;
input b;
output o;
assign o = (~sel&a) | (sel & b);
endmodule
使用公共sel输入信号,通过将四个6-LUT中的每一个分成2个5-LUT,上面的mux2可以打包8到(4个6-LUT)切片。