Model a Vending Machine using OOP concepts like Inheritance and Polymorphism
The vending machine can contain multiple Items
Items have 2 properties: id and price
Id and price could be arbitrary, they do not indicate if the item is a drink or snack
Classes of Items: Drinks and Snacks
If user selects id and provides enough coins to match price, item dispenses
If item is Drink, it dispenses to slot 1, else slot 2
//Charchica Agrawal:07/01/2025
class vmitem;
rand int idd[], prc[];
endclass
class drinks extends vmitem;
constraint size_id {soft idd.size()==8;};
constraint size_prc {prc.size()==idd.size();
solve idd.size() before prc.size();};
constraint id { foreach(idd[i]) {
unique {idd[i]};
idd[i] inside {[20:30]};
prc[i] == idd[i];}
}
endclass
class snacks extends vmitem;
constraint size_id {soft idd.size()==10;};
constraint size_prc {prc.size()==idd.size();
solve idd.size() before prc.size();};
constraint id { foreach(idd[i]) {
unique {idd[i]};
idd[i] inside {[40:50]};
prc[i] == idd[i]; }
}
endclass
class vending_mc;
drinks D;
snacks S;
int slot1=0, slot2=0;
//int selid=0, coins=0;
function void Drinks_Snacks(int id=0, int pay=0);
int vitem=0;
D=new();
S=new();
D.randomize() with {idd.size()==10; idd[0]==20;};
S.randomize() with {idd.size()==6;};
//slot1=vm_out(selid, coins);
//slot2=vm_out(selid, coins);
foreach (D.idd[i]) begin
if (id==D.idd[i] && pay==D.prc[i]) begin
vitem=D.idd[i];
slot1=vitem;
end
end
foreach (S.idd[i]) begin
if (id==S.idd[i] && pay==S.prc[i]) begin
vitem=S.idd[i];
slot2=vitem;
end
end
endfunction
function void printitems();
foreach (D.idd[i]) begin
$display(“Drink id[%0d]=%0d\n”, i, D.idd[i]);
end
foreach (S.idd[i]) begin
$display("Snacks id[%0d]=%0d\n", i, S.idd[i]);
end
endfunction
endclass
module vmtest;
vending_mc VM;
int userid=20, usercoins=20; //Add Initialise for all items also. TODO
initial begin
VM = new();
VM.Drinks_Snacks(userid, usercoins);
VM.printitems();
$display(“Slot1 Drink=%0d”, VM.slot1);
$display(“Slot2 Snacks=%0d”, VM.slot2);
end
endmodule
EDA: EDA Playground