查看: 1968|回复: 0
收起左侧

Chisel3 & Scala & Rocket-chip verilog的生成

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-8-19 11:54:41 | 显示全部楼层 |阅读模式

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

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

    x
    本帖最后由 新ちゃん 于 2020-8-20 22:15 编辑

    Chisel3 & Scala & Rocket-chip verilog的生成

    首先弄清楚这三者的关系。


    Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性[1]。


    Chisel(Constructing Hardware In a Scala Embedded Language)是一种嵌入在高阶编程语言 Scala 中用来构造硬件的语言。Chisel实际上只是一组特殊的用Scala 事先定义的类、对象 和使用惯例,所以写一份Chisel程序的时候,你实际上在写一份Scala程序[2]。


    Rocket Chip is an open-source Sysem-on-Chip design generator that emits synthesizable RTL. It leverages the Chisel hardware construction language to compose a library of sophisticated generators for cores, caches, and interconnects into an integrated SoC[3].


    由上面描述,应该可以知道,Rocket Chip是一个开源的SOC生成器,可以根据自己的配置生成不同的SOC(RTL),而Rocket Chip是基于Chisel完成的,最后Chisel是在Scala中定义的特殊类和对象,因此修改Rocket Chip的源代码就是修改Scala代码,利用Chisel编译出的文件为*.fir,要将*.fir转换为verilog RTL还需要firrtl这个工具。


    Rocket Chip整个项目的Scala编译都基于sbt的,而sbt是基于java的,因此要生成Rocket-chip RTL,要先安装java,sbt,chisel3和firrtl。注意Rocket-chip RTL的生成不会用到工具链,需要编译工具链时才需要设置环境变量。


    Rocket-chip verilog RTL生成步骤:


    1、 克隆项目:


    1. $ git clone https://github.com/ucb-bar/rocket-chip.git
    2. $ cd rocket-chip
    3. $ git submodule update --init
    复制代码

    2、 安装java,下面是以Ubuntu为例子。



    1. sudo apt-get install default-jdk
    复制代码

    3、 安装sbt,安装sbt过程中可能因为网速或链接的问题会出现下载失败的现象,多试几次就好:

    1. echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
    2. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
    3. sudo apt-get update
    4. sudo apt-get install sbt
    复制代码

    4、 下载Rocket Chip项目的sbt依赖库,下载过程中可能因为网速或链接的问题会出现下载失败的现象,多试几次就好:


    1. $ cd rocket-chip
    2. $ sbt
    复制代码

    直到弹出这样的提示就证明成功了,然后输入exit退出:

    1. sbt:rocketchip>
    复制代码

    5、 编译&安装chisel3:

    1. $ cd rocket-chip/chisel3
    2. $ sbt
    复制代码

    直到弹出这样的提示就证明成功了,然后输入exit退出:

    1. sbt:chisel3>
    复制代码

    6、 编译&安装firrtl:


    1. $ cd rocket-chip/firrtl
    2. $ sbt
    复制代码

    直到弹出这样的提示就证明成功了,然后输入exit退出:

    1. sbt:firrtl>
    复制代码

    7、 生成rocket-chip verilog RTL

    1. $ cd rocket-chip/vsim
    2. $ make verilog CONFIG=DefaultSmallConfig
    复制代码

    漫长等待后,RTL生成

    1. $cd rocket-chip/vsim/generated-src
    复制代码

    这个目录下有很多刚生成的东西,下面再对这个目录生成的文件进行说明。


    生成文件的说明:

    JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式文件说明


    文件
    说明
    freechips.rocketchip.system.DefaultSmallConfig这个目录存放一些通用的*.v,如AsyncResetReg.v和plusarg_reader.v;同时也存放VCS仿真用的SimJTAG.v和 Verilator仿真用的SimJTAG.cc、remote_bitbang.cc和remote_bitbang.h。
    freechips.rocketchip.system.DefaultSmallConfig.xxx.regmap.json具体SOC设备的寄存器地址,视你生成的模块而定,会有很多个的,xxx代表不同的设备。
    freechips.rocketchip.system.DefaultSmallConfig.anno.json这个文件貌似是每个模块的一些属性说明,我也不太确定。
    freechips.rocketchip.system.DefaultSmallConfig.behav_srams.v这个是生成的rocket-chip所用到的sram,即全部memory的verilog文件。
    freechips.rocketchip.system.DefaultSmallConfig.conf用到的memory的深度、长度和块的说明。
    freechips.rocketchip.system.DefaultSmallConfig.d如果有安装VCS的话,在vsim的目录中可以直接跑VCS的仿真。这个文件就是所生成的rocket-chip RTL要跑的仿真case,即将要跑VCS仿真的全部case归总在这个文件中。因为我没有安装VCS,所以我只生成RTL。
    freechips.rocketchip.system.DefaultSmallConfig.dts这个文件的内容在make verilog完成的时候已经出现过,是你所配置的rocket-chip的设备清单。
    freechips.rocketchip.system.DefaultSmallConfig.fir通过chisel3编译出来的中间文件,需要利用firrtl将这个文件转换为真正的RTL。
    freechips.rocketchip.system.DefaultSmallConfig.graphmlgraphml一种图形描述语言,内容为xml格式,放弃解析。
    freechips.rocketchip.system.DefaultSmallConfig.json这个文件有点乱,我也不知道怎么解析,我猜是生成*.dts的过度文件,大家脑补吧。
    freechips.rocketchip.system.DefaultSmallConfig.memmap.json这个文件和上面的文件类似,不过是真的memory的。
    freechips.rocketchip.system.DefaultSmallConfig.plusArgs这个文件貌似是用于 Verilator和VSC仿真的。
    freechips.rocketchip.system.DefaultSmallConfig.rom.conf因为我生成的RTL是不包含rom的,所以这个文件是空的,我猜这个文件在生成的rocket-chip中包含rom和包含/rocket-chip/bootrom/bootrom.img时才有内容。大家可以自行尝试。
    freechips.rocketchip.system.DefaultSmallConfig.v所配置的rocket-chip verilog RTL代码,全部RTL在一个文件中。

    备注:由于我不在vsim目录中进行仿真,所以很多文件对于我来说是没有作用的,只有以下三个文件有用:freechips.rocketchip.system.DefaultSmallConfig.dts(看配置)、

    freechips.rocketchip.system.DefaultSmallConfig.behav_srams.v &

    freechips.rocketchip.system.DefaultSmallConfig.v(这两个文件是verilog RTL)。

    如果你要在vsim中进行仿真,那要再认真研究其他文件。


    参考资料:
    [1] https://baike.baidu.com/item/Scala
    [2] https://chisel.eecs.berkeley.edu/documentation.html《Chisel 3.0 Tutorial (Beta)》
    [3] https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-17.html《The Rocket Chip Generator》



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




    上一篇:chisel3的安装与使用
    下一篇:如何建立自己的RISC-V编译环境--汇编?
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

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



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

    GMT+8, 2024-4-25 21:00 , Processed in 1.085943 second(s), 46 queries .

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