| `default_nettype none |
| /* |
| `ifdef COCOTB |
| `define UNIT_DELAY #1 |
| `define FUNCTIONAL |
| `define USE_POWER_PINS |
| `include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v" |
| `include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v" |
| `endif |
| */ |
| |
| module scan_wrapper_341176884318437971 ( |
| input wire clk_in, |
| input wire data_in, |
| input wire scan_select_in, |
| input wire latch_enable_in, |
| output wire clk_out, |
| output wire data_out, |
| output wire scan_select_out, |
| output wire latch_enable_out |
| ); |
| |
| assign scan_select_out = scan_select_in; |
| assign latch_enable_out = latch_enable_in; |
| assign clk_out = clk_in; |
| wire clk = clk_in; |
| |
| /* |
| `ifdef COCOTB |
| initial begin |
| $dumpfile ("scan_wrapper.vcd"); |
| $dumpvars (0, scan_wrapper_lesson_1); |
| #1; |
| end |
| `endif |
| */ |
| |
| parameter NUM_IOS = 8; |
| |
| // wires needed |
| wire [NUM_IOS-1:0] scan_data_out; // output of the each scan chain flop |
| wire [NUM_IOS-1:0] scan_data_in; // input of each scan chain flop |
| wire [NUM_IOS-1:0] module_data_in; // the data that enters the user module |
| wire [NUM_IOS-1:0] module_data_out; // the data from the user module |
| |
| // scan chain - link all the flops, with data coming from data_in |
| assign scan_data_in = {scan_data_out[NUM_IOS-2:0], data_in}; |
| |
| // end of the chain is the last scan flop's out |
| assign data_out = scan_data_out[NUM_IOS-1]; |
| |
| // scan flops have a mux on their inputs to choose either data from the user module or the previous flop's output |
| // https://antmicro-skywater-pdk-docs.readthedocs.io/en/test-submodules-in-rtd/contents/libraries/sky130_fd_sc_ls/cells/sdfxtp/README.html |
| `ifndef FORMAL |
| `ifndef FORMAL_COMPAT |
| sky130_fd_sc_hd__sdfxtp_1 scan_flop [NUM_IOS-1:0] ( |
| .CLK (clk), |
| .D (scan_data_in), |
| .SCD (module_data_out), |
| .SCE (scan_select_in), |
| .Q (scan_data_out), |
| .VPWR (1'b1), |
| .VGND (1'b0) |
| ); |
| |
| // latch is used to latch the input data of the user module while the scan chain is used to capture the user module's outputs |
| // https://antmicro-skywater-pdk-docs.readthedocs.io/en/test-submodules-in-rtd/contents/libraries/sky130_fd_sc_hd/cells/dlxtp/README.html |
| sky130_fd_sc_hd__dlxtp_1 latch [NUM_IOS-1:0] ( |
| .D (scan_data_out), |
| .GATE (latch_enable_in), |
| .Q (module_data_in), |
| .VPWR (1'b1), |
| .VGND (1'b0) |
| ); |
| `endif |
| `endif |
| |
| // instantiate the wokwi module |
| user_module_341176884318437971 user_module( |
| .io_in (module_data_in), |
| .io_out (module_data_out) |
| ); |
| |
| endmodule |