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

news2024/9/27 5:46:31

深刻理解状态机设计需要避免的冒险;处理单元里的control和datapath;时序电路可能存在essential hazard;竞争冒险【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里。如果用状态机写得话,如下图所示:左图是错误写法,右图是正确写法
在这里插入图片描述

  • if jinwei,判断的是寄存器jinwei里的值是0还是1
  • 左图没有考虑“进位数据”存到“进位寄存器”里面也是需要时间的:如果一个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提供了可以仿真延迟的做法,可以添加“ #时间 ”内部分配延迟达到考虑延迟的效果;

  • 建议保留一份源文件,然后另一份是加了#20仿真有节点延迟的文件。
  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/187113.html

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

相关文章

JavaScript XHR、Fetch

前后端分离的优势 ◼ 早期的网页都是通过后端渲染来完成的&#xff1a;服务器端渲染&#xff08;SSR&#xff0c;server side render&#xff09;&#xff1a; \qquad 客户端发出请求-> 服务端接收请求并返回相应HTML文档-> 页面刷新&#xff0c;客户端加载新的HTML文…

如何采用conda配置python虚拟环境

文章目录一、创建python虚拟环境二、配置刚创建的虚拟环境三、将虚拟环境配置到相应项目一、创建python虚拟环境 首先选中要配置环境的文件 如下&#xff1a; 在此处输入cmd按回车 此处我创建一个环境名为hands3dtext&#xff0c;环境版本为3.7.2的初始环境 conda create -n…

Visual Studio 2015配置OpenCV4.5.3(c++版)

学习目标学会在Visual Studio 2015部署Opencv一个简单的C Opencv实例一、 Visual Studio 2015配置Opencv4.5.31.1 Visual Studio 2015网上关于Visual Studio 2015的下载&#xff0c;也有很多介绍。大家自行搜索安装。1.2 OpenCVOpenCV大家根据需求下载相应版本&#xff0c;官网…

ObjectARX如何修改多行文字的格式

一 AutoCAD中多行文字的格式设置 AutoCAD在设置多行文字格式时使用了非常特殊的方式&#xff0c;多行文字整体可以有诸多格式属性&#xff0c;比如字高、颜色、旋转角度等等&#xff1b;但是&#xff0c;多行文字的每一个字符其实也可以有自己单独的格式。 比如&#xff0c;下…

java ssm学校二手服饰交易系统服装商城的卖家

目 录 Abstract 1 第一章 绪论 2 1.1课题背景 2 1.2课题研究的目的和意义 3 1.3论文所做的主要工作 3 第二章 技术介绍 4 2.1 B/S架构 4 2.2 MySQL 介绍 4 2.3 JSP技术介绍 4 第三章 系统分析与设计 6 3.1 可行性分析 6 3.2系统说明 6 3.…

Hexo 添加 Github 贡献图

参考&#xff1a;https://akilar.top/posts/1f9c68c9/ 安装 hexo-filter-gitcalendar 插件 执行命令安装 hexo-filter-gitcalendar 插件 npm install hexo-filter-gitcalendar --save在站点配置文件 _config.yml 或者主题配置文件如 _config.butterfly.yml 中添加 # hexo-filte…

jmeter录制脚本及报错:Could not create script recorder解决办法

本文分两部分&#xff1a;一、录制脚本最简单步骤&#xff1b;二、报错解决步骤 一、录制脚本步骤 1、右击【测试计划】添加一个线程组&#xff08;用于存放录制的脚本&#xff09;&#xff1b; 2、右击测试计划添加一个HTTP代理服务器&#xff08;添加--非测试元件--HTTP代理…

(mysql的相关操作)和(Navicat与MySQL的连接使用)

mysql的相关操作 详细教程 链接1: http://edu.jb51.net/mysql/mysql-tutorial.html 链接2: http://c.biancheng.net/view/2441.html mysql安装教程&#xff1a;https://blog.csdn.net/weixin_36369605/article/details/113599400?ops_request_misc%257B%2522request%255Fid%…

ABAP CDS-介绍(ABAP CDS视图)

目录前言架构概述CDS版本SAP平台CDS的可用性CDS其他的好处后续参考前言文章翻译自Tushar Sharma的文章&#xff0c;转载请注明原作者和译者&#xff01;在SAP发展到SAP HANA版本之后&#xff0c;SAP内部的技术正在快速地变化&#xff0c;SAP开发业务应用程序的方式已经发生了范…

CUDA编程笔记(8)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言原子函数完全在GPU中归约性能比较总结前言 原子函数的合理使用 原子函数 在cuda里&#xff0c;一个线程的原子操作可以在不受其他线程的任何操作的影响下完成对…

快!用Vim

文章目录简介基操移动删改查搜索替换多文件操作text object赋值粘贴macro补全配色自定义配置映射插件常用插件gopython浏览补全格式化gitTmuxneovim简介 在 Linux 平台使用 Vim 编辑器&#xff0c;成为NB Vimer安装 vim 就不介绍了 基操 三种模式 inserta: append i: inser…

ESP-C3入门6. 使用UART串口

ESP-C3入门6. 使用UART串口一、简介二、UART使用的一般步骤三、使用的API1. uart_config_t结构体和设置参数函数uart_param_config()2. 专用函数设置参数3. 设置通信管脚uart_set_pin()4. 安装驱动程序uart_driver_install()5. 运行UART通信 uart_write_bytes()和uart_read_byt…

Spring Batch 批处理-执行上下文

引言 接着上篇&#xff1a;Spring Batch 批处理-作业监听器&#xff0c;了解作业监听器后&#xff0c;本篇就来了解一下Spring Batch执行上下文&#xff0c;来看看Spring Batch 如何在作业与步骤间进行数据共享。 作业与步骤上下文 语文中有个词叫上下文&#xff0c;比如&am…

设置mysql远程链接

一、 进入mysql数据库 mysql -uroot –p密码 二、 创建用户进行远程链接 Mysql>grant all privileges on *.* to duan%identified by 111111 with grant option; ‘duan’:用户名 ‘%’&#xff1a;表示所有主机都可以登录&#xff0c;如果‘ip’表示该主机可…

[GXYCTF2019]luck_guy1题解

无论风暴把我带到什么样的岸边&#xff0c;我都将以主人的身份上岸。 ——贺拉斯 目录 1.查壳 2.静态分析 分析信息 猜测 3.wp 1.查壳 x86-64 拖入64位IDA 2.静态分析 找到main函数&#xff0c;按下F5反编译 int __cdecl main(int argc, const char **argv, const cha…

Python Windows Apache部署Django项目运行环境

目录 一、安装Apache服务器 1、在官网http://httpd.apache.org/download.cgi或网上搜索下载zip压缩包 2、Apache相关配置 3、创建Apache服务器 解决报错AH00369: Failed to open the Windows service manager, perhaps you forgot to log in as Adminstrator? 4、启动ap…

【每周Java技术】2023.01.26 周四 到 01.29 周日

文章目录一、01.26 周四 大年初五1.1&#xff09;Python的一道算法题目1.1.1) 题目1.1.2) 解答1.1.3) 知识点一、01.26 周四 大年初五 1.1&#xff09;Python的一道算法题目 1.1.1) 题目 2437. 有效时间的数目 给你一个长度为 5 的字符串 time &#xff0c;表示一个电子时钟…

产线工控设备安全经验分享

工控设备安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工…

机器学习算法竞赛实战--3,数据探索

数据挖掘是竞赛的核心模块之一&#xff0c;贯彻竞赛始终也是很多竞赛胜利的关键那么数据探索又是什么呢&#xff1f;可以解决哪些问题&#xff1f;首先应该明确3点&#xff0c;即如何确保自己准备好竞赛使用的算法模型如何为数据集选择最合适的算法如何定义可用于算法模型的特征…

安装DevStack稳定版本zed

STEP1: 创建stack用户(一定要&#xff01;) sudo useradd -s /bin/bash -d /opt/stack -m stack sudo chmod x /opt/stack echo "stack ALL(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack sudo -u stack -i //用stack用户登陆 STEP2: git clone devsta…