FPGA设计重要基础

本文介绍了FPGA设计中的速度与面积之间的权衡,包括乒乓操作、串/并转换、流水线、模块复用和逻辑复制等方法。通过这些策略,设计师可以在满足时序裕量要求的同时,优化资源利用率。此外,还讨论了跨时钟域处理、复位管理和同步异步电路的选择。

FPGA设计的重要基础

速度&面积
当一个工程的时序裕量很充足,可达速度完全高于所需速度时,可以牺牲速度优势换取面积的节约(消耗时序裕量省资源);当一个工程的时序裕量要求很高,很难到达所需速度时,可以牺牲面积资源来换取速度(耗资源保证时序裕量),下面介绍具体互换的方法:

1>乒乓操作(面积换速度)
这里写图片描述
假如上图A的输入速率是100Mbps,分流之后,两个数据预处理模块的数据速度都分别为50Mbps,原本的预处理模块需要在1s内处理100M的数据,现在每个预处理模块只需1s内处理50M的数据,所以可以经过数据缓冲模块跨时钟域将时钟降至原来的一半,数据预处理模块就可以在低速下工作,且能保证数据处理完毕

2>串/并转换(面积&速度)
串转并(面积换速度):速率快的串行信号通过移位寄存器等器件降频之后并行处理
并转串(速度换面积):将低速并行信号转换为高速串行信号,牺牲时序裕量换取资源的节省

3.流水线(面积换速度)
流水线处理是高速设计中的一个常用设计手段,若某个设计的处理流程分为若干步骤,且整个数据处理是单流向的(没有反馈或迭代,前步骤的输出是后步骤的输入),则可以考虑采用流水线方法提高系统的工作频率
这里写图片描述
将一个大步骤适当划分为很多小步骤(通过在步骤间添加寄存器),流水线则类似为一个移位寄存器组,数据依次按时钟节拍流过每个步骤
关键点是流水线在逻辑间添加了寄存器,缩短寄存器间的传输路径,增大了时序裕量,进而可以提升系统最大工作频率
这里写图片描述
由于每个模块都在同时工作,所以数据和数据间是连续的,输入到输出有固定的N时钟拍延迟,不像CPU的指令,同一时间只有一个步骤运作,所以流水线数据吞吐量大
举一个简单的流水线程序(为了最简表达出意思,这里就不加复位部分等细节了):

always@(posedge clk)begin
  pipe_0<=pipe_in+1;
  pipe_1<=pipe_0*2;
  pipe_out<=pipe_1-1;
end

完成的是一个out=(in+1)*2-1的流水线操作

4.模块复用
直接来例子:

always@(*)
  case(a)
    1: out = a0*b0;
    2: out = a1*b1;
    3: out = a2*b2;
    4: out = a3*b3;
  endcase

复用一个乘法器后:

always@(*)
  case(a)
    1:begin ina=a0;inb=b0; end
    2:begin ina=a1;inb=b1; end
    3:begin ina=a2;inb=b2; end
    4:begin ina=a3;inb=b3; end
  endcase

assign out = ina*inb;

虽然节省了面积但是有可能导致更大的传输延迟
(在组合逻辑中,可以根据信号到来的先后顺序调整组合逻辑顺序,从而改善时序)

5.逻辑复制(资源换速度)
在大扇出网络中,面临的问题是众多负载分布在各位置,布线路径长,寄存器和寄存器间传输延迟大,时序裕量小,这时,可以在负载和扇出点间插入寄存器,缩短寄存器间的传输延时,进而提升工作频率

跨时钟域
1>单bit数据打两拍
2>多bit数据FIFO或双口RAM隔离
3>多bit数据格雷码转换再打两拍
4>握手协议:发送方给数据和请求信号,接收方接到后返回响应给发送方,发送方撤销请求信号,准备发送下一轮数据
5>异步通信(如UART)

复位
1>尽量使用初始化复位,如果过程中需要复位尽量同步高复位
2>如果工程较大,复位扇出较多,会影响时序,解决方案:
(1)复位信号走全局时钟线
(2)复位信号按不同的时钟域对应打一拍输出,作为该时钟域的复位信号,并对复位寄存器进行max fanout约束
3>可靠的复位:做一个单独的复位逻辑,先复位第一个模块,再复位第二个模块……依次复位完成,模块复位完成可以返回一个完成信号告诉复位逻辑复位成功,较复杂但可靠
4>异步复位同步撤离:可以快速有效复位,有良好的撤离时序和足够的恢复时间
这里写图片描述

if & case
if…else if…else…是嵌套结构,有优先级;case是平行结构,没有优先级
建立优先级结构要消耗多余的资源,所以根据需要选择合适的语句
当然也可以用if描述平行结构,但是没case方便

异步电路&同步电路
这里写图片描述


异步电路:
主要由组合逻辑实现
与时钟没有关系,输入的数据会直接影响输出
缺点是容易产生毛刺
不利于器件移植、静态时序分析、验证设计时序
这里写图片描述


同步电路:
主要由寄存器、触发器和组合逻辑实现
所有操作都是严格按照时钟节拍进行
可以很好的避开毛刺
利于器件移植、静态时序分析、验证设计时序
这里写图片描述

组合逻辑设计
1>尽量避免组合逻辑反馈回路(容易产生毛刺、震荡、时序违规等)[检测综合实现的警告信息,发现combinational loops反馈回路后进行修改,反馈回路必须包含寄存器]
2>尽量避免生成锁存器,解决:
(1)使用完备的if…else…
(2)检查逻辑反馈环路
(3)每个输入都要有相应输出,case语句尽量加default

状态机
Moore型:
这里写图片描述
Mealy型:
这里写图片描述


——之后有发现再做补充——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值