用大白话从底层理解FPGA——LUT

FPGA中底层结构最重要两个东西LUT(查找表)和FF(触发器),今天我们先说LUT,看完这章内容,你能收获什么?

1. 理解LUT是什么?有什么用?其与门电路的区别是什么?

2. 理解我们写的RTL代码,如何映射到FPGA底层LUT

废话不多说,给大家讲下基础概念:

        在7系列前,FPGA中使用LUT4(4输入LUT),而7系列后使用LUT6(6输入LUT)6个输入端口一共有2^6=64种输入,所以可以把LUT6看成一个容量为64的ROM

        我以一个最简单的Verilog代码以及综合后的门电路为例,所有输入均为1时输出才为1。

        我们知道当我们用Verilog描述完电路逻辑后,扔给vivado编译器进行RTL门级电路分析和综合,电路就自动转化成映射到FPGA底层结构单元,也就是LUT和FF这些。为什么转化成门级电路后还要再综合成LUT呢?

        说到这,我们拿LUT与门电路相比,优势在哪里?我们对比下,门电路图中data_out2的两个输入的输入时间肯定是不相等,因为I0要先经过data_out3,经过的门电路越多,延时就越大,最终导致整个系统速度上不去,但如果用LUT,就不会发生这种问题,原因请接着往下看。

        接着再综合一下,看到该代码在FPGA底层最终电路的样子

        在Tcl窗口输入write_verilog -force lut.v,查看该v文件网表结构,我们可以看到LUT的原语(原语可以理解成FPGA中最底层的模块)其中我们注意的是该LUT6原语的INIT值,64bit的INIT值只有最高位是1,其他均为0,这就是我们当初设计时想要的,只有所有输入均为1时输出才为1,其他均为0,该值代表是我们逻辑表达式真值表的结果,这便是LUT与数电中真值表的关系,FPGA用LUT这种结构来实现各种各样的门电路,我们通过修改INIT值,既可以与门电路一一映射。还记得文章最开始我说,LUT的本质就是64bit的ROM,采用LUT这种底层结构,由于FPGA上电进行配置时,就已经给每个LUT赋值好,将所有可能的逻辑值都存起来,需要用的时候再查找直接输出对应结果,大大提高灵活性和资源利用率,这也是FPGA快的主要原因。

该代码总消耗1个LUT和7个IOB

        在实际开发中,如果采用多个LUT6级联来实现,当输入位数过多,即组合逻辑复杂时,则会造成级联的LUT6过多,逻辑级数变大大,其结果是通常会造成组合逻辑延时多大,导致时序紧张,因此,在设计中,我们一般采用插入FF的方法来切割组合逻辑,防止级数偶合,使得每一段的逻辑级数都不过于长,从而优化时序。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值