SpinalHDL之错误集(一)

时间:2024-10-17 08:52:56

本文作为SpinalHDL学习笔记第七十六篇,作为错误集使用,类似高中生的错题集,记录使用SpinalHDL过程中遇到的问题,小到语法错误、版本兼容问题,大到SpinalHDL库函数错误等等,持续更新

SpinalHDL学习笔记总纲:

SpinalHDL 学习笔记_blackbox spinalhdl-****博客

目录:

1.Stream库函数废弃;

2.标准库函数找不到

3.跨时钟域报错

一、Stream库函数废弃(2024.9.15)

现象使用SpinalHDL标准库函数Stream时,“Stream”上有根划线,显示该函数已被弃用;

原因:SpinalHDL是基于Scala的一个库,笔者使用的Scala版本为3.x.x,不支持Stream,可能是Scala版本太高了;

解决方法:降低Scala版本,目前Scala 2.11.12是针对SpinalHDL比较稳定的版本;

二、标准库函数找不到(2024.9.23)

现象:编译时报一些标准库函数找不到的error,比如状态机的makeInstantEntry,在import路径下没有对应的库;

原因:SpinalHDL目前还算发展中,一些标准的库函数是随着版本持续添加修改的,笔者使用的版本是1.6.0,里面还没有这些库函数;

解决方法:把SpinalHDL的版本改成1.9.0,截止2024.9.25,SpinalHDL官方最新版是1.10.0;

三、跨时钟域报错(2024.10.10)

现象:IIC顶层模块里例化了两个子模块i2cRegInsti2sBaseInst,这两个模块有一些接口直接连接起来,报了这些连线跨时钟域的error;

原因:两个子模块被认为是两个不同的clockdomain不管这两个子模块用的时钟相不相同,从一个clockdomain到另一个clockdomain的信号都需要做跨时钟域处理; 

解决方法:由于这两个子模块使用的时钟相同,所以实际上不用做时钟同步,所以直接使用addTag(crossClockDomain)忽略报错。

Note:如果这两个子模块使用的时钟不同,那是需要做信号同步的,一般在各个子模块里先用addTag(crossClockDomain)忽略报错,再对信号做处理。