chipyard——自定义配置生成和前仿

zhaohaowen / 2023-04-29 / 原文

一,生成配置

前面用rocket-chip仓库做了生成和前仿,为了方便扩展外设,这里转到chipyard仓库。

首先我们生成一个之前用的配置:

 为删SimDTM(我的测试框架不需要),先在rocket的subsystem/config下创建一个class:

 然后在chipyard顶层创建config:

 make CONFIG=MyConfig创建设计

 发现少了Simmmio接口(这也正常,最终的soc该接口都表现为各种外设),bootrom里固化的值不对

在rocket/subsystem下写一个新的bootrom config:

 在/generators/chipyard/src/main/scala/config/AbstractConfig.scala 下替换成原本的rocket bootrom

 在vcs目录下执行:

make verilog CONFIG=MyConfig

修改后可以看到TLROM里的内容正常了:

 不过这样顶层的mmio接口没了,为了方便dump仿真波形也许还需要暴露出一个mmio接口在testharness里接Simmem。

二,扩展外设

之前分享过如何集成新外设,这里我们加入一些常见的外设,看看fragments/PeripheralFragments.scala中目前支持什么外设:

address 0x10012000的GPIO

 address 0x5400000L的UART

 address 0x10040000的spi

 这三种外设的IO相关接口也都写好了,我们除了在顶层添加以外无需修改Chiptop和Testharness:

下面写一个新的配置来集成这些外设:

值得注意的是在abstractConfig中已经有了UART,因此我们不用加了

 可以在顶层看到IO:

 三,前仿

前面说到,我所搭建的VCS测试框架本质是依靠hex仿真结束后向mmio地址空间写一个magic word来确保程序执行完毕,因此我们最好在Chiptop上也暴露一片地址空间的mmio接口,在testharness中同样连接到SimAXImem上,这样理论上chipyard生成的soc也可以用我们的测试框架来做指令集前仿。

注意到config内有两个这样的配置:

一个暴露出memport接口,一个暴露出mmioport接口,写一个如下config来看看接口特性:

只不过接口命名和rocket仓库的不一样了,注意在测试框架中修改。 

加上外设后:

 testharness的顶层接口仍然是: