从RISC到RISC-V
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从RISC到RISC-V相关的知识,希望对你有一定的参考价值。
参考技术A 身处电子行业或电子类的学生对RISC-V不太陌生,这个词在2018年可谓是霸占了大量的篇幅啊。今天就让我们一起从它的字面意思入手看看这个RISC-V是个“神马玩意”首先我们从名字的第一个单词入手,RISC的较官方解释为 精简指令集计算机 , 它具有一致的指令的格式,一致的所有指令的指令周期,并且可采用流水线技术。许多早期的RISC设计有着不好的缺点——转移延时槽,转移延时槽是指一个跳转或转移指令之后的指令空间。无论转移是否发生,空间中的指令将被执行(或者说是转移效果被延迟)。这些指令让CPU的算术和逻辑单元繁忙比通常执行转移所需更多的时间。现在转移延时槽被认为是实现特定RISC设计的副作用,现代的RISC设计通常避免了这个问题(如PowerPC,最近的SPARC版本,MIPS)。
RISC-V(读作RISC-FIVE)指令集是基于精简指令集计算(RISC)原理建立的开放指令集架构(ISA),RISC-V是在指令集不断发展和成熟的基础上建立的全新指令。RISC-V指令集完全开源,设计简单,易于移植Unix系统,模块化设计,完整工具链,同时有大量的开源实现和流片案例,已在社区得到大力支持。其优势在于完全开源,架构简单,易于移植Linux和Unix,设计模块化,工具链完整。
基于上述分析,我们为什么会在短时间内在这么多途径听到RISC-V呢。这是由于RISC-V作为一种全新的芯片架构,为中国自主设计制造CPU打开了不小的可能性。微处理器架构被ARM和Intel x86垄断的局面极有可能被RISC-V的横空出世而打破。有人说,RISC-V给了中国机会,大家重新出发中国不会差。在我看来,机会也是实打实的机会摆在我们面前,我们没有理由去浪费摆在面前的机会。国内各大公司早已盯上了RISC-V,华米科技早已发布基于RISC-V家都的黄山一号芯片。但是我们也不能过于乐观,重新出发确实不假,但是中国目前芯片制造无论在工艺上还是在IP研发上都与欧美之间存在差距。国产主流微处理器核心还是基于这些大公司的技术。而且海外的公司手中抓住太多的知识产权和专利,这都会让我们在芯片制造的路上多出些汗。
[RISC-V]移植rtthread nano到risc-v芯片
本文由RT-Thread论坛用户@DENGCHOW原创发布:https://club.rt-thread.org/ask/article/3187.html
“这么说吧,就是为了这口醋,我才包的这顿饺子。”
仓库地址:https://gitee.com/dengchow/yuheng-riscv-soc.git
〇、前言
本文记录的是在 risc-v 芯片上移植 rt-thread nano 的过程。
使用到的 risc-v 芯片是玉衡(YuHeng,yuheng-riscv),一款并不存在于现实世界的芯片,同 picorv32 和 darkriscv 一样,仅存在与仿真环境中。
一、硬件平台
玉衡(YuHeng,yuheng-riscv)基于开源 RISC-V 指令集架构,是一款极简的 32 位 RISC-V 处理器核。仅用于检测和实验。
玉衡不具备任何商用价值,但可以作为很好的学习平台。
使用玉衡,能够很好的了解计算机体系结构、操作系统、通信协议、编译原理等相关知识。
另外,所有的运行环境均为精简搭建,因此还可以很轻易的熟悉搭建过程。
不仅会用,还要知道为什么会用。是当初设计的初衷。
特点与功能
-
支持 RV32IMFD 扩展指令集,通过RISC-V指令兼容性测试
-
采用五级流水线设计:IF、ID、EX、MEM、WB
-
采用自定义的总线设计:RBM(RISC-V Bus Matrix)
-
支持中断:矢量中断和非矢量中断
-
支持多种外设: UART、TIMER 等
-
支持 C 程序运行
-
支持 RT-Thread Nano 3.1.5
-
支持 UART 模拟器,可在仿真环境中进行调试
-
…
二、软件平台
rtthread nano 的版本是 3.1.5,直接从官网上下载的。
之所以不使用完整版 rt-thread,是因为我个人认为 rt-thread 的精华是 kernel 和 FinSH。
因此 rtthread nano 足够了。
其实根本的原因是 YuHeng 上只有最最基本的外设,除了 UART 就是 TIMER。惭愧。
三、移植过程
移植过程比较特殊,因为是先有的 rtthread nano,然后才去改造的 yuheng-riscv。
最终效果
-
使用项目中给出的运行脚本,可以直接创建出 Vivado 工程。
-
为了方便 Simulation,设计一个 uart_monitor,有了它之后,就可以直接在 testbench 中捕捉 UART 的输出。
- 仿真是比较慢的。
- 由于是在 Vivado 上进行 Simulation,可以监视任何一个信号。
- 从 wave 和 log 两个角度进行结果输出。
接下来,介绍一下移植过程。
移植过程
rtthread 调度线程的时候使用到 rt_hw_context_switch
和 rt_hw_context_switch_to
两个函数。
而这两个函数实际并没有真的去切换线程,在 ARM Cortex 中会触发 PendSV 中断,在 PendSV 中完成的线程切换。
在中科蓝讯的 ab32vg1 中,是有一个 low_prio_irq 的,作用和 PendSV 是一样的。
很尴尬, yuheng-riscv 中是没有类似的设置。
在设计 yuheng-riscv 是只有非矢量中断的,即只有一个固定的中断 trap_handler,然后通过软件来构建中断向量表。
如 sdk\\rtthread-nano\\interrupt.c
中所示。
本着尽量不改动 rtthread nano 源码的出发点,决定对 yuheng-riscv 的中断机制进行修改。
- 增加硬件中断向量表。
- 增加 soft_handler 中断用于线程切换。
剩余的移植工作如 tick 的添加, UART 的添加,这个就不做介绍了,毕竟 rtthread nano 中通过 TODO 都进行标识了。
一步一步的修改添加即可。
四、总结
总之,rtthread 还是很友好的。
整体来说 yuheng-riscv 还只是一个 demo,功能是有了,性能还是差不少。
“醋还行,饺子差点。”
以上是关于从RISC到RISC-V的主要内容,如果未能解决你的问题,请参考以下文章