【问题标题】:Modelsim time for falling/rising edgeModelsim 下降/上升沿时间
【发布时间】:2015-10-01 15:52:39
【问题描述】:

有没有办法定义(在modelsim中)信号需要从低-高(上升)/高-低(下降)边缘走的时间。 例如,为了模拟更高级的,我想定义一个时间在单个信号 clk(例如 1 ns)处从低到高。

有没有办法做到这一点?

【问题讨论】:

  • ModelSim 是一种数字模拟器,而不是模拟模拟器。您可以通过使用STD_LOGIC 枚举的其他成员来模拟“0”和“1”之间的某种延迟或未定义的电压电平。请参阅布赖恩的回答。

标签: vhdl modelsim


【解决方案1】:

不确定这对时钟有多好。

但是您可以分配信号,例如

Sig_A <= 'X', '1' after 1 ns;

然后在nownow + 1 ns 之间采样信号的任何东西都将返回'X',让您可以在模拟中捕获错误。

Synthesis 应该简单地把这个赋值当作

Sig_A <= '1';

虽然可能会发出警告,但您可以放心地忽略。

但是请注意,如果您使用上面的 Sig_A 作为时钟,则时钟边沿将在其第二次转换时看到(即 now + 1 ns ),而不是引入任何时序不确定性,因此我在上面提出警告。

如果您需要使用可变时钟时序来模拟性能,您可能需要做的是在包中引入泛型或常量,例如

entity TB is
generic (T_clkH : time := 1 ns)
end TB;
...
    Clk <= '1' after T_clkH;

并运行两次模拟,为泛型提供最小值和最大值。

【讨论】:

  • 在时钟线上使用除 '0' 和 '1' 以外的其他值是有问题的,因为 rising_edge(clk) 测试的是真正的 0 -> 1 转换,而不是 any -> 1 个过渡。
  • 好的,但它也接受 L -> 1 (因为它应该),但不像其他风格那样接受 H -> 1 (因为它不应该)。我同意 X->1 是个坏主意....
  • 编辑我之前的评论:rising_edge(clk) 测试0/L -&gt; 1/H 转换。
【解决方案2】:

我通常在我的模拟中使用它。

clk <= not clk after 1 ns;

记得初始化你的信号。

signal clk : std_logic := '0';

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2014-11-27
    相关资源
    最近更新 更多