Поскольку я не могу комментировать предыдущее сообщение, а мое предложенное редактирование отклонено, я могу добавить только то, что выглядит как новый ответ, но таковым не является. Вздох!
Вот пример Subbdue, отредактированный для исправления следующих синтаксических ошибок:
- Синтаксис SV
typedef enum {...} <name>;
в отличие от синтаксиса OpenVera enum <name> {...};
- Конец объявления перечисления с
;
- Объявить переменную
channelNumber
- Объявить
ipVersion
как rand
- Синтаксис SV
<var> inside { [<min>:<max>] }
в отличие от синтаксиса OpenVera <var> in { min:max }
- Заканчивайте выражения в
constraint
s с помощью ;
- Синтаксис SV
->
в отличие от синтаксиса OpenVera =>
- Исправить опечатку
solver
-> solve
- Исправить опечатку
IPVx
-> IPVX
Фиксированный пример:
class RandomConstraints;
typedef enum {IPV4=2, IPV6, IPVX} IpVersionType;
//Randomly iterate over values without repetition
randc bit [7:0] cyclicCounter;
//Regular random variables
rand bit [15:0] destAddress;
rand bit [15:0] sourceAddress;
rand bit [15:0] numberOfPackets;
rand bit [15:0] packetLength;
rand bit [3:0] channelNumber;
rand bit [7:0] var1;
rand bit [7:0] var2;
rand IpVersionType ipVersion;
//Non-random variables that can be used to control constraints
bit [15:0] minNumberOfPackets, maxNumberOfPackets;
bit [15:0] minPacketLength, maxPacketLength;
integer IPV4Weight, IPV6Weight;
constraint cPacketLength {
packetLength inside { [ minPacketLength : maxPacketLength ] };
}
constraint cChannelNumber {
channelNumber inside {[0:1]};
}
// Assuming total weight adds up to 100
constraint cIPVersionType {
ipVersion dist { IPV4 := IPV4Weight, IPV6 := IPV6Weight,
IPVX := (100 - IPV4Weight - IPV6Weight) };
}
//Probability of var1 being 1,2,3,4,5 in the ratio 1,2,4,4,4
constraint cDist1 {
var1 dist { 1 := 1, 2 := 2, [3:4] := 4 };
}
//Probability of var2 being 1,2,3,4,5 is in the ratio 1,2,4/3,4/3,4/3
constraint cDist2 {
var2 dist { 1 := 1, 2 := 2, [3:5] :/ 4 };
}
//Implication constraint - if(channelNum == i) then { ... }
constraint cImplication {
(channelNumber == 0) -> {
destAddress inside {[0:200]};
sourceAddress inside {[201:400]};
}
(channelNumber == 1) -> {
destAddress inside {[201:400]};
sourceAddress inside {[0:200]};
}
}
//Controlling order of constraints solved using a constraint solver
constraint order_solver {
solve channelNumber before destAddress;
solve channelNumber before sourceAddress;
}
function new();
//Setting default min/max packets and min/max packet length
minNumberOfPackets = 100;
maxNumberOfPackets = 1000;
minPacketLength = 128;
maxPacketLength = 256;
IPV4Weight = 50;
IPV6Weight = 30;
endfunction
endclass
person
Paddu
schedule
08.05.2013