我们可以在没有系统verilog中的任何函数/任务的类中使用print语句吗?
http://www.edaplayground.com/x/8Y8
class A;
int x=10;
$display("x=%d",x);
endclass
Module abc;
A a;
initial begin
a=new();
end
endmodule
答案 0 :(得分:1)
没有。根据{{3}},第8.3节“语法”,类只能包含以下项:
private CriteriaQuery<Customer> createCriteria(CustomerSearchCriteria search) {
CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
Root<Customer> root = criteria.from(Customer.class);
List<Predicate> where = new ArrayList<Predicate>();
....
if( search.getContactAddress() != null ) {
AbstractAddress a = search.getContactAddress();
Join<Customer, Contact> contracts = root.join("contacts"); // Customer.contacts
if(a instanceof AddressStd){
AddressStd std = (AddressStd)a;
if(std.getHouseNo() != null) where.add(builder.equal(builder.treat(contracts.get("address"), AddressStd.class).get("houseNo"), std.getHouseNo()));
if(std.getStreet() != null) where.add(builder.equal(builder.treat(contracts.get("address"), AddressStd.class).get("street"), std.getStreet()));
}else if(a instanceof AddressPOB){
AddressPOB pob = (AddressPOB)a;
if(pob.getPoBoxNo() != null) where.add(builder.equal(builder.treat(contracts.get("address"), AddressPOB.class).get("poBoxNo"), pob.getPoBoxNo()));
}
if(a.getCity() != null) where.add(builder.equal(contracts.get("address").get("city"), a.getCity()));
if(a.getPostcode() != null) where.add(builder.equal(contracts.get("address").get("postcode"), a.getPostcode()));
if(a.getCountry() != null) where.add(builder.equal(contracts.get("address").get("country"), a.getCountry()));
if(a.getLanguage() != null) where.add(builder.equal(contracts.get("address").get("language"), a.getLanguage()));
if(a.isActive() != null) where.add(builder.equal(contracts.get("address").get("isActive"), a.isActive()));
}
criteria.where( where.toArray(new Predicate[where.size()]) );
return criteria;
}
class_item ::=
{ attribute_instance } class_property
| { attribute_instance } class_method
| { attribute_instance } class_constraint
| { attribute_instance } class_declaration
| { attribute_instance } covergroup_declaration
| local_parameter_declaration ;
| parameter_declaration7 ;
| ;
语句只能出现在程序块(初始,始终,最终)或任务/函数体中。
通常,您需要在类中创建一个显示函数,然后显式调用它。
答案 1 :(得分:1)
这是不可能的。您必须在专用任务/函数或类构造函数中打印。
LRM声明: 显示/监视/选通/写入语句只能出现在程序块或任务/功能体中。
当创建对象时,我们可以显示变量的默认值,如下所示。更好的选择是在构造函数本身中使用display。
class A;
int x=10;
function void new(); // constructor
$display("x=%d",x);
endfunction
endclass