受保护的类型
在 VHDL 1993 之前,两个并发进程只能与信号通信。由于仅在模拟步骤之间更新信号的语言的模拟语义,模拟的结果是确定性的:它不依赖于模拟调度器选择的执行过程的顺序。
[事实上,这不是 100%真实。进程还可以使用文件输入/输出进行通信。但是如果一个设计师通过使用文件来破坏决定论,那真的不是一个错误。
因此语言是安全的。除了故意之外,设计非确定性 VHDL 模型几乎是不可能的。
VHDL 1993 引入了共享变量,设计非确定性 VHDL 模型变得非常容易。
VHDL 2000 引入了受保护类型和共享变量必须是受保护类型的约束。
在 VHDL 中,受保护类型与面向对象(OO)语言中的对象概念类似。它们实现了数据结构及其方法的封装。它们还保证对其数据成员的独占和原子访问。这并不能完全阻止非确定性,但至少会为共享变量增加排他性和原子性。
在设计仅用于仿真的高级 VHDL 模型时,受保护的类型非常有用。它们具有几种非常好的 OO 语言属性。经常使用它们使代码更易读,可维护和可重用。
笔记:
- 默认情况下,某些模拟工具链仅在共享变量不属于受保护类型时才发出警告。
- 某些综合工具不支持受保护的类型。
- 一些综合工具对共享变量的支持有限。
- 可以认为共享变量不能用于建模硬件,并且应该保留用于没有副作用的代码检测。但是,几个 EDA 供应商建议的 VHDL 模式用于建模多端口随机存取存储器(RAM)的存储器平面使用共享变量。所以,是的,共享变量在某些情况下可以合成。