blob: 934f9d732f4c5b00ed55bb6cd3eb1fd19f8f8850 [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) (
Ahmed Ghazy27200e92020-11-25 22:07:02 +020010`ifdef USE_POWER_PINS
Tim Edwards21a9aac2020-10-12 22:05:18 -040011 inout vdd1v8,
12 inout vss,
Ahmed Ghazy27200e92020-11-25 22:07:02 +020013`endif
Tim Edwards04ba17f2020-10-02 22:27:50 -040014 output [31:0] mask_rev
15);
16 wire [31:0] mask_rev;
17 wire [31:0] user_proj_id_high;
18 wire [31:0] user_proj_id_low;
19
20 // For the mask revision input, use an array of digital constant logic cells
21
22 sky130_fd_sc_hd__conb_1 mask_rev_value [31:0] (
Ahmed Ghazy64c17e82020-11-18 20:17:26 +020023`ifdef USE_POWER_PINS
Tim Edwards4c733352020-10-12 16:32:36 -040024 .VPWR(vdd1v8),
25 .VPB(vdd1v8),
26 .VNB(vss),
27 .VGND(vss),
Ahmed Ghazy64c17e82020-11-18 20:17:26 +020028`endif
Tim Edwards04ba17f2020-10-02 22:27:50 -040029 .HI(user_proj_id_high),
30 .LO(user_proj_id_low)
31 );
32
33 genvar i;
34 generate
35 for (i = 0; i < 32; i = i+1) begin
36 assign mask_rev[i] = (USER_PROJECT_ID & (32'h01 << i)) ?
37 user_proj_id_high[i] : user_proj_id_low[i];
38 end
39 endgenerate
40
41endmodule
Tim Edwards581068f2020-11-19 12:45:25 -050042`default_nettype wire