[X]关闭

22 FPGA知识_解密FPGA的加法逻辑运算

文档创建者:FPGA课程
浏览次数:286
最后更新:2024-08-15
FPGA基础知识
FPGA基础: FPGA编程语言 » Verilog编程入门
本帖最后由 FPGA课程 于 2024-8-15 14:07 编辑

​软件版本:无
操作系统:WIN10 64bit
硬件平台:适用所有系列FPGA
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1概述
由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构。LUT本质上就是一个RAM。它把数据事先写入RAM后, 每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
7系列FPGA中的函数发生器实现为六输入查找表(LUT)。slice的4个函数发生器(A,B,C和D)中的每一个都有六个独立输入(A输入A1至A6)和两个独立输出(O5和O6)。
这篇短文中,我们通过一个简单的加法器来了解下LUT如果实现加法器功能。
2加法器代码
  1. module ADDER(
  2. input  [0:0]A,
  3. input  [0:0]B,
  4. output [1:0]Q
  5. );
  6. assign Q = A + B;
  7. 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   
                        
A
                        
                        
B
                        
                        
ADDR
                        
                        
Q_OBUF[0]_inst_i_1
                        
                        
ADDR
                        
                        
Q_OBUF[1]_inst_i_1
                        
                        
Q[1:0]
                        
                        
0
                        
                        
0
                        
                        
0
                        
                        
0
                        
                        
0
                        
                        
0
                        
                        
2’b00
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
1
                        
                        
2
                        
                        
0
                        
                        
2’b01
                        
                        
0
                        
                        
1
                        
                        
2
                        
                        
1
                        
                        
1
                        
                        
0
                        
                        
2’b01
                        
                        
1
                        
                        
1
                        
                        
3
                        
                        
0
                        
                        
3
                        
                        
1
                        
                        
2’b10
                        
通过以上的简单分析,相信大家可以掌握LUT实现逻辑单元功能的本质了。
5带有进位链的加法运算
增加加法运算的的位宽
  1. module ADDER(
  2. input  [5:0]A,
  3. input  [5:0]B,
  4. output [6:0]Q
  5. );
  6. assign Q = A + B;
  7. 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是电路,是电路就有延迟,电路规模越大,走线越长,速度越高,可能就会超出电路的运行速度,从而产生错误。所以我们要让部分电路实现快慢有序,实现最佳的搭配。


733b88855ed046d4b149c199ca84f104.jpg
a0356177aeeb4b6288ddfaf8a074eb09.jpg
c7251b587055430a9494cd279ede5a36.jpg
81987ea088f04374bb9a252f3b1cf7dd.jpg
bdc434d282074dfca72882ee0c0aa1af.jpg
10ebf739d4f54c93bdbff2399af0ede6.jpg
018f253556c3463299852fb5aae56ea3.jpg
f869891046074507846c75c8e770558b.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则