chipyard——自定义配置生成和前仿
一,生成配置
前面用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的顶层接口仍然是: