Может кто-нибудь объяснить это странное поведение системы? - PullRequest
0 голосов
/ 18 апреля 2020

Мне трудно понять это поведение при рандомизации в симуляции vcs. Может кто-нибудь, пожалуйста, помогите мне?

class c;
  rand bit [31:0] base;

  constraint base_c {
    base +32'h40_0000 < 32'hFFFF_FFFF;
  }

endclass

module m;
  c c_obj = new();

  initial begin
    c_obj.randomize() with {
      base == 'hffe6_f6e2;
    };
  end
endmodule

Я не получаю сообщение об ошибке ограничения. База имеет тип бит, который без знака. Если я изменю ограничение следующим образом

constraint base_c {
  base < 32'hFFFF_FFFF - 32'h40_0000;
}

, я получу ошибку ограничения сейчас. Как это работает?

1 Ответ

0 голосов
/ 18 апреля 2020

Здесь очень просто решить математику. Все, что вам нужно сделать, это вставить значения.

В первом случае у вас есть

32'hffe6_f6e2 + 32'h40_0000 < 32'hFFFF_FFFF

, который уменьшается до

32'h0026_f6e2 < 32'hFFFF_FFFF
1'b1 // True

Но когда у вас есть

32'hffe6_f6e2 < 32'hFFFF_FFFF - 32'h40_0000

Это уменьшает вплоть до

32'hffe6_f6e2 < 32'hffbf_ffff
1'b0 // False

Из вашего вопроса непонятно, что вы ожидаете, но при написании ограничений необходимо учитывать недостаточность и переполнение.

Я только что написал сообщение в блоге по таким математическим вопросам здесь .

...