blob: d9f1527abe4c73cf6dba0ceac2c533e29a5bb3ed [file] [log] [blame] [edit]
`default_nettype none
// So Verilog is very sad when it comes to enumerations. The easiest way to emulate this behavior is probably to define a macro for the enumeration and then instantiate it everywhere the type is used.
`define MODE_T\
parameter MODE_A = 32'b0;\
parameter MODE_B = 32'b1
`define OPERATION_T\
parameter READ = 2'd1;\
parameter WRITE = 2'd2;\
parameter NONE = 2'd0
module Example(
input wire rawMode,
output wire [1:0] rawOperation
);
`MODE_T;
`OPERATION_T;
// Enumeration variables don't have types, so they need to be default wires.
// Technically this could be just one bit if the tool is smart enough to realize.
wire [31:0] mode;
reg [1:0] operation;
// No need for a cast since everything is a wire
assign mode = rawMode;
assign rawOperation = operation;
always @* begin
case(mode)
MODE_A: operation = READ;
MODE_B: operation = WRITE;
default: operation = NONE;
endcase
end
endmodule