Code Browser Pages:
| //////////////////////////////////////////////// ////s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s//// ////s s//// ////s VMM Tutorial s//// ////s s//// ////s gopi@testbench.in s//// ////s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s//// //////////////////////////////////////////////// `include "vmm.sv" //////////////////////////////////////////////////////// //// Transaction implemntation ///// //////////////////////////////////////////////////////// class trans extends vmm_data; typedef enum bit {BAD_FCS=1'b0, GOOD_FCS=1'b1} kind_e; rand bit [47:0] DA; rand bit [47:0] SA; rand int length; rand kind_e kind; `vmm_data_member_begin(trans) `vmm_data_member_scalar(DA, DO_ALL) `vmm_data_member_scalar(SA, DO_ALL) `vmm_data_member_scalar(length, DO_ALL) `vmm_data_member_enum(kind, DO_ALL) `vmm_data_member_end(trans) endclass // for declaring trans_channel `vmm_channel(trans) // for declaring trans_atomic_gen `vmm_atomic_gen(trans, "Gen") //////////////////////////////////////////////////////// //// Record/Playback demo example /////// //////////////////////////////////////////////////////// program main(); trans tr; trans_atomic_gen gen = new("Atomic Gen",1); bit success; // This is the producer logic. // Transactions are produced from Atomic generator in RECORD mode. // Transactions are produced from recorded file in PLAYBACK mode. initial begin if($test$plusargs("RECORD")) begin $display(" RECORDING started "); gen.stop_after_n_insts = 3; gen.start_xactor(); gen.out_chan.record("Trans_recordes.tr"); end else if($test$plusargs("PLAYBACK")) begin $display(" PLAYBACK started "); tr = new(); gen.out_chan.playback(success,"Trans_recordes.tr",tr); if(!success) $display(" Failed to playback Trans_recordes.tr"); end else $display(" give +RECORD or +PLAYBACK with simulation command"); end // This is consumer logic. initial repeat(3) begin #10; gen.out_chan.get(tr); tr.display(); end endprogram |