Вот так вот работает, но чувствую что это некрасиво. Особенно если логить много прийдется надо все время передавать указатель на файл.
Код
program simple_spi_tb (spi_bus_i.master spi_m);
//import definitions::*;
spi_simple_class spi_sender, spi_sender2;
static int file;
Packet p;
//reg SSB,SCLK,MOSI;
bit [7:0] my_data []='{`SI,8'hBB,8'hCC};
initial
begin
spi_sender = new(spi_m);
file=$fopen("log.txt","w");
$fdisplay(file, "Simulation started %0t", $realtime);
spi_m.RSTB=1'b0;
#600;
spi_m.RSTB=1'b1;
spi_m.SSB=1'b1;
spi_sender.SPI_COMMAND_WRITE(my_data);
repeat (10)
begin
=========================spi_sender.SPI_TRASH_WRITER(file);
end
spi_sender2=null;
$stop;
end
endprogram
class Packet;
bit [7:0] commands_array [] ='{`NOP,`CR,`RT,`WT,`SI,`SIL,`RO1,`RO2,`RO4,`RO8,`TZ1,`TZ2,`TZ12,`TZ0,`SM,`WU};
typedef bit [7:0] command_payload_t [3];
rand int command_index;
rand command_payload_t data;
constraint inside_sixteen {
command_index inside {[0:16]};}
endclass
class spi_simple_class;
virtual spi_bus_i spi;
=================================================int file;
const int tcs_sclk=100;
const int tsclk_cs=100;
typedef bit [7:0] my_data [3];
rand my_data data;
function new (virtual spi_bus_i spi);
this.spi=spi;
endfunction
task SPI_COMMAND_WRITE (bit [7:0] data []);
endtask
===================================task SPI_TRASH_WRITER(input int file);
Packet p;
bit [7:0] data [3];
p=new;
begin
assert(p.randomize());
$fdisplay(file, "Send packet over SPI time inside class=%0t p.data= %p", $realtime ,p.data);
data[0]=p.commands_array[p.command_index];
data[1:2]=p.data[1:2];
$display("p.data= %p", data);
SPI_COMMAND_WRITE(data);
end
endtask
endclass
Как объявить переменную чтобы она была видна всем объектам использующимся в программе?
Спасибо