问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 33 人浏览分享

开启左侧

第二十二课 FPGA 知识_解密 FPGA 的加法逻辑运算

[复制链接]
33 0
AMD-FPGA课程
AMD课程: 04-FPGA编程基础 » FPGA硬件资源解析
1 概述
        由于 FPGA 需要被反复烧写,它实现组合逻辑的基本结构不可能像 ASIC 那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流 FPGA 都采用了基于 SRAM 工艺的查找表结构。LUT 本质上就是一个 RAM。它把数据事先写入 RAM 后, 每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
        7 系列 FPGA 中的函数发生器实现为六输入查找表(LUT)。slice 的 4 个函数发生器(A,B,C 和 D)中的每一个都有六个独立输入(A 输入 A1 A6)和两个独立输出(O5 O6)。
        这篇短文中,我们通过一个简单的加法器来了解下 LUT 如果实现加法器功能。

2 加法器代码
module ADDER(
input [0:0]A,
input [0:0]B,
output [1:0]Q
);
assign Q = A + B;
endmodul

3 加法器原理图
从 VIVADO 左侧的 RTL ANALYSIS 选择打开原理图
image.jpg
        加法器原理图如下图所示
image.jpg

4 综合代码后查看原理图
image.jpg
        综合后的原理图可以看到 IBUF 以及 LUT 和 OBUF
image.jpg
        单击红框的 LUT2 单元,然后在左手边查看 LUT2 的属性
image.jpg
        同理单击红框的 LUT2 单元,然后在左手边查看 LUT2 的属性
image.jpg
        可以看到以上图中的初始值,就是 LUT 查找表的值,通过查表我们可以看到加法器的可以执行的结果。
        A:LUT2 初值位 4’h6 二进制表示位 3’b110 ; B:LUT2 初值位 4’h8 二进制表示位 4’b1000
image.jpg
        通过以上的简单分析,相信大家可以掌握 LUT 实现逻辑单元功能的本质了。
        5 带有进位链的加法运算
        增加加法运算的的位宽
module ADDER(
input [5:0]A,
input [5:0]B,
output [6:0]Q
);
assign Q = A + B;
endmodule

        综合后,查看电路图结构
image.jpg
        可以看到,此图中,使用到了 6 个 LUT,那么 6 个 LUT 分布在 2 个竖直的 Slice 中,这一点,我们在前面介绍CLB 结构的时候液晶介绍过 CLB 内部的进位链。不妨再温习下,如下图所示:
image.jpg
        因此当一个 CLB 里面的 LUT 不足以完成加法运算的时候,通过进位链逻辑电路,可以实现多个 Sclice 级联完成更大的加法运算。


6 那么乘法运算呢?
        这篇课程的内容主要目的还是以简单的例子,让大家认识 FPGA,认识了 FPGA 的电路结构,对后需要的软件编程会有很大帮助,做到软件硬件的最佳配合。至于乘法器,主要会使用 DSP48 资源,目前我们不做介绍,以后有机会再去解密 DSP48 资源。
        到目前为止,我们已经完成了 3 个课时的介绍,这 3 个课时介绍主要是未来让读者可以学习到 FPGA 的基本硬件基础。这个道理就比如虽然是做数字电路编程的,你依然得懂一些模拟电路。那么后续的编程中,虽然是对硬件编程,但是很多时候可能你不知道硬件电路的具体实现方式,依然可以写出可以正常运行的代码。但是经过我们这几个课时基础的分析,以及后面我        再讲解完成基本的 FPGA 编程入门,完成一些项目方案后,笔者还要带领读者进一步学习FPGA硬件编程方面时序分析的内容,这样完成了FPGA的学习才能真正做到所写的代码更加适合在FPGA上运行。

        在开始学习编程前,笔者把 10 个要点先总结下:
        1)、不要太多的 if—else 嵌套
        2)、不要编写过于庞大的状态机
        3)、复杂的状态机,可以采用 2 段式以上的实现
        4)、尽量使用时序逻辑完成编程
        5)、使用组合逻辑不要过于庞大
        6)、复杂代码拆分简单模块
        7)、复杂计算,增加流水设计
        8)、高速模块和低速模块搭配使用
        9)、case 语句一定有 default
        10)、组合逻辑有 if 必须有 else 防止产生锁存器,锁存器所以出毛刺
        为什么要有这 10 个要点,一切皆因 FPGA 是电路,是电路就有延迟,电路规模越大,走线越长,速度越高,可能就会超出电路的运行速度,从而产生错误。所以我们要让部分电路实现快慢有序,实现最佳的搭配。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

119

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版