Emilio Baungarten
02/21/2024, 10:49 PMMitch Bailey
02/22/2024, 1:06 AMlogs/OEB_check.log
gpio | in | out | analog | oeb min/sim/max | Message
30 | 320 | | | vssd*/vssd*/vssd* | Warning: oeb expected high for input only
31 | 1892 | | | vssd*/vssd*/vssd* | Warning: oeb expected high for input only
The io_in[30]
(reset
) input is connected to 320 devices and io_in[31]
(clk
) is connected to 1892.
Maybe you are still in the initial stage of floorplanning, but you’ll probably want to buffer these inputs and use clock trees. I don’t know how to do that with your layout, though.
LVS is missing the gate level modules or spice subcircuits for these cells
cbx_1__0_
cbx_1__10_
cbx_1__1_
cby_0__1_
cby_1__1_
cby_8__1_
grid_clb
grid_io_bottom
grid_io_left
grid_io_right
grid_io_top
ioenb
sb_0__0_
sb_0__10_
sb_0__1_
sb_1__0_
sb_1__10_
sb_1__1_
sb_8__0_
sb_8__10_
sb_8__1_
You can add these to the lvs/user_project_wrapper/lvs_config.json
file in the LVS_VERILOG_FILES
list.
"LVS_VERILOG_FILES": [
"$UPRJ_ROOT/verilog/gl/cbx_*.v",
"$UPRJ_ROOT/verilog/gl/cby_*.v",
"$UPRJ_ROOT/verilog/gl/grid_*.v",
"$UPRJ_ROOT/verilog/gl/ioenb.v",
In the latest version of netgen, the order is not important, but precheck may be using an older version, so list the lower modules first.Mitch Bailey
02/22/2024, 1:06 AM/grid_io_bottom_0_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_7__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_0_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__0_(sb_8__0_)/Xinput20(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_1__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_1__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_1_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_6__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_1_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_7__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_2__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_2__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_2_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_5__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_2_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_6__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_3__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_3__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_3_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_4__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_3_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_5__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_4__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_4__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_4_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_3__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_4_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_4__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_5__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_5__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_5_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_2__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_5_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_3__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_6__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_6__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_6_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_1__0_(sb_1__0_)/Xinput31(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_6_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_2__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_7_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__0_(sb_0__0_)/Xinput20(sky130_fd_sc_hd__clkbuf_1)
/grid_io_bottom_7_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_1__0_(sb_1__0_)/Xinput29(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_0__1_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__1_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0__2_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__2_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0__3_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__3_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__0_(sb_0__0_)/Xinput22(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_0_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__1_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_1_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__1_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_1_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__2_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_2_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__2_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_2_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__3_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_3_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__3_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_3_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__4_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_4_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__4_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_4_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__5_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_5_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__5_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_5_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__6_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_6_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__6_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_6_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__7_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_7_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__7_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_7_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__8_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_8_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__8_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_8_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__9_(sb_0__1_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_9_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__10_(sb_0__10_)/Xinput1(sky130_fd_sc_hd__clkbuf_1)
/grid_io_left_9_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__9_(sb_0__1_)/Xinput33(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_0_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__10_(sb_8__10_)/Xinput2(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_0_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__9_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_1_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__8_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_1_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__9_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_2_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__7_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_2_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__8_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_3_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__6_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_3_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__7_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_4_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__5_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_4_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__6_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_5_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__4_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_5_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__5_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_6_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__3_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_6_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__4_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_7_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__2_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_7_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__3_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_8_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__1_(sb_8__1_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_8_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__2_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_right_9_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__0_(sb_8__0_)/Xinput23(sky130_fd_sc_hd__clkbuf_1)
/grid_io_right_9_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__1_(sb_8__1_)/Xinput2(sky130_fd_sc_hd__buf_1)
/grid_io_top_0_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_0__10_(sb_0__10_)/Xinput23(sky130_fd_sc_hd__buf_1)
/grid_io_top_0_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_1__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_1_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_1__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_1_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_2__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_2_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_2__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_2_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_3__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_3_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_3__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_3_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_4__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_4_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_4__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_4_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_5__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_5_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_5__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_5_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_6__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_6_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_6__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_6_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_7__10_(sb_1__10_)/Xinput32(sky130_fd_sc_hd__buf_1)
/grid_io_top_7_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_7__10_(sb_1__10_)/Xinput34(sky130_fd_sc_hd__clkbuf_1)
/grid_io_top_7_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xsb_8__10_(sb_8__10_)/Xinput23(sky130_fd_sc_hd__buf_1)
io_out[0] /Xgrid_io_bottom_7__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[1] /Xgrid_io_bottom_8__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[2] /Xgrid_io_right_9__1_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[3] /Xgrid_io_right_9__2_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[4] /Xgrid_io_right_9__3_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[5] /Xgrid_io_right_9__4_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[6] /Xgrid_io_right_9__5_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[9] /Xgrid_io_right_9__6_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[10] /Xgrid_io_right_9__7_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[11] /Xgrid_io_right_9__8_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[12] /Xgrid_io_right_9__9_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[13] /Xgrid_io_right_9__10_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[14] /Xgrid_io_top_8__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[15] /Xgrid_io_top_7__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[16] /Xgrid_io_top_6__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[17] /Xgrid_io_top_5__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
io_out[18] /Xgrid_io_top_4__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
Emilio Baungarten
02/23/2024, 12:24 AMWARNING ERC CHECK FAILED, stat=4
.
Additionally i'm worry about the max fanout violations warning
How can i solved the ERC warning?, how can i fix the max fanout warning? and Does that affects the functionality of the system?Mitch Bailey
02/25/2024, 9:32 PMverilog/gl
contains both the *.v
and *.nl.v
versions and they are both selected with the current globbing.
SOURCE FILE(S): /home/baungarten2/Desktop/Caravel_FPGA/dependencies/pdks/sky130A/libs.ref/sky130_fd_sc_hd/spice/sky130_ef_sc_hd__decap_12.spice
/home/baungarten2/Desktop/Caravel_FPGA/dependencies/pdks/sky130A/libs.ref/sky130_fd_sc_hd/spice/sky130_fd_sc_hd.spice
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__0_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__0_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__10_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__10_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__1_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cbx_1__1_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_0__1_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_0__1_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_1__1_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_1__1_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_8__1_.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/cby_8__1_.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/grid_clb.nl.v
/home/baungarten2/Desktop/Caravel_FPGA/verilog/gl/grid_clb.v
Looks like you still have the undriven inputs (98) from the CVC check and fanout and slew errors due to non-synthesis of the top level.Emilio Baungarten
02/28/2024, 4:01 PMWARNING ERC CHECK FAILED, stat=4
still happens, even after changing *.v
and *.nl.v
I attached the last precheck.Mitch Bailey
02/29/2024, 12:02 AM/gfpga_pad_GPIO_PAD\[3\] /Xgrid_io_top_4__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[3\] /Xwire4878(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[4\] /Xgrid_io_top_5__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[4\] /Xwire4872(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[5\] /Xgrid_io_top_6__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[5\] /Xwire4866(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[6\] /Xgrid_io_top_7__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[6\] /Xwire4860(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[7\] /Xgrid_io_top_8__11_(grid_io_top)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[7\] /Xwire4849(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[8\] /Xgrid_io_right_9__10_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[8\] /Xwire4963(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[9\] /Xgrid_io_right_9__9_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[9\] /Xwire4908(sky130_fd_sc_hd__dlymetal6s2s_1)
/gfpga_pad_GPIO_PAD\[10\] /Xgrid_io_right_9__8_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[10\] /Xwire4913(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[11\] /Xgrid_io_right_9__7_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[11\] /Xwire4917(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[12\] /Xgrid_io_right_9__6_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[12\] /Xwire4921(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[13\] /Xgrid_io_right_9__5_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[13\] /Xwire4925(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[14\] /Xgrid_io_right_9__4_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[14\] /Xwire4929(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[15\] /Xgrid_io_right_9__3_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[15\] /Xwire4937(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[16\] /Xgrid_io_right_9__2_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[16\] /Xwire4945(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[17\] /Xgrid_io_right_9__1_(grid_io_right)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[17\] /Xwire4953(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[18\] /Xgrid_io_bottom_8__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[18\] /Xwire5053(sky130_fd_sc_hd__clkbuf_2)
/gfpga_pad_GPIO_PAD\[19\] /Xgrid_io_bottom_7__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/gfpga_pad_GPIO_PAD\[19\] /Xwire5068(sky130_fd_sc_hd__dlymetal6s2s_1)
/grid_io_bottom_0_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xmax_length5045(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_0_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5044(sky130_fd_sc_hd__buf_1)
/grid_io_bottom_1__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_1__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_1_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5060(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_2__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_2__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_2_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5073(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_3__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_3__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_3_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5078(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_4__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_4__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_4_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5083(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_5__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_5__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_5_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5088(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_6__0_/gfpga_pad_GPIO_PAD /Xgrid_io_bottom_6__0_(grid_io_bottom)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_bottom_6_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5093(sky130_fd_sc_hd__clkbuf_2)
/grid_io_bottom_7_top_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5097(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_0__1_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__1_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0__2_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__2_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0__3_/gfpga_pad_GPIO_PAD /Xgrid_io_left_0__3_(grid_io_left)/X_7_(sky130_fd_sc_hd__ebufn_8)
/grid_io_left_0_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5030(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_1_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5023(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_2_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5015(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_3_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5007(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_4_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4999(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_5_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4991(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_6_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4983(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_7_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4975(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_8_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4967(sky130_fd_sc_hd__clkbuf_2)
/grid_io_left_9_right_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire5038(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_0_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4956(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_1_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4902(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_2_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4911(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_3_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4916(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_4_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4920(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_5_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4924(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_6_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4928(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_7_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4932(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_8_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4940(sky130_fd_sc_hd__clkbuf_2)
/grid_io_right_9_left_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4947(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_0_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4900(sky130_fd_sc_hd__buf_2)
/grid_io_top_1_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4893(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_2_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4888(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_3_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4883(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_4_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4877(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_5_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4871(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_6_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4865(sky130_fd_sc_hd__clkbuf_2)
/grid_io_top_7_bottom_width_0_height_0_subtile_0__pin_inpad_0_ /Xwire4853(sky130_fd_sc_hd__buf_2)
If these are intentionally tristate signals at the top level, then you might need to specify them as signals that should not be buffered. I’m not exactly sure how to do that.Mitch Bailey
02/29/2024, 12:02 AMEmilio Baungarten
03/13/2024, 6:13 PMmodule GPIO (
input A, // Data output
output Y, // Data input
inout PAD, // bi-directional pad
input DIR // direction control
);
//----- when direction enabled, the signal is propagated from PAD to data input
assign Y = DIR ? PAD : 1'bz;
//----- when direction is disabled, the signal is propagated from data out to pad
assign PAD = DIR ? 1'bz : A;
endmodule
After layout process the generated GL code is the following:
module grid_io_bottom(prog_clk, gfpga_pad_GPIO_PAD, top_width_0_height_0_subtile_0__pin_outpad_0_, ccff_head, top_width_0_height_0_subtile_0__pin_inpad_0_, ccff_tail);
wire _0_;
wire _1_;
wire _2_;
input ccff_head;
wire ccff_head;
output ccff_tail;
wire ccff_tail;
inout gfpga_pad_GPIO_PAD;
wire gfpga_pad_GPIO_PAD;
input prog_clk;
wire prog_clk;
output top_width_0_height_0_subtile_0__pin_inpad_0_;
wire top_width_0_height_0_subtile_0__pin_inpad_0_;
input top_width_0_height_0_subtile_0__pin_outpad_0_;
wire top_width_0_height_0_subtile_0__pin_outpad_0_;
sky130_fd_sc_hd__buf_6 _3_ (
.A(ccff_tail),
.X(_0_)
);
sky130_fd_sc_hd__buf_6 _4_ (
.A(_0_),
.X(_2_)
);
sky130_fd_sc_hd__inv_2 _5_ (
.A(ccff_tail),
.Y(_1_)
);
sky130_fd_sc_hd__dfxtp_2 _6_ (
.CLK(prog_clk),
.D(ccff_head),
.Q(ccff_tail)
);
sky130_fd_sc_hd__ebufn_2 _7_ (
.A(gfpga_pad_GPIO_PAD),
.TE_B(_1_),
.Z(top_width_0_height_0_subtile_0__pin_inpad_0_)
);
sky130_fd_sc_hd__ebufn_2 _8_ (
.A(top_width_0_height_0_subtile_0__pin_outpad_0_),
.TE_B(_2_),
.Z(gfpga_pad_GPIO_PAD)
);
endmodule
The sky130_fd_sc_hd__ebufn_2
cell is a tri-state buffer and the TE_B is the buffer enable the wire _1_
come from a inverter so the tri-state buffer _7_
will not be activated at the same time as buffer tri-state buffer _8_
.
Is it OK or can it create a problem?Mitch Bailey
03/13/2024, 11:50 PMgfpga_pad_GPIO_PAD
connect directly to the user_project_wrapper
io_in
or io_out
ports?
It appears that the GPIO block is switching between using gpio_pad_GPIO_PAD
as input or output.
When ccff_tail
is high, what drives top_width_0_height_0_subtile_0__pin_inpad_0_
?
When ccff_tail
is low, what drives gfpga_pad_GPIO_PAD
?Emilio Baungarten
03/15/2024, 3:48 PMgfpga_pad_GPIO_PAD
is instantiated on multiples modules some modules are connected to io_in
and another to io_out
, but never at both. When ccff_tail
is high top_width_0_height_0_subtile_0__pin_inpad_0_
has the value of gfpga_pad_GPIO_PAD
when ccff_tail
is low gfpga_pad_GPIO_PAD
has the value of top_width_0_height_0_subtile_0__pin_outpad_0_
.Mitch Bailey
03/15/2024, 4:24 PMccff_tail
is high, what drives gfpga_pad_GPIO_PAD
and
when ccff_tail
is low, what drives top_width_0_height_0_subtile_0__pin_inpad_0_
?Emilio Baungarten
03/15/2024, 6:06 PMccff_tail
is high, the instance sky130_fd_sc_hd__ebufn_2 _8_
receive a `1'b1`in the port TE_B
that cell contain a bufif0
so the output is`1'bz`,on the other hand, when ccff_tail
is low the instance sky130_fd_sc_hd__ebufn_2 _7_
have 1'b1
in the port TE_B
due to the inverter an the output is 1'bz
.
Here is the verilog file of the sky130_fd_sc_hd__ebufn_2
cell:
/ Import user defined primitives.
`celldefine
module sky130_fd_sc_hd__ebufn_2 (
Z ,
A ,
TE_B,
VPWR,
VGND,
VPB ,
VNB
);
// Module ports
output Z ;
input A ;
input TE_B;
input VPWR;
input VGND;
input VPB ;
input VNB ;
// Local signals
wire pwrgood_pp0_out_A ;
wire pwrgood_pp1_out_teb;
// Name Output Other arguments
sky130_fd_sc_hd__udp_pwrgood_pp$PG pwrgood_pp0 (pwrgood_pp0_out_A , A, VPWR, VGND );
sky130_fd_sc_hd__udp_pwrgood_pp$PG pwrgood_pp1 (pwrgood_pp1_out_teb, TE_B, VPWR, VGND );
bufif0 bufif00 (Z , pwrgood_pp0_out_A, pwrgood_pp1_out_teb);
endmodule
`endcelldefine
Mitch Bailey
03/15/2024, 9:21 PM1'bz
state. The problem is that hi-z signals should not be buffered and the signals previously listed are buffered.Linen is a search-engine friendly community platform. We offer integrations with existing Slack/Discord communities and make those conversations Google-searchable.
Powered by