我们可以在没有系统verilog中的任何函数/任务的类中使用print语句

时间:2015-11-12 14:42:24

标签: system-verilog

我们可以在没有系统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

2 个答案:

答案 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