blob: 526a802492b5a2e17075c855ebb459090a867f9f [file] [log] [blame]
Matt Venn08cd6eb2020-11-16 12:01:14 +01001`default_nettype none
Tim Edwards04ba17f2020-10-02 22:27:50 -04002// This module represents an unprogrammed mask revision
3// block that is configured with via programming on the
4// chip top level. This value is passed to the block as
5// a parameter
6
7module user_id_programming #(
8 parameter [ 0:0] USER_PROJECT_ID = 32'h0
9) (
Tim Edwards21a9aac2020-10-12 22:05:18 -040010 inout vdd1v8,
11 inout vss,
Tim Edwards04ba17f2020-10-02 22:27:50 -040012 output [31:0] mask_rev
13);
14 wire [31:0] mask_rev;
15 wire [31:0] user_proj_id_high;
16 wire [31:0] user_proj_id_low;
17
18 // For the mask revision input, use an array of digital constant logic cells
19
20 sky130_fd_sc_hd__conb_1 mask_rev_value [31:0] (
Ahmed Ghazy64c17e82020-11-18 20:17:26 +020021`ifdef USE_POWER_PINS
Tim Edwards4c733352020-10-12 16:32:36 -040022 .VPWR(vdd1v8),
23 .VPB(vdd1v8),
24 .VNB(vss),
25 .VGND(vss),
Ahmed Ghazy64c17e82020-11-18 20:17:26 +020026`endif
Tim Edwards04ba17f2020-10-02 22:27:50 -040027 .HI(user_proj_id_high),
28 .LO(user_proj_id_low)
29 );
30
31 genvar i;
32 generate
33 for (i = 0; i < 32; i = i+1) begin
34 assign mask_rev[i] = (USER_PROJECT_ID & (32'h01 << i)) ?
35 user_proj_id_high[i] : user_proj_id_low[i];
36 end
37 endgenerate
38
39endmodule
Tim Edwards581068f2020-11-19 12:45:25 -050040`default_nettype wire