当前位置: 首页 > news >正文

ESL设计概述

‍‍

‍‍前言

  随着芯片面临着应用场景丰富多变、集成功能模块越来越多、片内通信及模块间接口越来越复杂、设计规模越来越大以及PPA要求越来越高的需求,芯片设计方法面临越来越大的挑战。架构的合理性、完备性和一致性很大程度上决定了芯片设计的成败。基于同样的IP及工艺制程,不同架构实现相同功能所需的资源开销及性能差距很大。因此,芯片设计的第一环节——系统架构设计及其仿真优化,变得越来越重要,是后续一切硬件、软件开发的基础。 

    由于传统方法逐渐无法处理迅速发展的集成了大量功能的系统算法内容,ESL设计在近几年快速普及。ESL设计,即电子系统级(Electronic System Level)设计方法学,是一种抽象程度高于RTL(Register Transfer Level,寄存器传输级)设计的芯片设计与验证方法。在芯片设计过程中,工程师需要设计的内容通常包括芯片性能模型、芯片功耗模型、芯片功能模型,在此过程中以及芯片验证过程中,均可以利用ESL设计来实现。ESL设计可以为芯片设计工程师提供开发、优化、验证芯片架构与嵌入软件的方法,以及提供验证服务。

ESL设计的作用

  从仿真目的来说,ESL设计可以分为芯片架构仿真,芯片co-sim验证,芯片软硬件联调:芯片架构仿真包括芯片的性能仿真与功耗仿真;芯片co-sim验证包括子系统级联合仿真验证与模块级联合仿真验证;芯片软硬件联调目的是与RTL开发解耦,快速完成软硬件联合调试。  例如在架构性能仿真场景下,需要根据架构设计需求,在给定应用场景或benchmark情况下,将对性能有影响的组件构建在一起模拟实际运行场景,以动态运行的方式获取感兴趣的性能数据,以完成架构设计的寻优、调优或确认。  下图展示了仿真器在CPU开发过程中的作用[1]

308780d869793e84d90a35063d10da32.png

仿真器在芯片设计中的作用

  由图可知:

  1. 在芯片开发早期,基于仿真器可以进行微结构探索和粗粒度微结构定义,此时仿真器的开发抽象层次较高;

  2. 随着处理器设计的不断推进和仿真器的不断完善,基于仿真器可以持续对芯片为芯片微结构进行评估、修改和取舍;

  3. 当仿真器趋于成熟,可以对微结构、多核互联系统、一致性协议等进行详细性能分析,基于分析结果对微结构进行微调;

  4. 在对处理器逻辑设计进行验证的阶段,仿真器可以作为参考模型辅助进行验证,可以快速定位逻辑设计错误;

  5. 在未流片之前基于仿真器就可以开展系统软件开发和适配工作,这样可以在芯片流片结束后以最快速度启动系统软件。

ESL仿真器的基本组成

  完整的ESL仿真器由4个层次构成:应用层、组件层、内核层和主机层。其中组件层和内核层构成仿真器的主体,应用层为仿真器提供输入,而主机层承载了仿真器的运行,如图所示:

b8a28b056c08f78e4f199458cd576ee9.png

ESL模拟器基本组成

  1. 应用层:负责芯片工作时的场景构建,用来产生仿真器的输入或仿真激励,包含三种应用模式:

    1. 执行驱动:运行业务软件,生成流量驱动。与目标系统程序的运行方式类似,都是执行编译好的可执行二进制代码;

    2. Trace驱动:解析其他平台生成的处理器核Trace轨迹,生成流量驱动。用trace代替实际CPU模型,将每条指令顺序执行所产生的所有信息作为仿真器的输入;

    3. Traffic驱动:根据分解的业务动作配置表及驱动关系,生成流量驱动。给目标架构注入流量,实施载体为Traffic Generator(TG)。

  2. 组件层:基于开源软件或工具生成的第三方IP或厂商提供的多精度模型搭建生成的待测芯片架构,使用TLM接口通信。组件层一般包括处理器组件、TG组件、接口转换组件、互联组件、DDR组件和Cache组件等。

  3. 内核层:以事件队列为核心,控制仿真事件的正确调度、仿真时间的正确推进,控制整体仿真进程,支持组合目标硬件系统,支持串行、并行仿真和仿真加速手段。

  4. 主机层:Linux多核工作站,承载架构仿真任务。

ESL设计与实现

  系统级设计中,首先要解决的问题是如何描述系统也就是所谓的系统建模。系统建模的抽象层次可以分为三类:

  1. 算法级建模(ALF,Algorithm Function):功能模型,没有时序概念,与体系架构及具体实现关系不大,没有办法进行进一步的性能分析。

  2. 寄存器传输级建模(RTL,Register Transfer Level):关注电路在寄存器、连线层次上的细节,模型建立和仿真都需要很长时间。

  3. 事务级建模(TLM,Transaction Level Modeling):介于ALF和RTL之间,可以为算法选择、软硬件划分、协同仿真的接口建模提供折中的评价方法。

  三者的关系如图所示:

586c8bc7d0e9c8b439568acfb59d83a9.pngESL建模抽象层次对比

  ESL设计的核心是事务级建模,这里的事务是指模块之间的数据和事件的交互。事务级建模的核心概念是在一个系统建模的过程中将运算功能和通信功能分开,模块之间的通信通过函数调用来实现。与RTL级模型相比较,TLM可以减少事件和信息的处理,而且事务级模型所需的程序代码更少,执行速度更快。  根据系统描述精度的不同,OSCI(The Open SystemC Initiative)提出的TLM1.0和TLM2.0标准对事务级建模进行进一步细分,如图所示:

10a2b1ac7a53975088c10d788804e05d.png

ESL建模精度对比

  可以看出,没有时序信息的事务级模型的建模和仿真速度最快,精确到周期的事务级相对较慢,但如需进行硬件体系架构分析或硬件性能分析往往需要近似时序或周期精确的建模精度。

  在ESL实现上,为了达到最优的性能,开发者需要利用硬件亲和的编程语言如:SystemC和C++来进行开发。这是因为:SystemC和C++的使用使得ESL框架可以高效调用硬件的底层API,从而最大限度发挥硬件性能。同时,现代操作系统(如Linux和Windows)提供丰富的基于SystemC和C++的编程接口(如文件系统,网络编程,多线程管理等),通过直接调用操作系统API,可以降低框架运行的开销。

  从精度的角度分析,10~20%的精度损失换来的仿真速度的1000倍提升以及架构迭代速度的10倍提升,被认为是可以承担的代价。同时从易用性角度分析,Python等高级语言具备以C和C++为核心的低层次编程接口,通过Python丰富的库函数,可以快速搭建系统架构与性能分析(Profiling)平台。为了实现处理器的敏捷开发,UC Berkeley还开发了高度参数化的硬件构建语言Chisel,可以直接使用面向对象的设计方法学描述处理器功能,通过编写一次硬件代码可以生成包含C++周期精确仿真器、FPGA Verilog和ASIC Verilog这三个目标,使得处理器设计效率提升一个数量级。

开源ESL仿真器

  目前开源的ESL仿真器种类较多,不同的开源仿真器具有不同特点,因此开发人员可以根据所研究的内容选择合适的开源仿真器平台进行实验,为系统架构研究提供了很高的灵活性,有助于快速实现原型系统。同时,开源仿真器的社区一般比较活跃,生态环境好,在原型系统实现过程中,遇到问题可以很快找到解决方案,从而快速构建实验用的原型系统。

  但使用开源模拟器也存在一定的局限性,各厂商的微架构一般与开源模拟器的微架构差别较大,因此修改模拟器的代价较大。例如GEM5模拟器中乱序执行流水线的设计主要参考的是Alpha21264处理器,基于此进行微架构修改的工程量较大,实现架构搭建及性能分析所需的人力及时间要高于商用工具。此外,由于模拟器开发是一项较大的软件工程,而软件工程的框架一旦确定,修改起来也会比较棘手。

  下表整理了常见的开源计算机架构/微架构仿真器[2]

bcf539e2eddc76cb3ad742fbd43443de.png

8cee7adb363a5f031aebe5dacdda0f4d.png

b14e74da54919c34350d9e49a23b44d3.png

总结

  ESL设计对于简化芯片设计流程,提高芯片设计效率起到了重要作用。本文从芯片设计实例出发,简要介绍了ESL设计的定位与实现方式,总结了开源ESL仿真器供读者参考。

    最后,欢迎大家关注我们团队的Adlik深度学习推理工具链开源项目,Adlik社区期待你的加入。

5c169c9d280548b7d133569b79617502.png

参考文献

[1] 张乾龙, 侯锐, 杨思博, 赵博彦, 张立新. 体系结构模拟器在处理器设计过程中的作用[J]. 计算机研究与发展, 2019, 56(12): 2702-2719.

[2] Akram A, Sawalha L. A survey of computer architecture simulation techniques and tools[J]. Ieee Access, 2019, 7: 78120-78145.


‍‍

‍‍

相关文章:

ESL设计概述

‍‍ ‍‍前言 随着芯片面临着应用场景丰富多变、集成功能模块越来越多、片内通信及模块间接口越来越复杂、设计规模越来越大以及PPA要求越来越高的需求,芯片设计方法面临越来越大的挑战。架构的合理性、完备性和一致性很大程度上决定了芯片设计的成败。基于同样的I…...

探究C语言数组的奥秘:大小可省略的定义、内存存储、数组名、传参、指针遍历、数组指针和指针数组、柔性数组等

也许你认为,C语言中的数组非常好理解,就是把一组相同类型的元素存储在同一块空间里。但是你可能并没有真正理解数组的本质,不信的话请回答一下下面的几个小问题,如果你能非常清晰的回答这些问题,那么你对C语言中的数组…...

python3 强制使用任意父级相对导入,越过python相对导入限制,拒绝 ImportError

前言 单纯不喜欢 python 对 点开头的包的限制,好麻烦,遂写了本包,来解决这个问题启用本模块后,你可以随时使用 单个点来导入当前目录的模块,也可以使用多个 点导入多级父目录内的模块,而不会报错烦人的模块…...

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…...

Java 实现 YoloV7 人体姿态识别

1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作,因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 :点此下载;下载好后仅选择路径后即可完成安装。 此时将 opencv\b…...

跨越屏幕:桌面PC端的多端开发框架介绍

目前,随着互联网和移动互联网的发展,多端开发框架已经成为越来越多开发者更好的选择。主要有以下几个方面的前景: 跨平台开发需求不断增加:由于不同平台和设备的差异性,开发人员需要使用不同的编程语言和开发工具来为各…...

高效学习方法和工具推荐,让你事半功倍!

本文介绍了五种高效学习方法,包括制定详细的学习计划、集中注意力、不断复习、采用多种学习方式和利用小休息。同时,还推荐了五个高效学习工具和平台,包括Coursera、Duolingo、Quizlet、Khan Academy和Anki,让你在学习中事半功倍&…...

查看Docker容器中RabbitMQ的密码

要查看Docker容器中RabbitMQ的密码,可以尝试以下几个步骤: 1. 查看容器运行时的环境变量 在Docker容器中,可以通过环境变量来设置RabbitMQ的用户名和密码。因此,可以使用以下命令查看容器的环境变量: docker inspect…...

探索Qt线程编程的奥秘:多角度深入剖析

探索Qt线程编程的奥秘:多角度深入剖析 一、Qt线程编程基础(Qt Threading Basics)1.1 线程概念与基本概念(Thread Concepts and Fundamentals)1.2 Qt线程类简介:QThread(Introduction to Qt Thre…...

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片(8256),某个下午巩固循环突然思考到个问题&#…...

C++类和对象 ——构造函数

C拷贝构造函数详解 什么是拷贝构造函数?拷贝构造函数的特征默认拷贝构造函数为什么需要显示定义构造函数?拷贝构造函数的调用场景什么时候不需要自己定义拷贝构造函数 什么是拷贝构造函数? 在现实生活中,拷贝构造函数就好像我们上…...

第2章-分治法

第2章-分治法 总分:100分 得分:20.0分 1 . 多选题 中等 10分 有关以下代码,说法正确的是( ABCE) def BinarySearch(s, x, low, high):if (low > high):return -1middle (low high) / 2if (x s[mid…...

20天能拿下PMP吗?

新版大纲,专注于人员、过程、业务环境三个领域,内容贯穿价值交付范围(包括预测、敏捷和混合的方法)。除了考试时间由240分钟变更为230分钟、200道单选题变为180道(包含单选和多选)之外,新考纲还…...

Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOC/DOCX 转换为 PDF

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…...

数据安全的重要性

数据安全非常重要,因为我们生活在数字化时代,许多信息和数据都以数字形式存储和传输。如果这些数据受到未经授权的访问、篡改、泄露或破坏,会对个人、组织和国家造成严重的损失。 以下是数据安全的重要性: 1. 保护各类隐私&#x…...

要创建富文本内容?Kendo UI Angular组件有专门的编辑器应对!

您的Angular应用程序可能需要允许用户添加带有格式化选项的文本、图像、表格、外观样式和/或链接,使用Kendo UI for Angular的编辑器,可以轻松搞定这些! Kendo UI for Angular是专业级的Angular UI组件库,不仅是将其他供应商提供…...

工赋开发者社区 | 装备制造企业数字化转型总体框架

导读 当前,面对技术、市场以及供应链等多重挑战,在软件定义、数据驱动、数字孪生、大数据、人工智能及元宇宙等技术加持下,装备制造企业不断采用新工艺、新材料,以新模式推动产品快速创新。企业积极关注并探索数字化转型路径&…...

Python趋势外推预测模型实验完整版

趋势外推预测模型实验完整版 实验目的 通过趋势外推预测模型(佩尔预测模型),掌握预测模型的建立和应用方法,了解趋势外推预测模型(佩尔预测模型)的基本原理 实验内容 趋势外推预测模型 实验步骤和过程…...

KALI入门到高级【第三章】

预计更新第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…...

React Native中防止滑动过程中误触

React Native中防止滑动过程中误触 在使用React Native开发的时,当我们快速滑动应用的时候,可能会出现误触,导致我们会点击到页面中的某一些点击事件,误触导致页面元素响应从而进行其他操作,表现出非常不好的用户体验。 一、问题…...

【c语言】函数递归调用

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ…...

SPSS如何进行判别分析之案例实训?

文章目录 0.引言1.一般判别分析2.逐步判别分析3.决策树分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对判别分析进行阐述。 1…...

Windows 10 字体模糊发虚的问题及解决方法

Windows 10字体模糊发虚! 如何解决?Windows 10是一款常见的操作系统&#xff0c;它拥有各种各样的功能&#xff0c;但是有些用户发现&#xff0c;在使用Windows 10时&#xff0c;字体会变得模糊发虚&#xff0c;这给用户带来了很多不便。下面&#xff0c;我们就来看看如何解决…...

渔人杯部分wp

文章目录 渔人杯神仙姐姐阿拉丁飘啊飘 渔人杯 神仙姐姐 点击拜 &#xff0c;抓包发现get请求了/sx.php 返回如下 {"code":0,"num":1,"flag":"ctfsh0w-f1ag-n0t-h3r3-th1s-msg-just-a-j0ke-}{"}在repeater重复请求&#xff0c;发现…...

测试用例覆盖不全面的解决方法

测试用例覆盖不全面的解决方法 问题分析 在测试用例设计过程中&#xff0c;容易出现思维受限或者需求盲区&#xff0c;我们不可能完全覆盖用户使用的所有场景&#xff0c;编写测试用例的时不可能把所有的场景都能想周全&#xff0c;把所有的场景下的情况都写成测试用例去模拟、…...

AWS Lambda - 第一部分

Hello大家好&#xff0c;我们今天开始讨论AWS Lambda的内容。 SAP认证考试会涉及到很多Lambda的内容&#xff0c;想要通过认证考试虽然不一定非要精通开发&#xff0c;但需要知道Lambda的一些功能和特性、适用场景以及Lambda是如何工作的。 我们开始吧&#xff01; Lambda与…...

Java 基础进阶篇(七)—— 面向对象三大特征之三:多态

文章目录 一、多态的概述二、多态中成员访问特点 ★三、多态的优势与劣势四、多态下的类型转换4.2 自动类型转换&#xff08;从子到父&#xff09;4.2 强制类型转换&#xff08;从父到子&#xff09;4.3 instanceof 关键字 一、多态的概述 多态&#xff1a;是指执行同一个行为…...

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数&#xff1a; /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…...

自然语言处理(NLP)在放射学报告评价中的应用:应用和技术进展

自然语言处理&#xff08;NLP&#xff09;在放射学报告评价中的应用&#xff1a;应用和技术进展 写在最前面摘要引言先进的技术BERT算法优点 Applications in Radiology 放射学应用Quality 质量将关键发现通知转诊临床医生放射科关键绩效指标和评估 个别放射科医生的表现同行学…...

日常开发为什么需要做Code Review

日常开发为什么需要做Code Review 一、背景 最近在开始一个新的项目&#xff0c;在查看项目中代码及具体细节时&#xff0c;发现这个项目真实一堆乱麻&#xff0c;没有规律可循&#xff0c;可总结下这个项目的缺陷 没有规律可循&#xff0c;没有结构性设计不做公共封装&#…...

保定seo建站/长沙seo外包

1、pushbutton->default属性为true&#xff0c;按回车相当于点击该按钮。 2、选中checkable后&#xff0c;Button变成切换按钮(toggle button)&#xff0c;可以有两种状态&#xff1a;按下/弹起&#xff0c;默认状况下checkable是不选中的&#xff0c;Button默认为触发按钮(…...

云南网站建设优选平台/seo内容优化心得

PYTHON 官方手册学习笔记 一:PYT HO N 安装配置 1、windows安装Python之后需要配置环境变量 在dos窗口运行 set path %path%;d:\python32即可、设置完成之后就可以直接在 dos命令行输入python打开python编辑器 2、python编辑器的选择、建议使用Vim或者是自带的IDLE编辑器 二:解…...

做一个网站怎么做/网店运营具体做什么

dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线&#xff08;包括基于内存的、rabbitmq的&#xff09; CQRS DDD 实例 随后更新dym 分布式开发框架 dym 是一个分布式开发框架&#xff0c;同时支持 .net core2.2 、.net frameworker4.6.1。1、运行Demo 第一步&#xff1a;启…...

程序员自学网站/seo在线教学

BOOL CPrjDlg::PreTranslateMessage(MSG* pMsg){if ((pMsg->message WM_LBUTTONDOWN) || (pMsg->message WM_LBUTTONUP)) //核心点{if (GetFocus() GetDlgItem(IDC_EDIT_PRJ_NAME)) //根据不同控件焦点判断是那个在执行 {char chHelp[100]; GetPrivateProfileStrin…...

电子政务门户网站建设的教训/微信怎么推广找客源

直接上图&#xff1a;通过 SHOW PROCESSLIST 命令可以实时查看mysql正在执行的操作&#xff0c;这对查看系统中哪些语句执行时间长&#xff08;需要优化的语句&#xff09;是很有帮助的&#xff0c;例如上图中红色框标出的地方&#xff0c;Info列中的语句在我执行SHOW PROCESSL…...

建设网站需要什么知识/徐州百度seo排名

披萨店销售集 一个虚构的比萨饼店一年的销售额&#xff0c;包括每个订单的日期和时间以及提供的比萨饼&#xff0c;以及有关类型、大小、数量、价格和成分的其他详细信息。 数据集基本情况 文件类型 CSV文件 标签 商业食品与饮料时间序列&#xff0c;数据结构&#xff0c…...