不正确的延迟导致modelsim

问题描述 投票:-1回答:3

我正在尝试在modelsim中使用门延迟来建模一个完整的加法器。为简单起见,这是一个自包含的简单测试平台:

module simple_delay;
  reg x, y, cin;
  wire a,b,c, s, cout;

  // simple structural full adder
  xor #1 XO1(a, x, y);
  and #1 A1 (b, x, y);
  xor #1 XO2(s, cin, a);
  and #1 A2 (c, cin, a);
  or  #1 O1 (cout, c, b); 

  initial
  begin
    x= 1'b1; y = 1'b1; cin = 1'b0;
    #10 $stop;
  end
endmodule

我希望输出a和b在一个延迟单位后可用,输出c和s在一个延迟之后(总计2),最后在cout在一个延迟之后(总计3)。相反,cout在2个延迟后也有效。

这是由于短路布尔评估引起的吗?由于b在一个延迟后变为1,因此cout将为1,而与仍未知(x)的c的值无关。这是模拟器的工作方式吗?如果是这样,我该如何禁用它(我在文档中没有找到任何相关内容,并且禁用优化无法解决该问题)。

我是否可以强迫modelsim不聪明,并实际上将cout的计算延迟一个单位?

delay verilog modelsim
3个回答
0
投票

c在时间1将为零,因为cin为低;使用“与”门时,如果任何输入为低,则其他输入无关,输出为低。因此,bc在时间1都将具有已知值。因此cout在时间2时将具有正确的值。

最坏情况下的延迟是3,当cin为高且a&b==0时观察到。所有其他输入条件的延迟为2。


0
投票

这不是ModelSim是“智能”的,它是仅在部分输入“已知”的情况下,模拟门足够智能来计算输出。别忘了,它“对您来说是未知的,但实际上是01,并且门会在一段时间之前与“已知”输入一起“看到”它,然后进行计算。在实际的硬件中会发生什么。


0
投票

这就是模拟器的工作方式,如IEEE Std 1800-2012的表28-3“用于多个输入逻辑门的真值表”中所述。如果or门的任何输入为1,则输出为1。

© www.soinside.com 2019 - 2024. All rights reserved.