首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
3
篇与
的结果
2026-01-08
CPU 系统级验证 —— 指令集验证 ——OpenHW core-v 验证环境及文件分析
本文记录的相关源工程和文件为:core-v RISCV 核功能验证工程:https://github.com/openhwgroup/core-v-verifcore-v 验证策略:https://core-v-docs-verif-strat.readthedocs.io/en/latest/#core-v 系列核 cva6 工程:https://github.com/openhwgroup/cva6core-v 系列核 cv32e40p 工程:https://github.com/openhwgroup/cv32e40pLowRISCV Ibex 核工程:https://github.com/lowRISC/ibexcore-v RISCV 核相关说明文档:https://github.com/openhwgroup/core-v-docsRISCV ISA 指令流(instruction stream)生成器:https://github.com/openhwgroup/force-riscvcore-v 系列指令流(instruction stream)生成器:https://github.com/openhwgroup/core-v-isgsail 语言介绍:https://www.cl.cam.ac.uk/~pes20/sail/REMS 的 sail RISCV 开源项目:https://github.com/rems-project/sail-riscvopenHW 全称为 open-source hardware,是一个支持开源软件和硬件的非盈利组织。该组织开源的内容包括开源 CPU 核、相关 IP、工具和软件等。指令集验证指令集验证的需求能够使用操作数产生合法的基本整数运算指令在指令执行完成后能够检查通用寄存器的状态指令执行完成后能检查副效应,例如溢出等。指令集验证内容指令集的验证需要验证工程师思考该指令需要测试的特征是什么,为了确保指令的正确执行需要检查的内容是什么,为了确保该特征被测试需要进行哪些激励和配置等。验证的充不充分取决于验证人员对 CPU 微架构的理解和风险应对能力。(1)RISCV 基本指令定向测试设计出来的 CPU 首先需要兼容 RISCV 基本指令,即需要满足 RISCV 基本整数指令及相关标准指令集。主要测试的内容有:溢出检测及相关标志位下溢检测及相关标志位无指令执行的副效应,比如异常的通用处理寄存器变化,异常的条件代码使用 x0-x31 作为 rs1/rs2使用 x0-x31 作为 rdx0 寄存器的值始终为 0set/clear 所有立即数的比特位set/clear 源寄存器 rs1/rs2 的比特位根据 7/8 两条 set/clear 目的寄存器 rd 的比特位(2)自定义扩展指令定向测试对于自定义扩展指令集的验证,该验证需要修改相关的工具链并通过相关测试验证工具链的修改成功,再进行(1)中的测试。(3)随机约束测试对进行大量的随机指令测试指令集验证激励的种类指令集测试激励分为自检(self-checking)和预存(pre-existing)两种。自检测试激励运行时按照源文件中指令顺序依次,并同时将指令执行结果和参考值作检查,若出错则程序跳转到 fail,打断正常执行顺序,立即执行完成。类似的测试集有 riscv-tests、riscv-compilance-tests 等预存测试激励运行时不会打断执行顺序,执行的结果会和指令集模拟器(ISS)的结果作对比,最终统计对比的结果。类似的测试集有 riscv-dv 等指令集验证 pass/fail 的标志测试的 pass/fail 与上述激励的种类有关self checking:自检性质的测试激励在每条指令执行时就会同时将结果和参考值作对比,若失败则跳转到 failsignature check:特征检查,相对自检来说更加复杂深入。测试的结果将被用来计算该指令的某个特征,这将会和预先确定好的较标准特征作对比。采用该检查的为 riscv-complience-tests。check against ISS:与指令集模拟器对比检查。该情况下,testcase 并不知道测试的参考值,仅仅给 DUT 提供激励,testbench 会对比 DUT 和 ISS 的输出结果确定测试的 pass/fail。该检查较被经常使用,因为它是的 testcase 更加简单。采用该检查的如 riscv-dvcheck against RM:与参考模型对比检查,该检查方式与第三点类似,但相对 ISS 更加通用。通常用作 ISS 检测的补充。assertion check:通过断言判断是否执行出错。相关 CPU 核的验证工程cv32e40pCV32E40P (原先 PULP 开发的 RI5CY) 是一个 32bit 的 4 级流水线核,支持整数运算指令、乘法除法指令、单浮点运算指令、压缩指令以及 DSP 扩展指令(包括硬件循环、SIMD 扩展、位操作和增量指令)该核的验证环境有两套,一套是专门的 core testbench;一套是 UVM 环境搭建的 testbench,该环境下 testcase 的产生是可以基于 UVM 环境的(这种方式类似于 Ibex 核验证环境)。两套环境均由 systemverilog 编写。均包含了指令集验证、中断验证、CSR 寄存器验证、异常验证、debug 验证等。1 core testbench该工程是 PULP 遗留下的产物,OpenHW 做了一定修改并持续维护。验证环境中已集成了指令集模拟器。该工程的测试集激励包含指令兼容性测试(偏定向测试,如 riscv-tests 和 riscv-compilance-tests)和随机约束(google riscv-dv),和其他的一些 fireware 测试用例。测试环境结构如下:该 testbench 简单,运行较快,通过 verilator 运行,但是有额外的开销且不能获取覆盖率。2 UVM 验证环境(uvmt_cv32)cv32 核的 UVM 验证环境已搭建完成,在 DSIM(Metrics)运行也很稳定。验证环境中已集成了指令集模拟器。uvm 验证环境的 testcase 均是由 uvm 相关类生成,同时该环境还集成了 riscv-dv,但具体的激励生成还需要再分析。具体验证环境结构UVM 内部组件关系debug、interrupt、control/status 均通过 UVM_agent 组件产生,且通过 uvm_sequence 组件输入激励。UVM 运行流程采用 UVM 搭环境的优势a) 便于验证环境的结构建模b) UVM 环境类支持完全的 UVM 运行流程和 log 服务c) 使用 UVM sequence-item 类可以产生随即约束激励d) 使用内建于验证环境中的参考模型预测执行的结果。(imperas 有现成的开源 ISS)e) scoreboard 可以比较参考模型和 RTL 的结果。f) 功能覆盖率和代码覆盖率确保验证的完全性。且 UVM 测试环境可复用性较高,也可以用在 CVA6 核上。CVA6CVA6(ariane) 是一个 6 级流水线、单发射、顺序执行的 RV32GC 或 RV64GC 核,支持 M/U/S 三种模式,支持 linux 操作系统。该核现存的验证环境尚未成熟,但同样可以构建 UVM 的验证环境。该工程的指令集测试激励包括 riscv 官方测试套件(即 riscv-tests)。IbexIbex 不是 openHW 的 core-v 系列,而是 lowRISC 持续维护的较为成熟的一款核,验证环境也较为成熟,其结构和运行非常类似于 CV32E 和 CVA6 的激励随机约束。该验证环境激励的产生同样是基于 GOOGLE 的随机指令生成器验证环境特征运行有效性testcase 在验证环境中会持续运行完成,除非激励运行出错方便调试能够增加功能覆盖率能够对比检查 RTL 运行的结果指令集描述语言 ——sailsail 是 REMS 构建的一种描述指令集的语言,可以认为是一种机器可读的形式化 ISA 模型。REMS 是英国的一家学术组织,该组织已构建出 RV32IMAC 和 RV64IMAC 指令集的 sail model,链接见上。riscv 基金会有意用其来描述 RISCV 指令集。初步来看,sail 可以用来形式化 testbench 断言的参考模型,这些 assertion 可以根据 sail spec 来验证基于 RISCV ISA 的某微架构。目前该领域 OneSpin GapFree 已经在 sail model 和 RTL 代码间做了可比性的 check,该公司仍在探索如何充分使用 sail model该语言将持续关注。
2026年01月08日
2 阅读
0 评论
0 点赞
2025-12-31
在大学里想学一下 RISC-V 处理器设计,应该怎么入门?
https://www.zhihu.com/question/440881969/answer/1698001295推荐两个国内的开源RISC-V核:一、芯来的蜂鸟e200这是一个MCU级别的开源RISC-V处理器核,可运行一些实时操作系统。这也是国内最早的开源RISC-V核,由胡振波(芯来科技创始人)带领团队开发。可以买到相应的书《手把手教你设计CPU——RISC-V处理器篇》。https://github.com/SI-RISCV/e200_opensourcegithub.com/SI-RISCV/e200_opensource二、国科大的果壳(NutShell)这是中国科学院大学(国科大)第一期“一生一芯”计划五位本科生主导开发的一款开源RISC-V处理器核,功能比较完整,可以运行Linux/Debian。果壳有一些应用,华为的OpenEuler也成功移植到果壳处理器上。https://github.com/OSCPU/NutShellgithub.com/OSCPU/NutShell果壳配套的相关设计文档:https://github.com/OSCPU/NutShell-docgithub.com/OSCPU/NutShell-doc作者:包云岗链接:https://www.zhihu.com/question/440881969/answer/1698001295来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:机器小子myyerrol链接:https://www.zhihu.com/question/440881969/answer/1698484978来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言我是在大三下学期的时候(即2016年的夏天)第一次听到了RISC-V这个词,那会儿我舍友刚好参加了学院组织的《计算机体系结构》试点班,而他们的任务就是要基于RISC-V指令集去设计一款简单的软核CPU,当时我只知道它是由伯克利大学推出的开源RISC指令集,觉得跟我们普通班学习所要用到的MIPS指令集类似,所以就没有太放在心上。可是令人没有想到的是,经过短短几年的发展,RISC-V指令集已经得到了全世界众多互联网和半导体巨头的支持,而且有越来越多的研究机构和初创公司开始基于它来设计自己的专有处理器,我认为目前的RISC-V就像早期的Linux内核,虽然功能和性能还非常有限,但是借助开源协作的力量,我相信总有一天RISC-V也能在某些领域迎来一场足以改变旧有格局的革命。因此为了不被即将到来的新时代所抛弃,作为一名业余硬件爱好者,我觉得自己还是很有必要好好学习一下RISC-V指令集的,没准以后有机会还能为国产自主可控处理器的设计和研发贡献自己的一份力量!古人曾经说过:纸上得来终觉浅,绝知此事要躬行,既然自己决定要学习RISC-V,那就必须亲身实践才能搞明白,而对于这种处于计算机体系结构底层的项目来说,没有什么能够比自己从零实现一遍更好的方法了,于是抱着这种想法我开始在网上搜集资料,结果比较令人失望,虽说国外与RISC-V相关的开源项目有不少,但是其中很多都是用Chisel这种高级硬件构建语言来实现的,学习门槛非常高,再加上为了追求整体的性能,一些CPU的系统架构设计得非常复杂(如采用五级以上流水线、多核处理、乱序执行等),初学者想入门非常困难。所以经过深思熟虑后,我决定从零编写一款系统架构足够精简、代码足够清晰、封装足够优秀的开源处理器项目,希望它能像从众多微控制器中脱颖而出的Arduino一样,让更多的硬件爱好者可以快速上手体验,并基于此开发很多有意思的应用,未来在软硬件生态环境的互相促进下,也许会有更多的人喜欢上CPU开发并愿意花时间去钻研,如果真的能够做到如此,我也就心满意足了。内容任务进度如下图所示,根据木心开源处理器项目所涉及的技术要点,我将其第一版的开发任务总共划分为了5个阶段,分别为需求设计、硬件设计、软件设计、板级验证和板级应用,其中考虑到自己是第一次从零开始编写处理器,应该把更多的注意力放在代码的实现和调试上,所以板级应用这个阶段我将其设置成了选做,如果后期有时间的话,我还是希望自己能够将木心处理器封装到自己设计的开发板上的,好了废话不多说了,接下来简单介绍一下前4个阶段所必须要完成的任务内容。首先是需求设计阶段,这个阶段主要是根据相关专业书籍和RISC-V指令集手册,确定木心处理器的整体架构,并完成软件开发环境的配置;紧接着是硬件设计阶段,这一步需要基于需求设计阶段所确定的系统架构,完成处理器功能模块与数据通路等核心硬件代码的编写和测试工作;接下来是软件设计阶段,在这期间需要完成软件底层(汇编文件、启动文件、链接脚本等)配置以及RTOS系统移植,从而确保木心处理器最终能够分别在裸机和RTOS环境下运行C语言程序;最后是板级验证阶段,顾名思义就是将软硬件代码烧录到FPGA开发板上,然后在物理端验证处理器的功能和性能等指标是否满足项目要求。木心处理器任务进度图(该图不是最终版,后期可能会更新)整体架构指标参数基于为了能够让初学者们更好入门的核心目标,我将第一版木心处理器的内部开发代号命名为TC-L1(TreeCore Learn 1),即木心学习专用处理器第一版的英文简写,它是一款由处理器核、数据总线和外围设备所组成的SoC,无论是系统的核心与外围功能模块,还是指令执行所依托的数据通路在设计与实现阶段均追求极致的精简,只保留能够维持系统正常运行的最小环境,所以你可以把它看成是处理器领域的一个最小系统。注意:后文所有【处理器】特指的是SoC,而【处理器核】则指的是SoC中能够执行具体指令的硬件逻辑单元。木心TC-L1处理器的特性如下所示:处理器核支持最基础的RV32I指令集,且能通过RISC-V指令集兼容性测试;处理器核采用最经典的的五级流水线结构(即取指、译码、执行、访存和写回),且所有指令均是单发射顺序执行的,即系统架构设计满足Unix内核的K.I.S.S.准则;处理器核设计有标准的JTAG调试接口,可通过OpenOCD实现系统的在线调试与升级;处理器核设计有专用的数据总线接口,可通过数据总线与外围设备(目前设计有GPIO、SPI、UART等)进行单向或双向通信;处理器核能够在裸机和RTOS环境下运行C语言程序;处理器可通过参数进行配置,方便移植到各种FPGA平台(在逻辑资源允许的情况下)。功能模块如下图所示,TC-L1处理器的功能模块主要分为4大部分,分别为TC-L1处理器核、TCD调试模块、TCB数据总线以及TCC外部组件,其中处理器核毫无疑问是整个SoC里面最重要的一个模块,它主要负责处理经过软件编译生成的底层指令,并可通过总线接口与其他模块进行数据交互;调试模块则扮演的是辅助角色,用于在编写处理器的过程中提供快速定位系统Bug的能力;接下来的数据总线模块,其功能就好比是现实世界中的桥梁,可建立起处理器内部各模块之间的数据通路,便于实现数据的快速访问;而最后的外部组件模块则包含外部设备和存储器件共两个子模块,其中外部设备模块可实现处理器核与外部标准设备进行数据通信,而存储器件模块则主要用于存储维持处理器运行的各种指令和数据。木心处理器功能模块图(该图不是最终版,后期可能会更新)数据通路在介绍完TC-L1处理器的各种功能模块之后,接下来让我们简单了解一下其内部的数据通路具体是什么样子的。如下图所示,TC-L1处理器核的数据通路采用经典的五级流水线结构,整条流水线由4个流水线寄存器(图中用细长条矩形标识)加以划分开来,其中最左侧的区域为取指阶段,此时处理器会根据PC寄存器中的地址,从指令存储器中获取需要执行的指令,并将其加载到IF/ID流水线寄存器中,以便在下一个时钟边沿到来时能够将数据传递给下一阶段;取指之后自然是译码阶段,此时处理器会根据组合逻辑译码后的结果,初始化核心控制逻辑,并依据指令的具体内容,执行内部中断、读寄存器或符号扩展等操作。之后3个阶段依次分别为执行、访存和写回,其中在执行阶段,处理器会使用ALU对指令数据进行运算,并将最终运算得到的结果保存到流水线寄存器EX/MEM中以供后面使用;而对于访存阶段来说,此时处理器在控制信号的约束下,会对数据存储器进行读写操作,如果指令是读数据的话,则类似需要将获取到的数据保存到流水线寄存器MEM/WB中以供后面使用;流水线的最后是写回阶段,这一步其实执行逻辑很简单,就是将上一阶段读出的数据或在执行阶段得到的运算结果写回到译码阶段中的寄存器堆中,为之后指令的执行奠定数据基础。木心处理器数据通路图(该图不是最终版,后期可能会更新)资料搜集专业书籍《计算机组成与设计:硬件/软件接口(第五版)》下面这本书绝对称得上是计算机体系结构领域里最有名的著作之一,因为它是由RISC架构的奠基者帕特森教授和亨尼斯教授合作编写的(两位宗师级大佬荣获了2017年ACM图灵奖),书中详细介绍了计算机体系结构的相关基础知识,并以MIPS指令集为例给出了一款经典RISC处理器的设计方法,内容质量非常高。这里推荐给大家一方面是因为第一版木心处理器采用的就是这本书中所介绍的经典五级流水线架构,这样后期大家学习起来会比较容易,二是这本书的译者之一是大学本科给我们上过课且带过我毕设的老师,出于对母校的感情,就允许我任性地自荐一下吧《计算机组成与设计:硬件/软件接口(第五版)》《RISC-V手册》这本指南是由中科院计算所包云岗老师团队负责翻译的,原作为帕特森教授(RISC架构发明者)和沃特曼博士(SiFive创始人)合作编写的《The RISC-V Reader》,这本书给出了所有官方已定义的RISC-V指令集格式,并按照章节对RISC-V基础整数指令子集RVI、乘除法指令子集RVM、浮点指令子集RVF和RVD、原子操作指令子集RVA,以及其他可选的扩展子集进行了详细介绍,可以说是目前关于RISC-V指令集最权威且最全面的资料。在开始学习或动手实践前,强烈建议各位好好研究一下这本书,绝对受益匪浅。《RISC-V手册》开源项目tinyriscv项目目前国内与RISC-V相关的开源项目屈指可数,其中我觉得最适合小白入门学习的是下图中的这个tinyriscv项目,推荐理由主要是因为这款处理器不仅系统架构设计得非常简单,而且代码书写风格也非常规范,初学者只需要花很短的时间就能弄明白处理器执行指令的整个流程。除此之外,作者还编写了与本项目相配套的设计文档——《从零开始写RISC-V处理器》,里面详细地介绍了处理器的硬件实现、外部调试、软件测试等内容,文章总体质量非常高,后期木心项目也会在一定程度上借鉴tinyriscv项目的某些设计理念,当然无论最终本项目的完成情况如何,这里我都要先给tinyriscv项目的作者点一个大大的赞。tinyriscv项目主页总结从大学选择硬件作为自己本科的学习方向开始,我就一直坚信它是支撑整个信息时代最关键的组件,试想一下倘若没有硬件所搭建的基础环境,那面向用户的高级操作系统也将不复存在,而如果没有了操作系统作为硬件和软件间的桥梁,那可以毫不夸张的说,当下信息时代的所有产物(互联网、大数据、AI等)都不可能会出现。处理器作为硬件的中枢神经,其重要性自然不言而喻,如果把整个信息产业比喻成一棵树木的话,那我认为处理器就是这棵树的精神核心(简称木心,没错本项目的命名便是由此而来的),只有一棵树的木心足够稳定和强大,那它才能不断成长为根系错综复杂、枝叶繁盛茂密的参天大树,从而有力量抵抗外部各种恶劣环境而长久屹立不倒,处理器亦是如此。前段时间我在知乎上看到了包云岗老师所写的有关国科大“一生一芯”计划的故事,相较于本科生能够带着自己设计的芯片毕业,我觉得该计划更大的意义在于:它打破了传统芯片教学无法在物理层面实践的壁垒,让更多的学生看到了独自设计芯片的可能性,如果能有更多的人喜欢处理器设计并愿意投入到其中,那未来国内芯片设计人才短缺的问题将会得到不断改善,中国也就有机会逐渐摆脱被发达国家卡脖子的窘境,于是借着“一生一芯”计划带给自己的启示,我决定启动木心项目,希望除了CS专业的大学生之外,普通的爱好者们也能转变对芯片设计的态度,并愿意尝试去学习底层技术,假以时日,星星之火也许真的可以燎原。最后,感慨一下:在当前这个利益至上的时代,情怀是肯定敌不过生活的,但是人的生命只有一次,能够在有限的生命里去做一件有意义且难度大的事情,就算最后没有达到自己当初所设立的目标,我觉得这份经历本身也足以配得上成功二字!
2025年12月31日
2 阅读
0 评论
0 点赞
2025-08-16
如何用云服务器搭建一个芯片SOC环境
ICbug猎人处芯积律2021年08月01日07:52今天这篇文章将介绍如何在云端服务器安装EDA软件并且搭建SOC环境。EDA是一个很大的概念,我们这里讲的是芯片设计中的EDA软件。芯片设计的EDA软件包括设计输入工具如composer,设计仿真工具如VCS/Verdi,综合工具如Design Compile,布局布线工具如Design Planner,物理验证工具Dracula,模拟电路仿真器SPICE等。举例的这些EDA工都是收费软件。目前也有一些开源的EDA工具可以用,如仿真用的Iverilog/ Verilator,看波形用的gtkwave,综合用的YoSys等。Efabless曾经用这些纯开源的EDA软件开发并流片过一款芯片。这款芯片结构如下该芯片的资料在这里:https://github.com/efabless/raven-picorv32。这个链接里面包含了该芯片的开源软件,代码,测试等资料,作为一款SOC开源项目大家有兴趣可以去看看。刚才提到的开源EDA Iverilog和Gtkwave的安装方法比较简单,直接敲下面的命令即可:sudo apt-get install iverilog sudo apt-get install gtkwave对于Verilator的安装我们等会在搭建SOC环境的时候介绍,其他开源EDA的安装方法这里不再介绍,有兴趣的可以在网上搜索。Verdi/VCS/simvision/irun等需要授权的EDA软件也可以在云服务器上安装,但是需要license支持才能用。虽然网上也有破解版本,但是个人不推荐使用。如果是企业用户且员工比较少的情况下可以向各个地方的集成电路设计服务机构(如苏州ICC)申请各家EDA的license,能够得到比较大的支持。下面我们介绍搭建一个SOC项目并用相关EDA工具进行仿真。Opentitan是一个开源项目,他是由RISCV搭建的一款简单芯片,其系统架构如下这颗芯片主要构成有1个riscv核,512kB的eflash,64kB的SRAM,16kB的ROM,安全加密模块,32个IO端口,一个UART,一个GPIO,一个SPI。目前I2C还没加进去,据说后面会加进去。从opentitan提供的资料来看,该项目包括了开源的软件,硬件代码,还提供了三套仿真测试环境,分别是verilator仿真环境,FPGA测试环境以及需要VCS的仿真环境。学习人员可以根据自己需要选择不同的运行环境。我们提供的SOC环境搭建步骤在opentitan 的开源网站都能找到,如果有不清楚的地方可以在下面这个链接处查找。https://docs.opentitan.org/doc/ug/getting_started/搭建环境的第一步是创建工具的路径。 sudo mkdir/tools sudo chown $(id -un) /tools第二步是克隆opentitan的库,这样就将SOC的源代码和相关资料拷贝到你的云服务器上。working-area 是你创建的工作路径。cd git clone https://github.com/lowRISC/opentitan.git代码资料会被存在 /opentitan 下面,我们后面介绍的$REPO_TOP 指的就是 /opentitan 这个路径。第三步安装相关软件sudo apt install autoconf bison build-essentialclang-format cmake curl \doxygenflex g++ git golang libelf1 libelf-dev libftdi1-2 libftdi1-dev \ibncurses5 libssl-dev libusb-1.0-0 lsb-release make ninja-build perl \pkgconfpython3 python3-pip python3-setuptools python3-wheel python3-yaml \srecordtree xsltproc zlib1g-dev xz-utils第四步 芯片环境中有用到python3相关的脚本,而云服务器没有安装python3的相关组件,因此需要我们自己安装。apt install python-pippip install --upgrade setuptoolspython -m pip install --upgrade pipsudo apt install djangopip3 install --upgrade pippip3 install django-haystackpip3 install setuptools-scmpip3 install django-haystack装完这些软件后再按照下面步骤安装python3相关的脚本软件。cd $REPO_TOPpip3 install --user -r python-requirements.txt第五步是安装riscv的编译工具链,官网提供了两种方法,一个直接下载,另外一个需要自己编译工具链,对于初学者来讲,建议选择第一种。cd $REPO_TOP./util/get-toolchain.py通过上面五步,我们已经将芯片的源代码和工具链软件都准备好了。在上述文中也讲到,opentatian可以用开源的EDA工具进行仿真,也可以用VCS等需要授权的软件进行仿真。在这里我们选择开源的verilator仿真工具进行仿真。为此需要按照以下步骤安装verilator仿真工具。export VERILATOR_VERSION=4.104git clonehttps://github.com/verilator/verilator.gitcd verilatorgit checkout v$VERILATOR_VERSIONautoconf./configure--prefix=/tools/verilator/$VERILATOR_VERSIONmakemake install做完这些我们就可以去跑仿真了。第六步build环境cd $REPO_TOPfusesoc --cores-root . run --flag=fileset_top--target=sim --setup --build lowrisc:systems:chip_earlgrey_verilator./meson_init.shninja -C build-out all第七步输入以下指令进行跑仿真。cd $REPO_TOPbuild/lowrisc_systems_chip_earlgrey_verilator_0.1/sim-verilator/Vchip_earlgrey_verilator\ --meminit=rom,build-bin/sw/device/boot_rom/boot_rom_sim_verilator.scr.39.vmem--meminit=flash,build-bin/sw/device/examples/hello_world/hello_world_sim_verilator.elf\--meminit=otp,build-bin/sw/device/otp_img/otp_img_sim_verilator.vmem 这个时候我们可以在工作界面上看到类似以下log 为了看运行的结果用screen /dev/pts/4进行查看。由于开源软件运行的效率会比较低,跑仿真的时间会比较久,所以需要耐心等待一下。 如果想看信号波形,在上面跑仿真的命令里面加—trace,即可生成波形。然后用gtkwave sim.fst 查看波形,其效果如下。写在最后,opentitan这个项目的开发流程还是比较全的,对于芯片从业者是一个很好的学习资源,特别是里面验证的介绍很多公司都可以借鉴。经常看到很多芯片初从业人员没有什么项目经验,如果能够吃透这个项目那你在找工作的时候是非常有竞争力的。通过这篇文章我希望能够将做芯片这件看起来门槛很高的事情简单化,让更多的大学生甚至中学生都能参与其中,让更多的人更早的去了解知道计算机的工作原理。来自微信
2025年08月16日
4 阅读
0 评论
0 点赞