深刻理解状态机设计需要避免的冒险;时序电路可能存在essential hazard;处理单元里的control和datapath;竞争冒险【SV】【VLSI】

news2024/11/23 13:07:15

深刻理解状态机设计需要避免的冒险;时序电路可能存在essential hazard;处理单元里的control和datapath;竞争冒险【SV】【VLSI】

  • 0. 前言:时序电路可能存在essential hazard
  • 1. 理解control和datapath
    • 1.1 Datapath control
  • 2. 硬件电路里Datapath control 状态机可能存在essential hazard
    • 2.1 essential hazard的解决方案
    • 2.2 essential hazard的仿真,添加#20内部分配延迟

0. 前言:时序电路可能存在essential hazard

  任何数字电路的行为都可以通过其功能和时序响应来表示。 前者仅考虑电路的逻辑功能,因此仅传达其功能行为,而后者还考虑信号通过电路时的传播延迟,从而表达电路的实际行为。

  essential hazard:由于组合逻辑中的延迟淹没了状态机反馈部分的延迟,从而导致不正确的操作,因此会出现基本危险。 最好通过改变状态机来实现,通过添加等待周期的方法实现寄存器内数据更新。

1. 理解control和datapath

  针对一个处理器单元(可以是除法器、乘法器等),这里我们不讨论什么冯诺依曼、哈佛、改进型哈佛结构,处理单元完成数据处理和控制运行的所有工作,**按照功能划分:控制(control)和数据路径(datapath)**两个部分,这样有助于分析所设计电路的动作:

在这里插入图片描述

  • 数据路径(datapath):是执行所有必需操作的硬件,例如 ALU、寄存器和内部总线,由组合逻辑电路和时序逻辑电路的互连组成;
  • 控制(control):是告诉datapath要做什么动作的硬件,在切换、选择操作、ALU 组件之间的数据移动等方面,由纯 FSM(有限状态机) 组成;

  请注意,这张图片只是简单的揭示了control和datapath的内部结构,但是并没有说明control和datapath之间的信号传递,将在下文展开。硬件电路的race hazard隐患是由这些信号造成的,是因为大部分情况状态机的设计不太规范。

Organization of Computer Systems: Processors

1.1 Datapath control

  为了实现一种处理单元的计算功能,需要设计状态机进行控制,在有限的状态下,control单元实现从一种状态到另一种状态的更改,在状态机的“下一个状态”里会使得某些信号给1(打开function control、打开load control)

在这里插入图片描述

在Datapath里:

  • function circuit unit负责完成想要的计算;
  • bus总线是共用的数据通路,各种不一样的信号都经过bus传递到想去的地方;
  • register用于存储想要的数据,在电路上是dff(D flip-flop触发器);

在这里插入图片描述

控制信号分为function control和load control:

  • function control控制着底下的计算单元,比如说是一个全加器,functional control通常可以理解为对总线(bus)的操作。因为在Datapath底层,可能只有一条总线连接着系统输入端、全加器的输入端、全加器的输出端、系统输出端…等,通过enable使能信号操作流向bus的数据是什么;

  • load control负责寄存器开关,如果load=1就代表着打开dff把数据存进去;

  • 如上图所示,如果想要完成A+B需要先存A、再存B、通过加法器计算完加法之后通过总线得到想要的结果后存到结果寄存器;

State Machine Design using SystemVerilog

Finite State Machines in Hardware

  这里遇到的一个问题是:因为传播延迟的影响,如果不能正确操作总线(控制信号),就可能得到错误的计算结果

  任何数字电路的行为都可以通过其功能和时序响应来表示。 前者仅考虑电路的逻辑功能,因此仅传达其功能行为,而后者还考虑信号通过电路时的传播延迟,从而表达电路的实际行为。

2. 硬件电路里Datapath control 状态机可能存在essential hazard

  essential hazard是由从同一点出发的两条或多条路径上的不相等延迟引起的。
在这里插入图片描述

  这里想实现X一直加1,把进位存到Y里。如果用状态机写得话,如下图所示:左图是错误写法,右图是正确写法
在这里插入图片描述

  • 左图没有考虑“进位数据”存到“进位寄存器”里面也是需要时间的:如果一个ff的时间算1个单位时间,那么进位寄存器里的值的更新需要2个单位的时间(先输入数据到x需要1个单位时间,因为加法器一直连着寄存器的输出,加1后输入进位寄存器需要1个单位时间),左图的结果很可能得到的是错误的(如果此时总线上的数据是第一次更新甚至是X值或者是前一次计算的错误数据);
  • 这是因为硬件电路的传播延迟,状态机操作datapath单元必须考虑到延迟问题;如果在输入进位的同时直接判断寄存器里的结果是什么,很可能得到错误的判断!
  • 寄存器register由目前是否输入成功和之前的存储决定,因为寄存器里的数据不稳定,可能存放着上一次的结果。在输出不稳定时逻辑导致动作,则很危险;
  • 右图添加了一个空状态,用于避免hazard的出现,等待足够的时间之后,寄存器里的值可以更新,可以正确地判断进位,这是左图状态机所不能完成的!!!
  • Since the datapath registers are updated at the end of the clock cycle, we must wait until the next state before judging new values. 非阻塞赋值(<=)给register,信号在这个周期的末尾才开始准备变化,再加上传播延迟造成的延迟时间,最好是再加一个Wait空周期,已确保存到寄存器里的进位数据是正确的。

2.1 essential hazard的解决方案

  essential hazard:由于组合逻辑中的延迟淹没了状态机反馈部分的延迟,从而导致不正确的操作,因此会出现基本危险。
  遗憾的是,查找和修复基本危险需要通过电路的组合逻辑部分详细分析最坏情况下的延迟路径,有时需要向电路的反馈路径添加延迟填充以确保反馈延迟克服电路中的其他延迟。

  1. 等待直到信号稳定(通过添加状态机):更可取(当有时钟时最容易设计——同步设计)
  • the state machine shoule be designed such that a hazard is allowed to occur.
  • Note that asynchronous systems are susceptible to hazards and the next state logic must prevent any hazards from occurring, which is one reason why synchronous systems are usually preferred.
  • 数据一旦稳定之后,synchronize data 使得下次时钟上升沿来了,hazards occur can be ignored。
  1. 增加添加冗余的逻辑电路:如添加buffer、或者添加比较慢的路径上的器件数量(不使用所给的时钟——异步设计),既添加了很多buffer硬件,且大多数适合不建议使用,因为datapath系统变成异步了之后可能会造成更多的问题;
  • 如尝试直接给datapath增加buffer,绕过给datapath每一个寄存器添加buffer的方法,强行延迟datapath的时钟,以符合预期设计,使得时钟刚刚好能吻合需求,这样仿真可以通过了;
  • 但是有两点隐患:1. 在实际生产后,如果buffer的延迟效果跟所仿真的效果不一致(工艺上可能导致传播延迟更小这样buffer没有起到想要的作用),可能会导致essential hazard出现。2. 如果想提高系统的工作频率,时钟周期更短,这时buffer就不吻合了,得重头重新设计了;
  • 注意区分hazard-free circuit,这是通过优化布尔代数表达式来减少不必要的电路以避免static hazard;

2.2 essential hazard的仿真,添加#20内部分配延迟

  实际上,SystemVerilog提供了可以仿真延迟的做法,可以添加“ #时间 ”内部分配延迟达到考虑延迟的效果,

  always_ff @(posedge Clock, negedge nReset)
    if ( ! nReset )
      begin
        started <= 0;
        toggled <= 0;
        count <= 0;
      end
    else
      begin
        if (( started == 1 ) && ( toggled == 0 ))
          count <= #20 count + 1;
        else
          count <= #20 count - 3;
        started <= #20 1;
        toggled <= #20 ! toggled;
      end

  这种延迟效果只出现在仿真里,实际上不可综合。这样添加延迟,设计者需要很清楚的知道在做什么,自己想做的仿真期待和实际效果相匹配,否则不应该使用。

Iain McNally - Race Hazards, Clock Skew, Cross Simulation & Intra-Assignment Delays

Lecture 02 – Verilog Events, Timing, and Testbenches

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

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

相关文章

MFC|创建一个对话框及窗体各个属性介绍

参考&#xff1a; VS2015 建立一个C的MFC简易窗体程序项目&#xff08;https://www.cnblogs.com/xingboy/p/11059721.html&#xff09; 对话框中各项属性介绍&#xff08;https://blog.csdn.net/u012350993/article/details/26093051&#xff09; MFC窗口风格 WS_style/WS_EX_s…

【Hadoop】YARN简述

文章目录1. YARN总述2. YARN调度器2.1 FIFO Scheduler2.2 Capacity Scheduler2.3 Fair Scheduler1. YARN总述 YARN是Hadoop资源管理器&#xff0c;它是一个通用资源管理系统&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;它的引入为集群在利用率、资源统一管理…

关于栈和队列

目录栈&#xff08;Stack&#xff09;什么是栈栈的使用栈的模拟实现队列&#xff08;Queue&#xff09;什么是队列队列的使用队列的模拟实现循环队列双端队列 (Deque)栈&#xff08;Stack&#xff09; 什么是栈 栈是一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入…

JavaScriptArray和String对象~

初识Array&#xff1a; 定义&#xff1a; 方式1 var 变量名new Array(元素列表);举例&#xff1a; <script>var arraynew Array(1,2,3);alert(array); </script>显示如下&#xff1a; 方式2 var 变量名[元素列表];举例&#xff1a; <script>var array[…

App Inspector使用 (macaca移动端元素检查器)

App Inspector安装说明&#xff1a;https://macacajs.github.io/app-inspector/zh/guide/install.html#%E7%8E%AF%E5%A2%83%E9%9C%80%E8%A6%81 依赖安装说明&#xff1a; 1、node环境&#xff1a;这里安装的时候和初始化的时候报错使用了两个版本&#xff0c;所以这里使用nvm…

Python-模块、包和发布模块

1.模块1.1模块的概念模块是python程序架构的一个核心概念每一个以扩展名.py结尾的python源代码文件都是一个模块模块名同样也是一个标识符&#xff0c;需要符合标识符的命名规则在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具模块就好比工具包&#xff0c;要想…

世界坐标系->相机坐标系详细推导

基变换 理论部分 在n维的线性空间中&#xff0c;任意n个线性无关的向量都可以作为线性空间的基&#xff0c;即空间基不唯一。对于不同的基&#xff0c;同一个向量的坐标一般是不同的。因为在计算机图形学中&#xff0c;主要研究三维的空间&#xff0c;所以可以简化问题倒三维…

Hi3861鸿蒙物联网项目实战:智能测距仪

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…

真假流量卡区别,一篇文章教你怎么区分流量卡和物联卡!

真假流量卡区别&#xff0c;小编教你怎么区分流量卡和物联卡&#xff0c;近年来&#xff0c;市面上的流量卡种类繁多&#xff0c;其中不乏有一些虚假的、有套路的套餐&#xff0c;那么&#xff0c;我们如何辨别流量卡的正规性呢&#xff0c;接下来&#xff0c;跟着小编一块来了…

114.简单的动态切换app的图标,两种方式

第一种方式&#xff1a; 1.第一步 通过activity-alias别名实现&#xff0c;manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test&#xff0c;以及一个默认的首页面HomeActivity&#xff1a; <!-- 默认的图标--> <activity-aliasandroid:name".ac…

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

基于java SSM springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留…

java8中stream流式编程的使用大全

一、概述 Stream流操作是Java 8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&#xff0c;能 让代码更加简…

Node.js教程笔记(四)数据库与身份认证

学习目标 1、能够知道如何配置Mysql数据库环境 2、能够认识并使用常见的SQL语句操作数据库 3、能够在Express中操作Mysql数据库 4、能够了解Session的实现原理 5、能够了解JWT的实现原理 目录 1、数据库的基本概念 2、安装并配置Mysql 3、Mysql的基本使用 4、在Expre…

全球数十万客户选择亚马逊云科技数据库服务构建自己的应用

日前&#xff0c;全球市场分析机构Gartner发布《2022云数据库管理系统魔力象限》报告&#xff08;2022 Gartner Magic Quadrant™ for Cloud Database Management Systems&#xff09;。Gartner数据显示&#xff0c;整个数据库管理系统市场在2021年实现强劲增长22.3%&#xff0…

【五六七人口普查】我国省市两级各行业门类人口及三次产业人口比重

人口数据是我们在各项研究中最常使用的数据&#xff01;之前我们分享过第七次人口普查&#xff08;简称七普&#xff09;的数据&#xff01;很多小伙伴拿到数据后都反馈数据非常好用&#xff0c;同时很多小伙伴咨询有没有前面几次人口普查的数据&#xff0c;这样方便做人口变化…

【Java】final关键字和final的四种用法

final定义 final翻译成中文的意思是 “最终” &#xff0c; 它是java当中的一个关键字&#xff0c;使用final修饰的对象不允许修改或替换其原始值或定义。 假如当final修饰一个类的时候&#xff0c;是不能被其他类继承的。 final的四种用法 修饰类修饰方法修饰变量修饰参数 1.…

会话保持技术:cookie、session

目录 1.概述 2.cookie 3.session 1.概述 会话保持技术的出现是因为HTTP 是一个无状态的协议&#xff0c;这一次请求和上一次请求是没有任何关系的&#xff0c;互相无法感知&#xff0c;上一次请求干了什么&#xff1f;这一次请求完全不知道&#xff0c;会话保持技术就是为了…

Python协程asyncio异步编程结合uvloop性能提升

asyncio介绍 和我们以前常用的gevent模块相似&#xff0c;asyncio模块也是在Python中实现协程的模块区别是gevent是第三方库&#xff0c;通过greenlet实现协程&#xff0c;遇到I/O自动切换&#xff08;自动挡&#xff09;asyncio是Python 3.4版本引入的标准库&#xff0c;asyc…

GitHub访问问题与FastGithub下载及使用(详细篇)

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 FastGithub的介绍 FastGithub的下载 FastGithub的安装及…

23种设计模式之综合实战篇

23种设计模式之综合实战篇1. 设计模式概述1.1 什么是设计模式1.2 设计模式的好处2. 设计原则分类3. 详解3.1 单一职责原则3.2 开闭原则3.3 里氏代换原则3.4 依赖倒转原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特法则4. Awakening1. 设计模式概述 我们的软件开发技术也包括一…