SystemVerilog enum example’s
Table of Contents
enum data type
Example-3 : Enumeration Type [DataTypes]
This example shows an error, in case of automatic increment-value, is the same as the value assigned to another enum member.
module enum_datatype;
//declaration
enum { red=0, green=1, blue=4, yellow, white=5, black=6 } Colors;
initial begin
Colors = Colors.first;
for(int i=0;i<6;i++)
$display("Colors :: Value of %0s is = %0d",Colors.name(),Colors);
end
endmodule
Simulator Output
Error-[ENUMDUPL] Duplicate labels in enum testbench.sv, 9 The enum label 'white' has the value 5 which is duplicate of enum label 'yellow' in the declared enum. 1 error
Example-4 : Enumeration Type [DataTypes]
This example shows declaring new data types using the enumerated type.
module enum_datatype;
//declaration
typedef enum {GOOD, BAD} pkt_type;
pkt_type pkt_a;
pkt_type pkt_b;
initial begin
pkt_a = GOOD;
pkt_b=BAD;
if(pkt_a == GOOD)
$display("pkt_a is GOOD packet");
else
$display("pkt_a is BAD packet");
if(pkt_b == GOOD)
$display("pkt_b is GOOD packet");
else
$display("pkt_b is BAD packet");
end
endmodule
Simulator Output
pkt_a is GOOD packet pkt_b is BAD packet
Example-5 : Enumeration Type [DataTypes]
This example shows how to use enumeration methods.
module enum_datatype;
//declaration
typedef enum { red=0, green, blue=4, yellow, white=10, black } colors;
enum { a, b, c, d, e, f, g } alphabets;
colors first_set;
colors second_set;
initial begin
first_set = first_set.first();
$display("first_set first color is \t %0s, \t Value = %0d", first_set.name(),first_set);
first_set = first_set.last();
$display("first_set last color is \t %0s, \t Value = %0d", first_set.name(),first_set);
second_set = first_set;
$display("second_set color is \t %0s, \t Value = %0d", second_set.name(),second_set);
second_set =second_set.prev(2);
$display("second_set color is \t %0s, \t Value = %0d", second_set.name(),second_set);
second_set =second_set.next(2);
$display("second_set color is \t %0s, \t Value = %0d", second_set.name(),second_set);
$display("Number of members in alphabets is \t %0d",alphabets.num());
$display("Default First members in alphabets is \t %0s , \t value is %0d",alphabets.name(),alphabets);
alphabets=alphabets.next;
$display("Next members in alphabets is \t %0s , \t value is %0d",alphabets.name(),alphabets);
alphabets=alphabets.last;
$display("Last members in alphabets is \t %0s , \t value is %0d",alphabets.name(),alphabets);
alphabets=alphabets.prev(3);
$display("3rd members from last in alphabets is \t %0s , \t value is %0d",alphabets.name(),alphabets);
end
endmodule
Simulator Output
first_set first color is red, Value = 0 first_set last color is black, Value = 11 second_set color is black, Value = 11 second_set color is yellow, Value = 5 second_set color is black, Value = 11 Number of members in alphabets is 7 Default First members in alphabets is a and value is 0 Next members in alphabets is b , value is 1 Last members in alphabets is g , value is 6 3rd members from last in alphabets is d , value is 3
class data type
A Class is a collection of data and a set of subroutines that operate on that data. The data in a class are referred to as class properties, and its subroutines are called methods.A Class is declared using the class…endclass keywords.
Class type example
class packet;
// Properties
bit [31:0] address;
bit [31:0] data ;
// Method
function new();
$display("Inside new Function of packet");
endfunction
endclass : packet
A detailed explanation of Classes is explained in later chapters(SystemVerilog Classes).
