CNRV

为推广RISC-V尽些薄力

View the Project on GitHub

RISC-V 双周简报 (2017-08-31)

RV新闻

RISC-V并入newlib主线

newlib 的 RISC-V port 已经被正式合并。详情可见https://goo.gl/37oeZG

FreeBSD 主线更新至 RISC-V priv. spec 1.10

最近,FreeBSD更新至 RISC-V priv. spec 1.10,现在支持Spike和Rocket-chip。详情可以参考这裡:https://wiki.freebsd.org/riscvhttps://svnweb.freebsd.org/changeset/base/322361

另外11月的BSDTW17, 也会有两个关于RISC-V的报告。Ruslan Bukin、Arun Thomas 都会出席,有兴趣的可以参加。

RISC-V LLVM进度更新

Alex Bradbury在https://github.com/lowRISC/riscv-llvm/issues上发布了一系列的LLVM子工程,以便更多的人参与到RISC-V的LLVM支持工作中。

当前正在进行的是让LLVM支持RV32I,相关的补丁已经送到LLVM社区进行审议,其中7个已经被接受,8个正在征求意见。

正在开发中的RISC-V LLVM现在已经通关过了1352个GCC测试集中的1315个,未能通过的测试例子中32个编译时错误,5个运行时错误。

具体信息请参考Alex Bradbury的邮件:https://goo.gl/sGeWcy

SiFive发布TileLink说明文档 v1.7

此次发布的分档比较详细地介绍了当前被使用于Rocke-Chip的第二版TileLink片上总线。

TileLink片上总线是Rocke-Chip用于连接各级缓存和外设的总线,相比AMBA, Wishbone, Avalon, CoreConnect等等片上总线,TileLink直接在总线协议的层面上支持缓存一致性的各种操作,是基于缓存的各种要求而重新设计的片上总线。

相比TileLink第一版,第二版有以下几点改进:

具体信息请参见说明文档:https://www.sifive.com/documentation/tilelink/tilelink-spec/

另外:CNRV社区也正在积极的筹备翻译这个Spec,欢迎各位关注和参与

第29届 Hot Chips上的RISC-V相关新闻

在刚刚结束的Hot Chips 2017上,有不少关于RISC-V的消息,分别是

EETime对Celerity做了简短的报道

Of three academic papers on machine learning chips, the most intriguing was Celerity. Teams of grad students spread across four universities went from delivery of a 16nm TSMC PDK to tapeout of a 25mm2 device in nine months.

Celerity packs into its 360 million transistors 511 RISC-V cores and a custom neural network accelerator. The cores are split into a 496-unit array running at 1.05 GHz and five Linux-capable Rocket cores along with the accelerator running at 625 MHz.

Link: http://t.cn/RNVaTIK

值得注意的是,其具有神经网络功能的加速器是基于RoCC接口标准实现的。后续编辑部会持续关注这个项目。

关于GRVI处理器,Jan Gray主要列出了未来的一些规划和进行中的工作,包括支持更多的FPGA开发平台(如PYNQ等)、一些性能优化。

对于大家所关注的这么多的核心软件如何开发的问题,在其poster页面中这样提到:

Accelerated parallel programming models

  • SPMD/MIMD code w/ small kernels, local or PGAS shared memory, message passing, memcpy/RDMA DRAM
  • Current: multithread C++ with message passing runtime, built with GCC for RISC-V RV32IMA
  • Future: OpenCL, ‘Gatling gun’ packet processing / P4, message passing / streaming data / KPNs
  • Accelerated with plug-in-custom FUs, RAMs, AXI cores

Link: http://t.cn/RNVaizC

DRAPER分离其安全处理器研究组成立Dover Microsystems公司

Dover的产生来源于美国国防部国防高等研究计划(DARPA)下的CRASH(Clean-Slate Re-design of Adaptive, Secure Hosts)计划。

该计划致力于回答一个问题:如果我们能抛开现有计算机体系结构的研究成果,重新设计一个本质上就安全的计算机,我们该怎么做? 基于这个问题,世界上的多个研究小组开展了多年的研究,提出了多种新的计算机架构。 其中源自于MIT的DRAPER实验室设计了Inherently Secure Processor(ISP)。 现在,DRAPER将ISP分离出来,成立了新的Dover Microsystems公司,用ISP来服务于商业应用。 Dover最新的Dover芯片在开源RISC-V处理器内部添加了一个协处理器来加强处理器的安全特性(小编注:该协处理器使用tagged memory进行同步的meta-data processing)。

The Inherently Secure Processor can be implemented with any Reduced Instruction Set Computer (RISC) processor and is currently optimized for the latest generation RISC-V architecture as a co-processor solution. It can be easily customized for individual customer’s embedded systems, and features adaptable and updatable technology, providing customers with longevity and resiliency into the future.

http://www.prweb.com/releases/2017/08/prweb14603204.htm

技术讨论

到底riscv**-unknown-elf是不是bare-metal的交叉编译器?

估计大多数人和我一样都觉得,难道不是吗?嗯,还真不一定是。

GNU MCU Eclipse RISC-V Embdedded GCC的作者Liviu Ionescu最近就提出了这么个问题,然后引起了激烈的讨论。 看起来,现在RISC-V提供的两个GCC工具链其实是这个样子的:

如果某一个嵌入式平台需要实现自己的底层调用,现在的办法一般是替换底层的ABI实现,但保留由libgloss定义的接口。 如果希望进一步连ABI都彻底抛弃而直接调用硬件,现在只能通过附加的gcc参数来实现,比如-nostdlib -lc (不使用标准库但是用libc)。

为了提供针对最基础嵌入式平台的bare-metal环境,SiFive的Palmer Dabbelt现已着手提供一个新的gcc工具链,暂且命名为riscv**-unknown-none

相关讨论:

CSR操作和边界(Barrier)

在C代码中如何读写CSR?这个问题其实很简单,使用预提供的嵌入式汇编代码。 但是,这就够了吗?不一定哦。让我们来看看下面的代码:

__asm__ volatile ("csrci mstatus, 0x8");  // Disable interrupt (mie = 0)
mtime_value = *MTIME_PTR;
__asm__ volatile ("csrsi mstatus, 0x8");  // Enable interrupt (mie = 1)

看起来没啥问题。不过Benjamin Herrenschmidt提问,GCC或者处理器可能调换指令顺序把MTIME_PTR的读取挪到CSR读写外吗?呃,还真的可以!

为了解决这个问题,Palmer Dabbelt把预提供的嵌入式汇编改成了:

#define csr_set(csr, val)					\
({								\
	unsigned long __v = (unsigned long)(val);		\
	__asm__ __volatile__ ("csrs " #csr ", %0"		\
			      : : "rK" (__v)			\
			      : "memory");			\
})

在汇编中添加了”memory”这个clobberclobber是嵌入式汇编的可选参数,用于标注那些非输入或输出但是被嵌入的汇编修改的寄存器,这样编译器就可以避免使用这些寄存器。”memory”是一个特殊选项,用于说明嵌入的汇编中有内存操作,所以编译器不能将代码随意调换顺序,相当于针对编译器的memory barrier。但是,这里只是避免了编译器调换指令顺序,乱发处理器仍然可能在运行时调换指令顺序,这个就得依赖于处理器内部的依赖检查逻辑了。对于上面的例子,依赖关系是内存读写依赖于CSR读写。这看来还真的不是个简单问题哦。

相关讨论 https://goo.gl/LJTfBe

关于多核缓存一致性具体实现的讨论

sxu55最近向lowRISC提出一个问题,认为lowRISC所使用的L2实现存在死锁。 在多核系统中,假设一个L2为了回写缓存块A而询问所有L1,同时一个核正在回写缓存块B,并且A和B属于同一个set,有可能由于互相等待造成死锁。 这里的关键问题就是在缓存一致控制器的具体实现时,所有的缓存操作都不再是书本上原子操作,而被拆分成多个子步骤的操作序列。 如果两个操作序列发生交织,则可能造成死锁或数据丢失。最后讨论的结果是这个死锁的条件是不成立的,lowRISC的L2考虑到了这个具体的死锁状况。 不过相关的讨论还是很有意义的,特别是关于基于TileLink的一致性L2的实现。

具体信息请查阅lowRISC issue #67 https://git.io/v5YAb

代码更新

Chisel/FIRRTL 即将支持完整的无连接端口清理和跨边界常数优化

为了代码的可读性,我们一般会在硬件设计中保留可选端口和常熟定义,将相关的优化扔给综合软件完成。 Chisel/FIRRTL将更高抽象级别的Chisel转化为Verilog的同时,也可以做相关优化。 Chisel/FIRRTL已经默认去除无连接的端口。最新的FIRRTL也已经开始支持关于常数的跨模块边界优化。

具体信息请查阅:

SiFive Freedom平台最近被更新到主线

SiFive的Freedom平台在沉寂了很久之后终于得到了更新(尽管是一位实习生完成的),其变化包括:

Repo: https://github.com/sifive/freedom

市场相关

Codasip发佈新的 RISC-V 处理器IP Bk-1

The Bk-1 processor was designed to provide impressive 32-bit performance, small code size, and minimal power, area, and cost. In its basic configuration, the Bk-1 starts at 9k gates while delivering a maximum clock frequency of up to 350 MHz in a 55nm process. The Bk-1 has an optional power management unit, JTAG debug controller, and bridges to the AMBA buses so it can be easily integrated into existing Arm designs.

连接:http://t.cn/RNbiFNI

相关报道

LoFive: Hackaday.io上的新项目

Michael Welling在Hackaday.io上开始了一个新的项目,名为LoFive。是一块搭载SiFive FE310 MCU的迷你小板,有兴趣的可以去关注下。

Link: https://hackaday.io/project/26909

CNRV社区活动

CNRV社区最近发起了两个小的翻译项目,欢迎关注:

暴走事件

九月

十月

十一月

招聘简讯

CNRV提供为行业公司提供公益性质的一句话的招聘信息发布,若有任何体系结构、IC设计、软件开发的招聘信息,欢迎联系我们!


整理编集: 宋威,郭雄飞,黄柏玮


欢迎关注微信公众号CNRV,接收最新最时尚的RISC-V讯息!

CNRV微信公众号


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。