查看: 2607|回复: 2
收起左侧

自制RISC-V源码与设计流程案例分析

[复制链接]

  离线 

  • TA的每日心情
    拍拍
    2022-6-27 11:09
  • 签到天数: 25 天

    [LV.4]

    发表于 2021-3-18 21:05:06 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 sky 于 2021-3-18 21:04 编辑

    一、Overlay简介

    RISC++-V-On-PYNQOverlay实现了在PYNQ-Z2板上的RISC-V处理器及工具链集成,并提供了完整的RISC-V源码与设计流程,得益于PYNQ软件框架,其支持在JupyterNotebook对RISC-V进行编译、调试与验证,即可以在JupyterNotebook上编写一段C/C++/RISC-V汇编程序,将编译后的二进制文件放到picoRV32上运行。

    以下两张图是本Overlay的系统框图,其中picoRV32是一个开源的RISC-V核,它具有占用资源少的特点,并且它自带AXI接口,可以方便地使用Xilinx提供的各种基于AXI总线的IP。本项目有两个工程,它们的区别主要是picoRV32接的RAM:上图只使用BRAM,而下图同时使用到了BRAM和外部DRAM。

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(1)

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(2)



    二、快速开始

    -环境需求PYNQV2.4。

    -在PS端,我们需要编译安装RISC-V工具链和对应的库。

    Github内的项目文件Clone到本地。

    gitclone

    https://github.com/Siudya/RISC-V ... linx/RISC-V-On-PYNQ

    在RISC-V-On-PYNQ/notebooks/tutorial中有5个Notebook,包含了Overlay完整的部署流程。

    鉴于从零开始部署的时间会较长,所以我们也提供了完整的镜像文件,直接烧录到SD卡就可以运行(注:提供的ext4分区剩余容量较小,请用户根据需要自行调整)。

    在OpenHW的远程PYNQ实验平台上也已经为大家安装好了环境,可以直接使用。

    三、示例Notebook

    装好Overlay后,打开RISC-V-Examples/PicoRV32ProcessorMixed-MemoryProcessorDemo.ipynb,这是使用DRAM和BRAM混合储存器的示例工程。实际上代码与使用只BRAM的工程类似,只不过使用了不同的bit文件。

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(3)


    开始时下载bit文件,在这个过程中所有驱动都会注册完成。

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(4)


    可以用help函数查看Overlay和processor的有关信息,可以看到,这里的Overlay和processor使用了本项目设计的驱动,这说明驱动注册成功了。

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(5)


    在Notebook中包含了一段C程序,作用是返回一个数组的第二个元素。可以看到我们使用了pythonmagics来声明并编译一段C程序,这和PYNQ本身对Microblaze核的编程方法类似。然后调用processor的run方法将程序装载进RAM中来运行picoRV32。

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(6)


    我们也可以调用BRAMcontroller的mmio来看看内存的情况。在这之后也有使用C++和汇编程序的例子,这里不作赘述,读者通过执行JupyterNotebook中的代码来体验。

    四、Overlay详解

    -PS与PL功能划分

    PS部分主要是用Python通过PYNQ框架控制PL中各IP的运行。

    PL部分则例化一个pcioRV32核和和BRAM。

    -Vivado工程blockdesign介绍

    具体硬件设计是这样的:

    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(7)


    国内芯片技术交流-自制RISC-V源码与设计流程案例分析risc-v单片机中文社区(8)


    上图是项目的总体布局,下图是processor展开后的内容。

    其中BRAM是一个双口RAM,它两端连接的是PS和picoRV32。另外,可以看到PS的GPIO连接的是processor的复位端,当二进制程序装入BRAM后,复位picoRV32,使它运行程序。picoRV32运行结束后,会触发一个中断。利用这个设计,可以例化许多RISC-V核心,并让其运行独立的程序,实现一个灵活可配置的众核处理器,事实上已经有用这种方法实现了例化超过一千个RISC-V核的项目。

    在Processor内部,picoRV32通过AXI总线来访问其他IP,可以使用AXI总线来给它增加各种各样不同的外设。在这里,本项目只是添加了另一个内存(通过PS的HPAXI0接口访问内存控制器)。

    另外,这里的picoRV32核心的运行频率可以通过利用AXI总线配置时钟资源来调整。

    注意:RISC-V核的hierarchy名字必须为processor,并且processor中的复位模块必须为rscvReset。如果改动这些名字,必须修改对应的驱动源文件,否则不能正确加载驱动。

    五、OverlayAPI介绍

    在此工程中,通过riscvc、riscvcpp和riscvasm这三个pythonmagics来编译一段程序。例如:%%riscvcpptest_cppoverlay.processor。其中test_cpp是程序的名字,overlay.processor是想要写入的RISCV核hierarchy的名字。然后在本cell中编写代码,运行后将调用前面安装的RISC-V的工具链编译。

    编译成功后,利用processor的run方法运行程序。例如:overlay.processor.run(test_cpp,test_cpp_arg)。其中test_cpp是程序名字,test_cpp_arg是参数数组,它兼容numpy的类型。

    对于更详细的解释,可以参看前面的tutorial中5个notebook和项目中的.py源文件。






    上一篇:千芯科技推出了针对芯来RISC-V平台的AI部署工具包
    下一篇:如何利用RISC-V SoC同时处理5G与AI工作负载?
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

      离线 

  • TA的每日心情
    飞起
    2021-11-22 18:36
  • 签到天数: 31 天

    [LV.5]

    发表于 2021-10-20 11:57:00 | 显示全部楼层
    感谢分享
    全球首家只专注于RISC-V单片机行业应用的中文网站
    点评回复

    使用道具 举报

      离线 

  • TA的每日心情
    拍拍
    2022-10-3 08:50
  • 签到天数: 1 天

    [LV.1]

    发表于 2023-3-1 19:47:58 | 显示全部楼层
    这个不错
    全球首家只专注于RISC-V单片机行业应用的中文网站
    点评回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-20 22:24 , Processed in 1.135541 second(s), 55 queries .

    快速回复 返回顶部 返回列表