您可以将类中的约束指定为“外部”约束。一旦将一个约束声明为“extern”,必须在一个外部约束块中提供它的定义,否则将会报错。请注意,“外部”约束和内部(隐式)约束都可以由在类外部的约束块定义。对于任何一种形式,如果为任何给定的原型提供了多个外部约束块,则为错误,如果与原型同名的约束块出现在同一类声明中,则为错误。下面是一个例子:
1 class externC; 2 randc bit [7:0] bx; 3 constraint cXG; //internal constraint 4 extern constraint eXS; //external constraint 5 endclass 6 constraint externC::cXG { bx > 10;} 7 constraint externC::eXS { bx < 20;} 8 module tb; 9 int i; 10 externC pp = new ( ); 11 initial begin 12 for (i=0; i < 4; i++) begin 13 pp.randomize( ); 14 $display("bx = %d", pp.bx ); 15 end 16 end 17 endmodule
模拟结果:
Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 00:51 2022
bx = 14
bx = 17
bx = 18
bx = 15
V C S S i m u l a t i o n R e p o r t
在此示例中,在类“externC”中指定了两个约束,但它们都没有与之关联的约束块。一个是内部约束,另一个是“外部”约束:
constraint externC::cXG { bx > 10;}
constraint externC::eXS { bx < 20;}
如上所述,内部和外部约束都可以在类之外定义它们的约束块,但如果是“extern”约束,您必须在类之外对其进行定义,否则将报错。
对于内部约束,如果不指定内部定义,而外部也无定义,则将其视为空约束。模拟日志显示变量“bx”的两个约束都得到满足。
标签:Blocks,定义,constraint,外部,Constraint,约束,External,bx,externC From: https://www.cnblogs.com/xiangtianxiao/p/16594757.html