电子说
首先开门见山的回答这个问题——LUT的作用是 实现所有的逻辑函数 ,也就是类似于计算Y=A&B+C+D之类的算式结果!
LUT是什么构成的?
xilinx的LUT是4输入1输出的 RAM ,也就是4根地址线的,一根数据线的RAM,并且I1是高地址位,I4是低地址位,样子参考下图。I1到I4就是地址线,O是输出数据线。
RAM怎么实现逻辑运算?
假设要实现运算Y=A&B+C+D。假设I1代表A,I2代表B,I3代表C,I4代表D,O代表Y。此时将下表存入LUT中。从下表可以看出,LUT存储的就是函数Y=A&B+C+D的真值表。 **4个输入信号的地址对应的位置上存储的就是4个地址进行逻辑运算后的真值!** 这样任何4输入的所有逻辑运算都可以通过存取真值表的方法实现。一旦输入地址中的任何一个数,立马就会输出存储位置上对应的结果。
地址(I[4:0]) | 存储值(I1&I2+I3+I4的运算结果) |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 1 |
0011 | 1 |
0100 | 0 |
0101 | 1 |
0110 | 1 |
0111 | 1 |
1000 | 0 |
1001 | 1 |
1010 | 1 |
1011 | 1 |
1100 | 1 |
1101 | 1 |
1110 | 1 |
1111 | 1 |
verilog怎么实现上面的函数呢?
reg Y;
reg [3:0] I ;
always@(*)begin Y=(I[0] & I1) | I2 | I3;end
请注意( )里面是 ,代表不需要时钟,实现的是组合逻辑。如果最后一行变成如下:
always@(posedge clk)begin Y=(I[0] & I1) | I2 | I3;end
则生成的不是一个LUT是一个LUT加一个触发器FF。
全部0条评论
快来发表一下你的评论吧 !