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型:

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

被折叠的 条评论
为什么被折叠?



