You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
868 lines
29 KiB
Verilog
868 lines
29 KiB
Verilog
// © IBM Corp. 2020
|
|
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by
|
|
// the terms below; you may not use the files in this repository except in
|
|
// compliance with the License as modified.
|
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Modified Terms:
|
|
//
|
|
// 1) For the purpose of the patent license granted to you in Section 3 of the
|
|
// License, the "Work" hereby includes implementations of the work of authorship
|
|
// in physical form.
|
|
//
|
|
// 2) Notwithstanding any terms to the contrary in the License, any licenses
|
|
// necessary for implementation of the Work that are available from OpenPOWER
|
|
// via the Power ISA End User License Agreement (EULA) are explicitly excluded
|
|
// hereunder, and may be obtained from OpenPOWER under the terms and conditions
|
|
// of the EULA.
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, the reference design
|
|
// 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.
|
|
//
|
|
// Additional rights, including the ability to physically implement a softcore that
|
|
// is compliant with the required sections of the Power ISA Specification, are
|
|
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
|
|
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
|
|
|
|
// *********************************************************************
|
|
//
|
|
// This is the ENTITY for mmq_perv (pervasive logic)
|
|
//
|
|
// *********************************************************************
|
|
|
|
`timescale 1 ns / 1 ns
|
|
|
|
`include "tri_a2o.vh"
|
|
`include "mmu_a2o.vh"
|
|
|
|
module mmq_perv(
|
|
|
|
inout vdd,
|
|
inout gnd,
|
|
(* pin_data ="PIN_FUNCTION=/G_CLK/" *)
|
|
input [0:`NCLK_WIDTH-1] nclk,
|
|
|
|
input [0:1] pc_mm_sg_3,
|
|
input [0:1] pc_mm_func_sl_thold_3,
|
|
input [0:1] pc_mm_func_slp_sl_thold_3,
|
|
input pc_mm_gptr_sl_thold_3,
|
|
input pc_mm_fce_3,
|
|
|
|
input pc_mm_time_sl_thold_3,
|
|
input pc_mm_repr_sl_thold_3,
|
|
input pc_mm_abst_sl_thold_3,
|
|
input pc_mm_abst_slp_sl_thold_3,
|
|
input pc_mm_cfg_sl_thold_3,
|
|
input pc_mm_cfg_slp_sl_thold_3,
|
|
input pc_mm_func_nsl_thold_3,
|
|
input pc_mm_func_slp_nsl_thold_3,
|
|
input pc_mm_ary_nsl_thold_3,
|
|
input pc_mm_ary_slp_nsl_thold_3,
|
|
|
|
input tc_ac_ccflush_dc,
|
|
input tc_scan_diag_dc,
|
|
input tc_ac_scan_dis_dc_b,
|
|
|
|
output [0:1] pc_sg_0,
|
|
output [0:1] pc_sg_1,
|
|
output [0:1] pc_sg_2,
|
|
output [0:1] pc_func_sl_thold_2,
|
|
output [0:1] pc_func_slp_sl_thold_2,
|
|
output pc_func_slp_nsl_thold_2,
|
|
output pc_cfg_sl_thold_2,
|
|
output pc_cfg_slp_sl_thold_2,
|
|
output pc_fce_2,
|
|
|
|
output pc_time_sl_thold_0,
|
|
output pc_repr_sl_thold_0,
|
|
output pc_abst_sl_thold_0,
|
|
output pc_abst_slp_sl_thold_0,
|
|
output pc_ary_nsl_thold_0,
|
|
output pc_ary_slp_nsl_thold_0,
|
|
output [0:1] pc_func_sl_thold_0,
|
|
output [0:1] pc_func_sl_thold_0_b,
|
|
output [0:1] pc_func_slp_sl_thold_0,
|
|
output [0:1] pc_func_slp_sl_thold_0_b,
|
|
|
|
output lcb_clkoff_dc_b,
|
|
output lcb_act_dis_dc,
|
|
output lcb_d_mode_dc,
|
|
output [0:4] lcb_delay_lclkr_dc,
|
|
output [0:4] lcb_mpw1_dc_b,
|
|
output lcb_mpw2_dc_b,
|
|
output g6t_gptr_lcb_clkoff_dc_b,
|
|
output g6t_gptr_lcb_act_dis_dc,
|
|
output g6t_gptr_lcb_d_mode_dc,
|
|
output [0:4] g6t_gptr_lcb_delay_lclkr_dc,
|
|
output [0:4] g6t_gptr_lcb_mpw1_dc_b,
|
|
output g6t_gptr_lcb_mpw2_dc_b,
|
|
output g8t_gptr_lcb_clkoff_dc_b,
|
|
output g8t_gptr_lcb_act_dis_dc,
|
|
output g8t_gptr_lcb_d_mode_dc,
|
|
output [0:4] g8t_gptr_lcb_delay_lclkr_dc,
|
|
output [0:4] g8t_gptr_lcb_mpw1_dc_b,
|
|
output g8t_gptr_lcb_mpw2_dc_b,
|
|
|
|
// abist engine controls for arrays from pervasive
|
|
input [0:3] pc_mm_abist_dcomp_g6t_2r,
|
|
input [0:3] pc_mm_abist_di_0,
|
|
input [0:3] pc_mm_abist_di_g6t_2r,
|
|
input pc_mm_abist_ena_dc,
|
|
input pc_mm_abist_g6t_r_wb,
|
|
input pc_mm_abist_g8t1p_renb_0,
|
|
input pc_mm_abist_g8t_bw_0,
|
|
input pc_mm_abist_g8t_bw_1,
|
|
input [0:3] pc_mm_abist_g8t_dcomp,
|
|
input pc_mm_abist_g8t_wenb,
|
|
input [0:9] pc_mm_abist_raddr_0,
|
|
input [0:9] pc_mm_abist_waddr_0,
|
|
input pc_mm_abist_wl128_comp_ena,
|
|
|
|
output pc_mm_abist_g8t_wenb_q,
|
|
output pc_mm_abist_g8t1p_renb_0_q,
|
|
output [0:3] pc_mm_abist_di_0_q,
|
|
output pc_mm_abist_g8t_bw_1_q,
|
|
output pc_mm_abist_g8t_bw_0_q,
|
|
output [0:9] pc_mm_abist_waddr_0_q,
|
|
output [0:9] pc_mm_abist_raddr_0_q,
|
|
output pc_mm_abist_wl128_comp_ena_q,
|
|
output [0:3] pc_mm_abist_g8t_dcomp_q,
|
|
output [0:3] pc_mm_abist_dcomp_g6t_2r_q,
|
|
output [0:3] pc_mm_abist_di_g6t_2r_q,
|
|
output pc_mm_abist_g6t_r_wb_q,
|
|
|
|
// BOLT-ON pervasive stuff for asic
|
|
input pc_mm_bolt_sl_thold_3,
|
|
input pc_mm_bo_enable_3, // general bolt-on enable
|
|
output pc_mm_bolt_sl_thold_0,
|
|
output pc_mm_bo_enable_2,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input gptr_scan_in,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output gptr_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input time_scan_in,
|
|
output time_scan_in_int,
|
|
input time_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output time_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input [0:9] func_scan_in,
|
|
output [0:9] func_scan_in_int,
|
|
input [0:9] func_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output [0:9] func_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input repr_scan_in,
|
|
output repr_scan_in_int,
|
|
input repr_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output repr_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input [0:1] abst_scan_in,
|
|
output [0:1] abst_scan_in_int,
|
|
input [0:1] abst_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output [0:1] abst_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input bcfg_scan_in, // config latches that are setup same on all cores
|
|
output bcfg_scan_in_int,
|
|
input bcfg_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output bcfg_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input ccfg_scan_in, // config latches that could be setup differently on multiple cores
|
|
output ccfg_scan_in_int,
|
|
input ccfg_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output ccfg_scan_out,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input dcfg_scan_in,
|
|
output dcfg_scan_in_int,
|
|
input dcfg_scan_out_int,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output dcfg_scan_out
|
|
|
|
);
|
|
|
|
wire tidn;
|
|
wire tiup;
|
|
|
|
wire [0:1] pc_func_sl_thold_2_int;
|
|
wire [0:1] pc_func_slp_sl_thold_2_int;
|
|
wire [0:1] pc_sg_2_int;
|
|
wire pc_gptr_sl_thold_2_int;
|
|
wire pc_fce_2_int;
|
|
wire pc_time_sl_thold_2_int;
|
|
wire pc_repr_sl_thold_2_int;
|
|
wire pc_abst_sl_thold_2_int;
|
|
wire pc_abst_slp_sl_thold_2_int;
|
|
wire pc_cfg_sl_thold_2_int;
|
|
wire pc_cfg_slp_sl_thold_2_int;
|
|
wire pc_func_nsl_thold_2_int;
|
|
wire pc_func_slp_nsl_thold_2_int;
|
|
wire pc_ary_nsl_thold_2_int;
|
|
wire pc_ary_slp_nsl_thold_2_int;
|
|
wire pc_mm_bolt_sl_thold_2_int;
|
|
|
|
wire [0:1] pc_func_sl_thold_1_int;
|
|
wire [0:1] pc_func_slp_sl_thold_1_int;
|
|
wire [0:1] pc_sg_1_int;
|
|
wire pc_gptr_sl_thold_1_int;
|
|
wire pc_fce_1_int;
|
|
wire pc_time_sl_thold_1_int;
|
|
wire pc_repr_sl_thold_1_int;
|
|
wire pc_abst_sl_thold_1_int;
|
|
wire pc_abst_slp_sl_thold_1_int;
|
|
wire pc_cfg_sl_thold_1_int;
|
|
wire pc_cfg_slp_sl_thold_1_int;
|
|
wire pc_func_nsl_thold_1_int;
|
|
wire pc_func_slp_nsl_thold_1_int;
|
|
wire pc_ary_nsl_thold_1_int;
|
|
wire pc_ary_slp_nsl_thold_1_int;
|
|
wire pc_mm_bolt_sl_thold_1_int;
|
|
|
|
wire [0:1] pc_func_sl_thold_0_int;
|
|
wire [0:1] pc_func_slp_sl_thold_0_int;
|
|
wire [0:1] pc_sg_0_int;
|
|
wire pc_gptr_sl_thold_0_int;
|
|
wire pc_fce_0_int;
|
|
wire pc_time_sl_thold_0_int;
|
|
wire pc_repr_sl_thold_0_int;
|
|
wire pc_abst_sl_thold_0_int;
|
|
wire pc_abst_slp_sl_thold_0_int;
|
|
wire pc_cfg_sl_thold_0_int;
|
|
wire pc_cfg_slp_sl_thold_0_int;
|
|
wire pc_func_nsl_thold_0_int;
|
|
wire pc_func_slp_nsl_thold_0_int;
|
|
wire pc_ary_nsl_thold_0_int;
|
|
wire pc_ary_slp_nsl_thold_0_int;
|
|
|
|
wire [0:1] pc_func_sl_thold_0_b_int;
|
|
wire [0:1] pc_func_slp_sl_thold_0_b_int;
|
|
wire [0:1] pc_func_slp_sl_force_int;
|
|
wire [0:1] pc_func_sl_force_int;
|
|
|
|
wire [0:1] abst_scan_in_q;
|
|
wire [0:1] abst_scan_out_q;
|
|
wire time_scan_in_q;
|
|
wire time_scan_out_q;
|
|
wire repr_scan_in_q;
|
|
wire repr_scan_out_q;
|
|
wire gptr_scan_in_q;
|
|
wire gptr_scan_out_int;
|
|
wire gptr_scan_out_q;
|
|
wire [0:1] gptr_scan_lcbctrl;
|
|
wire bcfg_scan_in_q;
|
|
wire bcfg_scan_out_q;
|
|
wire ccfg_scan_in_q;
|
|
wire ccfg_scan_out_q;
|
|
wire dcfg_scan_in_q;
|
|
wire dcfg_scan_out_q;
|
|
wire [0:9] func_scan_in_q;
|
|
wire [0:9] func_scan_out_q;
|
|
|
|
wire [0:1] slat_force;
|
|
wire abst_slat_thold_b;
|
|
wire abst_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] abst_slat_lclk;
|
|
wire time_slat_thold_b;
|
|
wire time_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] time_slat_lclk;
|
|
wire repr_slat_thold_b;
|
|
wire repr_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] repr_slat_lclk;
|
|
wire gptr_slat_thold_b;
|
|
wire gptr_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] gptr_slat_lclk;
|
|
wire bcfg_slat_thold_b;
|
|
wire bcfg_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] bcfg_slat_lclk;
|
|
wire ccfg_slat_thold_b;
|
|
wire ccfg_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] ccfg_slat_lclk;
|
|
wire dcfg_slat_thold_b;
|
|
wire dcfg_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] dcfg_slat_lclk;
|
|
wire func_slat_thold_b;
|
|
wire func_slat_d2clk;
|
|
wire [0:`NCLK_WIDTH-1] func_slat_lclk;
|
|
|
|
wire pc_abst_sl_thold_0_b;
|
|
wire pc_abst_sl_force;
|
|
wire [0:4] lcb_delay_lclkr_dc_int;
|
|
wire lcb_d_mode_dc_int;
|
|
wire [0:4] lcb_mpw1_dc_b_int;
|
|
wire lcb_mpw2_dc_b_int;
|
|
wire lcb_clkoff_dc_b_int;
|
|
|
|
wire [0:41] abist_siv;
|
|
wire [0:41] abist_sov;
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
wire [0:8] unused_dc;
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
wire [0:3] perv_abst_stg_q, perv_abst_stg_q_b;
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
wire [0:1] perv_time_stg_q, perv_time_stg_q_b, perv_repr_stg_q, perv_repr_stg_q_b,
|
|
perv_gptr_stg_q, perv_gptr_stg_q_b, perv_bcfg_stg_q, perv_bcfg_stg_q_b,
|
|
perv_ccfg_stg_q, perv_ccfg_stg_q_b, perv_dcfg_stg_q, perv_dcfg_stg_q_b;
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
wire [0:19] perv_func_stg_q, perv_func_stg_q_b;
|
|
|
|
assign tidn = 1'b0;
|
|
assign tiup = 1'b1;
|
|
|
|
|
|
tri_plat #(.WIDTH(20)) perv_3to2_reg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.nclk(nclk),
|
|
.flush(tc_ac_ccflush_dc),
|
|
.din( {pc_mm_sg_3[0:1],
|
|
pc_mm_func_slp_sl_thold_3[0:1],
|
|
pc_mm_func_sl_thold_3[0:1],
|
|
pc_mm_gptr_sl_thold_3,
|
|
pc_mm_fce_3,
|
|
pc_mm_time_sl_thold_3,
|
|
pc_mm_repr_sl_thold_3,
|
|
pc_mm_abst_sl_thold_3,
|
|
pc_mm_abst_slp_sl_thold_3,
|
|
pc_mm_cfg_sl_thold_3,
|
|
pc_mm_cfg_slp_sl_thold_3,
|
|
pc_mm_func_nsl_thold_3,
|
|
pc_mm_func_slp_nsl_thold_3,
|
|
pc_mm_ary_nsl_thold_3,
|
|
pc_mm_ary_slp_nsl_thold_3,
|
|
pc_mm_bolt_sl_thold_3,
|
|
pc_mm_bo_enable_3} ),
|
|
|
|
.q( {pc_sg_2_int[0:1],
|
|
pc_func_slp_sl_thold_2_int[0:1],
|
|
pc_func_sl_thold_2_int[0:1],
|
|
pc_gptr_sl_thold_2_int,
|
|
pc_fce_2_int,
|
|
pc_time_sl_thold_2_int,
|
|
pc_repr_sl_thold_2_int,
|
|
pc_abst_sl_thold_2_int,
|
|
pc_abst_slp_sl_thold_2_int,
|
|
pc_cfg_sl_thold_2_int,
|
|
pc_cfg_slp_sl_thold_2_int,
|
|
pc_func_nsl_thold_2_int,
|
|
pc_func_slp_nsl_thold_2_int,
|
|
pc_ary_nsl_thold_2_int,
|
|
pc_ary_slp_nsl_thold_2_int,
|
|
pc_mm_bolt_sl_thold_2_int,
|
|
pc_mm_bo_enable_2} )
|
|
);
|
|
|
|
|
|
tri_plat #(.WIDTH(19)) perv_2to1_reg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.nclk(nclk),
|
|
.flush(tc_ac_ccflush_dc),
|
|
.din( {pc_sg_2_int[0:1],
|
|
pc_func_slp_sl_thold_2_int[0:1],
|
|
pc_func_sl_thold_2_int[0:1],
|
|
pc_gptr_sl_thold_2_int,
|
|
pc_fce_2_int,
|
|
pc_time_sl_thold_2_int,
|
|
pc_repr_sl_thold_2_int,
|
|
pc_abst_sl_thold_2_int,
|
|
pc_abst_slp_sl_thold_2_int,
|
|
pc_cfg_sl_thold_2_int,
|
|
pc_cfg_slp_sl_thold_2_int,
|
|
pc_func_nsl_thold_2_int,
|
|
pc_func_slp_nsl_thold_2_int,
|
|
pc_ary_nsl_thold_2_int,
|
|
pc_ary_slp_nsl_thold_2_int,
|
|
pc_mm_bolt_sl_thold_2_int} ),
|
|
.q( {pc_sg_1_int[0:1],
|
|
pc_func_slp_sl_thold_1_int[0:1],
|
|
pc_func_sl_thold_1_int[0:1],
|
|
pc_gptr_sl_thold_1_int,
|
|
pc_fce_1_int,
|
|
pc_time_sl_thold_1_int,
|
|
pc_repr_sl_thold_1_int,
|
|
pc_abst_sl_thold_1_int,
|
|
pc_abst_slp_sl_thold_1_int,
|
|
pc_cfg_sl_thold_1_int,
|
|
pc_cfg_slp_sl_thold_1_int,
|
|
pc_func_nsl_thold_1_int,
|
|
pc_func_slp_nsl_thold_1_int,
|
|
pc_ary_nsl_thold_1_int,
|
|
pc_ary_slp_nsl_thold_1_int,
|
|
pc_mm_bolt_sl_thold_1_int} )
|
|
);
|
|
|
|
|
|
tri_plat #(.WIDTH(19)) perv_1to0_reg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.nclk(nclk),
|
|
.flush(tc_ac_ccflush_dc),
|
|
.din( {pc_sg_1_int[0:1],
|
|
pc_func_slp_sl_thold_1_int[0:1],
|
|
pc_func_sl_thold_1_int[0:1],
|
|
pc_gptr_sl_thold_1_int,
|
|
pc_fce_1_int,
|
|
pc_time_sl_thold_1_int,
|
|
pc_repr_sl_thold_1_int,
|
|
pc_abst_sl_thold_1_int,
|
|
pc_abst_slp_sl_thold_1_int,
|
|
pc_cfg_sl_thold_1_int,
|
|
pc_cfg_slp_sl_thold_1_int,
|
|
pc_func_nsl_thold_1_int,
|
|
pc_func_slp_nsl_thold_1_int,
|
|
pc_ary_nsl_thold_1_int,
|
|
pc_ary_slp_nsl_thold_1_int,
|
|
pc_mm_bolt_sl_thold_1_int} ),
|
|
.q( {pc_sg_0_int[0:1],
|
|
pc_func_slp_sl_thold_0_int[0:1],
|
|
pc_func_sl_thold_0_int[0:1],
|
|
pc_gptr_sl_thold_0_int,
|
|
pc_fce_0_int,
|
|
pc_time_sl_thold_0_int,
|
|
pc_repr_sl_thold_0_int,
|
|
pc_abst_sl_thold_0_int,
|
|
pc_abst_slp_sl_thold_0_int,
|
|
pc_cfg_sl_thold_0_int,
|
|
pc_cfg_slp_sl_thold_0_int,
|
|
pc_func_nsl_thold_0_int,
|
|
pc_func_slp_nsl_thold_0_int,
|
|
pc_ary_nsl_thold_0_int,
|
|
pc_ary_slp_nsl_thold_0_int,
|
|
pc_mm_bolt_sl_thold_0} )
|
|
);
|
|
|
|
assign pc_time_sl_thold_0 = pc_time_sl_thold_0_int;
|
|
assign pc_abst_sl_thold_0 = pc_abst_sl_thold_0_int;
|
|
assign pc_abst_slp_sl_thold_0 = pc_abst_slp_sl_thold_0_int;
|
|
assign pc_repr_sl_thold_0 = pc_repr_sl_thold_0_int;
|
|
assign pc_ary_nsl_thold_0 = pc_ary_nsl_thold_0_int;
|
|
assign pc_ary_slp_nsl_thold_0 = pc_ary_slp_nsl_thold_0_int;
|
|
|
|
assign pc_func_sl_thold_0 = pc_func_sl_thold_0_int;
|
|
assign pc_func_sl_thold_0_b = pc_func_sl_thold_0_b_int;
|
|
assign pc_func_slp_sl_thold_0 = pc_func_slp_sl_thold_0_int;
|
|
assign pc_func_slp_sl_thold_0_b = pc_func_slp_sl_thold_0_b_int;
|
|
|
|
assign pc_sg_0 = pc_sg_0_int;
|
|
assign pc_sg_1 = pc_sg_1_int;
|
|
assign pc_sg_2 = pc_sg_2_int;
|
|
|
|
assign pc_func_sl_thold_2 = pc_func_sl_thold_2_int;
|
|
assign pc_func_slp_sl_thold_2 = pc_func_slp_sl_thold_2_int;
|
|
assign pc_func_slp_nsl_thold_2 = pc_func_slp_nsl_thold_2_int;
|
|
assign pc_cfg_sl_thold_2 = pc_cfg_sl_thold_2_int;
|
|
assign pc_cfg_slp_sl_thold_2 = pc_cfg_slp_sl_thold_2_int;
|
|
assign pc_fce_2 = pc_fce_2_int;
|
|
|
|
assign lcb_clkoff_dc_b = lcb_clkoff_dc_b_int;
|
|
assign lcb_d_mode_dc = lcb_d_mode_dc_int;
|
|
assign lcb_delay_lclkr_dc = lcb_delay_lclkr_dc_int;
|
|
assign lcb_mpw1_dc_b = lcb_mpw1_dc_b_int;
|
|
assign lcb_mpw2_dc_b = lcb_mpw2_dc_b_int;
|
|
|
|
|
|
tri_lcbcntl_mac perv_lcbctrl(
|
|
.vdd(vdd),
|
|
.gnd(gnd),
|
|
.sg(pc_sg_0_int[0]),
|
|
.nclk(nclk),
|
|
.scan_in(gptr_scan_in_q),
|
|
.scan_diag_dc(tc_scan_diag_dc),
|
|
.thold(pc_gptr_sl_thold_0_int),
|
|
.clkoff_dc_b(lcb_clkoff_dc_b_int),
|
|
.delay_lclkr_dc(lcb_delay_lclkr_dc_int[0:4]),
|
|
.act_dis_dc(unused_dc[6]),
|
|
.d_mode_dc(lcb_d_mode_dc_int),
|
|
.mpw1_dc_b(lcb_mpw1_dc_b_int[0:4]),
|
|
.mpw2_dc_b(lcb_mpw2_dc_b_int),
|
|
.scan_out(gptr_scan_lcbctrl[0])
|
|
);
|
|
|
|
|
|
tri_lcbcntl_array_mac perv_g6t_gptr_lcbctrl(
|
|
.vdd(vdd),
|
|
.gnd(gnd),
|
|
.sg(pc_sg_0_int[1]),
|
|
.nclk(nclk),
|
|
.scan_in(gptr_scan_lcbctrl[0]),
|
|
.scan_diag_dc(tc_scan_diag_dc),
|
|
.thold(pc_gptr_sl_thold_0_int),
|
|
.clkoff_dc_b(g6t_gptr_lcb_clkoff_dc_b),
|
|
.delay_lclkr_dc(g6t_gptr_lcb_delay_lclkr_dc[0:4]),
|
|
.act_dis_dc(unused_dc[7]),
|
|
.d_mode_dc(g6t_gptr_lcb_d_mode_dc),
|
|
.mpw1_dc_b(g6t_gptr_lcb_mpw1_dc_b[0:4]),
|
|
.mpw2_dc_b(g6t_gptr_lcb_mpw2_dc_b),
|
|
.scan_out(gptr_scan_lcbctrl[1])
|
|
);
|
|
|
|
|
|
tri_lcbcntl_array_mac perv_g8t_gptr_lcbctrl(
|
|
.vdd(vdd),
|
|
.gnd(gnd),
|
|
.sg(pc_sg_0_int[1]),
|
|
.nclk(nclk),
|
|
.scan_in(gptr_scan_lcbctrl[1]),
|
|
.scan_diag_dc(tc_scan_diag_dc),
|
|
.thold(pc_gptr_sl_thold_0_int),
|
|
.clkoff_dc_b(g8t_gptr_lcb_clkoff_dc_b),
|
|
.delay_lclkr_dc(g8t_gptr_lcb_delay_lclkr_dc[0:4]),
|
|
.act_dis_dc(unused_dc[8]),
|
|
.d_mode_dc(g8t_gptr_lcb_d_mode_dc),
|
|
.mpw1_dc_b(g8t_gptr_lcb_mpw1_dc_b[0:4]),
|
|
.mpw2_dc_b(g8t_gptr_lcb_mpw2_dc_b),
|
|
.scan_out(gptr_scan_out_int)
|
|
);
|
|
|
|
//never disable act pins, they are used functionally
|
|
assign lcb_act_dis_dc = 1'b0;
|
|
assign g8t_gptr_lcb_act_dis_dc = 1'b0;
|
|
assign g6t_gptr_lcb_act_dis_dc = 1'b0;
|
|
|
|
assign time_scan_in_int = time_scan_in_q;
|
|
assign repr_scan_in_int = repr_scan_in_q;
|
|
assign func_scan_in_int = func_scan_in_q;
|
|
assign bcfg_scan_in_int = bcfg_scan_in_q;
|
|
assign ccfg_scan_in_int = ccfg_scan_in_q;
|
|
assign dcfg_scan_in_int = dcfg_scan_in_q;
|
|
|
|
assign time_scan_out = time_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
assign gptr_scan_out = gptr_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
assign repr_scan_out = repr_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
assign func_scan_out = func_scan_out_q & {10{tc_ac_scan_dis_dc_b}};
|
|
assign abst_scan_out = abst_scan_out_q & {2{tc_ac_scan_dis_dc_b}};
|
|
assign bcfg_scan_out = bcfg_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
assign ccfg_scan_out = ccfg_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
assign dcfg_scan_out = dcfg_scan_out_q & tc_ac_scan_dis_dc_b;
|
|
|
|
// LCBs for scan only staging latches
|
|
assign slat_force = pc_sg_0_int;
|
|
assign abst_slat_thold_b = (~pc_abst_sl_thold_0_int);
|
|
assign time_slat_thold_b = (~pc_time_sl_thold_0_int);
|
|
assign repr_slat_thold_b = (~pc_repr_sl_thold_0_int);
|
|
assign gptr_slat_thold_b = (~pc_gptr_sl_thold_0_int);
|
|
assign bcfg_slat_thold_b = (~pc_cfg_sl_thold_0_int);
|
|
assign ccfg_slat_thold_b = (~pc_cfg_sl_thold_0_int);
|
|
assign dcfg_slat_thold_b = (~pc_cfg_sl_thold_0_int);
|
|
assign func_slat_thold_b = (~pc_func_sl_thold_0_int[0]);
|
|
|
|
|
|
tri_lcbs perv_lcbs_abst(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[1]),
|
|
.thold_b(abst_slat_thold_b),
|
|
.dclk(abst_slat_d2clk),
|
|
.lclk(abst_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(4), .INIT(4'b0000)) perv_abst_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(abst_slat_d2clk),
|
|
.lclk(abst_slat_lclk),
|
|
.scan_in( {abst_scan_out_int, abst_scan_in} ),
|
|
.scan_out( {abst_scan_out_q, abst_scan_in_q} ),
|
|
.q( perv_abst_stg_q),
|
|
.q_b( perv_abst_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_time(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[1]),
|
|
.thold_b(time_slat_thold_b),
|
|
.dclk(time_slat_d2clk),
|
|
.lclk(time_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_time_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(time_slat_d2clk),
|
|
.lclk(time_slat_lclk),
|
|
.scan_in( {time_scan_in, time_scan_out_int} ),
|
|
.scan_out( {time_scan_in_q, time_scan_out_q} ),
|
|
.q( perv_time_stg_q),
|
|
.q_b( perv_time_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_repr(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[1]),
|
|
.thold_b(repr_slat_thold_b),
|
|
.dclk(repr_slat_d2clk),
|
|
.lclk(repr_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_repr_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(repr_slat_d2clk),
|
|
.lclk(repr_slat_lclk),
|
|
.scan_in( {repr_scan_in, repr_scan_out_int} ),
|
|
.scan_out( {repr_scan_in_q, repr_scan_out_q} ),
|
|
.q( perv_repr_stg_q),
|
|
.q_b( perv_repr_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_gptr(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(tiup),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[0]),
|
|
.thold_b(gptr_slat_thold_b),
|
|
.dclk(gptr_slat_d2clk),
|
|
.lclk(gptr_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_gptr_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(gptr_slat_d2clk),
|
|
.lclk(gptr_slat_lclk),
|
|
.scan_in( {gptr_scan_in, gptr_scan_out_int} ),
|
|
.scan_out( {gptr_scan_in_q, gptr_scan_out_q} ),
|
|
.q( perv_gptr_stg_q),
|
|
.q_b( perv_gptr_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_bcfg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[0]),
|
|
.thold_b(bcfg_slat_thold_b),
|
|
.dclk(bcfg_slat_d2clk),
|
|
.lclk(bcfg_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_bcfg_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(bcfg_slat_d2clk),
|
|
.lclk(bcfg_slat_lclk),
|
|
.scan_in( {bcfg_scan_in, bcfg_scan_out_int} ),
|
|
.scan_out( {bcfg_scan_in_q, bcfg_scan_out_q} ),
|
|
.q( perv_bcfg_stg_q),
|
|
.q_b( perv_bcfg_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_ccfg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[0]),
|
|
.thold_b(ccfg_slat_thold_b),
|
|
.dclk(ccfg_slat_d2clk),
|
|
.lclk(ccfg_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_ccfg_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(ccfg_slat_d2clk),
|
|
.lclk(ccfg_slat_lclk),
|
|
.scan_in( {ccfg_scan_in, ccfg_scan_out_int} ),
|
|
.scan_out( {ccfg_scan_in_q, ccfg_scan_out_q} ),
|
|
.q( perv_ccfg_stg_q),
|
|
.q_b( perv_ccfg_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_dcfg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[0]),
|
|
.thold_b(dcfg_slat_thold_b),
|
|
.dclk(dcfg_slat_d2clk),
|
|
.lclk(dcfg_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(2), .INIT(2'b00)) perv_dcfg_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(dcfg_slat_d2clk),
|
|
.lclk(dcfg_slat_lclk),
|
|
.scan_in( {dcfg_scan_in, dcfg_scan_out_int} ),
|
|
.scan_out( {dcfg_scan_in_q, dcfg_scan_out_q} ),
|
|
.q( perv_dcfg_stg_q),
|
|
.q_b( perv_dcfg_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbs perv_lcbs_func(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.nclk(nclk),
|
|
.force_t(slat_force[0]),
|
|
.thold_b(func_slat_thold_b),
|
|
.dclk(func_slat_d2clk),
|
|
.lclk(func_slat_lclk)
|
|
);
|
|
|
|
|
|
tri_slat_scan #(.WIDTH(20), .INIT(20'b00000000000000000000)) perv_func_stg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.dclk(func_slat_d2clk),
|
|
.lclk(func_slat_lclk),
|
|
.scan_in( {func_scan_out_int, func_scan_in} ),
|
|
.scan_out( {func_scan_out_q, func_scan_in_q} ),
|
|
.q( perv_func_stg_q),
|
|
.q_b( perv_func_stg_q_b)
|
|
);
|
|
|
|
|
|
tri_lcbor perv_lcbor_func_sl_0(
|
|
.clkoff_b(lcb_clkoff_dc_b_int),
|
|
.thold(pc_func_sl_thold_0_int[0]),
|
|
.sg(pc_sg_0_int[0]),
|
|
.act_dis(tidn),
|
|
.force_t(pc_func_sl_force_int[0]),
|
|
.thold_b(pc_func_sl_thold_0_b_int[0])
|
|
);
|
|
|
|
|
|
tri_lcbor perv_lcbor_func_sl_1(
|
|
.clkoff_b(lcb_clkoff_dc_b_int),
|
|
.thold(pc_func_sl_thold_0_int[1]),
|
|
.sg(pc_sg_0_int[1]),
|
|
.act_dis(tidn),
|
|
.force_t(pc_func_sl_force_int[1]),
|
|
.thold_b(pc_func_sl_thold_0_b_int[1])
|
|
);
|
|
|
|
|
|
tri_lcbor perv_lcbor_func_slp_sl_0(
|
|
.clkoff_b(lcb_clkoff_dc_b_int),
|
|
.thold(pc_func_slp_sl_thold_0_int[0]),
|
|
.sg(pc_sg_0_int[0]),
|
|
.act_dis(tidn),
|
|
.force_t(pc_func_slp_sl_force_int[0]),
|
|
.thold_b(pc_func_slp_sl_thold_0_b_int[0])
|
|
);
|
|
|
|
|
|
tri_lcbor perv_lcbor_func_slp_sl_1(
|
|
.clkoff_b(lcb_clkoff_dc_b_int),
|
|
.thold(pc_func_slp_sl_thold_0_int[1]),
|
|
.sg(pc_sg_0_int[1]),
|
|
.act_dis(tidn),
|
|
.force_t(pc_func_slp_sl_force_int[1]),
|
|
.thold_b(pc_func_slp_sl_thold_0_b_int[1])
|
|
);
|
|
|
|
|
|
tri_lcbor perv_lcbor_abst_sl(
|
|
.clkoff_b(lcb_clkoff_dc_b_int),
|
|
.thold(pc_abst_sl_thold_0_int),
|
|
.sg(pc_sg_0_int[1]),
|
|
.act_dis(tidn),
|
|
.force_t(pc_abst_sl_force),
|
|
.thold_b(pc_abst_sl_thold_0_b)
|
|
);
|
|
|
|
//---------------------------------------------------------------------
|
|
// abist latches
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
tri_rlmreg_p #(.INIT(0), .WIDTH(42), .NEEDS_SRESET(0)) abist_reg(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.nclk(nclk),
|
|
.act(pc_mm_abist_ena_dc),
|
|
.thold_b(pc_abst_sl_thold_0_b),
|
|
.sg(pc_sg_0_int[1]),
|
|
.force_t(pc_abst_sl_force),
|
|
.delay_lclkr(lcb_delay_lclkr_dc_int[0]),
|
|
.mpw1_b(lcb_mpw1_dc_b_int[0]),
|
|
.mpw2_b(lcb_mpw2_dc_b_int),
|
|
.d_mode(lcb_d_mode_dc_int),
|
|
.scin(abist_siv[0:41]),
|
|
.scout(abist_sov[0:41]),
|
|
.din( {pc_mm_abist_g8t_wenb,
|
|
pc_mm_abist_g8t1p_renb_0,
|
|
pc_mm_abist_di_0,
|
|
pc_mm_abist_g8t_bw_1,
|
|
pc_mm_abist_g8t_bw_0,
|
|
pc_mm_abist_waddr_0,
|
|
pc_mm_abist_raddr_0,
|
|
pc_mm_abist_wl128_comp_ena,
|
|
pc_mm_abist_g8t_dcomp,
|
|
pc_mm_abist_dcomp_g6t_2r,
|
|
pc_mm_abist_di_g6t_2r,
|
|
pc_mm_abist_g6t_r_wb} ),
|
|
.dout( {pc_mm_abist_g8t_wenb_q,
|
|
pc_mm_abist_g8t1p_renb_0_q,
|
|
pc_mm_abist_di_0_q,
|
|
pc_mm_abist_g8t_bw_1_q,
|
|
pc_mm_abist_g8t_bw_0_q,
|
|
pc_mm_abist_waddr_0_q,
|
|
pc_mm_abist_raddr_0_q,
|
|
pc_mm_abist_wl128_comp_ena_q,
|
|
pc_mm_abist_g8t_dcomp_q,
|
|
pc_mm_abist_dcomp_g6t_2r_q,
|
|
pc_mm_abist_di_g6t_2r_q,
|
|
pc_mm_abist_g6t_r_wb_q} )
|
|
);
|
|
|
|
assign abist_siv = {abist_sov[1:41], abst_scan_in_q[0]};
|
|
assign abst_scan_in_int[0] = abist_sov[0];
|
|
assign abst_scan_in_int[1] = abst_scan_in_q[1];
|
|
|
|
// unused spare signal assignments
|
|
assign unused_dc[0] = pc_fce_0_int;
|
|
assign unused_dc[1] = pc_cfg_slp_sl_thold_0_int;
|
|
assign unused_dc[2] = pc_func_nsl_thold_0_int;
|
|
assign unused_dc[3] = pc_func_slp_nsl_thold_0_int;
|
|
assign unused_dc[4] = |(pc_func_sl_force_int);
|
|
assign unused_dc[5] = |(pc_func_slp_sl_force_int);
|
|
|
|
|
|
endmodule
|