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