Skip to content

SystemVerilog Casting

Static Casting (Synthesizeable)

The casting happens at compile time. So there is no error checking to see if the result is a legal value. Use this in design or test bench.

Format

<type>'(<expression or variable>)

Examples

// Sign casting
a = signed'(x);
a = unsigned'(y);

// Size casting
int unsigned num;
logic  [7:0] a;
a = 8'(num); // Reduce integer (32b) to 8b

// type casting
a = const'(x);
a = some_enum_e'(int_var);

Dynamic Casting (Non-synthesizeable)

This casting happens at run-time. If the casting is invalid, an error is reported.

Format

$cast(dest_var, source_expression_or_var);

Examples

typedef enum {Peter, John, Mary} students_e;
students_e std;

if (!$cast(std, 5+8)) // 13: Invalid cast, results in error
  $display("Cast error");

Subscribe

Every month or so I send out a newsletter with lessons from my experience, notable technical papers, and notifications about new articles.

If you found this content useful then please consider supporting this site! 🫶

Buy Me A Coffee