| `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 |