Может ли ограничение рандомизации находиться в дочернем классе, пока оно объявлено в базовом классе.Если да, то как? - PullRequest
0 голосов
/ 19 сентября 2019
class AAA;

  rand int a;
  rand bit b;

  constraint aaa;

  class BBB extends AAA ;

    constraint aaa {a>4 && a<67 ; b>10 && b<90 ;}

  endclass
endclass

module mode;

  AAA p;
  AAA::BBB q;

  initial begin
    p=new;
    q=new;
    repeat(10)
      begin
        assert(p.randomize());

        $display("%0d , %0d",q.a,q.b);
      end


  end

endmodule

1 Ответ

0 голосов
/ 19 сентября 2019

Вы смешиваете наследование (IS-A) с контейнерами (HAS-A) и вложенными объявлениями.С наследованием вы просто создаете расширенный класс.Если вы создаете базовый класс, этот объект не знает о каких-либо расширениях, включая классы с вложенными объявлениями классов.

Нет причин использовать вложенные классы, если вам не нужно скрывать имя типа вложенных классов из общего пространства имен.В противном случае вложенный класс ведет себя идентично, как если бы вы объявили его, не вкладывая его.

...