blob: c5c79f365b0fd5e60e71463e56113969db1b53c2 [file] [log] [blame]
Matt Venn08cd6eb2020-11-16 12:01:14 +01001`default_nettype none
Tim Edwards53d92182020-10-11 21:47:40 -04002/*----------------------------------------------------------------------*/
3/* Buffers protecting the management region from the user region. */
4/* This mainly consists of tristate buffers that are enabled by a */
5/* "logic 1" output connected to the user's VCCD domain. This ensures */
6/* that the buffer is disabled and the output high-impedence when the */
7/* user 1.8V supply is absent. */
8/*----------------------------------------------------------------------*/
9/* Because there is no tristate buffer with a non-inverted enable, a */
10/* tristate inverter with non-inverted enable is used in series with */
11/* another (normal) inverter. */
12/*----------------------------------------------------------------------*/
13/* For the sake of placement/routing, one conb (logic 1) cell is used */
14/* for every buffer. */
15/*----------------------------------------------------------------------*/
16
17module mgmt_protect (
Tim Edwards53d92182020-10-11 21:47:40 -040018 inout vccd,
19 inout vssd,
20 inout vccd1,
21 inout vssd1,
Tim Edwards32d05422020-10-19 19:43:52 -040022 inout vccd2,
23 inout vssd2,
Tim Edwards05ad4fc2020-10-19 22:12:33 -040024 inout vdda1,
25 inout vssa1,
26 inout vdda2,
27 inout vssa2,
Tim Edwards53d92182020-10-11 21:47:40 -040028
29 input caravel_clk,
Tim Edwards7a8cbb12020-10-12 11:32:11 -040030 input caravel_clk2,
Tim Edwards53d92182020-10-11 21:47:40 -040031 input caravel_rstn,
32 input mprj_cyc_o_core,
33 input mprj_stb_o_core,
34 input mprj_we_o_core,
35 input [3:0] mprj_sel_o_core,
36 input [31:0] mprj_adr_o_core,
37 input [31:0] mprj_dat_o_core,
38 input [127:0] la_output_core,
39 input [127:0] la_oen,
40
41 output user_clock,
Tim Edwards7a8cbb12020-10-12 11:32:11 -040042 output user_clock2,
Tim Edwards53d92182020-10-11 21:47:40 -040043 output user_resetn,
Ahmed Ghazy69663c72020-11-18 20:15:53 +020044 output user_reset,
Tim Edwards53d92182020-10-11 21:47:40 -040045 output mprj_cyc_o_user,
46 output mprj_stb_o_user,
47 output mprj_we_o_user,
48 output [3:0] mprj_sel_o_user,
49 output [31:0] mprj_adr_o_user,
50 output [31:0] mprj_dat_o_user,
Tim Edwards32d05422020-10-19 19:43:52 -040051 output [127:0] la_data_in_mprj,
Tim Edwards05ad4fc2020-10-19 22:12:33 -040052 output user1_vcc_powergood,
53 output user2_vcc_powergood,
54 output user1_vdd_powergood,
55 output user2_vdd_powergood
Tim Edwards53d92182020-10-11 21:47:40 -040056);
57
Tim Edwards32d05422020-10-19 19:43:52 -040058 wire [74:0] mprj_logic1;
59 wire mprj2_logic1;
Tim Edwards05ad4fc2020-10-19 22:12:33 -040060
61 wire mprj_vdd_logic1_h;
62 wire mprj2_vdd_logic1_h;
63 wire mprj_vdd_logic1;
64 wire mprj2_vdd_logic1;
65
66 wire user1_vcc_powergood;
67 wire user2_vcc_powergood;
68 wire user1_vdd_powergood;
69 wire user2_vdd_powergood;
Tim Edwards53d92182020-10-11 21:47:40 -040070
Tim Edwards32d05422020-10-19 19:43:52 -040071 sky130_fd_sc_hd__conb_1 mprj_logic_high [74:0] (
Ahmed Ghazy69663c72020-11-18 20:15:53 +020072`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -040073 .VPWR(vccd1),
74 .VGND(vssd1),
75 .VPB(vccd1),
76 .VNB(vssd1),
Ahmed Ghazy69663c72020-11-18 20:15:53 +020077`endif
Tim Edwards53d92182020-10-11 21:47:40 -040078 .HI(mprj_logic1),
79 .LO()
80 );
81
Tim Edwards32d05422020-10-19 19:43:52 -040082 sky130_fd_sc_hd__conb_1 mprj2_logic_high (
Ahmed Ghazy69663c72020-11-18 20:15:53 +020083`ifdef USE_POWER_PINS
Tim Edwards32d05422020-10-19 19:43:52 -040084 .VPWR(vccd2),
85 .VGND(vssd2),
86 .VPB(vccd2),
87 .VNB(vssd2),
Ahmed Ghazy69663c72020-11-18 20:15:53 +020088`endif
Tim Edwards32d05422020-10-19 19:43:52 -040089 .HI(mprj2_logic1),
90 .LO()
91 );
92
Tim Edwards05ad4fc2020-10-19 22:12:33 -040093 // Logic high in the VDDA (3.3V) domains
94
95 sky130_fd_sc_hvl__conb_1 mprj_logic_high_hvl (
Ahmed Ghazy69663c72020-11-18 20:15:53 +020096`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -040097 .VPWR(vdda1),
98 .VGND(vssa1),
99 .VPB(vdda1),
100 .VNB(vssa1),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200101`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400102 .HI(mprj_vdd_logic1_h),
103 .LO()
104 );
105
106 sky130_fd_sc_hvl__conb_1 mprj2_logic_high_hvl (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200107`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400108 .VPWR(vdda2),
109 .VGND(vssa2),
110 .VPB(vdda2),
111 .VNB(vssa2),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200112`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400113 .HI(mprj2_vdd_logic1_h),
114 .LO()
115 );
116
117 // Level shift the logic high signals into the 1.8V domain
118
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200119 sky130_fd_sc_hvl__lsbufhv2lv_1 mprj_logic_high_lv (
120`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400121 .VPWR(vdda1),
122 .VGND(vssd),
123 .LVPWR(vccd),
124 .VPB(vdda1),
125 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200126`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400127 .X(mprj_vdd_logic1),
128 .A(mprj_vdd_logic1_h)
129 );
130
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200131 sky130_fd_sc_hvl__lsbufhv2lv_1 mprj2_logic_high_lv (
132`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400133 .VPWR(vdda2),
134 .VGND(vssd),
135 .LVPWR(vccd),
136 .VPB(vdda2),
137 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200138`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400139 .X(mprj2_vdd_logic1),
140 .A(mprj2_vdd_logic1_h)
141 );
Tim Edwards32d05422020-10-19 19:43:52 -0400142
Tim Edwards53d92182020-10-11 21:47:40 -0400143 sky130_fd_sc_hd__einvp_8 mprj_rstn_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200144`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400145 .VPWR(vccd),
146 .VGND(vssd),
147 .VPB(vccd),
148 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200149`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400150 .Z(user_resetn),
151 .A(~caravel_rstn),
152 .TE(mprj_logic1[0])
153 );
154
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200155 assign user_reset = ~user_resetn;
156
Tim Edwards53d92182020-10-11 21:47:40 -0400157 sky130_fd_sc_hd__einvp_8 mprj_clk_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200158`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400159 .VPWR(vccd),
160 .VGND(vssd),
161 .VPB(vccd),
162 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200163`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400164 .Z(user_clock),
165 .A(~caravel_clk),
166 .TE(mprj_logic1[1])
167 );
168
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400169 sky130_fd_sc_hd__einvp_8 mprj_clk2_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200170`ifdef USE_POWER_PINS
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400171 .VPWR(vccd),
172 .VGND(vssd),
173 .VPB(vccd),
174 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200175`endif
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400176 .Z(user_clock2),
177 .A(~caravel_clk2),
178 .TE(mprj_logic1[2])
179 );
180
Tim Edwards53d92182020-10-11 21:47:40 -0400181 sky130_fd_sc_hd__einvp_8 mprj_cyc_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200182`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400183 .VPWR(vccd),
184 .VGND(vssd),
185 .VPB(vccd),
186 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200187`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400188 .Z(mprj_cyc_o_user),
189 .A(~mprj_cyc_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400190 .TE(mprj_logic1[3])
Tim Edwards53d92182020-10-11 21:47:40 -0400191 );
192
193 sky130_fd_sc_hd__einvp_8 mprj_stb_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200194`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400195 .VPWR(vccd),
196 .VGND(vssd),
197 .VPB(vccd),
198 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200199`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400200 .Z(mprj_stb_o_user),
201 .A(~mprj_stb_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400202 .TE(mprj_logic1[4])
Tim Edwards53d92182020-10-11 21:47:40 -0400203 );
204
205 sky130_fd_sc_hd__einvp_8 mprj_we_buf (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200206`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400207 .VPWR(vccd),
208 .VGND(vssd),
209 .VPB(vccd),
210 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200211`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400212 .Z(mprj_we_o_user),
213 .A(~mprj_we_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400214 .TE(mprj_logic1[5])
Tim Edwards53d92182020-10-11 21:47:40 -0400215 );
216
217 sky130_fd_sc_hd__einvp_8 mprj_sel_buf [3:0] (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200218`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400219 .VPWR(vccd),
220 .VGND(vssd),
221 .VPB(vccd),
222 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200223`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400224 .Z(mprj_sel_o_user),
225 .A(~mprj_sel_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400226 .TE(mprj_logic1[9:6])
Tim Edwards53d92182020-10-11 21:47:40 -0400227 );
228
229 sky130_fd_sc_hd__einvp_8 mprj_adr_buf [31:0] (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200230`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400231 .VPWR(vccd),
232 .VGND(vssd),
233 .VPB(vccd),
234 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200235`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400236 .Z(mprj_adr_o_user),
237 .A(~mprj_adr_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400238 .TE(mprj_logic1[41:10])
Tim Edwards53d92182020-10-11 21:47:40 -0400239 );
240
241 sky130_fd_sc_hd__einvp_8 mprj_dat_buf [31:0] (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200242`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400243 .VPWR(vccd),
244 .VGND(vssd),
245 .VPB(vccd),
246 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200247`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400248 .Z(mprj_dat_o_user),
249 .A(~mprj_dat_o_core),
Tim Edwards7a8cbb12020-10-12 11:32:11 -0400250 .TE(mprj_logic1[73:42])
Tim Edwards53d92182020-10-11 21:47:40 -0400251 );
252
253 /* The LA buffers are controlled from the user side, so */
254 /* it is only necessary to make sure that the function */
255 /* is inverting the OEB signal and using positive-sense */
256 /* enable, so that the buffer is disabled on user-side */
257 /* power-down of vccd1. */
258
259 sky130_fd_sc_hd__einvp_8 la_buf [127:0] (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200260`ifdef USE_POWER_PINS
Tim Edwards53d92182020-10-11 21:47:40 -0400261 .VPWR(vccd),
262 .VGND(vssd),
263 .VPB(vccd),
264 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200265`endif
Tim Edwards53d92182020-10-11 21:47:40 -0400266 .Z(la_data_in_mprj),
267 .A(~la_output_core),
268 .TE(~la_oen)
269 );
270
Tim Edwards32d05422020-10-19 19:43:52 -0400271 /* The conb cell output is a resistive connection directly to */
272 /* the power supply, so when returning the user1_powergood */
273 /* signal, make sure that it is buffered properly. */
274
275 sky130_fd_sc_hd__buf_8 mprj_pwrgood (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200276`ifdef USE_POWER_PINS
Tim Edwards32d05422020-10-19 19:43:52 -0400277 .VPWR(vccd),
278 .VGND(vssd),
279 .VPB(vccd),
280 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200281`endif
Tim Edwards32d05422020-10-19 19:43:52 -0400282 .A(mprj_logic1[74]),
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400283 .X(user1_vcc_powergood)
Tim Edwards32d05422020-10-19 19:43:52 -0400284 );
285
286 sky130_fd_sc_hd__buf_8 mprj2_pwrgood (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200287`ifdef USE_POWER_PINS
Tim Edwards32d05422020-10-19 19:43:52 -0400288 .VPWR(vccd),
289 .VGND(vssd),
290 .VPB(vccd),
291 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200292`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400293 .A(mprj2_logic1),
294 .X(user2_vcc_powergood)
Tim Edwards32d05422020-10-19 19:43:52 -0400295 );
296
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400297 sky130_fd_sc_hd__buf_8 mprj_vdd_pwrgood (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200298`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400299 .VPWR(vccd),
300 .VGND(vssd),
301 .VPB(vccd),
302 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200303`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400304 .A(mprj_vdd_logic1),
305 .X(user_vdd_powergood)
306 );
307
308 sky130_fd_sc_hd__buf_8 mprj2_vdd_pwrgood (
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200309`ifdef USE_POWER_PINS
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400310 .VPWR(vccd),
311 .VGND(vssd),
312 .VPB(vccd),
313 .VNB(vssd),
Ahmed Ghazy69663c72020-11-18 20:15:53 +0200314`endif
Tim Edwards05ad4fc2020-10-19 22:12:33 -0400315 .A(mprj2_vdd_logic1),
316 .X(user2_vdd_powergood)
317 );
Tim Edwards53d92182020-10-11 21:47:40 -0400318endmodule