同步和异步、同步复位、异步复位、同步释放(Verilog、Verdi、DC综合)

news2024/11/24 1:06:46

文章目录

  • 1.同步和异步
  • 2. 同步复位、异步复位、同步释放
    • 2.1 同步复位
      • 2.1.1 Verilog code
      • 2.1.2 Verdi waveform
      • 2.1.3 DC Synthesis
    • 2.2 异步复位
      • 2.2.1 Verilog code
    • 2.3 同步释放(异步信号和CLK信号存在时序检查、Recover time&Removel time)
    • 2.4 异步复位、同步释放
      • 2.4.1 Verilog code
      • 2.4.2 Verdi waveform
      • 2.4.3 DC Synthesis
    • 2.5 典型的异步复位同步释放的verilog电路设计

1.同步和异步

  • 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑;另一类叫做时序逻辑电路,简称时序电路或时序逻辑。

    • 如果数字电路满足任意时刻的输出仅仅取决于该时刻的输入,那么该数字电路为组合逻辑电路。
    • 相反,如果数字电路任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态,那么该数字电路为时序逻辑电路
  • 这里和状态机分类有点像,Moore型的输出只与当前状态有关,而Mealy型的输出还与输入相关


在Verilog中根据是否受同一个时钟控制把电路分为两类:同步时序电路和异步时序电路

  • 同步电路:

    • 电路中所有信号都受同一个时钟控制的
    • 电路中有多个时钟,但是其相位差是恒定的,也认为是同步电路
    • 所有触发器都在同一个时钟控制下完成、所有触发器的触发方式(沿触发/电平触发)和种类完全一致
  • 异步电路

    • 电路中有不受时钟控制的信号
    • 电路中有多个时钟,但是其相位差不是恒定的,是异步电路
  • 同步动作:所有的信号都在一个时钟下控制

  • 异步动作:敏感信号列表中有不受时钟控制的其他信号,要遍历clock信号和(reset)异步信号,并且(reset)异步信号级别比clock信号高


2. 同步复位、异步复位、同步释放

2.1 同步复位

  • 复位信号只在时钟上升沿到来时才有效;
  • 能够有效滤除高于时钟频率的毛刺;
  • 同步复位的优点在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率
  • 复位信号的有效时间必须大于时钟周期才可以检测到复位
  • 与异步复位相比,电路多使用一个选择器,需要消耗更多的器件资源

2.1.1 Verilog code

module sync_reset(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

always @(posedge i_clk)
  if(!i_rst_n)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

2.1.2 Verdi waveform

在这里插入图片描述


2.1.3 DC Synthesis

在这里插入图片描述


2.2 异步复位

  • 无论时钟有效沿是否有效,只要复位信号到来,立即执行复位操作
  • 复位信号释放时,如果不满足时序要求,可能由复位引入亚稳态
  • 采用异步复位的端口无需额外增加器件资源的消耗,直接利用触发器的异步复位端,节省资源

2.2.1 Verilog code

module async_reset(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

always @(posedge i_clk or negedge i_rst_n)
  if(!i_rst_n)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

2.3 同步释放(异步信号和CLK信号存在时序检查、Recover time&Removel time)

  • 如果复位信号正好在时钟信号的有效沿撤销,这时候的输出就是亚稳态
  • 使用两级触发器同步释放(留一个周期的裕量),大大减小亚稳态出现的概率,万一出现亚稳态只要在(周期T-Tsetup)这个时间恢复稳定即可
  • 两级触发器同步后,第二级触发器的输出基本上是稳定值。后续逻辑根据稳定值,会有稳定的行为。这就是追求的系统稳定性。
  • 异步复位、同步释放其最显著特征是既保留了异步复位的功能,又避免了异步复位释放时所面临的recovery或者removal违例问题

2.4 异步复位、同步释放

2.4.1 Verilog code

module reset_gen (
   output rst_sync_n,
   input  clk, rst_async_n);

reg rst_s1, rst_s2;

always @(posedge clk, negedge rst_async_n)
   if (!rst_async_n) begin
      rst_s1 <= 1'b0;
      rst_s2 <= 1'b0;
      end
   else begin
      rst_s1 <= 1'b1;
      rst_s2 <= rst_s1;
      end
assign rst_sync_n = rst_s2;
endmodule

在这里插入图片描述

2.4.2 Verdi waveform

  • 如上图所示,低电平有效的异步复位信号 rst_async_n 变为低电平时,将导致触发器清零,使得连接至 rst_sync_n 的系统触发器清零
    在这里插入图片描述
    在这里插入图片描述

  • 然后,当rst_async_n解除复位(变为高电平)时,第一个触发器对输入的 VCC 信号进行同步输出rst_s1为VCC,再经过第二个触发器同步后移除复位信号rst_sync_n
    在这里插入图片描述

  • 我们在Gvim中更改了代码,VCS编译后,Verdi中还是旧的代码,这时候在Verdi中进行刷新(shift+L),新的代码以及波形图都会在Veridi中更新

  • 假设rst_async_nclk的上升沿时撤除,那么第一级触发器处于亚稳态,但是由于两级触发器的缓冲作用,第二级触发器的输入为clk到来前第一级触发器的输出,即为低电平。因此,此时第二级触发器的输出一定是稳定的低电平,方框左中触发器仍然处于复位状态。在下一个clk到来时,第一级触发器的输出已经是稳定的高电平了,故rst_sync_n已经是稳定的高电平,此时复位释放,也就是同步释放。

在这里插入图片描述


2.4.3 DC Synthesis

# DC tcl cmd
start_gui
set top_module_name "async_rst_syns_clr"
read_file -format verilog "./rtl/$top_module_name.v"
link
write -hier -f ddc -out "unmapped/$top_module_name.ddc"
#Constraints are not considered
compile_ultra
write -hier -f ddc -out "mapped/$top_module_name.ddc"
write_file -hier -f verilog -out "mapped/$top_module_name.gv"
#Makefile
dc:
	dc_shell-t -64bit -topo -f test.tcl

clean:
	rm -rf MY_DESIGN_LIB *.log *.svf *.swp ./mapped/* ./unmapped/*

在这里插入图片描述


2.5 典型的异步复位同步释放的verilog电路设计

在这里插入图片描述

  • 保证输出s_rst_d1时稳定的
module async_reset_sync_done(
  input      i_clk,
  input      i_rst_n,
  input      i_data,
  output reg o_data
);

reg s_rst_d0;
reg s_rst_d1;

always @(posedge i_clk or negedge i_rst_n)
  if(!i_rst_n)
    begin
      s_rst_d0 <= 1'b0;
      s_rst_d1 <= 1'b0;
    end
  else
    begin
      s_rst_d0 <= 1'b1;
      s_rst_d1 <= s_rst_d0;
    end

always @(posedge i_clk or negedge s_rst_d1)
  if(!s_rst_d1)
    o_data <= 1'b0;
  else
    o_data <= i_data;
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Docker:(7)查询Docker镜像的DockerFile

1. 前言 我们知道了根据dockerfile来制作镜像&#xff0c;如果给你一个现成的镜像&#xff0c;你能逆向查看出dockerfile吗&#xff1f; 否则&#xff0c;你怎么知道该镜像使用的是CMD还是ENTRYPOINT &#xff0c;使用的是shell格式还是CMD格式&#xff1f;由于格式决定了doc…

numpy反向传播算法示例

numpy反向传播算法示例 数据 通过 scikit-learn 库提供的便捷工具生成 2000 个线性不可分的 2 分类数据集 按着7: 3比例切分训练集和测试集 backpropagation.py #!/usr/bin/env python # encoding: utf-8 """ desc: 反向传播算法 """impor…

leetcode电话号码的字母组合C++实现教程

链接: 电话号码的字母组合 class Solution {char* PNumStr[10] {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//因为每次都需要执行拷贝&#xff0c;…

了解嵌入式系统的不同细分领域:探索嵌入式BSP的定义

嵌入式BSP是指嵌入式系统中的板级支持软件。它是针对特定硬件平台的软件包&#xff0c;提供了操作系统和硬件之间的抽象层&#xff0c;以便开发人员可以更方便地使用硬件功能和编写应用程序。 嵌入式BSP的功能包括&#xff1a; 设备初始化和配置&#xff1a;BSP负责初始化硬件设…

学做测试平台开发-Vuetify 框架

Vuetify 是 Vue 的语义化组件框架&#xff0c;旨在提供整洁、语义化和可重用的组件&#xff0c;使得构建应用程序更方便。 Vuetify 核心是为了提供各种可重复使用的&#xff0c;即插即用并且适合各种项目规格的组件。 Vue 的语义成分。利用 Vue 的功能组件&#xff0c;所有基…

kubectl port-forward 指令

背景&#xff1a; 当K8s的Service类型为ClusterIP&#xff0c;不是NodePort&#xff0c;就只能集群内部访问&#xff0c;想在外部访问可以执行kubectl port-forward&#xff0c;将一个或多个本地端口转发到 Pod或者Service 作用&#xff1a; 做转发&#xff0c;将本地端口转发…

使用 fitter 拟合数据分布

一、简介 前面的文章中通过假设对比来检验样本是否服从泊松分布。得出的结论是总体分布不服从泊松分布&#xff0c;那么如何找到与总体分布最接近的分布呢&#xff1f;不可能一个个分布去验证。这里便可以用到 fitter 这个库。 fitter 是一个小型的第三方库&#xff0c;提供了…

【粉丝投稿】一文带你了解MySQL的左连接与右连接

前言&#xff1a; 昨天粉丝问了一个问题&#xff0c;因此本篇文章主要讲解MySQL的左连接和右连接的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小…

LeetCode——从上到下打印二叉树 II

题目来源 剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣&#xff08;LeetCode&#xff09; 题目 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。 示例 给定二叉树&#xff1a;[3,9,20,null,null,15,7] 返回其层…

vuex2实现时间列表选择器

目录 一、效果展示 二、代码分析 2.1、区域确定与坐标获取 2.2、单个点击与一次性点击 一、效果展示 主要借助自定义指令实现。在表格的"td们"上面进行移动框选&#xff0c;有一次性框选和单个框选&#xff0c;去掉自定义指令里的clearTargetNodes()会连续td,连…

Hudi学习5:Hudi的helloworld-编译源码

hudi是使用java代码编写的 部署hudi 1. 下载源码 Download | Apache Hudi https://dlcdn.apache.org/hudi/0.13.1/hudi-0.13.1.src.tgz 2.编译 安装maven 首先要先有JDK java8以上 配置镜像源 执行编译 测试

Yolov5小目标性能提升方案介绍

目录 1.小目标检测介绍 1.1 小目标定义 1.2 难点 2.小目标难点解决方案 2.1注意力提升小目标检测精度 2.1.1 上下文信息CAM 2.1.2 ConvNeXt 2.1.3 ECVBlock 2.1.4 多头上下文集成&#xff08;Context Aggregation&#xff09;的广义构建模块 2.2 多头检测头 2.3 loss优化…

spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property

spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property

Go语言net模块TCP和UDP编程实践

任何一种语言TCP和UDP网络编程总是必须的&#xff0c;接下来就将go语言中使用net标准库进行TCP和UDP编程进行梳理总结。 目录 1.代码结构 2.TCP通信 3.UDP通信 4.TCP模拟HTTP协议通信 5.利用TCP扫描那些端口被占用 1.代码结构 2.TCP通信 server.go package mainimport …

【正点原子STM32连载】 第四十八章 内存管理实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第四…

全志V3S嵌入式驱动开发(spi-nand image制作)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上一篇文章,我们说到了spi-nor image的制作和输入。相比较spi-nor,spi-nand虽然在稳定性上面差一点,但是价格上面有很大的优势。举例来说,一般32M的spi-nor大约在6-7元左右,但…

Springboot链接Redis实现AOP防止重复提交

目录 安装redis Springboot链接Redis 1.创建springboot项目 如果spring boot启动报Error creating bean with name redisUtil/redisTemplate 2.新建application.yml配置 3.redis配置类-直接用 4.redis工具类-直接用 5.写Controller测试 6.启动、测试 整合AOP&#xff…

内网横线移动—WmiSmbCrackMapExecProxyChainsImpacket

内网横线移动—Wmi&Smb&CrackMapExec&ProxyChains&Impacket 1. 前置环境准备2. wmic介绍2.1. wmic操作演示2.1.1. 受控主机上线2.1.1.1. 内网存活探测2.1.1.2. 密码抓取 2.1.2. 横向移动2.1.2.1. 上传文件2.1.2.2. 文件上传目标主机2.1.2.3. 执行木马 2.2. wmi…

JAVA 安全-JWT 安全及预编译 CASE 注入等(40)

在各种语言脚本的环境下&#xff0c;也会产生一些新的漏洞&#xff0c;如果是java又能产生那些漏洞&#xff0c;思维导图里面常规漏洞之前都有&#xff1b; java的访问控制&#xff0c;jwt令牌&#xff08;php几乎没有&#xff09;组件安全&#xff0c;这些都是java特有的 #综…

C#核心知识回顾——3.继承构造、拆装箱、多态

1.继承中的构造函数&#xff1a; 特点&#xff1a; 当申明一个子类对象时 先执行父类的构造函数&#xff0c;再执行子类的构造函数注意&#xff01;&#xff01;&#xff1a; 1.父类的无参构造很重要 2.子类可以通过base关键字代表父类调用父类构造 public class Mot…