blob: d3186c17732e3657812ee808266709ebf8938ac1 [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] (
Tim Edwards4c733352020-10-12 16:32:36 -040021 .VPWR(vdd1v8),
22 .VPB(vdd1v8),
23 .VNB(vss),
24 .VGND(vss),
Tim Edwards04ba17f2020-10-02 22:27:50 -040025 .HI(user_proj_id_high),
26 .LO(user_proj_id_low)
27 );
28
29 genvar i;
30 generate
31 for (i = 0; i < 32; i = i+1) begin
32 assign mask_rev[i] = (USER_PROJECT_ID & (32'h01 << i)) ?
33 user_proj_id_high[i] : user_proj_id_low[i];
34 end
35 endgenerate
36
37endmodule