• $value$plusargs字符串参数传递后如何随机



    前言

    在仿真过程中,经常在命令行通过$value$plusargs传递一个字符串到环境中,去选择不同的sequence,但是,有些时候需要随机选择其中某几个seq,而只有整数和枚举类型可以随机,字符串无法随机,那么如何解决这个问题呢?


    一、背景

    代码如下,axi_slave_mem_seq是一个字符串变量,期望外部如果传进来的值是“axi_slave_random_rsp_seq”,那么就随机选取其中有效的sequence,但是由于字符串类型不支持随机,编译会报错。
    在这里插入图片描述

    二、解决办法

    解决方案如下,定义一个枚举类型AXI_SLAVE_MEM_SEQ_e,定义枚举类型与字符串的关联数组表axi_slave_mem_table,当外部传进来一个字符串,首先通过关联数据表找到对应的枚举类型,然后对枚举类型变量进行判断,如果是需要随机的枚举类型变量,那么再对枚举类型的变量进行随机,最后将处理后的枚举变量拿去处理。

    	typedef enum {
    		AXI_SLAVE_SEQ,
    		AXI_SLAVE_MEM_NODELAY_SEQ,
    		AXI_SLAVE_MEM_SEQ,
    		AXI_SLAVE_MEM_RD_LONGDELAY_SEQ,
    		AXI_SLAVE_MEM_WR_BACKPRESSURE_SEQ,
    		AXI_SLAVE_MEM_OUTSTANDING_SEQ,
    		AXI_SLAVE_QDMA_RSP_BACKPRESURE_SEQ,
    		AXI_SLAVE_MEM_RANDOM_SEQ,
    		AXI_SLAVE_MEM_RPOISON_SEQ
    		} AXI_SLAVE_MEM_SEQ_e;
    	
    	AXI_SLAVE_MEM_SEQ_e axi_slave_mem_table [string] = {
    		"axi_slave_seq" : AXI_SLAVE_SEQ,
    		"axi_slave_mem_nodelay_seq" : AXI_SLAVE_MEM_NODELAY_SEQ,
    		"axi_slave_mem_seq" : AXI_SLAVE_MEM_SEQ,
    		"axi_salve_mem_rd_longdelay_seq" : AXI_SLAVE_MEM_RD_LONGDELAY_SEQ,
    		"axi_slave_mem_wr_backpressure_seq" : AXI_SLAVE_MEM_WR_BACKPRESSURE_SEQ,
    		"axi_slave_mem_outstanding_seq" : AXI_SLAVE_MEM_OUTSTANDING_SEQ,
    		"axi_slave_qdma_rsp_backpresure_seq" : AXI_SLAVE_QDMA_RSP_BACKPRESURE_SEQ,
    		"axi_slave_random_seq" : AXI_SLAVE_MEM_RANDOM_SEQ,
    		"axi_slave_mem_rpoison_seq" : AXI_SLAVE_MEM_RPOISON_SEQ
    	};
    
    string axi_slave_mem_seq_s = "axi_slave_seq";
    AXI_SLAVE_MEM_SEQ_e axi_slave_mem_seq_e = AXI_SLAVE_SEQ;  // default
    
        if ($value$plusargs("axi_slave_mem_seq=%s", axi_slave_mem_seq_s)) begin
          `uvm_info(`gfn, $sformatf("Get axi_slave_mem_seq is %s", axi_slave_mem_seq_s),UVM_LOW)
          if(axi_slave_mem_table.exists(axi_slave_mem_seq_s))  
    	      axi_slave_mem_seq_e = axi_slave_mem_table[axi_slave_mem_seq_s];
          else
    	      `uvm_error(`gfn, "ERROR! No axi slave seq has been selected!")
        end 
          
    	if(axi_slave_mem_seq_e == AXI_SLAVE_MEM_RANDOM_SEQ) begin
    		assert(std::randomize(axi_slave_mem_seq_e) with{
    					axi_slave_mem_seq_e inside {
    						AXI_SLAVE_SEQ,
    						AXI_SLAVE_MEM_NODELAY_SEQ,
    						AXI_SLAVE_MEM_SEQ,
    						AXI_SLAVE_MEM_RD_LONGDELAY_SEQ,
    						AXI_SLAVE_MEM_WR_BACKPRESSURE_SEQ,
    						AXI_SLAVE_MEM_OUTSTANDING_SEQ,
    						AXI_SLAVE_QDMA_RSP_BACKPRESURE_SEQ
    					};
    				});
    	end 
        set_axi_slave_mem_seq(axi_slave_mem_seq_e);
    
      function void set_axi_slave_mem_seq(AXI_SLAVE_MEM_SEQ_e axi_slave_mem_seq);
    	  case (axi_slave_mem_seq)
    		  AXI_SLAVE_SEQ : begin
    		  // do something
    		  end
    		  AXI_SLAVE_MEM_NODELAY_SEQ : begin
    		  end
    		  AXI_SLAVE_MEM_SEQ : begin
    		  end
    		  AXI_SLAVE_MEM_RD_LONGDELAY_SEQ : begin
    		  end
    		  AXI_SLAVE_MEM_WR_BACKPRESSURE_SEQ : begin
    		  end
    		  AXI_SLAVE_MEM_RPOISON_SEQ : begin
    		  end
    		...
    		...
    		...
    	  endcase
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    总结

    总的来说就是借助一个关联数组进行查表,来解决字符串不能随机的问题。

  • 相关阅读:
    PHP 伪协议学习
    CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) B. Maximum Substring 解题报告
    Redis的常用数据结构之哈希类型
    Redis学习(九)SpringBoot实现(Pub/Sub)发布订阅
    (附源码)spring boot动力电池数据管理系统 毕业设计 301559
    CData Drivers for Asana复制和仓储
    什么是闭包?闭包详解
    第一次写计算机论文无从下手怎么办?(二) - 易智编译EaseEditing
    基于PHP的学生选修课网上选课系统设计与实现
    基于Sring+bootstrap+MySQL的住房公积金管理系统
  • 原文地址:https://blog.csdn.net/hh199203/article/details/132908554