FPGA-xilinx系列芯片的复位,你真的明白吗?(一)

简介: FPGA-xilinx系列芯片的复位,你真的明白吗?

写在前面


本文记录总结之前在FPGA分享会中学到的关于赛灵思系列的复位功能操作的设计以及建议,进行分析总结。

学习FPGA入门,有一说一我的领路人大部分都是用的intel的芯片下板验证,当时也不理解为啥子要这样复位,写抄就完了甚至感觉还挺有道理哈哈哈哈。

但是现在随着学习的深入我渐渐得发现复位还真是门学问。话不多说正文见。

总述


image.png

为什么复位?


image.png

使用全局复位有利于我们仿真,所有的寄存器都是有初始值的,也可以在任意时刻让你的寄存器恢复初值,所以验证工程师很喜欢这样的设计,但是Xilinx建议的是尽量避免使用全局复位。

复位的基本目的是使器件强制进入到可以稳定工作的确定状态。

这避免了器件在上电后进入到随机状态导致进入到无法判断的状态(也就是死机了)。在实际设计过程中,设计者必须选择最适合于设计本身的复位方式。

xilinx为什么不推荐异步复位?


image.png

  1. 异步重置将不会被添加到数据路径。所以数据路径对于时序分析来说是干净的。
  2. 电路可以复位与或没有时钟的情况下复位电路。
  3. 不需要综合指令

导致亚稳态


image.png

异步复位比预期的要复杂得多,异步复位与寄存器工作时钟域没有一定的相位关系,很难确保所有寄存器同时从状态中释放出来。

因为内部复位信号的偏差,寄存器A将在当前时钟周期内从复位中释放,C将在下一个时钟周期释放,B难以定义,甚至可能导致亚稳态。

简而言之,***亚稳态亚稳态亚稳态!!!***

浪费布线资源


image.png

异步复位信号会占用大量的布线资源是高速设计的必要条件,但我们不能看到它在源代码

-占用太多布线资源将减少其他连接的自由。

-可能降低系统性能潜在地需要一个更高的设备速度等级。

-增加布线时间。

浪费Slice资源


image.png

-有和没有异步复位的寄存器不能被包装在一个Slice

-不同异步复位的寄存器不能被包装在一个Slice

降低DSP和BRAM性能


如图,在XILINX内部 的dsp和bram中,只有同步复位,异步复位是不会包含复位到BRAM/DSP的

image.png

解决方案


  1. 不复位
  2. 同步复位

同步复位的好处


同步复位为工具提供了更多的灵活性


异步复位确实会出现高扇出的情况。Fan-out即扇出,模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因此,在写代码时应尽量避免高扇出的情况。

image.png

  1. 合成可以选择将控制信号的低扇出同步复位移到数据通路,以释放更多的寄存器。
  2. 这可以允许将这个寄存器打包到以前不可能的一个slice中
  3. 可以改善时序以及寄存器密度

同步复位让我们的设计稳定


image.png

从上图我们可以看出,在我们的复位发送故障时,我们的同步复位只能在时钟的边沿触发,这样进而保证了我们系统的稳定性,在复位故障时尽量相对保证系统稳定。

复位建议


  1. 避免复位
  2. 高复位
  3. 同步复位
  1. 不要混合复位
  2. 可以在寄存器初始化时候直接赋值
reg [7:0] code = 8'hff;

内部寄存器其实很多情况不需要过分复位,大不了之前的垃圾数据我们不用就行了。重置重置是设计中需要考虑和限制的更常见和重要的控制信号之一。重置可以显著影响设计的性能、面积和功率。

image.png

模块化复位


模块复位可以降低扇出,保证电路的稳定进行。

image.png

使用指令确保模块复位信号不被综合掉

image.png

example:

(* keep="true" *) reg my_modular_reset1;
(* keep="true" *) reg my_modular_reset2;
(* keep=“true” *) reg my_modular_reset3;
always @(posedge clkA) begin
my_modular_reset1 <= synchronized_reset;
my_modular_reset2 <= synchronized_reset;
my_modular_reset3 <= synchronized_reset;
end

DSP片采用同步复位


image.png

DSP芯片比大多数实现的芯片更通用

-它可以用于乘数,增加/sub, MACC,计数器(与可编程终端计数),比较器,移位,多路复用器,模式匹配,和许多其他逻辑功能。

每个DSP片有效地具有> 310寄存器

-没有异步复位

使用同步全局重置可以使合成工具更容易地使用DSP切片

-异步复位方法将防止工具使用的存储资源在DSP片。

目录
相关文章
|
2月前
|
存储 芯片 异构计算
【FPGA原型验证】FPGA 技术:芯片和工具-当今的 FPGA 器件技术_fpga原型版本
【FPGA原型验证】FPGA 技术:芯片和工具-当今的 FPGA 器件技术_fpga原型版本
63 0
|
9月前
|
机器学习/深度学习 调度 芯片
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC(一)
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC
64 0
|
9月前
|
存储 前端开发 芯片
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC(三)
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC(三)
77 0
|
9月前
|
芯片 C++ 异构计算
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC(二)
快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC(二)
57 0
|
人工智能 算法 安全
(下)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
(下)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
|
存储 前端开发 Linux
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
|
开发工具 芯片 异构计算
芯片设计:FPGA开发学习
芯片设计:FPGA开发学习
215 0
芯片设计:FPGA开发学习
|
存储 数据安全/隐私保护 芯片
如何读取FPGA芯片的序列号ID?
如何读取FPGA芯片的序列号ID?
301 0
如何读取FPGA芯片的序列号ID?
|
存储 芯片 异构计算
Xilinx FPGA SPI配置芯片都支持哪些型号
Xilinx FPGA SPI配置芯片都支持哪些型号
480 0
Xilinx FPGA SPI配置芯片都支持哪些型号
|
芯片 异构计算
FPGA-xilinx系列芯片的复位,你真的明白吗?(二)
FPGA-xilinx系列芯片的复位,你真的明白吗?
344 0
FPGA-xilinx系列芯片的复位,你真的明白吗?(二)

热门文章

最新文章