本文作为SpinalHDL学习笔记第七十六篇,作为错误集使用,类似高中生的错题集,记录使用SpinalHDL过程中遇到的问题,小到语法错误、版本兼容问题,大到SpinalHDL库函数错误等等,持续更新。
SpinalHDL学习笔记总纲:
SpinalHDL 学习笔记_blackbox spinalhdl-CSDN博客
目录:
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顶层模块里例化了两个子模块i2cRegInst和i2sBaseInst,这两个模块有一些接口直接连接起来,报了这些连线跨时钟域的error;
原因:两个子模块被认为是两个不同的clockdomain,不管这两个子模块用的时钟相不相同,从一个clockdomain到另一个clockdomain的信号都需要做跨时钟域处理;
解决方法:由于这两个子模块使用的时钟相同,所以实际上不用做时钟同步,所以直接使用addTag(crossClockDomain)忽略报错。
Note:如果这两个子模块使用的时钟不同,那是需要做信号同步的,一般在各个子模块里先用addTag(crossClockDomain)忽略报错,再对信号做处理。