`default_nettype none // Technically the value assignment could be anything, but most tools default to a 32-bit logic assigning MODE_A = 0 and MODE_B = 1 typedef enum {MODE_A, MODE_B} Mode_t; typedef enum logic [1:0] {READ=2'd1, WRITE=2'd2, NONE=2'd0} Operation_t; module Example( input logic rawMode, output logic [1:0] rawOperation ); Mode_t mode; Operation_t operation; // cast into a strongly typed variant assign mode = Mode_t'(rawMode); assign rawOperation = operation; always_comb begin case(mode) MODE_A: operation = READ; MODE_B: operation = WRITE; default: operation = NONE; endcase end endmodule