过去的半个月我们看到了不少的好消息。RISC-V 基金会迁址到了瑞士之后,今年 Board of Directors 开放了3类共5个席位公开竞选。在竞选提名的最后一天,我们看到了两位中国大陆的竞选者:中科院计算所包云岗老师参加了 Strategic & Premier TSC 分组的竞选,与其他4位候选人竞争3个席位;OSDT社区负责人、同时是PLCT实验室的发起人吴伟同学参加了 Community Individual 代表的竞选,与另一位国外候选者竞争1个席位。而当前的RISC-V基金会中,已经有了数位华人董事,大陆和台湾地区的华人加起来,已经在董事会中有了可观的席位比例。
另一个好消息是我们对国内本土芯片厂商的支持也开始有阶段性的成果:我们基于LLVM实现的RISC-V向量扩展指令支持,目前已经可以全部正确编译和跑通官方标准规范中的例子程序;对芯来科技的几款 SoC 的 QEMU 虚拟化支持,功能接近完成,代码已经开源(虽然 helloworld 可以跑但是中断的支持还没有搞定,还要等几天);V8 for RISC-V 项目即将跑通 helloworld.js,在跑通之后推进速度就快了。
PLCT 在开源领域做的工作,多数都是从追随开始,逐步开始追赶和超越业界 state-of-the-art 水平。RISC-V 领域对于中国未来十年的信息产业有着战略上的重要性,而现在有很多软件尚未被适配和开发,谁先做到谁就是世界第一个实现的。这也是 PLCT 在 RISC-V 领域投入大量人力丰富生态环境的原因之一。我个人对于国内近几年来在软件领域流行的「自主可控」的说法抱有直接的排斥感:现在软件领域的「自主可控」已经异变为「在国内 git clone 一套然后就自主可控了」。别的重工业等领域或许存在短期内无法赶超的问题,而信息产业、尤其软件行业,本身并不存在强调自主可控的限制或劣势。你想要可控,你就去成为这个领域的世界第一。在软件领域,尤其是开源软件领域,这并不是不可能达到的高度。在软件领域的「自主可控」变成了弱者用以自怜的梳妆镜,更加不幸地是,已经变成骗子的遮羞布。
你想要一个领域可控,你就去成为那个领域的世界第一。就像PLCT实验室一样,去学习,去融入,去竞争,去赢。
芯来(Nuclei)是 RISC-V 供应商,为嵌入式应用提供成熟的 RISC-V 解决方案。根据计算能力的不同,SoC产品分为 N100、N200、N300、N400、N500和N600等系列,旨在成为 Arm Cortex M 系列的替代产品。而 QEMU For RISC-V 为 RISC-V 指令集提供了全系统和用户模式的仿真,当前主要包括几种Soc模拟 (spike_v1.9.1、spik_v1.10、sifive_e、sifive_u、virt) 的模拟。
PLCT实验室实习生高志远同学正在开发对 Nuclei N200 和 N300 系列(RISC-V嵌入式SoC系列)的支持,这是 QEMU RISC-V 仿真中的新的机器选项,代码开源形式开发中,预计7月上旬可以完成。虽然 Nuclei N200 N300 系列在QEMU中共享使用了许多RISC-V的基础实现和部分SiFive外设实现,但它在构建SoC方面也有自己的特色。N系列采用 ECLIC(增强型内核级中断控制器)—— 是标准RISC-V软件中断处理程序的增强版本。中断配置有编号、级别和优先级。ECLIC还实现向量快速中断、嵌套中断、中断尾链。这与QEMU模拟的其他RISC-V机器的 plic、clint 有所不同。为了支持上述硬件功能,Nuclei N 扩展了 Priv ISA v1.10 定义的CSR寄存器,其中包含数十个自定义寄存器。
围观地址(目前还是WIP,7月上旬预计完成):
https://github.com/isrc-cas/plct-qemu/tree/plct-nuclei
如果你感兴趣,欢迎加入 QEMU For RISC-V 计划,一起做些有意思的事情!如果你是在校学生的话,可以以实习生身份加入,我们还可以发一点补贴。如果已经工作了,可以以志愿者身份贡献力量。
软件所PLCT实验室基于LLVM实现的RISC-V向量扩展指令支持,目前已经可以全部正确编译和跑通官方标准规范中的例子程序。🎉
欢迎使用,地址在老地方:
https://github.com/isrc-cas/rvv-benchmark
同时我们也开放了使用的 benchmark(整理自 RISC-V V 扩展的官方文档)
https://github.com/isrc-cas/rvv-benchmark
本次除RVV之外没有其他新增内容。
永恒天平再生产至今已经完成了半年前5份测评的复现,复现过程中的源代码、构建系统修改、原始数据等都已经更新到了永恒天平项目的仓库。
近期已经开始进行自动化测评系统的搭建和维护,初步成果是完成了一个小的自动化测试脚本,可以自动获得 RISC-V 官方工具链代码更新,并自动进行 codesize 对比,脚本代码还在完善中。
由于做这个项目的陈影同学近期要准备玄铁C910的LLVM实现的PPT,去参加CRVA组织的年中RISC-V技术讨论会,在7月18日之前估计会放慢进度。
https://github.com/isrc-cas/eternal-balance
如果你感兴趣,欢迎加入永恒天平项目,一起做些有意思的事情!
乐观估计,V8小队距离跑通 helloworld.js 可能还有一到两个PLCT观测点。
同时,感谢 RedHat 公司支持的 Fedora 社区制作维护的 Fedora Developer Rawhide RISC-V 版本, 感谢 RISC-V 大使傅炜(Fu Wei)工程师指导,V8团队目前已经从 sifive yocto linux 全部转入 Fedora Developer 20191123 版本。在 QEMU 5.0 和 Hifive Unleashed 开发板上都运行良好。有全套开发调试工具的 Developer 版本就是香,省了很多折腾。
V8团队使用的配置和环境可以通过以下脚本获得:
https://github.com/isrc-cas/PLCT-Toolbox/blob/master/deploy_riscv64fedora_qemu.sh
移植进展:
- 完成全部68个ASM Builtins的实现。
- 完成RV64G指令集反汇编器的实现。
- 对V8进行面向 helloworld.js 程序的裁剪,在对照架构上跑通,开始在模拟器上调试RISCV64的d8程序。
- 继续完善 Codegen、MacroAssembler和Assembler。
参见「本期亮点」。
技术细节上,扩展了 Nuclei SOC/CPU 类型的支持,主要覆盖 N200、N300 系列。针对芯来科技的 gd32vf103/hbird SOC 进行了模拟,主要实现 UART、 GPIO、TIMER、ECLIC 等外设或者机制;其中,ECLIC管理外部中断、计时器中断、软件中断并且带有中断咬尾机制,实现上具有一定难度,仍在修改测试中,预计本月上旬完成,其他部分代码将在本周发布(repo链接参见「本期亮点」)。
吐槽下: Hello World Debug 过程中问题多多,QEMU主线可能由于 priv 版本更新切换问题,riscv_cpu_realize 实现默认 priv 1.11.0,这导致 mucounteren 这种版本相关的CSR不可用;并且其中 feature 设置默认了 MMU、PMP功能,这使得 CPU instance_init 的设置被覆盖,怪不得总觉得打开方式不对(
PLCT实验室的史宁宁依然每周在更新方舟编译器社区周报(OpenArkCompiler Weekly),目前已经更新到第十七期。
方舟编译器周报每周日晚上通过知乎、Bilibili和邮件列表发布。
知乎:https://zhuanlan.zhihu.com/openarkcompiler
Bilibili:https://www.bilibili.com/read/readlist/rl199373
邮件列表及其订阅方式:https://gitee.com/harmonyos/OpenArkCompiler/issues/I1EWAX
当前 Spike snapshot 机制支持项目已正式启动,该项目将新增快照技术以方便 RISC-V 程序调试,欢迎感兴趣的道友参与。
本项目由PLCT实验室实习生王萌同学(LV3级)作为主力开发。进度比较快。乐观估计可能7月15号说不定就可以看到一些demo了。
当前 QEMU RVV 指令集支持项目已正式开始,该项目初步目标为配合 LLVM RVV 支持项目,在QEMU中提供支持 0.9 版本RVV指令集的测试平台,欢迎感兴趣的道友参与。
MLIR的GSoC 2020项目MLIR Python Bindings已完成如下绑定:
Operation | Region | Block |
---|---|---|
getName | empty | getParent |
getParentRegion | front | getParentOp |
getParentOp | back | isEntryBlock |
isProperAncestor | getParentRegion | args_empty |
isAncestor | getParentOp | getNumArguments |
isBeforeInBlock | getRegionNumber | front |
dump | isProperAncestor | back |
getNumOperands | isAncestor | findAncestorOpInBlock |
getNumRegions | findAncestorBlockInRegion | isOpOrderValid |
getRegion | verifyOpOrder | |
hasSuccessors | getTerminator | |
getNumSuccessors | hasNoPredecessors | |
isCommutative | getNumSuccessors | |
isKnownTerminator | dump | |
isKnownNonTerminator | ||
isKnownIsolatedFromAbove | ||
hasOneUse | ||
use_empty | ||
isUsedOutsideOfBlock |
上述接口为现阶段绑定的接口,接口的最终形式还需经过后续测试以及进一步考量。
GitHub仓库:https://github.com/zhanghb97/mlir-python-bindings
搜集整理基于树莓派开发底层裸机驱动程序的相关知识与技能,希望对热爱计算机技术,渴望探索底层开发的同学提供帮助,进而能够用树莓派这款现代超级流行的硬件平台替代经典的 51 单片机来学习裸机开发。
知乎贡献第二篇随笔,《树莓派上 USB 子系统拓扑浅析》。简单介绍和记录了树莓派(以 3B 为例)上 USB 模组的物理拓扑逻辑组成。
[1] PLCT许愿池2020计划 https://github.com/isrc-cas/PLCT-Weekly/blob/master/RISCV-DevTools-Wishlist-2020.md
[2] PLCT2020年开源路线图 https://github.com/isrc-cas/PLCT-Weekly/blob/master/RISCV-Roadmap-2020.md
[3] PLCT南京小队隶属于软件所南京分院智能软件研究中心。
[4] 面向国内 RISC-V 芯片厂商的 QEMU 支持计划 https://github.com/isrc-cas/PLCT-Weekly/blob/master/PLCT-QEMU-Support-Project-for-Domestic-RV-Vendors.md
[5] PLCT OpenDay 2019 https://github.com/isrc-cas/PLCT-Weekly/blob/master/PLCT-OpenDay-2019.md
[6] RISC-V Vector Extension Intrinsic RFC 开始活跃更新,我们号召国内厂商抱团参与 https://mp.weixin.qq.com/s/qAQmXwhCccVGms90lJzz2g
[7] PLCT实验室的开放职位 https://github.com/isrc-cas/PLCT-Weekly/blob/master/open-positions.md
[8] [PLCT] 面向国内 RISC-V 芯片厂商的 QEMU 支持计划 https://mp.weixin.qq.com/s/e5dDHOUY6oz3KBhqCRn5nw
[9] https://github.com/isrc-cas/PLCT-Weekly/blob/master/interns.md
- PLCT Weekly https://github.com/isrc-cas/PLCT-Weekly
- C910 LLVM 支持 https://github.com/isrc-cas/c910-llvm
- RISC-V Vector Extension Support(rvv-llvm) https://github.com/isrc-cas/rvv-llvm
- V8 for RISC-V https://github.com/isrc-cas/v8-riscv
- 永恒天平 https://github.com/isrc-cas/eternal-balance/
- PLCT 公开报告 https://github.com/isrc-cas/PLCT-Open-Reports
- QuickJS for RISC-V https://github.com/isrc-cas/quickjs-riscv
- PLCT-QEMU https://github.com/isrc-cas/plct-qemu
- Flounder https://github.com/isrc-cas/flounder
- OpenCV for RISC-V https://github.com/isrc-cas/opencv-riscv
- pacific(方舟编译器玩具运行时) https://github.com/isrc-cas/pacific
- rvv-benchmark https://github.com/isrc-cas/rvv-benchmark
- 工具箱 https://github.com/isrc-cas/PLCT-toolbox