| `default_nettype none | |
| // This module represents an unprogrammed mask revision | |
| // block that is configured with via programming on the | |
| // chip top level. This value is passed to the block as | |
| // a parameter | |
| module user_id_programming #( | |
| parameter [ 0:0] USER_PROJECT_ID = 32'h0 | |
| ) ( | |
| `ifdef USE_POWER_PINS | |
| inout vdd1v8, | |
| inout vss, | |
| `endif | |
| output [31:0] mask_rev | |
| ); | |
| wire [31:0] mask_rev; | |
| wire [31:0] user_proj_id_high; | |
| wire [31:0] user_proj_id_low; | |
| // For the mask revision input, use an array of digital constant logic cells | |
| sky130_fd_sc_hd__conb_1 mask_rev_value [31:0] ( | |
| `ifdef USE_POWER_PINS | |
| .VPWR(vdd1v8), | |
| .VPB(vdd1v8), | |
| .VNB(vss), | |
| .VGND(vss), | |
| `endif | |
| .HI(user_proj_id_high), | |
| .LO(user_proj_id_low) | |
| ); | |
| genvar i; | |
| generate | |
| for (i = 0; i < 32; i = i+1) begin | |
| assign mask_rev[i] = (USER_PROJECT_ID & (32'h01 << i)) ? | |
| user_proj_id_high[i] : user_proj_id_low[i]; | |
| end | |
| endgenerate | |
| endmodule | |
| `default_nettype wire |