vhdl同步复位和异步复位的比较
- 格式:doc
- 大小:39.50 KB
- 文档页数:5
针对数字系统的设计,我们经常会遇到复位电路的设计,对初学者来说不知道同步复位与异步复位的区别与联系,今天我对这个问题简要的阐述下,希望对初学者有一定的参考意义,若有不正确的地方愿大家明示。
同步复位原理:同步复位只有在时钟沿到来时复位信号才起作用,则复位信号持续的时间应该超过一个时钟周期才能保证系统复位。
异步复位原理:异步复位只要有复位信号系统马上复位,因此异步复位抗干扰能力差,有些噪声也能使系统复位,因此有时候显得不够稳定,要想设计一个好的复位最好使用异步复位同步释放。
同步复位与异步复位的优劣:异步复位消耗的PFGA逻辑资源相对来说要少些,因此触发器自身带有清零端口不需要额外的门电路,这是其自身的优势,通常在要求不高的情况下直接使用异步复位就OK。
下面我用verilog来演示下同步复位与异步复位。
同步复位的verilog程序如下:module D_FF(//Input portsSYSCLK,RST_B,A,//Output portsB);//========================================= //Input and output declaration//========================================= input SYSCLK;input RST_B;input A;output B;//========================================= //Wire and reg declaration//=========================================wire SYSCLK;wire RST_B;wire A;reg B;//========================================= //Logic//========================================= always@(posedge SYSCLK)beginif(!RST_B)B<=1'b0;elseB<=A;endendmodule综合后的RTL级电路图如下:异步复位的verilog程序如下:module D_FF(//Input portsSYSCLK,RST_B,A,//Output portsB);//========================================= //Input and output declaration//========================================= input SYSCLK;input RST_B;input A;output B;//========================================= //Wire and reg declaration//=========================================wire SYSCLK;wire RST_B;wire A;reg B;//========================================= //Logic//========================================= always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)B<=1'b0;elseB<=A;endendmodule综合后的RTL级电路图如下:通过比较显然异步复位消耗的逻辑资源要少些,因此通常的设计中都采用异步复位的方式,需要进一步的学习的话,可以再研究下其它的资料。
【第一章】1、FPGA芯片的发展主要体现在哪几个方面?未来的发展趋势是什么?(1) 大容量、低电压、低功耗(2) 系统级高密度(3) FPGA和ASIC出现相互融合。
(4) 动态可重构2、EDA技术的优势是什么?缩短开发周期,有各类库的支持,简化逻辑设计,有利于设计文档的管理,能仿真测试,开发者有自主权,将所有开发环节纳入统一的自顶向下的设计中,有效的利用了计算机的自动设计能力。
3、EDA的设计流程包括哪几个环节?①设计输入(原理图/HDL文本编辑)②综合③FPGA/CPLD 适配④时序仿真与功能仿真⑤FPGA/CPLD编程下载⑥FPGA/CPLD器件电路硬件检测。
4、硬件描述语言的种类有哪些?VHDL 、Verilog HDL、SystemVerilog、System C 等5、自顶向下设计方法的优点是什么?过程大部分由计算机完成,可植性强,便于系统的优化和升级,以及对模型进行及时的修改,以改进系统或子系统的功能,更正设计错误,提高目标系统的工作速度,减小面积耗用,降低功耗和成本等。
在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程。
高效,高稳定性,省时省力,成本较低。
6、ip核可分为哪几类?①软IP 、②固IP、③硬IP7、ip在EDA技术的应用和发展中的意义是什么?IP就是将某些功能固化,而当EDA设计也需要这些功能的时候,就可以直接将植入了此功能的IP拿过来直接用,而不用再重新设计。
这样既可以提高效率又可以减少设计风险。
IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的保证。
8、EDA的概念Electronic Design Automation,电子设计自动化。
简单一点EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言完成设计文件,然后由计算机自动地完成逻辑编译,化简,分割,综合,优化,布局,布线和仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。
同步复位和异步复位推荐的复位方式:异步复位、同步释放描述代码及对应的RTL电路:同步一下Rst_Reg_n)注:最好在模块外面将异步复位信号同步好,再送至各模块,这样各个模块内部就不需要再分别单独同步了。
下面具体阐述一下同步、异步复位的区别,以及为什么要采用这种方式的原因。
复位电路是每个数字逻辑电路中最重要的组成部分之一。
复位电路有两个工作目的:1、仿真的时候使电路进入初始状态或者其它预知状态;2、对于综合实现的真实电路,通过复位使电路进入初始状态或者其它预知状态。
一般来说,逻辑电路的任何一个寄存器、存储器结构和其它逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。
常用的复位信号为低电平有效信号,在应用时外部引脚接上上拉电阻,这样能增加复位电路的抗干扰性能。
复位方式大致分为两类,即同步复位和异步复位。
这两种复位方式各有优缺点,其应用场合也各不相同。
∙如果目标器件或可用库中的触发器本身包含同步复位端口,则在实现同步复位电路时可以直接调用同步复位端。
然后很多目标器件(如PLD)和ASIC 库的触发器本身并不包含同步复位端口,这样复位信号与输入信号组成某种组合逻辑(比如复位低电平有效,只需复位与输入信号相与即可),然后将其输入到寄存器的输入端。
为了提高复位电路的优先级,一般在电路描述时使用带有优先级的if...else结构,复位电路在第一个if下描述,其它电路在else或else...if分支中描述。
∙大多数目标器件(如FPGA和CPLD)和ASIC库的触发器都包含异步复位端口,异步复位会被直接接到触发器的异步复位端口,如图所示:上时钟偏斜延时,才能保证同步复位可靠、彻底。
如图所示,假设同步复位逻辑树组合逻辑的延时为t1,复位信号传播路径的最大延时为t2,最慢时钟的周期为Period_max,时钟的skew为Clk2-Clk1,则同步复位的周期Tsyn_rst应该满足如下公式:Tsyn_rst > Period_max + (Clk2 –Clk1) + t1+ t2推荐的复位电路设计方式是异步复位、同步释放。
1、IEEE标准的硬件描述语言是Verilog HDL和VHDL共同点是:能够形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述:可借用高级语言的精巧结构来简化电路行为的描述:具有电路仿真与验证机制以保证设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关;便于文档管理;易于理解和设计重用。
不同点:Verilog HDL是一种非常容易掌握的硬件描述语言,而VHDL掌握起来就比较困难。
2、把功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型称之为“软核”。
把在某一种现场可编程门阵列(FPGA)器件上实现的、经验证是正确的、总门数在5000门以上电路结构编码文件称为“固核”。
把在某一种专用集成电路工艺的(ASIC)器件上实现的、经验证是正确的、总门数在5000门以上电路结构版图掩膜称为“硬核”。
3、什么叫综合?通过综合产生的是什么?通过综合工具把行为级描述的模块通过逻辑网表自动转化为门级形式的模块叫综合。
综合由EDA工具来完成。
产生的是由与门,或门和非门组成的加法器,比较器等组合逻辑。
产生的模块很容易与某种工艺的基本元件逐一对应起来,再通过布局布线工具自动地转变为某种工具工艺的电路布线结构。
4、仿真可以在几层面上进行?每个层面的仿真有什么意义?分别为:前仿真,逻辑网表仿真,门级仿真和布线后仿真。
前仿真,逻辑网表仿真,门级仿真:可以调试和验证逻辑系统的设计和结构准确与否,并发现问题及时修改。
布线后仿真:分析设计的电路模块的运行是否正常。
5、模块由描述接口和描述逻辑功能两部分组成。
6、端口分为三种:输入口、输出口、输入/输出口。
7、reg型和wire型变量的差别是什么?reg型变量是寄存器型变量,wire型变量是连线型变量。
两者根本性的差别在于reg型变过量有个寄存器来存放变量,这个值只有变量发生改变时才会改变否则保证原来的值不变,wire型变量的值不是确定的值。
异步复位与同步释放很多时候,我们都希望系统一上电以及在仿真开始的时候所有寄存器都有一个已知的状态。
复位有两种方式,即同步复位和异步复位。
同步复位:“同步”的意思是和工作时钟同步。
也就是说当时钟的上升沿(下降沿)来到时检测到按键的复位操作才有效,否则无效。
如下图所示为同步低复位波形。
异步复位:“异步”的意思是和工作时钟不同步。
也就是说寄存器的复位不关心时钟的上升沿(下降沿)是否到来,只要有检测到按键被按下,就立刻执行复位操作。
如下图所示为同步低复位波形。
同步复位还是异步复位我们以D触发器为例来说明Inter(Altera)的器件是用同步复位好还是异步复位好。
先来看一下同步复位D触发器的RTL代码,如下所示://---------------------------------01module test(02 input wire sclk ,03 input wire rst_syncn ,04 input wire d ,0506 outputreg q07);0809always@(posedge sclk)10 if(rst_sync_n ==1'b0)11 q <=1'b0;12 else13 q <= d;1415endmodule//--------------------------------在Quartus工具中编写完RTL后点击“Start Analysis & Synthesis”图标进行分析和综合。
然后双击“Netlist Viewers”下的“RTL Viewer”查看RTL视图。
如下图所示,可以看到一个 D触发器的结构,也可以称为寄存器,但是还附加了一个选择器,用于同步复位的控制。
点击“Start Compilation”图标全编译进行布局布线,完成后我们可以看到“Flow Summary”资源使用量,如下图所示,可以看到使用了LE中的一个组合逻辑资源和一个时序逻辑资源。
这两种复位方式的区别主要看是否需要时钟的参与:异步复位不需要时钟的参与,只要复位信号一有效就立即执行复位操作;同步信号需要时钟参与,只有当时钟有效沿来时,复位信号才有效。
同步复位的最大好处是有效防止复位信号的毛刺引起的误复位操作,只要毛刺不在时钟有效沿附近出现,就不会影响电路正常工作;而若是异步复位,其复位信号的毛刺会立即引起电路复位。
异步复位可以在没有时钟的情况下完成复位,所以可以使电路在上电的时候完成对系统的复位,而且异步复位所消耗的资源比同步复位少。
一般的,只要能保证复位信号的稳定,我们建议使用异步复位。
我们看一下同步和异步复位在VHDL和Verilog下的实现细节:VHDL:PROCESS(clk,reset)—同步复位BEGINIf(rising_edge(clk)) thenIf(reset=’1’) then—复位信号在时钟有效沿下进行判断--执行复位操作End if;End if;ENDPROCESS(clk,reset)—异步复位BEGINIf(reset=’1’) then—复位信号在不需要在时钟有效沿下进行判断--执行复位操作elsif(rising_edge(clk)) then……….End if;ENDVerilog:always @ (posedge clk or posedge reset)//异步复位,在敏感信号里加复位信号if(reset)begin//执行复位操作endelsebegin……endalways @ (posedge clk)//同步复位,在敏感信号不用加复位信号if(reset)begin//执行复位操作endelse begin ……end。
亚稳态Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。
建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。
输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。
保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。
如果hold time不够,数据同样不能被打入触发器。
建立时间(Setup Time)和保持时间(Hold time)。
建立时间是指在时钟边沿前,数据信号需要保持不变的时间。
保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。
如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现亚稳态(metastability)的情况。
如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。
在数字集成电路中,触发器要满足setup/hold的时间要求。
当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。
这个过程称为亚稳态(Metastability)。
一些关于微电子方面的笔试题(zz)1.FPGA和ASIC的概念,他们的区别。
(未知)答案:FPGA是可编程ASIC。
ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。
根据一个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。
与门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点.2.建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。
同步复位和异步复位的比较(转载)
无论同步还是异步复位,在对触发器时序进行分析的时候,都要考虑复位端与时钟的相位关系。
对于同步复位,复位信号可以理解为一个普通的数据信号,它只有在时钟的跳变沿才会起作用,一般只要复位信号持续时间大于一个时钟周期,就可以保证正确复位。
对于异步复位,复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化,如果异步复位信号跟时钟在一定时间间隔内发生变化,Q值将无法确定,即亚稳态现象。
这个时候既是异步复位信号持续时间再长都没有办法,因为不定态已经传递下去。
1:
一、特点:
同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。
否则,无法完成对系统的复位工作。
用Verilog描述如下:
always @ (posedge clk) begin
if (!Rst_n)
...
end
异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
用Verilog描述如下:
always @ (posedge clk or negedge Rst_n) begin
if (!Rst_n)
...
end
二、各自的优缺点:
1、总的来说,同步复位的优点大概有3条:
a、有利于仿真器的仿真。
b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
他的缺点也有不少,主要有以下几条:
a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。
同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
2、对于异步复位来说,他的优点也有三条,都是相对应的
a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
b、设计相对简单。
c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
缺点:
a、在复位信号释放(release)的时候容易出现问题。
具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
b、复位信号容易受到毛刺的影响。
三、总结:
所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。
这样就可以两全其美了。
2:推荐的复位方式
所谓推荐的复位方式就是上文中所说的:“异步复位,同步释放”。
这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。
其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过处理的复位信号去作用系统,就可以保证比较稳定了。
reset sychronizer的Verilog代码如下:
module Reset_Synchronizer
(output reg rst_n,
input clk, asyncrst_n);
reg rff1;
always @ (posedge clk , negedge asyncrst_n) begin
if (!asyncrst_n) {rst_n,rff1} <= 2'b0;
else {rst_n,rff1} <= {rff1,1'b1};
end
endmodule
大家可以看到,这就是一个dff,异步复位信号直接接在它的异步复位端口上(低电平有效),然后数据输入端rff1一直为高电平…1‟。
倘若异步复位信号有效的话,触发器就会复位,输出为低,从而复位后继系统。
但是,又由于这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成…1‟,因此使得复位信号的释放与时钟沿同步化。
此外,还有一种方法更为直接,就是直接在异步复位信号后加一个D触发器,然后用D触发器的输出作为后级系统的复位信号,也能达到相同的效果。
这里就不多说了。
3:多时钟系统中复位的处理方法)
这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟(当然也可以是非同源了)去驱动系统的不同部分。
那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意(在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要)。
下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:
1.non-coordinated reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。
当异步复位信
号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。
2.sequence coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。
而分级的顺序可由各个“reset synchronizer”的级联方式决定。
可以先复位前级,再复位后级,也可以反过来。
反正方式很灵活,需要根据实际需要而定。
由于图片上传问题,我只能用程序表示了,大家凑或看吧,哈哈
例子:三级复位系统,系统中的时钟分别为1M,2M,11M:
第一级Reset_Sychronizer程序:
module Reset_Synchronizer
(output reg rst_n,
input clk, asyncrst_n);
reg rff1;
always @ (posedge clk , negedge asyncrst_n)
begin
if (!asyncrst_n) {rst_n,rff1} <= 2'b0;
else {rst_n,rff1} <= {rff1,1'b1};
end
endmodule
第2,3级的Reset_Sychronizer程序:
module Reset_Synchronizer2
(output reg rst_n,
input clk, asyncrst_n,d);
reg rff1;
always @ (posedge clk , negedge asyncrst_n) begin
if (!asyncrst_n) {rst_n,rff1} <= 2'b0;
else {rst_n,rff1} <= {rff1,d};
end
endmodule
顶层模块的源程序:
include "Reset_Synchronizer.v"
include "Reset_Synchronizer2.v"
module AsynRstTree_Trans
( input Clk1M,Clk2M,Clk11M,SysRst_n,
output SysRst1M_n,SysRst2M_n,SysRst11M_n
);
Reset_Synchronizer Rst1M(.clk(Clk1M),.
asyncrst_n(SysRst_n),.rst_n(SysRst1M_n));
Reset_Synchronizer2Rst2M(.clk(Clk2M),.d(SysRst1M_n),. asyncrst_n(SysRst_n),.rst_n(SysRst2M_n));
Reset_Synchronizer2Rst11M(.clk(Clk11M),.d(SysRst2M_n),. asyncrst_n(SysRst_n),.rst_n(SysRst11M_n));
endmodule。