
我建议 8bit,先用前6位,后两位以后留给 error/BUSY:localparam bit [7:0] RAND_ADDR = 8'b0000_0001; localparam bit [7:0] RAND_DATA = 8'b0000_0010; localparam bit [7:0] RAND_SIZE = 8'b0000_0100; localparam bit [7:0] RAND_BURST = 8'b0000_1000; localparam bit [7:0] RAND_RW = 8'b0001_0000; localparam bit [7:0] RAND_BEATS = 8'b0010_0000; // bit[6]以后可以做BUSY随机 // bit[7]以后可以做ERROR随机含义非常简单:mask对应bit = 1 → 这个字段随机 mask对应bit = 0 → 使用你指定的固定值class ahb_random_seq extends ahb_base_sequence; `uvm_object_utils(ahb_random_seq) bit [7:0] rand_mask = 8'h3F; // mask=0时使用这些定向值 bit [31:0] fix_addr = '0; bit [31:0] fix_data = '0; ahb_size_e fix_size = AHB_WORD; ahb_burst_e fix_burst = AHB_SINGLE; ahb_write_e fix_rw = AHB_WRITE; int fix_beats = 4; // 一次sequence产生多少组transaction/burst int trans_num = 100; // INCR随机长度范围 int max_incr_beats = 8; function new(string); super.new(name); endfunction virtual task body(); bit [31:0] r_addr; bit [31:0] r_data; ahb_size_e r_size; ahb_burst_e r_burst; ahb_write_e r_rw; int r_beats; bit [31:0] data_q[$]; repeat(trans_num) begin //========================================