FPGA | 深入理解复位

这篇具有很好参考价值的文章主要介绍了FPGA | 深入理解复位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

复位电路作为数字逻辑设计中一个重要电路,不管是FPGA还是ASIC设计中都会经常使用,可以说复位信号在数字电路里面的重要性仅次于时钟信号。复位的主要目的是使芯片电路进入一个已知的,确定的状态。主要是触发器进入初始状态。复位一般分为同步复位和异步复位,可以由硬件开关触发引起,也可以由复位逻辑控制引起。

一、 同步复位

同步复位:同步复位指的是当时钟上升沿检测(有效沿)到复位信号,执行复位操作,有效的时钟沿是前提。

1.1 同步复位的实现方式

//*******************同步复位模块******************//

//-----------端口定义-------------------------------
module  rst_test(
    input       clk     ,   //系统时钟
    input       rst_n   ,   //复位信号,低电平有效
    input       in      ,   //输入信号
    output  reg out         //输出信号
);

//-----------输出模块-------------------------------
always@(posedge clk )begin
    if(!rst_n)
        out <= 1'b0;        //复位将输出置零
    else
        out <= in;          //其他时候将输入赋值给输出
end

endmodule

综合出的RTL如下
复位代码 fpga,农夫笔记,fpga开发

进行仿真测试(复位时间不足一个时钟周期、复位时间超过一个时钟周期、一个高频复位毛刺)

//------------------------------------------------
//--复位仿真
//------------------------------------------------
`timescale 1ns/1ns	//时间单位/精度

//------------<模块及端口声明>----------------------------------------
module tb_rst_test();

reg 	clk		;
reg 	rst_n	;
reg		in		;

wire	out		;

//------------<例化被测试模块>----------------------------------------
rst_test	rst_test_inst(
	.clk	(clk)	,
	.rst_n	(rst_n)	,
	.in		(in)	,
	
	.out    (out)
);

//------------<设置初始测试条件>----------------------------------------
initial begin
	clk = 1'b0;					
	rst_n <= 1'b0;
	in <= 1'b1;
	#5							
	rst_n <= 1'b1;
	#6							
	rst_n <= 1'b0;	
	#18							
	rst_n <= 1'b1;
	#39							
	rst_n <= 1'b0;
	#21							
	rst_n <= 1'b1;
	#25							
	rst_n <= 1'b0;
	#3							
	rst_n <= 1'b1;

end
//------------<设置时钟>----------------------------------------------
always #10 clk = ~clk;		//系统时钟周期20ns

endmodule

复位代码 fpga,农夫笔记,fpga开发

1.2 同步复位的优缺点

优点:

  • 有利于仿真器的仿真;
  • 基本上没有亚稳态问题;
  • 可以使所设计的系统成为 100%的同步时序电路,有利于时序分析;
  • 由于只在时钟有效电平到来时才有效,对小的复位毛刺来说,时钟就像滤波器,所以可以滤除高于时钟频率的复位毛刺。

缺点

  • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;
  • 大多数的FPGA的DFF(D flip-flop)都只有异步复位端口,采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费逻辑资源;
  • 不是所有的库都有自带同步reset的FF, 但是可以通过把reset当作数据输入来解决;
  • 如果电路中有三态总线,那么上电时必须用异步复位,如果用同步复位,reset必须能够复位三态信号的enable信号。如下所示

复位代码 fpga,农夫笔记,fpga开发

复位代码 fpga,农夫笔记,fpga开发

1.3 其他

同步复位编码方式必须是 if/else 优先级的方式,而且 reset只能放在 if条件下,其他组合逻辑放到 else逻辑下。

如果没有严格遵守这种方式,会有两个问题:

1、一些仿真器中,基于逻辑方程,逻辑可能阻止复位到达触发器。这只是一个仿真问题,不是硬件问题。但是复位的一个主要目的,就是仿真的时候将电路置于一个已知的确定状态。

2、由于复位树的高扇出,复位信号可能是一个相对于时钟周期的“延迟到达信号”,尽管复位将从复位缓冲区树中进行缓冲,但明智的做法是限制复位到达本地逻辑后必须经过的逻辑量。就是说必须对复位信号少做逻辑。

二、异步复位

异步复位:异步复位指的是无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。

2.1 异步复位的实现方式

//*******************异步复位模块****************//
 
//-----------端口定义-------------------------------
module	rst_test(
	input		clk		,	    //系统时钟
	input		rst_n	,	    //复位,低电平有效
	input		in		,	    //输入信号
	output	reg	out			//输出信号
);

//-----------输出模块-------------------------------
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		out <= 1'b0;		//复位将输出置零
	else
		out <= in;			//其他时候将输入赋值给输出
end	
	
endmodule

综合出的RTL如下:

复位代码 fpga,农夫笔记,fpga开发

依然使用之前用的Testbench进行仿真,结果如下:

复位代码 fpga,农夫笔记,fpga开发

2.2 异步复位的优缺点

优点:

  • 大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以 节省资源
  • 设计相对简单,异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR
  • 电路reset和时钟无关,不管有没有时钟,都可以reset。 可以实时复位,也可以加在门控时钟里面。门控时钟是低功耗设计的重要方法。

缺点:

  • 复位信号容易受到毛刺的影响
  • 因为是异步逻辑,在复位阶段和解复位阶段(复位撤离)都是异步的。复位阶段不是问题,解复位才是问题。如果在触发器的活动时钟边缘或附近释放异步复位,则触发器的输出可能变为亚稳态,这样电路的复位状态可能会丢失,解复位失败。

三、异步复位同步释放

异步复位,同步释放就是指在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。

3.1 实现

综合两种复位的优点,可以使用异步复位、同步释放设计,Verilog代码如下

//*******************同步复位模块**************************
 
//-----------端口定义-------------------------------
module	rst_test(
	input		clk		,		//工作时钟
	input		rst_n	,		//复位,低电平有效
	input		in		,		//输入信号
	output	reg	out				//输出信号
);

//-----------reg定义-------------------------------
reg arst_n_r;
reg arst_n;

//-----------复位信号同步模块-------------------------------
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		arst_n_r <= 1'b0	;	//复位将输出置零
		arst_n <= 1'b0		;	//复位将输出置零	
	end
	else begin
		arst_n_r <= 1'b1	;	//跟接rst_n是一样的,都是逻辑1
		arst_n <= arst_n_r	;		
	end
end

//-----------输出模块-------------------------------
always@(posedge clk or negedge arst_n)begin
	if(!arst_n)
		out <= 1'b0;		    //复位将输出置零
	else
		out <= in;			    //其他时候将输入赋值给输出
end	
	
endmodule

综合出来的RTL视图和电路如下:

复位代码 fpga,农夫笔记,fpga开发

复位代码 fpga,农夫笔记,fpga开发

仿真结果:

复位代码 fpga,农夫笔记,fpga开发

可以看到:复位是异步进行的,一旦复位信号为低电平,则输出复位,而复位的撤除则被同步到了时钟域下。如此一来,既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。

3.2 优缺点

优点:

  • 避免复位信号释放的时候造成亚稳态问题
  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关
  • 有效捕捉复位,即使是短脉冲复位也不会丢失
  • 有明确的复位撤销行为,复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间
  • 用两级触发器打两拍的方法解决亚稳态的问题

缺点:

  • 由于异步复位和时钟无关,任何一个毛刺都可以引起复位。

3.3 其他

  • 第一级触发器的数据端口是接电源,即高电平1’b1。
  • 第一级触发器的输出,不能使用,作为过渡,因为仍存在亚稳态的危险。两级触发器做同步,是非总线信号的最常见异步处理方法。总线信号的异步处理方法,最常见的是异步fifo实现。

参考:

异步复位同步释放_异步复位,同步释放

复位电路设计(异步复位、同步释放)

RTL设计- 多时钟域按顺序复位释放

异步复位同步释放原理文章来源地址https://www.toymoban.com/news/detail-789508.html

到了这里,关于FPGA | 深入理解复位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA常见逻辑门:与、或、非、异或】——深入理解并掌握

    【FPGA常见逻辑门:与、或、非、异或】——深入理解并掌握 FPGA(现场可编程门阵列)是一种用于构建数字电路的集成电路,它具有可编程性和可重构性,可满足各种应用需求。而在FPGA中,逻辑门是实现数字电路的基本部件。本文将介绍FPGA中四种常见逻辑门:与门、或门、

    2024年02月03日
    浏览(34)
  • FPGA信号处理系列文章——深入浅出理解多相滤波器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 多相滤波是,按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在每个分支上实现滤波。 采用多相滤波结构,可利用多个阶数较低的滤波来实现原本阶数较

    2024年02月05日
    浏览(62)
  • FPGA的复位操作

    所谓的“同步”、“异步”,指复位的执行与时钟 (CLK)是否同步,可通过敏感列表中是否包含复位信号判断。 同步复位:复位信号和时钟同步,当时钟上升沿检测到复位信号,执行复位操作。——always@(posedge clk) 异步复位:不受时钟影响,只要复位信号有效,就会进行复位。

    2024年04月23日
    浏览(27)
  • Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位

    目录  概要  Xilinx复位准则 全局复位主要由以下三种方式实现 高时钟频率下的复位时序全局复位对时序的要求真的很关键吗? 独热码状态机的复位        FPGA配置 Xilinx白皮书WP272《Get Smart About Reset: Think Local, Not Global》详细讲述了FPGA的全局复位。在数字系统设计中,我们

    2024年03月11日
    浏览(72)
  • FPGA串口(RS422)调试笔记:理解串口通信与调试记录

    探索FPGA串口(RS422)通信的调试过程与记录,包括串口通信概念解析、调试步骤、代码示例以及数据拼接方法。记录调试中遇到的问题与解决方案,展示对串口通信功能的实现与乐趣体验。

    2023年04月08日
    浏览(40)
  • Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《Fpga开发笔记(一):

    2024年01月16日
    浏览(70)
  • FPGA学习笔记-1 FPGA原理与开发流程

    注:笔记主要参考: B站 正点原子 教学视频“正点原子手把手教你学FPGA-基于达芬奇Pro开发板 Artix-7 XC7A35T/XC7A100T”。 小梅哥爱漂流 教学视频“【零基础轻松学习FPGA】小梅哥Xilinx FPGA基础入门到项目应用培训教程”。 B站搬运 “特权同学2020版《深入浅出玩转FPGA视频教程》

    2024年02月05日
    浏览(49)
  • FPGA嵌入式开发一些Xilinx SDK库函数的理解

    最近在测试AXI Quad SPI这个IP核的端口时序,搭建BD后导出到硬件,在SDK中导入xspi_intr_example.c的源文件,在师兄的帮助下,浅浅研究了一下代码。 首先,需要修改源程序中的错误,参照CSDN文章:ZYNQ中断示例修改 做出以下修改: 此外,还要对中断驱动实例名称进行修改: 以下

    2024年02月12日
    浏览(49)
  • Fpga开发笔记(一):高云FPGA芯片介绍,入手开发板套件、核心板和底板介绍

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135551179 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:没有了 下一篇:《Fpga开

    2024年02月02日
    浏览(38)
  • 【27个FPGA实例源代码】助力你成为FPGA开发高手(可下载)

    FPGA(可编程门阵列)技术在数字电路设计和嵌入式系统开发中有着广泛的应用。 对于FPGA工程师来说,拥有丰富的FPGA实例源代码资料是非常重要的,因为这可以帮助工程师更好地理解FPGA编程的实际应用、解决问题、进行优化等。 为了帮助FPGA工程师更好地理解和应用这一技术

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包