异步复位、同步释放机制——系统完美稳定
2017-02-20 16:10
417 查看
白驹过隙,寒假已经余额不足,回头想想,也就是看了两本书,做了几个并不大的工程,看着QQ群里面一些大神们聊天,时不时有的没的还插几句,一句话没人理也是正常事情。有时候还帮同是菜鸟的网友解决问题,好不尴尬!在大神们的只言片语中,也汲取出来一点对行业的认识,数电、模电和信号处理这几门课没有系统的学习没有学确实基础比较差,被前辈指教后也是深深认识到自己太急于求成了,晚上的博文鱼龙混杂、千篇一律,所以还不如静下心来读一本好书。学到的只是就应该用出来,才能成为自己的东西,下面的异步复位,同步释放机制,是我根据自己的理解总结出来的。
异步复位
同步复位即复位信号随系统时钟的边沿触发起作用,异步复位即复位信号不随系统时钟的边沿触发起作用,rst_n表示低电平复位与rst_p表示高电平复位,记得当时还被同步置数和异步置数困扰了好久,现在顺便也总结一下吧!
异步复位,同步置数
同步异步无非就是一个是否受系统时钟边沿触发,如果想要异步就直接加一个敏感信号就好了。不过一般工程中的书写形式就是异步复位,不过这种设计方法也有弊端,所以下面总结一下异步复位、同步释放的设计思想。(竞争与冒险)
异步复位、同步释放机制。
这是异步复位的结构图,D触发器是复位优先级高于clk优先级,所以采用通异步复位的方法,但是异步复位D触发器存在竞争与冒险,比如当clk的上升沿和rst_n的下降沿同时来临的时候这时候系统应该听谁的,同样当clk的上升沿和rst_n的上升沿同时来临的时候容易使寄存器出现亚稳态。
sys_ctrl
对于较小的工程,进行这些操作与否也就无可厚非,如果对于一个项目,需要要求必须尽善尽美,FPGA的优势便是数字信号处理,速度快,我们在保持速度的前提下,还需要使其准确率也提高,尽量占用少量的资源。这样异步复位,同步释放的机制就体现出来了。
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:NingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/6420008.html
D触发器的两种表示形式
同步复位always @(posedge mclk) begin if(!rst_n)//if(rst_p) q <= 1’b0; else q <= d; end
异步复位
always @(posegde mclk or negdege rst_n) 或always @(posedge mclk or posedge rst_n) begin if(!rst_n)//if(rst_p) q <= 1’b0; else q <= d; end
同步复位即复位信号随系统时钟的边沿触发起作用,异步复位即复位信号不随系统时钟的边沿触发起作用,rst_n表示低电平复位与rst_p表示高电平复位,记得当时还被同步置数和异步置数困扰了好久,现在顺便也总结一下吧!
D触发器同步置数,异步置数。
异步复位,同步置数always @(posegde mclk or negedge rst_n) begin if(!rst_n) q <= 1’b0 else if(en)//enable使能信号,当en为高电平时D触发器触发 q <= d; else q <= q; end
异步复位,同步置数
always @(posedge mclk or negedge rst_n) begin if(!rst_n) q <= 1’b0; else if(en) //enable使能信号,当en为高电平时D触发器触发 q <= d; else q <= q; end
同步异步无非就是一个是否受系统时钟边沿触发,如果想要异步就直接加一个敏感信号就好了。不过一般工程中的书写形式就是异步复位,不过这种设计方法也有弊端,所以下面总结一下异步复位、同步释放的设计思想。(竞争与冒险)
异步复位、同步释放机制。
这是异步复位的结构图,D触发器是复位优先级高于clk优先级,所以采用通异步复位的方法,但是异步复位D触发器存在竞争与冒险,比如当clk的上升沿和rst_n的下降沿同时来临的时候这时候系统应该听谁的,同样当clk的上升沿和rst_n的上升沿同时来临的时候容易使寄存器出现亚稳态。
module sys_ctrl( input mclk, input rst_n, output sys_clk, output sys_rst_n ); parameter SYS_DELAY = 24'd2500000;//delay50ms //parameter SYS_DELAY = 24'd25;//just test wire delay_done;//delay 50ms finish flag reg rst_n1; reg rst_n2; reg [23:0] cnt;//count system delay 50ms always @(posedge mclk or negedge rst_n)//asynchronous reset synchronous release begin if(!rst_n)begin rst_n1 <= 1'b0; rst_n2 <= 1'b0; end else begin rst_n1 <= rst_n; rst_n2 <= rst_n1; end end always @(posedge mclk)//It don't depend on rst_n when power up begin if(cnt == SYS_DELAY - 1'b1) cnt <= cnt; else if(cnt < SYS_DELAY - 1'b1) cnt <= cnt + 1'b1; else cnt <= 24'd0; end assign delay_done = (cnt == SYS_DELAY - 1'b1)?1'b1:1'b0; assign sys_clk = mclk; assign sys_rst_n = delay_done & rst_n2; endmodule
sys_ctrl
对于较小的工程,进行这些操作与否也就无可厚非,如果对于一个项目,需要要求必须尽善尽美,FPGA的优势便是数字信号处理,速度快,我们在保持速度的前提下,还需要使其准确率也提高,尽量占用少量的资源。这样异步复位,同步释放的机制就体现出来了。
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:NingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/6420008.html
相关文章推荐
- 异步复位、同步释放——系统完美稳定
- 异步复位,同步释放机制
- 异步复位和同步释放电路的详细解释
- 老生常谈-----异步复位 同步释放
- 异步复位同步释放
- 【转】异步复位,同步释放
- 三种复位方式: 同步复位、异步复位、异步复位同步释放
- 异步复位和同步释放电路的详细解释
- 同步复位与异步复位——异步复位同步释放
- Verilog中同步复位,异步复位,异步复位同步释放
- 异步复位,同步释放
- FPGA基础-异步复位,同步释放
- [转]同步复位,异步复位以及异步复位同步释放
- 异步复位、同步释放
- Verilog中异步复位,同步释放
- FPGA基础之异步复位和同步释放电路的详细解释
- 异步复位、同步释放
- 异步复位,同步释放
- 同步复位,异步复位以及异步复位同步释放(转载)
- 为什么要异步复位,同步释放