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

RISC-V --rocket-chip generator介绍及其仿真使用

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-8-24 12:08:20 | 显示全部楼层 |阅读模式

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

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

    x
    本帖最后由 皋陶 于 2020-8-27 14:57 编辑

    最近工作使用 rocket-chip generator 仿真非极大值抑制算法(C语言编写),分析其时序模型和riscv汇编指令,这里将rocket-chip generator的使用方法总结一下

    说明:使用的rocket-chip generator的版本为:a8d573beeb8a33bb5dac0673ec68b82852a24d63


    rocket-chip generator介绍
    • rocket-chip generator的一级目录结构:

      bootrom : 在BootROM的bootloader第一阶段所使用的代码
      csrc Verilator: 仿真用的C代码
      emulator Verilator :用来编译和跑仿真的工作目录
      project Scala: 构建工具sbt用来构建Scala的工作目录
      regression: 定义的持续的整合和一套nightly regression
      scripts: 用来分析仿真的输出或者处理代码文件的内容
      vsim VCS: 用来编译和跑仿真的工作目录
      vsrc Verilog: 代码,包含接口、测试框架和Verilog过程接口VPI
      chisel3 :包含Chisel自定义的各种类和规则,用来生成RTL
      firrtl: 存放Chisel编译器处理代码而生成的一种中间表示,由中间表示能生成Verilog代码或C++代码
      hardfloat: 用chisel写成的浮点单元
      riscv-tools: 支持RISC-V的一套软件,与生成RTL有关
      torture: 用来生成压力测试所需的一些随机指令
      src/main/scala: 构筑rocket-chip的代码



    • rocket-chip generator电路构筑代码的目录结构:

      amba amba: 协议的实现代码,包括AXI4,AHB-lite,APB
      config: 提供能配置Generator的Scala的接口
      coreplex: 包含Rocket核、系统总线、coherence agents、debug设备、中断处理、面向外部的外设、时钟同步处理和TileLink到外设总线转换
      devices: 一些外设,包括debug模块和各种挂在TileLink的从设备
      diplomacy: 用来扩展Chisel,通过允许对硬件进行两个阶段的阐述,可以让参数在模块之间协调传递
      groundtest: 生成可综合的硬件测试平台,通过发出随机的访问存储器指令流,进行对核外的存储器系统进行压力测试
      jtag: 用来生成JTAG总线接口
      regmapper: 用来生成带有能访问内存映射寄存器的标准接口的从设备
      rocket: 用来生成顺序核Rocket、L1指令cache和L1数据cache
      tile: 包含可以与Rocket核组成tile的组件,如FPU和RoCC协处理器
      tilelink: 用来生成TileLink总线(协议),包含一些适配器和转其他总线(协议)的转换器
      system Rocket Chip的顶层代码包,同时也是用作测试的硬件平台的顶层代码包
      unittest: 用作生成硬件测试平台来测试单独的一个个模块
      util: 提供一些能被其他代码包调用的通用的Scala和Chisel结构



    rocket-chip generator使用
    • 在src/main/scala/coreplex/Configs.scala的类都是构筑rocket-chip的“部件”。需要在src/main/scala/system/Configs.scala中将“部件”类和“底板”类BaseConfig组合起来,每一个都是一种配置方案。具体的方法就是利用“++”这个函数,写法参考该文件的其他类写法即可。
      生成Verilog代码及测试用的入口用到的命令:

      cd emulator
      make CONFIG=DefaultConfig



    • 其中CONFIG=后面接的是在src/main/scala/system/Configs.scala写好的类名。若编译没有错误,则会生成以下文件和文件夹:

      国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(1)

    • generated-src文件夹包括生成的Verilog文件和一些测试用的文件,verilator文件夹包含仿真工具verilator的源码和安装文件。emulator-freechips.rocketchip.system-DefaultConfig是可执行文件,是测试程序的入口。图中圈着的文件夹是测试进行的环境,.v文件就是生成的rocket-chip的Verilog代码。

      国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(2)



    rocket-chip generator仿真C或C++程序

    1. 使用risc-v工具链编译仿真
    • 写好的一个测试的C或C++程序如下:

      国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(3)

    • 使用命令编译测试程序:

      riscv64-unknown-elf-gcc helloworld.c -o helloworld

    • 然后将生成的helloworld可执行文件放到emulator工作目录,再在emulator工作目录下执行命令:

      ./emulator-freechips.rocketchip.system-DefaultConfig pk helloworld

    • 等待几分钟(具体等待时间取决于程序的大小)后,终端输出“Hello World”



    2.利用rocket的方法如下(比之前的跑的更快,而且能看波形)

    • 在rocket-chip/riscv-tools/riscv-tests/benchmarks中新建测试程序的文件夹helloworld,并在其中写好一个测试程序helloworld:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(4)


    • 修改在rocket-chip/riscv-tools/riscv-tests/benchmarks中的Makefile,修改其中的bmarks变量,使其新值为新建的文件夹名字helloworld:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(5)


    • 退出到rocket-chip/riscv-tools/riscv-tests/benchmarks执行命令make,得到.riscv可执行文件:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(6)


    • 将.riscv文件移到rocket-chip/emulator文件夹中:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(7)


    • 执行命令:


    1. ./emulator-freechips.rocketchip.system-DefaultConfig helloworld.riscv
    复制代码

    • 等待少于一分钟的时间,得到输出:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(8)


    • 执行命令:


    1. ./emulator-freechips.rocketchip.system-DefaultConfig +max-cycles=100000000 +verbose helloworld.riscv 2> helloworld.riscv.out
    复制代码

    • 得到指令执行过程信息:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(9)

    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(10)


    • 执行命令:


    1. ./emulator-freechips.rocketchip.system-DefaultConfig-debug +max-cycles=100000000 --vcd=helloworld.riscv.vcd helloworld.riscv
    复制代码

    • 得到.vcd波形文件:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(11)


    • 双击打开即可看到波形:



    国内芯片技术交流-RISC-V --rocket-chip generator介绍及其仿真使用risc-v单片机中文社区(12)

    本篇完,感谢关注:RISC-V单片机中文网




    上一篇:RISC-V 常见指令
    下一篇:井底看世界----物联网之蓝牙mesh、NB-IOT、RISC-V
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

      离线 

    该用户从未签到

    发表于 2021-5-4 11:04:34 | 显示全部楼层
    debug的那rocketchip是怎么生成的啊
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

    该用户从未签到

    发表于 2021-5-4 11:04:37 | 显示全部楼层
    debug的那rocketchip是怎么生成的啊
    全球首家只专注于RISC-V单片机行业应用的中文网站
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

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



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

    GMT+8, 2024-4-26 21:52 , Processed in 0.527285 second(s), 53 queries .

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