Alex Hodges
10/26/2021, 9:11 AMsky130_fd_sc_hd__dfxtp
module, which then instantiates the primitive sky130_fd_sc_hd__udp_dff$P_pp$PG$N
but doesn't actually make any connections between the two, meaning the simulation doesn't work.
Trying a very simple 11-primitive netlist, the schematic openLane generates seems good, having sketched it out and followed the logic through manually - it just doesn't seem to be simulateable.
Specifically, using the install of SKY130 that came with OpenLane, my design instantiates several D flops, so I pointed icarus at the gatelevel netlist and these two files: sky130A/libfs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v
and sky130A/libfs.ref/sky130_fd_sc_hd/verilog/primitives.v
. My netlist then instantiates this flop:
module sky130_fd_sc_hd__dfxtp (
Q ,
CLK,
D
);
// Module ports
output Q ;
input CLK;
input D ;
// Module supplies
supply1 VPWR;
supply0 VGND;
supply1 VPB ;
supply0 VNB ;
// Local signals
wire buf_Q ;
reg notifier ;
wire D_delayed ;
wire CLK_delayed;
wire awake ;
// Name Output Other arguments
sky130_fd_sc_hd__udp_dff$P_pp$PG$N dff0 (buf_Q , D_delayed, CLK_delayed, notifier, VPWR, VGND);
assign awake = ( VPWR === 1'b1 );
buf buf0 (Q , buf_Q );
endmodule
You can see the issue here - unless I'm misunderstanding the verilog, the wire CLK_delayed
is left unconnected, so the primitive which actually handles the logic never sees any input (and icarus bears this out - CLK_delayed
is simulated as constant x
).
Is this the correct way to be doing simulations, or sky130 not suitable for simulations, or is this an actual bug I've found?Matt Venn
10/26/2021, 10:02 AMBooshan
10/26/2021, 10:42 AMDinesh A
10/26/2021, 1:33 PMBooshan
10/26/2021, 1:41 PMDinesh A
10/26/2021, 1:44 PMBooshan
10/26/2021, 1:45 PMAlex Hodges
10/26/2021, 2:40 PMMatt Venn
10/26/2021, 2:45 PMAlex Hodges
10/26/2021, 3:57 PMMatt Venn
10/26/2021, 4:26 PMDinesh A
10/27/2021, 3:09 AMRodrigo Iga
07/19/2022, 1:10 AM