我有 2 个模块使用相同的时钟但在不同的文件中,当我在模块 B 中采样来自模块 A 的信号时,在波形仿真中它没有像它应该的那样在一个时钟周期后获得样本,它表明是同一上升沿的样本(适合异步实例化的行为)。
有人告诉我这是因为 Active-HDL 认为它是 2 个不同的时钟,因为组件不同,这就是为什么它在同一个上升沿采样(因为信号从 A 到 B 的增量时间)。
我如何定义 Active-HDL 将理解它们在同一区域使用相同的时钟?
最佳答案
这与您的模拟器无关。我假设你正在做这样的事情:
+----------+ +----------+
| |-- clk --->| |
clk --->| Module A | | Module B |
| |-- data -->| |
+----------+ +----------+
你应该在哪里做这样的事情:
+----------+ +----------+
| | | |
clk -+->| Module A |-- data -->| Module B |
| | | | |
| +----------+ | |
| | |
+-----------------------> | |
+----------+
第一种配置的问题在于,当您的时钟信号通过模块 A 时,它会延迟一个或多个增量周期。因此,它可能会在与数据信号相同或更晚的增量周期中切换。这是您在模拟器的波形 View 中看不到的东西(除非它有扩展增量周期的选项),但您可以查看 ListView 以准确了解增量时间中发生的情况。
关于vhdl - Active-HDL 仿真时钟交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178195/