FPGA为什么能实现逻辑运算


首先回答题目问题:FPGA的逻辑结果不是算出来的,是查出来的。也就是说FPGA的逻辑功能实现是基于查找表的。

1.CPLD如何实现逻辑运算

CPLD,复杂可编程逻辑器件。逻辑阵列的每一个交叉点都可以通过编程实现导通从而实现与逻辑,乘积项选择矩阵可实现或逻辑。也就是CPLD的组合逻辑都是直接通过内部的与非门实现的
在这里插入图片描述

2.FPGA如何实现逻辑运算

FPGA,现场可编程门阵列,前面说是基于查找表,那什么是查找表?
查找表可以理解为保存了逻辑表达式真值表的RAM,我们将设计好的逻辑电路的真值表存在查找表里面。每次根据输入信号查找对应的结果,然后输出就可以了。所以说FPGA的工作像一个RAM,根据不同的输入信号(地址)输出相应的数据。
一个4输入查找表如下所示
在这里插入图片描述
现在实现一个Y=A&B+C+D的组合逻辑功能,Verilog语句为:

reg Y;
reg [3:0] I ;
always@(*)begin  
Y=(I[0] & I[1]) | I[2] | I[3];
end

逻辑表达式的真值表如下图
在这里插入图片描述
将这一张表存到FPGA中,4个输入信号组成4位地址线,根据不同的地址取出对应的数据,这就实现了“”逻辑运算“”功能。
如果实现时序逻辑功能,在查找表输出前加一级触发器即可,例如实现如下功能的结构为

reg Y;
reg [3:0] I ;
always@(posedge clk)begin  
Y=(I[0] & I[1]) | I[2] | I[3];
end

在这里插入图片描述

3.理解FPGA开发流程中的综合(Synthesis)

典型的FPGA开发流程为:
设计定义=>设计输入=>前仿真=>综合=>实现和布局布线=>后仿真

  • 设计定义:就是系统设计和FPGA 芯片选择等准备工作
  • 设计输入:是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给
    EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。
  • 综合:在了解了FPGA的工作原理后我们就可以清楚综合是用来干嘛的了,综合(Synthesis)是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。说白了就是生成所有逻辑表达式的真值表
  • 实现和布局布线:利用 FPGA 制造商的布局布线功能,根据综合后生成的标准门级结构网表来产生真实具体的门级电路

4.如何判断语句是否可以综合

引用Xilinx大学计划中的一段描述:

首先须要明确的是,HDL 语言并不是针对硬件设计而开发的语言,只不过目前被设计人员用来设计硬件。这是因为 HDL 语言只是硬件描述语言,并不是“硬件设计语言(Hardware Design Language)”,换句话说任何符合 HDL 语法标准的代码都是对硬件行为的一种描述,但不一定是可直接对应成电路的设计信息。

行为描述可以基于不同的层次,如系统级,算法级,寄存器传输级(RTL)、门级等等。以目前大部分 EDA 软件的综合能力来说,只有 RTL 或更低层次的行为描述才能保证是可综合的。

例如要实现两个变量相除的运算时,在代码中写下 C=A/B 这样的语句,可以发现在功能中,该句话可以正确执行,但任何 EDA 软件都不能将其综合成硬件电路。读者可以思考其中的原因,在计算除法时,需要从高位到低位逐次试除、求余、移位,需要经过多次运算才能得到最终结果;此外试除和求余需要减法器,商数和余数的中间结果必须有寄存器存储;显然这么多的计算不可能在一个时钟周期里完成,需要经过多次反复操作才能完成。因此,C=A/B 这样的语句相对于 EDA 软件的能力,显得太抽象,因而无法将其转化为硬件逻辑。

对于一段代码,如果设计者本身都不能想象出一个较直观的硬件实现方法,那EDA 软件肯定也不行。例如加法器、多路选择器是大家都很熟悉的电路,所以类似 A+B-C,(A>B)?C:D 这样的运算一定可以综合。而除法、求平方根、对数以及三角函数等较复杂的运算,必须通过一定的算法实现,并没有直观简单的实现电路,因而可以判断那些计算式是不能综合的,必须按其相应的算法写出更具体的代码才能实现。此外,硬件无法支持的行为描述,当然也不能被综合(例如在 FPGA 内部实现 DDR SDRAM 存储器那样的双延触发逻辑就是不可综合的)。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值