首页 > 其他分享 >External Constraint Blocks

External Constraint Blocks

时间:2022-08-17 13:13:03浏览次数:64  
标签:Blocks 定义 constraint 外部 Constraint 约束 External bx externC

 您可以将类中的约束指定为“外部”约束。一旦将一个约束声明为“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

相关文章