caravel/verilog/rtl/__openframe_project_wrapper.v

149 lines
5.3 KiB
Coq
Raw Normal View History

// SPDX-FileCopyrightText: 2020 Efabless Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
`default_nettype none
/*
*-------------------------------------------------------------
*
* openframe_project_wrapper
*
* This wrapper enumerates all of the pins available to the
* user for the user openframe project.
*
* Written by Tim Edwards
* March 27, 2023
* Efabless Corporation
*
*-------------------------------------------------------------
*/
module openframe_project_wrapper (
`ifdef USE_POWER_PINS
inout vdda, // User area 0 3.3V supply
inout vdda1, // User area 1 3.3V supply
inout vdda2, // User area 2 3.3V supply
inout vssa, // User area 0 analog ground
inout vssa1, // User area 1 analog ground
inout vssa2, // User area 2 analog ground
inout vccd, // Common 1.8V supply
inout vccd1, // User area 1 1.8V supply
inout vccd2, // User area 2 1.8v supply
inout vssd, // Common digital ground
inout vssd1, // User area 1 digital ground
inout vssd2, // User area 2 digital ground
`endif
/* Signals exported from the frame area to the user project */
/* The user may elect to use any of these inputs. */
input porb_h, // power-on reset, sense inverted, 3.3V domain
input porb_l, // power-on reset, sense inverted, 1.8V domain
input por_l, // power-on reset, noninverted, 1.8V domain
input resetb_h, // master reset, sense inverted, 3.3V domain
input resetb_l, // master reset, sense inverted, 1.8V domain
input [31:0] mask_rev, // 32-bit user ID, 1.8V domain
/* GPIOs. There are 44 GPIOs (19 left, 19 right, 6 bottom). */
/* These must be configured appropriately by the user project. */
/* Basic bidirectional I/O. Input gpio_in_h is in the 3.3V domain; all
* others are in the 1.8v domain. OEB is output enable, sense inverted.
*/
input [`OPENFRAME_IO_PADS-1:0] gpio_in,
input [`OPENFRAME_IO_PADS-1:0] gpio_in_h,
output [`OPENFRAME_IO_PADS-1:0] gpio_out,
output [`OPENFRAME_IO_PADS-1:0] gpio_oeb,
/* Pad configuration. These signals are usually static values.
* See the documentation for the sky130_fd_io__gpiov2 cell signals
* and their use.
*/
output [`OPENFRAME_IO_PADS-1:0] gpio_inp_dis,
output [`OPENFRAME_IO_PADS-1:0] gpio_ib_mode_sel,
output [`OPENFRAME_IO_PADS-1:0] gpio_vtrip_sel,
output [`OPENFRAME_IO_PADS-1:0] gpio_slow_sel,
output [`OPENFRAME_IO_PADS-1:0] gpio_holdover,
output [`OPENFRAME_IO_PADS-1:0] gpio_analog_en,
output [`OPENFRAME_IO_PADS-1:0] gpio_analog_sel,
output [`OPENFRAME_IO_PADS-1:0] gpio_analog_pol,
output [`OPENFRAME_IO_PADS-1:0] gpio_dm2,
output [`OPENFRAME_IO_PADS-1:0] gpio_dm1,
output [`OPENFRAME_IO_PADS-1:0] gpio_dm0,
/* These signals correct directly to the pad. Pads using analog I/O
* connections should keep the digital input and output buffers turned
* off. Both signals connect to the same pad. The "noesd" signal
* is a direct connection to the pad; the other signal connects through
* a series resistor which gives it minimal ESD protection. Both signals
* have basic over- and under-voltage protection at the pad. These
* signals may be expected to attenuate heavily above 50MHz.
*/
inout [`OPENFRAME_IO_PADS-1:0] analog_io,
inout [`OPENFRAME_IO_PADS-1:0] analog_noesd_io,
/* These signals are constant one and zero in the 1.8V domain, one for
* each GPIO pad, and can be looped back to the control signals on the
* same GPIO pad to set a static configuration at power-up.
*/
input [`OPENFRAME_IO_PADS-1:0] gpio_loopback_one,
input [`OPENFRAME_IO_PADS-1:0] gpio_loopback_zero
);
`ifdef OPENFRAME_TESTING
openframe_example test_example (
`ifdef USE_POWER_PINS
.vdda(vdda),
.vdda1(vdda1),
.vdda2(vdda2),
.vssa(vssa),
.vssa1(vssa1),
.vssa2(vssa2),
.vccd(vccd),
.vccd1(vccd1),
.vccd2(vccd2),
.vssd(vssd),
.vssd1(vssd1),
.vssd2(vssd2),
`endif
.porb_h(porb_h),
.porb_l(porb_l),
.por_l(por_l),
.resetb_h(resetb_h),
.resetb_l(resetb_l),
.mask_rev(mask_rev),
.gpio_in(gpio_in),
.gpio_in_h(gpio_in_h),
.gpio_out(gpio_out),
.gpio_oeb(gpio_oeb),
.gpio_inp_dis(gpio_inp_dis),
.gpio_ib_mode_sel(gpio_ib_mode_sel),
.gpio_vtrip_sel(gpio_vtrip_sel),
.gpio_slow_sel(gpio_slow_sel),
.gpio_holdover(gpio_holdover),
.gpio_analog_en(gpio_analog_en),
.gpio_analog_sel(gpio_analog_sel),
.gpio_analog_pol(gpio_analog_pol),
.gpio_dm2(gpio_dm2),
.gpio_dm1(gpio_dm1),
.gpio_dm0(gpio_dm0),
.analog_io(analog_io),
.analog_noesd_io(analog_noesd_io),
.gpio_loopback_one(gpio_loopback_one),
.gpio_loopback_zero(gpio_loopback_zero)
);
`endif
endmodule // openframe_project_wrapper