首页 > 技术 > 内容

FPGA时序分析-建立时间和保持时间裕量都是inf怎么解决呢?

时间:2025-11-30  作者:Diven  阅读:0

今天有个小伙伴遇到一个问题,就是在vivado里面综合后看到的建立时间和保持时间裕量都是inf,我们来看看怎么解决这个问题。

实验一:

 

Module testMem( input clk, input [9:0] addr, input we, input [7:0] wdata, output reg [7:0] rdata ); reg [7:0] mem [1023:0]; reg [7:0] data; reg [7:0] data1; reg [7:0] data2; reg [7:0] data3; always@(posedge clk)begin if(we)begin mem[addr] <= wdata; end end     always@(posedge clk)begin            rdata <= mem[addr];    end endModule

 

时序约束如下:

 

create_clock -period 5.000 -name sys_clk [get_ports clk]set_property -dICt {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports clk]

 

代码非常简单,大家一看就可以知道,这段代码会被映射到一个BRAM上。综合后的资源报告也印证了我们的想法:

但是看时序分析:

是不是感觉很奇怪明明我们约束时钟了,为什么时序分析后是inf呢,我们来看一下综合后的框图就明白了。

可以看到在上图里面,clk只和bRAM的时钟管脚相连,这种情况下怎么做时序分析嘛,一般我们在片内做的时序分析都是一个寄存器到另一个寄存器的。
时序分析一共四种模型,可以参考下面四张图,分别是Input to Flip-flop Path,Flip-flop to Output Path,Flip-flop to Flip-flop Path,Input to Output Path图片来源于StatIC Timing Analysis for Nanometer Designs也就是静态时序分析圣经,这本必读哦。

实验二:

那怎么改变,vivado计算出来是inf呢,首先给输入输出加上

 

(*DONT_TOUCH="yes"*)

 

这个约束看看,代码就变成了下面这个样子

 

module testMem(    input clk, (*DONT_TOUCH="yes"*)input [9:0] addr, (*DONT_TOUCH="yes"*)input we, (*DONT_TOUCH="yes"*)input [7:0] wdata, (*DONT_TOUCH="yes"*)output reg [7:0] rdata );     reg [7:0] mem [1023:0]; always@(posedge clk)begin if(we)begin mem[addr] <= wdata; end end always@(posedge clk)begin rdata <= mem[addr];    end endmodule

 

这次呢时序分析对了,我们来看一下综合后的结果,可以看到不再是孤零零的一个bram的ip了,这个就是典型的Flip-flop to Flip-flop Path的时序分析了。

但是注意到没有,实现的资源从bram变成lut和FF了,这个是因为在xilinx的器件里面,bram必须至少要有一级寄存器,那你可能又要问了,我们不是在代码里面rdata有一级寄存器吗,为啥没有被综合成bram呢,这个是因为加了dont touch的约束之后,vivado就不会再去优化这个寄存器,这样这个寄存器就不能被优化到bram里面了,这样自然就不会使用bram资源来实现上面的代码了。

实验三:

我们可以通过手动再加一级寄存器的方案,来让使用bram资源,代码如下:

 

module testMem(    input clk,a (*DONT_TOUCH="yes"*)input [9:0] addr, (*DONT_TOUCH="yes"*)input we, (*DONT_TOUCH="yes"*)input [7:0] wdata, (*DONT_TOUCH="yes"*)output reg [7:0] rdata ); reg [7:0] mem [1023:0];    reg [7:0] data; always@(posedge clk)begin if(we)begin mem[addr] <= wdata; end end     always@(posedge clk)begin data <= mem[addr]; end always@(posedge clk)begin rdata <= data ;    end endmodule

 

可以看到时序分析,资源分析和我们预期是一致的。

综合后的结果也和我们预期一致,可以和实验一做对比,这次在bram后面多了一级寄存器哦。

实验四:

那么我们在上面的代码里面继续去掉dont touch约束看看会发生什么。

 

module testMem( input clk,a input [9:0] addr, input we,    input [7:0] wdata, output reg [7:0] rdata ); reg [7:0] mem [1023:0]; reg [7:0] data; always@(posedge clk)begin if(we)begin mem[addr] <= wdata; end end always@(posedge clk)begin data <= mem[addr]; end always@(posedge clk)begin rdata <= data ; end endmodule

 

可以看到又变成了inf,再来看一下综合后的框图,和实验一一样,你可能会问,我们不是加了两级寄存器了吗,怎么bram的输出一个都没有呢,这是因为这两级寄存器都被bram给吸收了呢。
小提示,这样两级寄存器的方式比一级的时序会好很多哦,当然如果如果寄存器不少纯打拍的话,是不会被吸收进去的。

实验五:

既然打两拍不行,那就多打几拍咯。

代码变成下面的样子:

 

module testMem( input clk, input [9:0] addr, input we, input [7:0] wdata,    output reg [7:0] rdata ); reg [7:0] mem [1023:0]; reg [7:0] data; reg [7:0] data1; reg [7:0] data2; reg [7:0] data3; always@(posedge clk)begin if(we)begin mem[addr] <= wdata; end end     always@(posedge clk)begin data <= mem[addr];    end always@(posedge clk)begin data1 <= data; data2 <= data1; data3 <= data2; rdata <= data3; end endmodule

 

可以看到一切和我们的预期一致。

总之做FPGA一定要知道自己写的代码会被映射到什么资源上去哦。


审核编辑:刘清

猜您喜欢


四端子电阻作为精密测量与电路保护的关键元件,其性能与规格直接影响设备的精度与可靠性。台庆(TAI-TECH),作为该领域的知名品牌,其四端子电阻产品在市场上享有...
2020-11-06 06:45:52
砂轮机是应用于金属加工和制造行业的重要工具。主要作用是对金属材料进行磨削、切割和修整,帮助工匠和工程师实现高精度的加工效果。通过高速旋转的砂轮,砂轮机能够有效去...
2020-05-26 00:00:00
反射式光电开关是常见的自动化传感器,应用于工业、安防和家居等领域。主要通过发射和接收光线来检测物体的存在。反射式光电开关可以分为几种类型,主要区别在于其工作原理...
2013-10-28 00:00:00
贴片电阻上的字母,通常代表着它的阻值。由于贴片电阻体积小,直接印上数字阻值比较困难,所以采用字母数字组合的方式来表示。这种表示方法遵循一定的规律,理解了之后就能...
2024-11-26 11:29:33
双向触发二极管(也称为双向可控硅或TRIAC)是应用于电力电子设备中的半导体器件。主要功能是控制电流的流动,应用于调光器、电机控制和温度调节等场合。随着科技的发...
2025-04-09 09:30:03
保护电路安全是非常重要的一环,而保险丝作为电路保护的关键元件,有着着不可替代的作用。LseLe一次性保险丝作为市场上较为知名的保险丝产品,因其性能稳定、使用便捷...
2024-10-09 05:43:30
现代工业和科技的发展中,各种配件的作用愈发显著。其中,10.35X3.2MM_SM配件因其独特的规格和广泛的应用领域而备受关注。本文将详细介绍这一配件的特点、应...
2025-02-27 09:36:27
您是否想过,电动汽车的核心部件是什么?是电池?不完全是。电池管理系统,简称BMS,才是电动汽车安全、高效运行的关键。就像一位经验丰富的管家,默默守护着电池的每一...
2024-10-21 00:00:00
十字螺丝批因其独特的设计和功能,在日常生活和工业应用中受到青睐。十字形状的刀头能够有效增加与螺丝的接触面积,提供更好的抓取力,减少打滑现象。这使得在安装和拆卸过...
2020-12-14 00:00:00
研究背景 仿生触觉传感器件和电子皮肤是未来智能假肢和智能机器人的必要组件。现有主动式触觉传感器件(如电阻式、电容式、晶体管式)能够检测静态和动态触觉刺激,但即...
2024-12-10 18:18:00