class spi_trans; //Properties for Randomizing the MOSI rand bit cmd; randc bit[24:0] addr; rand bit[ 4:0] cfgid; rand bit[31:0] data[$]; //Properties for Randomizing the pkt_sent process rand int interval; rand int half_sclk; constraint cstr { data.size() >= 1; data.size() <= 1;//not solid interval <= 1000; interval >= 0; half_sclk <= 32; half_sclk >= 4; //Select system_regfile (addr >= 25'h000_0000 && //addr <= 25'h000_0037 && int'(addr) <= int'(25'h000_003B) - int'(data.size()*4) && addr != 25'h000_0020 && addr != 25'h000_0024) || (addr == 25'h000_0040) || //Select instruction SRAMs 8192X32bit 32KB (addr >= 25'h010_0000 && //addr <= 25'h010_7FFF && int'(addr) <= 25'h010_8003 - data.size()*4) || //Select data SRAMs 8192X32bit 32KB (addr >= 25'h020_0000 && //addr <= 25'h020_7FFF && int'(addr) <= 25'h020_8003 - data.size()*4) || //Select awg_regfile (addr >= 25'h030_0000 && //addr <= 25'h030_001F && int'(addr) <= int'(25'h030_0023) - int'(data.size()*4)) || (addr >= 25'h030_0098 && //addr <= 25'h030_00A3 && int'(addr) <= int'(25'h030_00A7) - int'(data.size()*4)) || (addr >= 25'h030_0100 && //addr <= 25'h030_0123 && int'(addr) <= int'(25'h030_0127) - int'(data.size()*4)) || (addr >= 25'h030_0128 && //addr <= 25'h030_0137 && int'(addr) <= int'(25'h030_013B) - int'(data.size()*4)) || //Select envelope ID SRAMs 64X32bit 256B (addr >= 25'h040_0000 && //addr <= 25'h040_00FF && int'(addr) <= 25'h040_0103 - data.size()*4) || //Select envelope data SRAMs 8192X32bit 32KB (addr >= 25'h050_0000 && //addr <= 25'h050_7FFF && int'(addr) <= 25'h050_8003 - data.size()*4) || //Select dac_regfile (addr >= 25'h060_0000 && //addr <= 25'h060_0073 && int'(addr) <= int'(25'h060_0077) - int'(data.size()*4)) || //Select mcu_regfile (addr >= 25'h070_0000 && //addr <= 25'h070_01F && int'(addr) <= int'(25'h070_0023) - int'(data.size()*4)) || (addr >= 25'h070_0040 && //addr <= 25'h070_00A7 && int'(addr) <= int'(25'h070_00AB) - int'(data.size()*4)) || //Select DBG SRAMs 256X128bit 4KB (addr >= 25'h190_0000 && //addr <= 25'h190_0FFF && int'(addr) <= 25'h190_1003 - data.size()*4) || //Select intpll_regfile (addr >= 25'h1f0_0000 && //addr <= 25'h1f0_0057 && int'(addr) <= int'(25'h1f0_005B) - int'(data.size()*4)) ; } function new(); endfunction extern function bit compare(spi_trans rhs_); extern function void print(integer fid); extern function void unpack(ref bit stream[$]); extern function void pack(bit stream[$]); endclass : spi_trans function bit spi_trans::compare(spi_trans rhs_); bit result=1'b1; int i=0; result = ((cmd == rhs_.cmd) && (addr == rhs_.addr) && (cfgid == rhs_.cfgid)); if(this.data.size() != rhs_.data.size()) begin $display("data_sizes are different"); result = 1'b0; end else for(i=0;i0)begin for(i=0;i<32;i++) data_temp[31-i] = stream.pop_front(); data.push_back(data_temp); end endfunction