首页 > 其他分享 >【FPGA基础】时钟设计与异步复位同步撤离设计

【FPGA基础】时钟设计与异步复位同步撤离设计

时间:2023-07-23 16:55:05浏览次数:37  
标签:异步 FPGA clk 复位 分频 信号 设计 时钟

一、时钟设计

1、时钟分频设计

累加器时钟分频(32分频)

always @(posedge clk and negedge rst_n) begin
    if (!rst_n)     clk_cnt <= 5'b0;
    else            clk_cnt <= clk_cnt + 1'b1;
end 

 

异步时钟分频(32分频)

always @(posedge clk ) 
    clk_2 <= ~clk_2;
always @(posedge clk_2 ) 
    clk_4 <= ~clk_4;

推荐采用异步时钟分频结构,防止毛刺产生,面积小不需要复位;

(注:当然最好还是用clk_wizard产生时钟,尽量避免自己分频)

 

二、复位设计

1、同步复位设计

同步复位就是指复位信号只有在时钟上升沿到来时才有效,否则无法完成对系统的复位工作。用Verilog描述如下:

always @(posedge clk ) begin
    if (!rst_n)
        ……
end

(1)同步复位的优点:

a.有利于仿真器的仿真;

b.可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高;

c.因为它只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

 

(2)同步复位的缺点

a.复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素;

b.由于大多数的逻辑器件的目标库内的DFF(DFF捕获时钟上升沿的D端数据,并在Q端输出,一直维持到下一时钟上升沿到来之前。在此期间,D端的数据变化不会直接影响到Q端的输出)都只有异步复位端口,所以倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费较多的逻辑资源。

 

 2、异步复位设计

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

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        ……
    else ……
end

(1)异步复位的优点:

a.大多数目标器件库的DFF都有异步复位端口,因此采用异步复位可以节省资源;

b.设计相对简单;

c.异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口。

 

(2)异步复位的缺点

a.在复位信号释放(release,也就是复位信号无效的时候)的时候容易出现问题,倘若复位释放时恰恰在时钟有效沿附近,就很容易使电路处于亚稳态;

b.复位信号容易受到毛刺的影响。

 

3、异步复位同步撤离设计

用verilog描述如下:

always @(posedge clk or negedge arst_n) begin
    if (!arst_n)    {rst_n, rff1} <= 2'b0;
    else            {rst_n, rff1} <= {rff1, 1'b1};
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        ……
    else ……
end

推荐设计中使用这种复位设计,结合了双方面的优点,很好的克服了异步复位的缺点,因为异步复位的问题主要出现在复位信号释放的时候。倘若异步复位信号有效的话,触发器就会复位,从而复位后级寄存器;但是又因为这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成1,因此使得复位信号的释放与时钟沿同步化。

这种复位方式,既可以防止后级寄存器无法满足恢复时间要求,也可以避免前级寄存器无法满足恢复时间要求,还能捕捉持续时间小于一个时钟周期的复位信号。但要注意的是,虽然复位不依赖输出,但是复位输出信号需要依赖于时钟才能撤离,即在上电复位或者门控时钟电路里,当电路中没有正常工作的时钟时,该复位电路无法工作。

标签:异步,FPGA,clk,复位,分频,信号,设计,时钟
From: https://www.cnblogs.com/Ivan0506/p/17575226.html

相关文章

  • java spring 异步
    JavaSpring异步实现指南引言在开发过程中,我们经常会遇到一些需要长时间处理的操作,例如网络请求、数据库访问等。为了提高程序的性能和响应速度,我们可以使用异步操作来处理这些耗时的任务。在JavaSpring框架中,提供了多种方式来实现异步操作,本文将介绍如何使用JavaSpring来实现......
  • 2021年中国大学生程序设计竞赛女生专场
    链接:https://codeforces.com/gym/103389A.公交线路C++Code#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,x,y;cin>>n>>x>......
  • 外键关系不为主键Id时的设计
    当外键关系设计不为主键Id时(一般不这样设计)LibraryEntityusingVolo.Abp.Domain.Entities;namespaceProduct.Domain.Entity;publicclassLibraryEntity:AggregateRoot<Guid>{publicstringName{get;set;}publicstringLocation{get;set;}......
  • 基于Java Web的物流快递管理系统的设计与实现-计算机毕业设计源码+LW文档
    选题的背景、意义及研究现状:研究背景随着中国物流业的高速发展,物流管理的重要性不言而喻。而物流管理的效率更是各个物流企业最看重的地方。近些年来,很多公司和企业都实现了自动化办公及信息管理,工作人员只需要在电脑前动动手指,就可完成繁琐的管理操作,极大程度上减轻了工作人员的......
  • 学习设计模式,修炼内功。
    常用设计模式之.Net示例代码合集 每一次初学者粉丝朋友,在后台向我咨询编程问题,我除了给他们指导学习路线,我都会建议他们学完基础知识后,一定要要注重编程规范,学习设计模式,修炼内功。虽然说很多程序员,他们日常主要工作是CRUD,但是学习设计模式也是有助于学习公司的框架,另外设计......
  • 嵌入式系统设计师考试攻略分享
    liwen012023.07.20前言7月20日开始,可以查询2023年的嵌入式系统设计师的考试成绩了,该考试有上午和下午共两科,每科满分75分,两科同时达到45分为及格通过。我的成绩是上午45分,下午61分,刚好压线通过,这里分享一下我的考试和备考经验,以供参考。(一)这是个什么考试?全国计算机技术与......
  • 2023“钉耙编程”中国大学生算法设计超级联赛(2)部分题解
    2023“钉耙编程”中国大学生算法设计超级联赛(2)部分题解7.201002 BinaryNumber可以发现,每个位置最多修改两次,再多了没有意义。当k为0时,无法修改直接输出。当n为1时,看k的奇偶性,若为奇数则将其翻转输出,否则直接输出。当n不为1时:如果给定的次数k小于序列中连续0串的个数,那一定......
  • 设计模式之状态模式
    假设我们正在开发一个网络下载器应用,该应用有不同的下载状态,包括未下载状态、下载中状态、下载完成状态和下载失败状态。我们可以使用状态模式来管理下载器的状态和行为。要是不用状态模式,这还真的就乱套了!看下代码吧。1//抽象状态类-下载状态2publicabstractclas......
  • 设计模式之装饰器模式
    装饰器模式是一种结构型设计模式,它允许动态地为对象添加新的行为,同时不改变其结构。通过将对象包裹在一个装饰器中,可以在运行时为对象添加额外的功能。在装饰器模式中,有四个主要角色:抽象组件(Component):定义了被装饰对象的接口,是装饰器和被装饰对象的共同基类或接口。它声明了一组......
  • mysql设计菜单树表
    实现MySQL设计菜单树表作为一名经验丰富的开发者,我将向你介绍如何在MySQL中设计和实现菜单树表。在本文中,我将逐步向你展示每个步骤,并提供相应的代码示例和注释。步骤概述下面是实现MySQL设计菜单树表的步骤概述:步骤描述1创建菜单表2添加父菜单列3添加子菜单......