System verilog 可以问为什么空一变成无?

System verilog 可以问为什么空一变成无?,system-verilog,System Verilog,我设计了一个随机参数,并尝试运行15次。 然而,空的那个让我别无选择。 我想最好过来问问,我困了差不多半天 我为请求添加整个随机化。 除了空的keep不给我任何选项外,这个随机化工作是正确的。 我希望它像完全一样工作,可以成功地在无、单和双模式下运行随机数 typedef enum {STANDARD, FWFT} mode_type; typedef enum {FALSE, TRUE} output_status; typedef enum {NONE, STATIC_SI

我设计了一个随机参数,并尝试运行15次。 然而,空的那个让我别无选择。 我想最好过来问问,我困了差不多半天

我为请求添加整个随机化。 除了空的keep不给我任何选项外,这个随机化工作是正确的。 我希望它像完全一样工作,可以成功地在无、单和双模式下运行随机数

   typedef enum {STANDARD, FWFT} mode_type;
   typedef enum {FALSE, TRUE} output_status;
   typedef enum {NONE, STATIC_SINGLE, STATIC_DUAL} prog;

   rand mode_type MODE;
   rand output_status OUTPUT_REG;
   rand prog PROGRAMMABLE_FULL;
   rand prog PROGRAMMABLE_EMPTY;
   rand int COMMON_CLK;
   rand int DEPTH;
   rand int DATA_WIDTH;
   rand int PROG_FULL_ASSERT;
   rand int PROG_FULL_NEGATE;
   rand int PROG_EMPTY_ASSERT;
   rand int PROG_EMPTY_NEGATE;


   constraint set {
      COMMON_CLK inside {0, 1};
      DEPTH inside {16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072};
      DATA_WIDTH inside {[1:1024]};
     }
constraint FULL_ASSERT {
     solve DEPTH before PROG_FULL_ASSERT;
     if (PROGRAMMABLE_FULL == STATIC_SINGLE){
      PROG_FULL_ASSERT inside {(0.50 * DEPTH), (0.75 * DEPTH), (0.9 * DEPTH)};
   } else if (PROGRAMMABLE_FULL == STATIC_DUAL){
      PROG_FULL_ASSERT inside {(0.50 * DEPTH), (0.75 * DEPTH), (0.9 * DEPTH)};
   } else {
      PROG_FULL_ASSERT ==  0;  
   }
               }
   constraint FULL_NEGATE {
     solve PROG_FULL_ASSERT before PROG_FULL_NEGATE;
     PROG_FULL_NEGATE < PROG_FULL_ASSERT;
     if (PROGRAMMABLE_FULL == STATIC_DUAL){
      PROG_FULL_NEGATE inside {(0.50 * DEPTH), (0.75 * DEPTH), (0.90 * DEPTH)};
   } else {
      PROG_FULL_NEGATE ==  0;  
   }
               }

   constraint EMPTY_ASSERT {
      solve DEPTH before PROG_EMPTY_ASSERT;
      if (PROGRAMMABLE_EMPTY == STATIC_SINGLE){
      PROG_EMPTY_ASSERT inside {(0.10 * (DEPTH-1)), (0.25 * (DEPTH-1)), (0.50 * (DEPTH-1))};
    } else if (PROGRAMMABLE_EMPTY == STATIC_DUAL){
      PROG_EMPTY_ASSERT inside {(0.10 * (DEPTH-1)), (0.25 * (DEPTH-1)), (0.50 * (DEPTH-1))};
    } else {
      PROG_EMPTY_ASSERT ==  0; 
    }
                }

   constraint EMPTY_NEGATE {
      solve PROG_EMPTY_ASSERT before PROG_EMPTY_NEGATE;
      PROG_EMPTY_NEGATE >= PROG_EMPTY_ASSERT;
      if (PROGRAMMABLE_EMPTY == STATIC_DUAL){
      PROG_EMPTY_NEGATE inside {(0.10 * (DEPTH-1)), (0.25 * (DEPTH-1)), (0.50 * (DEPTH-1))};
   } else {
      PROG_EMPTY_NEGATE ==  0;
   }
                }

满一个很好,但空保持给我没有选择。我认为这不可能运行15次,每次都会保留一次。

在约束中不能使用实数。请向我们展示约束表达式中使用的每个变量的声明。什么是“空的一个”?您没有该名称的变量,并且有多个变量的名称中包含空。您不能在约束中使用实数。请向我们展示约束表达式中使用的每个变量的声明。什么是“空的一个”?您没有使用该名称的变量,并且有多个变量的名称中包含empty。
`define COMMON_CLK             1

    `define DEPTH             16

    `define DATA_WIDTH           298

    `define MODE     STANDARD

    `define OUTPUT_REG   TRUE

    `define PROGRAMMABLE_FULL    STATIC_DUAL

    `define PROG_FULL_ASSERT              12

    `define PROG_FULL_NEGATE               8

    `define PROGRAMMABLE_EMPTY   NONE

    `define PROG_EMPTY_ASSERT              0

    `define PROG_EMPTY_NEGATE              0