sv2v/test/relong/case.v

69 lines
1.4 KiB
Verilog

`default_nettype none
module Example(
input wire [1:0] select,
// This is an array of 3 (4-bit wide) elements
output wire [11:0] data
);
// Unflatten the array
wire [3:0] __data[2:0];
assign data = {__data[2], __data[1], __data[0]};
UniqueCase case0(.select(select), .data(__data[0]));
WildcardCase case1(.select(select), .data(__data[1]));
DefaultCase case2(.select(select), .data(__data[2]));
endmodule
module UniqueCase(
input wire [1:0] select,
output reg [3:0] data
);
always @* begin
data = 4'b0;
// Unique keyword doesn't exist in Verilog
case(select)
2'd0: data = 4'ha;
2'd1: data = 4'h6;
2'd2: data = 4'h3;
endcase
end
endmodule
module WildcardCase(
input wire [1:0] select,
output reg [3:0] data
);
always @* begin
data = 4'b0;
// Unique keyword doesn't exist in Verilog
// casez doesn't exist in VTR, so manually elaborating it
case(select) // casez
2'b00: data = 4'h3;
// 2'b1?: data = 4'hd;
2'b10: data = 4'hd;
2'b11: data = 4'hd;
endcase
end
endmodule
module DefaultCase(
input wire [1:0] select,
output reg [3:0] data
);
always @* begin
data = 4'b0;
case (select)
2'b00: data = 4'h7;
2'b01: data = 4'h9;
default: data = 4'h8;
endcase
end
endmodule