Systemverilog (Libro Verde) Capítulo 5: Descripción general de clases y objetos (1) Clases

Como se muestra en las siguientes preguntas:

class Transaction
    logic [31:0] addr = 'h10;
    logic [31:0] crc,data[8];
    function new(logic [31:0] a =3, d =5);
        addr = a;
        foreach (data[i])
            data[i] = d;
        endfunction
    endclass


initial begin
    Transaction tr,tr1;
    tr = new(10);
    tr1 = new();
end

Para comprender el proceso de creación de objetos mediante new (), en primer lugar, new (10) abre espacio de acuerdo con los tipos de variables en la clase, addr, crc y data, luego a addr se le asigna el valor 16. Después de eso, pasamos el parámetro 10 a la función, y el valor del addr se sobrescribe a 10.

Cuando se llama a la función new (), no se pasan parámetros desde el exterior, por lo que se asigna el valor addr 3.

Creación y destrucción de objetos:

class word
    byte nb[];
    function new(int n);
        nb = new[n];        //动态数组空间开辟
    endfunction
endclass

initial begin : initial_1
    word wd;
    for(int i=1;i<=4;i++) wd = new(i);   //创建了4个对象
end
initial begin : initial_2
    #1ps
    $display("How many Bytes are allocated for word instance?")
end

 Si el espacio requerido para wd = new (1) es 1B, entonces el espacio se crea después de la ejecución:

Después de ejecutar wd, el controlador apunta al cuarto objeto, 4B. Dado que la variable inicial es estática, si la ejecución inicial se completa, la variable todavía está allí.

class Transaction
    static intcount= 0;
    int id;
    function new();
        id = count++;
    endfunction
endclass

Transaction t1,t2;
initial begin
    t1 = new();
    t2 = new();
    $display("Second id=%d, count = %d",t2.id,t2.count);

 

 

 

Publicado 14 artículos originales · ganó 10 · vistas 20,000 +

Supongo que te gusta

Origin blog.csdn.net/Jay_who/article/details/105550031
Recomendado
Clasificación