forked from cores/a2i
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.
525 lines
22 KiB
VHDL
525 lines
22 KiB
VHDL
3 years ago
|
-- © 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.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
library ieee;
|
||
|
use ieee.std_logic_1164.all;
|
||
|
|
||
|
library ibm;
|
||
|
use ibm.std_ulogic_support.all;
|
||
|
use ibm.std_ulogic_function_support.all;
|
||
|
use ibm.std_ulogic_unsigned.all;
|
||
|
|
||
|
library support;
|
||
|
use support.power_logic_pkg.all;
|
||
|
|
||
|
library tri;
|
||
|
use tri.tri_latches_pkg.all;
|
||
|
|
||
|
|
||
|
entity tri_bht is
|
||
|
generic(expand_type : integer := 1 ); -- 0 = ibm umbra, 1 = xilinx, 2 = ibm mpg
|
||
|
port(
|
||
|
-- power pins
|
||
|
gnd : inout power_logic;
|
||
|
vdd : inout power_logic;
|
||
|
vcs : inout power_logic;
|
||
|
|
||
|
-- clock and clockcontrol ports
|
||
|
nclk : in clk_logic;
|
||
|
pc_iu_func_sl_thold_2 : in std_ulogic;
|
||
|
pc_iu_sg_2 : in std_ulogic;
|
||
|
pc_iu_time_sl_thold_2 : in std_ulogic;
|
||
|
pc_iu_abst_sl_thold_2 : in std_ulogic;
|
||
|
pc_iu_ary_nsl_thold_2 : in std_ulogic;
|
||
|
pc_iu_repr_sl_thold_2 : in std_ulogic;
|
||
|
pc_iu_bolt_sl_thold_2 : in std_ulogic;
|
||
|
tc_ac_ccflush_dc : in std_ulogic;
|
||
|
tc_ac_scan_dis_dc_b : in std_ulogic;
|
||
|
clkoff_b : in std_ulogic;
|
||
|
scan_diag_dc : in std_ulogic;
|
||
|
act_dis : in std_ulogic;
|
||
|
d_mode : in std_ulogic;
|
||
|
delay_lclkr : in std_ulogic;
|
||
|
mpw1_b : in std_ulogic;
|
||
|
mpw2_b : in std_ulogic;
|
||
|
g8t_clkoff_b : in std_ulogic;
|
||
|
g8t_d_mode : in std_ulogic;
|
||
|
g8t_delay_lclkr : in std_ulogic_vector(0 to 4);
|
||
|
g8t_mpw1_b : in std_ulogic_vector(0 to 4);
|
||
|
g8t_mpw2_b : in std_ulogic;
|
||
|
func_scan_in : in std_ulogic;
|
||
|
time_scan_in : in std_ulogic;
|
||
|
abst_scan_in : in std_ulogic;
|
||
|
repr_scan_in : in std_ulogic;
|
||
|
func_scan_out : out std_ulogic;
|
||
|
time_scan_out : out std_ulogic;
|
||
|
abst_scan_out : out std_ulogic;
|
||
|
repr_scan_out : out std_ulogic;
|
||
|
|
||
|
pc_iu_abist_di_0 : in std_ulogic_vector(0 to 3);
|
||
|
pc_iu_abist_g8t_bw_1 : in std_ulogic;
|
||
|
pc_iu_abist_g8t_bw_0 : in std_ulogic;
|
||
|
pc_iu_abist_waddr_0 : in std_ulogic_vector(3 to 9);
|
||
|
pc_iu_abist_g8t_wenb : in std_ulogic;
|
||
|
pc_iu_abist_raddr_0 : in std_ulogic_vector(3 to 9);
|
||
|
pc_iu_abist_g8t1p_renb_0 : in std_ulogic;
|
||
|
an_ac_lbist_ary_wrt_thru_dc: in std_ulogic;
|
||
|
pc_iu_abist_ena_dc : in std_ulogic;
|
||
|
pc_iu_abist_wl128_comp_ena : in std_ulogic;
|
||
|
pc_iu_abist_raw_dc_b : in std_ulogic;
|
||
|
pc_iu_abist_g8t_dcomp : in std_ulogic_vector(0 to 3);
|
||
|
|
||
|
-- BOLT-ON
|
||
|
pc_iu_bo_enable_2 : in std_ulogic; -- general bolt-on enable
|
||
|
pc_iu_bo_reset : in std_ulogic; -- reset
|
||
|
pc_iu_bo_unload : in std_ulogic; -- unload sticky bits
|
||
|
pc_iu_bo_repair : in std_ulogic; -- execute sticky bit decode
|
||
|
pc_iu_bo_shdata : in std_ulogic; -- shift data for timing write and diag loop
|
||
|
pc_iu_bo_select : in std_ulogic; -- select for mask and hier writes
|
||
|
iu_pc_bo_fail : out std_ulogic; -- fail/no-fix reg
|
||
|
iu_pc_bo_diagout : out std_ulogic;
|
||
|
|
||
|
-- ports
|
||
|
r_act : in std_ulogic;
|
||
|
w_act : in std_ulogic_vector(0 to 3);
|
||
|
r_addr : in std_ulogic_vector(0 to 7);
|
||
|
w_addr : in std_ulogic_vector(0 to 7);
|
||
|
data_in : in std_ulogic_vector(0 to 1);
|
||
|
data_out0 : out std_ulogic_vector(0 to 1);
|
||
|
data_out1 : out std_ulogic_vector(0 to 1);
|
||
|
data_out2 : out std_ulogic_vector(0 to 1);
|
||
|
data_out3 : out std_ulogic_vector(0 to 1)
|
||
|
|
||
|
);
|
||
|
|
||
|
-- pragma translate_off
|
||
|
|
||
|
|
||
|
-- pragma translate_on
|
||
|
|
||
|
end tri_bht;
|
||
|
architecture tri_bht of tri_bht is
|
||
|
|
||
|
----------------------------
|
||
|
-- constants
|
||
|
----------------------------
|
||
|
|
||
|
constant data_in_offset : natural := 0;
|
||
|
constant w_act_offset : natural := data_in_offset + 2;
|
||
|
constant r_act_offset : natural := w_act_offset + 4;
|
||
|
constant w_addr_offset : natural := r_act_offset + 1;
|
||
|
constant r_addr_offset : natural := w_addr_offset + 8;
|
||
|
constant data_out_offset : natural := r_addr_offset + 8;
|
||
|
constant array_offset : natural := data_out_offset + 8;
|
||
|
constant scan_right : natural := array_offset + 1 - 1;
|
||
|
|
||
|
constant INIT_MASK : std_ulogic_vector(0 to 1) := "10";
|
||
|
|
||
|
----------------------------
|
||
|
-- signals
|
||
|
----------------------------
|
||
|
|
||
|
signal pc_iu_func_sl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_func_sl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_func_sl_thold_0_b : std_ulogic;
|
||
|
signal pc_iu_time_sl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_time_sl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_ary_nsl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_ary_nsl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_abst_sl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_abst_sl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_repr_sl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_repr_sl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_bolt_sl_thold_1 : std_ulogic;
|
||
|
signal pc_iu_bolt_sl_thold_0 : std_ulogic;
|
||
|
signal pc_iu_sg_1 : std_ulogic;
|
||
|
signal pc_iu_sg_0 : std_ulogic;
|
||
|
signal forcee : std_ulogic;
|
||
|
|
||
|
signal siv : std_ulogic_vector(0 to scan_right);
|
||
|
signal sov : std_ulogic_vector(0 to scan_right);
|
||
|
|
||
|
signal tiup : std_ulogic;
|
||
|
|
||
|
signal data_out_d : std_ulogic_vector(0 to 7);
|
||
|
signal data_out_q : std_ulogic_vector(0 to 7);
|
||
|
|
||
|
signal ary_w_en : std_ulogic;
|
||
|
signal ary_w_addr : std_ulogic_vector(0 to 6);
|
||
|
signal ary_w_sel : std_ulogic_vector(0 to 15);
|
||
|
signal ary_w_data : std_ulogic_vector(0 to 15);
|
||
|
|
||
|
signal ary_r_en : std_ulogic;
|
||
|
signal ary_r_addr : std_ulogic_vector(0 to 6);
|
||
|
signal ary_r_data : std_ulogic_vector(0 to 15);
|
||
|
|
||
|
signal data_out : std_ulogic_vector(0 to 7);
|
||
|
signal write_thru : std_ulogic_vector(0 to 3);
|
||
|
|
||
|
signal data_in_d : std_ulogic_vector(0 to 1);
|
||
|
signal data_in_q : std_ulogic_vector(0 to 1);
|
||
|
signal w_act_d : std_ulogic_vector(0 to 3);
|
||
|
signal w_act_q : std_ulogic_vector(0 to 3);
|
||
|
signal r_act_d : std_ulogic;
|
||
|
signal r_act_q : std_ulogic;
|
||
|
signal w_addr_d : std_ulogic_vector(0 to 7);
|
||
|
signal w_addr_q : std_ulogic_vector(0 to 7);
|
||
|
signal r_addr_d : std_ulogic_vector(0 to 7);
|
||
|
signal r_addr_q : std_ulogic_vector(0 to 7);
|
||
|
|
||
|
|
||
|
begin
|
||
|
|
||
|
|
||
|
tiup <= '1';
|
||
|
|
||
|
|
||
|
data_out0(0 to 1) <= data_out_q(0 to 1);
|
||
|
data_out1(0 to 1) <= data_out_q(2 to 3);
|
||
|
data_out2(0 to 1) <= data_out_q(4 to 5);
|
||
|
data_out3(0 to 1) <= data_out_q(6 to 7);
|
||
|
|
||
|
|
||
|
ary_w_en <= or_reduce(w_act(0 to 3)) and not ((w_addr(1 to 7) = r_addr(1 to 7)) and r_act = '1');
|
||
|
|
||
|
ary_w_addr(0 to 6) <= w_addr(1 to 7);
|
||
|
|
||
|
ary_w_sel(0) <= w_act(0) and w_addr(0) = '0';
|
||
|
ary_w_sel(1) <= w_act(0) and w_addr(0) = '0';
|
||
|
ary_w_sel(2) <= w_act(1) and w_addr(0) = '0';
|
||
|
ary_w_sel(3) <= w_act(1) and w_addr(0) = '0';
|
||
|
ary_w_sel(4) <= w_act(2) and w_addr(0) = '0';
|
||
|
ary_w_sel(5) <= w_act(2) and w_addr(0) = '0';
|
||
|
ary_w_sel(6) <= w_act(3) and w_addr(0) = '0';
|
||
|
ary_w_sel(7) <= w_act(3) and w_addr(0) = '0';
|
||
|
ary_w_sel(8) <= w_act(0) and w_addr(0) = '1';
|
||
|
ary_w_sel(9) <= w_act(0) and w_addr(0) = '1';
|
||
|
ary_w_sel(10) <= w_act(1) and w_addr(0) = '1';
|
||
|
ary_w_sel(11) <= w_act(1) and w_addr(0) = '1';
|
||
|
ary_w_sel(12) <= w_act(2) and w_addr(0) = '1';
|
||
|
ary_w_sel(13) <= w_act(2) and w_addr(0) = '1';
|
||
|
ary_w_sel(14) <= w_act(3) and w_addr(0) = '1';
|
||
|
ary_w_sel(15) <= w_act(3) and w_addr(0) = '1';
|
||
|
|
||
|
ary_w_data(0 to 15) <= (data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) &
|
||
|
(data_in(0 to 1) xor INIT_MASK(0 to 1)) ;
|
||
|
|
||
|
ary_r_en <= r_act;
|
||
|
|
||
|
ary_r_addr(0 to 6) <= r_addr(1 to 7);
|
||
|
|
||
|
data_out(0 to 7) <= gate(ary_r_data(0 to 7) xor (INIT_MASK(0 to 1) & INIT_MASK(0 to 1) & INIT_MASK(0 to 1) & INIT_MASK(0 to 1)), r_addr_q(0) = '0') or
|
||
|
gate(ary_r_data(8 to 15) xor (INIT_MASK(0 to 1) & INIT_MASK(0 to 1) & INIT_MASK(0 to 1) & INIT_MASK(0 to 1)), r_addr_q(0) = '1') ;
|
||
|
|
||
|
--write through support
|
||
|
|
||
|
data_in_d(0 to 1) <= data_in(0 to 1);
|
||
|
w_act_d(0 to 3) <= w_act(0 to 3);
|
||
|
r_act_d <= r_act;
|
||
|
w_addr_d(0 to 7) <= w_addr(0 to 7);
|
||
|
r_addr_d(0 to 7) <= r_addr(0 to 7);
|
||
|
|
||
|
write_thru(0 to 3) <= w_act_q(0 to 3) when (w_addr_q(0 to 7) = r_addr_q(0 to 7)) and r_act_q = '1' else "0000";
|
||
|
|
||
|
data_out_d(0 to 1) <= data_in_q(0 to 1) when write_thru(0) = '1' else
|
||
|
data_out(0 to 1);
|
||
|
data_out_d(2 to 3) <= data_in_q(0 to 1) when write_thru(1) = '1' else
|
||
|
data_out(2 to 3);
|
||
|
data_out_d(4 to 5) <= data_in_q(0 to 1) when write_thru(2) = '1' else
|
||
|
data_out(4 to 5);
|
||
|
data_out_d(6 to 7) <= data_in_q(0 to 1) when write_thru(3) = '1' else
|
||
|
data_out(6 to 7);
|
||
|
|
||
|
-------------------------------------------------
|
||
|
-- array
|
||
|
-------------------------------------------------
|
||
|
|
||
|
bht0: entity tri.tri_128x16_1r1w_1
|
||
|
generic map ( expand_type => expand_type )
|
||
|
port map(
|
||
|
gnd => gnd,
|
||
|
vdd => vdd,
|
||
|
vcs => vcs,
|
||
|
nclk => nclk,
|
||
|
|
||
|
rd_act => ary_r_en,
|
||
|
wr_act => ary_w_en,
|
||
|
|
||
|
lcb_d_mode_dc => g8t_d_mode,
|
||
|
lcb_clkoff_dc_b => g8t_clkoff_b,
|
||
|
lcb_mpw1_dc_b => g8t_mpw1_b,
|
||
|
lcb_mpw2_dc_b => g8t_mpw2_b,
|
||
|
lcb_delay_lclkr_dc => g8t_delay_lclkr,
|
||
|
ccflush_dc => tc_ac_ccflush_dc,
|
||
|
scan_dis_dc_b => tc_ac_scan_dis_dc_b,
|
||
|
scan_diag_dc => scan_diag_dc,
|
||
|
func_scan_in => siv(array_offset),
|
||
|
func_scan_out => sov(array_offset),
|
||
|
|
||
|
lcb_sg_0 => pc_iu_sg_0,
|
||
|
lcb_sl_thold_0_b => pc_iu_func_sl_thold_0_b,
|
||
|
lcb_time_sl_thold_0 => pc_iu_time_sl_thold_0,
|
||
|
lcb_abst_sl_thold_0 => pc_iu_abst_sl_thold_0,
|
||
|
lcb_ary_nsl_thold_0 => pc_iu_ary_nsl_thold_0,
|
||
|
lcb_repr_sl_thold_0 => pc_iu_repr_sl_thold_0,
|
||
|
time_scan_in => time_scan_in,
|
||
|
time_scan_out => time_scan_out,
|
||
|
abst_scan_in => abst_scan_in,
|
||
|
abst_scan_out => abst_scan_out,
|
||
|
repr_scan_in => repr_scan_in,
|
||
|
repr_scan_out => repr_scan_out,
|
||
|
|
||
|
abist_di => pc_iu_abist_di_0,
|
||
|
abist_bw_odd => pc_iu_abist_g8t_bw_1,
|
||
|
abist_bw_even => pc_iu_abist_g8t_bw_0,
|
||
|
abist_wr_adr => pc_iu_abist_waddr_0,
|
||
|
wr_abst_act => pc_iu_abist_g8t_wenb,
|
||
|
abist_rd0_adr => pc_iu_abist_raddr_0,
|
||
|
rd0_abst_act => pc_iu_abist_g8t1p_renb_0,
|
||
|
tc_lbist_ary_wrt_thru_dc => an_ac_lbist_ary_wrt_thru_dc,
|
||
|
abist_ena_1 => pc_iu_abist_ena_dc,
|
||
|
abist_g8t_rd0_comp_ena => pc_iu_abist_wl128_comp_ena,
|
||
|
abist_raw_dc_b => pc_iu_abist_raw_dc_b,
|
||
|
obs0_abist_cmp => pc_iu_abist_g8t_dcomp,
|
||
|
|
||
|
lcb_bolt_sl_thold_0 => pc_iu_bolt_sl_thold_0,
|
||
|
pc_bo_enable_2 => pc_iu_bo_enable_2,
|
||
|
pc_bo_reset => pc_iu_bo_reset,
|
||
|
pc_bo_unload => pc_iu_bo_unload,
|
||
|
pc_bo_repair => pc_iu_bo_repair,
|
||
|
pc_bo_shdata => pc_iu_bo_shdata,
|
||
|
pc_bo_select => pc_iu_bo_select,
|
||
|
bo_pc_failout => iu_pc_bo_fail,
|
||
|
bo_pc_diagloop => iu_pc_bo_diagout,
|
||
|
|
||
|
tri_lcb_mpw1_dc_b => mpw1_b,
|
||
|
tri_lcb_mpw2_dc_b => mpw2_b,
|
||
|
tri_lcb_delay_lclkr_dc => delay_lclkr,
|
||
|
tri_lcb_clkoff_dc_b => clkoff_b,
|
||
|
tri_lcb_act_dis_dc => act_dis,
|
||
|
|
||
|
bw => ary_w_sel,
|
||
|
wr_adr => ary_w_addr,
|
||
|
rd_adr => ary_r_addr,
|
||
|
di => ary_w_data,
|
||
|
do => ary_r_data
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
-------------------------------------------------
|
||
|
-- latches
|
||
|
-------------------------------------------------
|
||
|
|
||
|
data_in_reg: tri_rlmreg_p
|
||
|
generic map (width => data_in_q'length, init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(data_in_offset to data_in_offset + data_in_q'length-1),
|
||
|
scout => sov(data_in_offset to data_in_offset + data_in_q'length-1),
|
||
|
din => data_in_d,
|
||
|
dout => data_in_q);
|
||
|
|
||
|
w_act_reg: tri_rlmreg_p
|
||
|
generic map (width => w_act_q'length, init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(w_act_offset to w_act_offset + w_act_q'length-1),
|
||
|
scout => sov(w_act_offset to w_act_offset + w_act_q'length-1),
|
||
|
din => w_act_d,
|
||
|
dout => w_act_q);
|
||
|
|
||
|
r_act_reg: tri_rlmlatch_p
|
||
|
generic map (init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(r_act_offset),
|
||
|
scout => sov(r_act_offset),
|
||
|
din => r_act_d,
|
||
|
dout => r_act_q);
|
||
|
|
||
|
w_addr_reg: tri_rlmreg_p
|
||
|
generic map (width => w_addr_q'length, init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(w_addr_offset to w_addr_offset + w_addr_q'length-1),
|
||
|
scout => sov(w_addr_offset to w_addr_offset + w_addr_q'length-1),
|
||
|
din => w_addr_d,
|
||
|
dout => w_addr_q);
|
||
|
|
||
|
r_addr_reg: tri_rlmreg_p
|
||
|
generic map (width => r_addr_q'length, init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(r_addr_offset to r_addr_offset + r_addr_q'length-1),
|
||
|
scout => sov(r_addr_offset to r_addr_offset + r_addr_q'length-1),
|
||
|
din => r_addr_d,
|
||
|
dout => r_addr_q);
|
||
|
|
||
|
|
||
|
data_out_reg: tri_rlmreg_p
|
||
|
generic map (width => data_out_q'length, init => 0, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
act => tiup,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b,
|
||
|
sg => pc_iu_sg_0,
|
||
|
forcee => forcee,
|
||
|
delay_lclkr => delay_lclkr,
|
||
|
mpw1_b => mpw1_b,
|
||
|
mpw2_b => mpw2_b,
|
||
|
d_mode => d_mode,
|
||
|
scin => siv(data_out_offset to data_out_offset + data_out_q'length-1),
|
||
|
scout => sov(data_out_offset to data_out_offset + data_out_q'length-1),
|
||
|
din => data_out_d,
|
||
|
dout => data_out_q);
|
||
|
|
||
|
|
||
|
-------------------------------------------------
|
||
|
-- pervasive
|
||
|
-------------------------------------------------
|
||
|
|
||
|
perv_2to1_reg: tri_plat
|
||
|
generic map (width => 7, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
flush => tc_ac_ccflush_dc,
|
||
|
din(0) => pc_iu_func_sl_thold_2,
|
||
|
din(1) => pc_iu_sg_2,
|
||
|
din(2) => pc_iu_time_sl_thold_2,
|
||
|
din(3) => pc_iu_abst_sl_thold_2,
|
||
|
din(4) => pc_iu_ary_nsl_thold_2,
|
||
|
din(5) => pc_iu_repr_sl_thold_2,
|
||
|
din(6) => pc_iu_bolt_sl_thold_2,
|
||
|
q(0) => pc_iu_func_sl_thold_1,
|
||
|
q(1) => pc_iu_sg_1,
|
||
|
q(2) => pc_iu_time_sl_thold_1,
|
||
|
q(3) => pc_iu_abst_sl_thold_1,
|
||
|
q(4) => pc_iu_ary_nsl_thold_1,
|
||
|
q(5) => pc_iu_repr_sl_thold_1,
|
||
|
q(6) => pc_iu_bolt_sl_thold_1
|
||
|
);
|
||
|
|
||
|
perv_1to0_reg: tri_plat
|
||
|
generic map (width => 7, expand_type => expand_type)
|
||
|
port map (vd => vdd,
|
||
|
gd => gnd,
|
||
|
nclk => nclk,
|
||
|
flush => tc_ac_ccflush_dc,
|
||
|
din(0) => pc_iu_func_sl_thold_1,
|
||
|
din(1) => pc_iu_sg_1,
|
||
|
din(2) => pc_iu_time_sl_thold_1,
|
||
|
din(3) => pc_iu_abst_sl_thold_1,
|
||
|
din(4) => pc_iu_ary_nsl_thold_1,
|
||
|
din(5) => pc_iu_repr_sl_thold_1,
|
||
|
din(6) => pc_iu_bolt_sl_thold_1,
|
||
|
q(0) => pc_iu_func_sl_thold_0,
|
||
|
q(1) => pc_iu_sg_0,
|
||
|
q(2) => pc_iu_time_sl_thold_0,
|
||
|
q(3) => pc_iu_abst_sl_thold_0,
|
||
|
q(4) => pc_iu_ary_nsl_thold_0,
|
||
|
q(5) => pc_iu_repr_sl_thold_0,
|
||
|
q(6) => pc_iu_bolt_sl_thold_0
|
||
|
);
|
||
|
|
||
|
perv_lcbor: tri_lcbor
|
||
|
generic map (expand_type => expand_type)
|
||
|
port map (clkoff_b => clkoff_b,
|
||
|
thold => pc_iu_func_sl_thold_0,
|
||
|
sg => pc_iu_sg_0,
|
||
|
act_dis => act_dis,
|
||
|
forcee => forcee,
|
||
|
thold_b => pc_iu_func_sl_thold_0_b);
|
||
|
|
||
|
|
||
|
-------------------------------------------------
|
||
|
-- scan
|
||
|
-------------------------------------------------
|
||
|
|
||
|
siv(0 to scan_right) <= func_scan_in & sov(0 to scan_right-1);
|
||
|
func_scan_out <= sov(scan_right);
|
||
|
|
||
|
|
||
|
end tri_bht;
|