Dynamic Casting - vineethkumarv/SystemVerilog_Course GitHub Wiki

Dynamic Casting

Dynamic casting is the concept of changing one data type to another that do not exist generally.

  • It is done while run time.
  • Using $cast keyword we can achieve dynamic casting.
  • $cast can be a function or a task.

Syntax: $cast(destination,source);

$cast as a task

To use $cast as a task we just use $cast without assigning it to any variable.

  • As task has no return value the task implementation of cast do not return any value.
  • and any error in casting like non-compatible sizes with lead to error.

syntax: $cast(destination,source);

Code Snippet

module DC_task;                                                      
typedef enum {red=20,blue=30,green=40}color;                                                        
int a,b;                                                                                            
color c,d;                                   
initial begin                                                                                       
  a=40;
  $cast(d,"hi"); //throws error while run time, to avoid we use function
  $cast(c,a);//task implementation                                         
  $display("color is %0d and return value is %0d",c,d);                                                    
end                                                                                                 
endmodule 

output:

image

             Fig.output of cast as task implementation

$cast as a function

To use $cast as a function we use it where a value is to be returned.

  • $cast is used as a function to skip the error if casting fails.
  • The default value returned is 0,so no error is thrown.

Syntax: variable = $cast(destination,source);

Code Snippet

   module DC_fun;                                                                                      
   typedef enum {red=20,blue=30,green=40}color;                                                        
   int a,b;                                                                                            
   color c;                                                                                            
   initial begin                                                                                       
     a=40;                                                                                             
     b=$cast(c,"hi");//default function value is 0                                                     
     $display("color is %0d and return value is %0d",c,b);                                             
     //why function means if cast doesnot happen the program still runs with no error                  
   end                                                                                                 
   endmodule    

output:
image

         Fig.output of cast as function implementation