舟山网站制作2023年11月新冠高峰
本文作为SpinalHDL学习笔记第七十四篇,介绍SpinalHDL的设计错误。
目录:
1.赋值覆盖(Assignment Overlap)
2.跨时钟域违例(Clock crossing violation)
3.组合环(Combinatorial loop)
4.层次违例(Hierarchy violation)
5.IO包
⼀、赋值覆盖(Assignment Overlap)
⼀、简介
SpinalHDL将会检查, 没有任何的信号赋值会完全抹除前⾯的赋值。
⼆、例⼦
下列代码:
class TopLevel extends Component {
val a = UInt(8 bits)
a := 42
a := 66 // Erase the a := 42 assignment
}
将会产⽣如下报错:
ASSIGNMENT OVERLAP completely the previous one of (toplevel/a : UInt[8 bits])
***
Source file location of the a := 66 assignment via the stack trace
***
可以修复为:
class TopLevel extends Component {
val a = UInt(8 bits)
a := 42
when(something) {
a := 66
}
}
但当某些情况下, 如果⽤户真的需要去覆盖掉之前的赋值(因为在某些时候覆盖是有意义的), 则可以使⽤如下表达:
class TopLevel extends Component {
val a = UInt(8 bits)
a := 42
a.allowOverride
a := 66
}
二.跨时钟域违例(Clock crossing violation)
⼀、简介
SpinalHDL会检查⽤户设计中的寄存器只会与相同时钟域的寄存器以