add source
parent
bacc27d411
commit
82ea7bbccd
@ -0,0 +1,20 @@
|
||||
#synth_design -top a2x_axi_bd_wrapper -part xcvu3p-ffvc1517-2-e -verbose
|
||||
#source ila_axi.tcl
|
||||
set version v0
|
||||
|
||||
write_checkpoint -force a2x_axi_synth_${version}.dcp
|
||||
|
||||
opt_design -retarget -propconst -bram_power_opt
|
||||
place_design -directive Explore
|
||||
phys_opt_design -directive Explore
|
||||
route_design -directive Explore
|
||||
phys_opt_design -directive Explore
|
||||
write_checkpoint -force a2x_axi_routed_${version}.dcp
|
||||
|
||||
report_utilization -file utilization_route_design_${version}.rpt
|
||||
report_timing_summary -max_paths 100 -file timing_routed_summary_${version}.rpt
|
||||
|
||||
write_bitstream -force -bin_file a2x_axi_${version}
|
||||
write_debug_probes -force a2x_axi_${version}
|
||||
write_cfgmem -force -format BIN -interface SPIx8 -size 256 -loadbit "up 0 a2x_axi_${version}.bit" a2x_axi_${version}
|
||||
|
@ -0,0 +1,24 @@
|
||||
//Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
|
||||
//--------------------------------------------------------------------------------
|
||||
//Tool Version: Vivado v.2019.1.3_CR1055600 (lin64) Build 2644227 Wed Sep 4 09:44:18 MDT 2019
|
||||
//Date : Wed Apr 8 10:49:50 2020
|
||||
//Host : apdegl15aa.pok.ibm.com running 64-bit Red Hat Enterprise Linux Workstation release 7.5 (Maipo)
|
||||
//Command : generate_target a2x_axi_bd_wrapper.bd
|
||||
//Design : a2x_axi_bd_wrapper
|
||||
//Purpose : IP block netlist
|
||||
//--------------------------------------------------------------------------------
|
||||
`timescale 1 ps / 1 ps
|
||||
|
||||
module a2x_axi_bd_wrapper
|
||||
(clk_in1_n_0,
|
||||
clk_in1_p_0);
|
||||
input clk_in1_n_0;
|
||||
input clk_in1_p_0;
|
||||
|
||||
wire clk_in1_n_0;
|
||||
wire clk_in1_p_0;
|
||||
|
||||
a2x_axi_bd a2x_axi_bd_i
|
||||
(.clk_in1_n_0(clk_in1_n_0),
|
||||
.clk_in1_p_0(clk_in1_p_0));
|
||||
endmodule
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,50 @@
|
||||
open_bd_design "[get_property DIRECTORY [current_project]]/proj_a2x_axi.srcs/sources_1/bd/a2x_axi_bd/a2x_axi_bd.bd"
|
||||
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /pain]
|
||||
set_property location {5 1506 2372} [get_bd_cells pain]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /thold_0]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /xlconstant_0]
|
||||
set_property location {6 2778 2069} [get_bd_cells xlconstant_0]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /xlconstant_1]
|
||||
set_property location {6 2734 2210} [get_bd_cells xlconstant_1]
|
||||
|
||||
# so xil actually connects as bus
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /mchk_rv]
|
||||
set_property location {6 2767 2847} [get_bd_cells mchk_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /rcov_rv]
|
||||
set_property location {6 2777 2748} [get_bd_cells rcov_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /checkstop_rv]
|
||||
set_property location {7 2850 2630} [get_bd_cells rcov_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /scomdata_rv]
|
||||
set_property location {4 1355 2564} [get_bd_cells scomdata_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /thread_running_rv]
|
||||
set_property location {5 2152 2682} [get_bd_cells thread_running_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /axi_reg00_rv]
|
||||
set_property location {7 3176 2490} [get_bd_cells axi_reg00_rv]
|
||||
set_property SCREENSIZE {1 1} [get_bd_cells /reverserator_4_0]
|
||||
set_property location {7 2156 2797} [get_bd_cells reverserator_4_0]
|
||||
|
||||
|
||||
|
||||
set_property SCREENSIZE {600 600} [get_bd_cells /a2x_axi_1]
|
||||
set_property location {5 2000 1000} [get_bd_cells /a2x_axi_1]
|
||||
set_property location {4 1306 1980} [get_bd_cells a2x_dbug]
|
||||
|
||||
set_property location {4.5 1482 792} [get_bd_cells jtag_axi_0]
|
||||
|
||||
set_property location {4 1259 2326} [get_bd_cells vio_dbug] ;# no orientation, highlight, etc.
|
||||
set_property location {5 1957 2377} [get_bd_cells vio_ctrl]
|
||||
set_property location {6 2704 2401} [get_bd_cells vio_terror]
|
||||
set_property location {7 3253 2629} [get_bd_cells vio_reg]
|
||||
|
||||
set_property location {10.5 4307 861} [get_bd_cells blk_mem_gen_1]
|
||||
set_property location {11 4297 974} [get_bd_cells blk_mem_gen_2]
|
||||
|
||||
set_property location {6 2034 684} [get_bd_cells axi_smc]
|
||||
|
||||
set_property location {7 3129 422} [get_bd_cells ila_axi]
|
||||
set_property location {9 3542 548} [get_bd_cells ila_axi_protocol]
|
||||
set_property location {7 3173 580} [get_bd_cells axi_protocol_checker]
|
||||
|
||||
save_bd_design
|
||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,31 @@
|
||||
# create/build project
|
||||
|
||||
```
|
||||
$VIVADO -mode tcl -source create_a2x_project.tcl
|
||||
|
||||
$VIVADO proj/proj_a2x_axi.xpr
|
||||
|
||||
source ./fixup_a2x_bd.tcl
|
||||
|
||||
>run synthesis (synth_2)
|
||||
>open synthesized design
|
||||
|
||||
source ./ila_axi.tcl
|
||||
>set up debug
|
||||
> all clk
|
||||
> 8192/3
|
||||
|
||||
source ./a2x_impl_step.tcl
|
||||
```
|
||||
|
||||
```
|
||||
a2x_axi_routed_v0.dcp
|
||||
a2x_axi_synth_v0.dcp
|
||||
a2x_axi_v0.bin
|
||||
a2x_axi_v0.bit
|
||||
a2x_axi_v0.ltx
|
||||
a2x_axi_v0_primary.bin
|
||||
a2x_axi_v0_primary.prm
|
||||
a2x_axi_v0_secondary.bin
|
||||
a2x_axi_v0_secondary.prm
|
||||
```
|
@ -0,0 +1 @@
|
||||
../xdc
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,154 @@
|
||||
-- © 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 support; use support.power_logic_pkg.all;
|
||||
|
||||
entity c_debug_mux16 is
|
||||
generic( DBG_WIDTH : integer := 88
|
||||
);
|
||||
port(
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
|
||||
select_bits : in std_ulogic_vector(0 to 15);
|
||||
trace_data_in : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_in : in std_ulogic_vector(0 to 11);
|
||||
|
||||
dbg_group0 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group1 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group2 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group3 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group4 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group5 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group6 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group7 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group8 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group9 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group10 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group11 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group12 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group13 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group14 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group15 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
|
||||
trg_group0 : in std_ulogic_vector(0 to 11);
|
||||
trg_group1 : in std_ulogic_vector(0 to 11);
|
||||
trg_group2 : in std_ulogic_vector(0 to 11);
|
||||
trg_group3 : in std_ulogic_vector(0 to 11);
|
||||
|
||||
trace_data_out : out std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_out : out std_ulogic_vector(0 to 11)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end c_debug_mux16;
|
||||
|
||||
|
||||
architecture c_debug_mux16 of c_debug_mux16 is
|
||||
|
||||
constant DBG_1FOURTH : positive := DBG_WIDTH/4;
|
||||
constant DBG_2FOURTH : positive := DBG_WIDTH/2;
|
||||
constant DBG_3FOURTH : positive := 3*DBG_WIDTH/4;
|
||||
|
||||
signal debug_grp_selected : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal debug_grp_rotated : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal trigg_grp_selected : std_ulogic_vector(0 to 11);
|
||||
signal trigg_grp_rotated : std_ulogic_vector(0 to 11);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
unused <= select_bits(4);
|
||||
|
||||
with select_bits(0 to 3) select debug_grp_selected <=
|
||||
dbg_group0 when "0000",
|
||||
dbg_group1 when "0001",
|
||||
dbg_group2 when "0010",
|
||||
dbg_group3 when "0011",
|
||||
dbg_group4 when "0100",
|
||||
dbg_group5 when "0101",
|
||||
dbg_group6 when "0110",
|
||||
dbg_group7 when "0111",
|
||||
dbg_group8 when "1000",
|
||||
dbg_group9 when "1001",
|
||||
dbg_group10 when "1010",
|
||||
dbg_group11 when "1011",
|
||||
dbg_group12 when "1100",
|
||||
dbg_group13 when "1101",
|
||||
dbg_group14 when "1110",
|
||||
dbg_group15 when others;
|
||||
|
||||
with select_bits(5 to 6) select
|
||||
debug_grp_rotated <= debug_grp_selected(DBG_1FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_1FOURTH-1) when "11",
|
||||
debug_grp_selected(DBG_2FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_2FOURTH-1) when "10",
|
||||
debug_grp_selected(DBG_3FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_3FOURTH-1) when "01",
|
||||
debug_grp_selected(0 to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
with select_bits(7) select trace_data_out(0 to DBG_1FOURTH-1) <=
|
||||
trace_data_in(0 to DBG_1FOURTH-1) when '0',
|
||||
debug_grp_rotated(0 to DBG_1FOURTH-1) when others;
|
||||
|
||||
with select_bits(8) select trace_data_out(DBG_1FOURTH to DBG_2FOURTH-1) <=
|
||||
trace_data_in(DBG_1FOURTH to DBG_2FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_1FOURTH to DBG_2FOURTH-1) when others;
|
||||
|
||||
with select_bits(9) select trace_data_out(DBG_2FOURTH to DBG_3FOURTH-1) <=
|
||||
trace_data_in(DBG_2FOURTH to DBG_3FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_2FOURTH to DBG_3FOURTH-1) when others;
|
||||
|
||||
with select_bits(10) select trace_data_out(DBG_3FOURTH to DBG_WIDTH-1) <=
|
||||
trace_data_in(DBG_3FOURTH to DBG_WIDTH-1) when '0',
|
||||
debug_grp_rotated(DBG_3FOURTH to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
|
||||
with select_bits(11 to 12) select trigg_grp_selected <=
|
||||
trg_group0 when "00",
|
||||
trg_group1 when "01",
|
||||
trg_group2 when "10",
|
||||
trg_group3 when others;
|
||||
|
||||
with select_bits(13) select
|
||||
trigg_grp_rotated <= trigg_grp_selected(6 to 11) & trigg_grp_selected(0 to 5) when '1',
|
||||
trigg_grp_selected(0 to 11) when others;
|
||||
|
||||
with select_bits(14) select trigger_data_out(0 to 5) <=
|
||||
trigger_data_in(0 to 5) when '0',
|
||||
trigg_grp_rotated(0 to 5) when others;
|
||||
|
||||
with select_bits(15) select trigger_data_out(6 to 11) <=
|
||||
trigger_data_in(6 to 11) when '0',
|
||||
trigg_grp_rotated(6 to 11) when others;
|
||||
|
||||
|
||||
end c_debug_mux16;
|
@ -0,0 +1,184 @@
|
||||
-- © 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 support;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
entity c_debug_mux32 is
|
||||
generic( DBG_WIDTH : integer := 88
|
||||
);
|
||||
port(
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
|
||||
select_bits : in std_ulogic_vector(0 to 15);
|
||||
trace_data_in : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_in : in std_ulogic_vector(0 to 11);
|
||||
|
||||
dbg_group0 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group1 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group2 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group3 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group4 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group5 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group6 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group7 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group8 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group9 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group10 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group11 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group12 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group13 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group14 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group15 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group16 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group17 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group18 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group19 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group20 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group21 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group22 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group23 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group24 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group25 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group26 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group27 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group28 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group29 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group30 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group31 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
|
||||
trg_group0 : in std_ulogic_vector(0 to 11);
|
||||
trg_group1 : in std_ulogic_vector(0 to 11);
|
||||
trg_group2 : in std_ulogic_vector(0 to 11);
|
||||
trg_group3 : in std_ulogic_vector(0 to 11);
|
||||
|
||||
trace_data_out : out std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_out : out std_ulogic_vector(0 to 11)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end c_debug_mux32;
|
||||
|
||||
|
||||
architecture c_debug_mux32 of c_debug_mux32 is
|
||||
|
||||
constant DBG_1FOURTH : positive := DBG_WIDTH/4;
|
||||
constant DBG_2FOURTH : positive := DBG_WIDTH/2;
|
||||
constant DBG_3FOURTH : positive := 3*DBG_WIDTH/4;
|
||||
|
||||
signal debug_grp_selected : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal debug_grp_rotated : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal trigg_grp_selected : std_ulogic_vector(0 to 11);
|
||||
signal trigg_grp_rotated : std_ulogic_vector(0 to 11);
|
||||
|
||||
begin
|
||||
|
||||
|
||||
with select_bits(0 to 4) select debug_grp_selected <=
|
||||
dbg_group0 when "00000",
|
||||
dbg_group1 when "00001",
|
||||
dbg_group2 when "00010",
|
||||
dbg_group3 when "00011",
|
||||
dbg_group4 when "00100",
|
||||
dbg_group5 when "00101",
|
||||
dbg_group6 when "00110",
|
||||
dbg_group7 when "00111",
|
||||
dbg_group8 when "01000",
|
||||
dbg_group9 when "01001",
|
||||
dbg_group10 when "01010",
|
||||
dbg_group11 when "01011",
|
||||
dbg_group12 when "01100",
|
||||
dbg_group13 when "01101",
|
||||
dbg_group14 when "01110",
|
||||
dbg_group15 when "01111",
|
||||
dbg_group16 when "10000",
|
||||
dbg_group17 when "10001",
|
||||
dbg_group18 when "10010",
|
||||
dbg_group19 when "10011",
|
||||
dbg_group20 when "10100",
|
||||
dbg_group21 when "10101",
|
||||
dbg_group22 when "10110",
|
||||
dbg_group23 when "10111",
|
||||
dbg_group24 when "11000",
|
||||
dbg_group25 when "11001",
|
||||
dbg_group26 when "11010",
|
||||
dbg_group27 when "11011",
|
||||
dbg_group28 when "11100",
|
||||
dbg_group29 when "11101",
|
||||
dbg_group30 when "11110",
|
||||
dbg_group31 when others;
|
||||
|
||||
with select_bits(5 to 6) select
|
||||
debug_grp_rotated <= debug_grp_selected(DBG_1FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_1FOURTH-1) when "11",
|
||||
debug_grp_selected(DBG_2FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_2FOURTH-1) when "10",
|
||||
debug_grp_selected(DBG_3FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_3FOURTH-1) when "01",
|
||||
debug_grp_selected(0 to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
with select_bits(7) select trace_data_out(0 to DBG_1FOURTH-1) <=
|
||||
trace_data_in(0 to DBG_1FOURTH-1) when '0',
|
||||
debug_grp_rotated(0 to DBG_1FOURTH-1) when others;
|
||||
|
||||
with select_bits(8) select trace_data_out(DBG_1FOURTH to DBG_2FOURTH-1) <=
|
||||
trace_data_in(DBG_1FOURTH to DBG_2FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_1FOURTH to DBG_2FOURTH-1) when others;
|
||||
|
||||
with select_bits(9) select trace_data_out(DBG_2FOURTH to DBG_3FOURTH-1) <=
|
||||
trace_data_in(DBG_2FOURTH to DBG_3FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_2FOURTH to DBG_3FOURTH-1) when others;
|
||||
|
||||
with select_bits(10) select trace_data_out(DBG_3FOURTH to DBG_WIDTH-1) <=
|
||||
trace_data_in(DBG_3FOURTH to DBG_WIDTH-1) when '0',
|
||||
debug_grp_rotated(DBG_3FOURTH to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
|
||||
with select_bits(11 to 12) select trigg_grp_selected <=
|
||||
trg_group0 when "00",
|
||||
trg_group1 when "01",
|
||||
trg_group2 when "10",
|
||||
trg_group3 when others;
|
||||
|
||||
with select_bits(13) select
|
||||
trigg_grp_rotated <= trigg_grp_selected(6 to 11) & trigg_grp_selected(0 to 5) when '1',
|
||||
trigg_grp_selected(0 to 11) when others;
|
||||
|
||||
with select_bits(14) select trigger_data_out(0 to 5) <=
|
||||
trigger_data_in(0 to 5) when '0',
|
||||
trigg_grp_rotated(0 to 5) when others;
|
||||
|
||||
with select_bits(15) select trigger_data_out(6 to 11) <=
|
||||
trigger_data_in(6 to 11) when '0',
|
||||
trigg_grp_rotated(6 to 11) when others;
|
||||
|
||||
|
||||
end c_debug_mux32;
|
@ -0,0 +1,131 @@
|
||||
-- © 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 support;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
entity c_debug_mux4 is
|
||||
generic( DBG_WIDTH : integer := 88
|
||||
);
|
||||
port(
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
|
||||
select_bits : in std_ulogic_vector(0 to 15);
|
||||
trace_data_in : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_in : in std_ulogic_vector(0 to 11);
|
||||
|
||||
dbg_group0 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group1 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group2 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group3 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
|
||||
trg_group0 : in std_ulogic_vector(0 to 11);
|
||||
trg_group1 : in std_ulogic_vector(0 to 11);
|
||||
trg_group2 : in std_ulogic_vector(0 to 11);
|
||||
trg_group3 : in std_ulogic_vector(0 to 11);
|
||||
|
||||
trace_data_out : out std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_out : out std_ulogic_vector(0 to 11)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end c_debug_mux4;
|
||||
|
||||
|
||||
architecture c_debug_mux4 of c_debug_mux4 is
|
||||
|
||||
constant DBG_1FOURTH : positive := DBG_WIDTH/4;
|
||||
constant DBG_2FOURTH : positive := DBG_WIDTH/2;
|
||||
constant DBG_3FOURTH : positive := 3*DBG_WIDTH/4;
|
||||
|
||||
signal debug_grp_selected : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal debug_grp_rotated : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal trigg_grp_selected : std_ulogic_vector(0 to 11);
|
||||
signal trigg_grp_rotated : std_ulogic_vector(0 to 11);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
unused <= select_bits(2) or select_bits(3) or select_bits(4);
|
||||
|
||||
with select_bits(0 to 1) select debug_grp_selected <=
|
||||
dbg_group0 when "00",
|
||||
dbg_group1 when "01",
|
||||
dbg_group2 when "10",
|
||||
dbg_group3 when others;
|
||||
|
||||
with select_bits(5 to 6) select
|
||||
debug_grp_rotated <= debug_grp_selected(DBG_1FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_1FOURTH-1) when "11",
|
||||
debug_grp_selected(DBG_2FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_2FOURTH-1) when "10",
|
||||
debug_grp_selected(DBG_3FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_3FOURTH-1) when "01",
|
||||
debug_grp_selected(0 to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
with select_bits(7) select trace_data_out(0 to DBG_1FOURTH-1) <=
|
||||
trace_data_in(0 to DBG_1FOURTH-1) when '0',
|
||||
debug_grp_rotated(0 to DBG_1FOURTH-1) when others;
|
||||
|
||||
with select_bits(8) select trace_data_out(DBG_1FOURTH to DBG_2FOURTH-1) <=
|
||||
trace_data_in(DBG_1FOURTH to DBG_2FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_1FOURTH to DBG_2FOURTH-1) when others;
|
||||
|
||||
with select_bits(9) select trace_data_out(DBG_2FOURTH to DBG_3FOURTH-1) <=
|
||||
trace_data_in(DBG_2FOURTH to DBG_3FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_2FOURTH to DBG_3FOURTH-1) when others;
|
||||
|
||||
with select_bits(10) select trace_data_out(DBG_3FOURTH to DBG_WIDTH-1) <=
|
||||
trace_data_in(DBG_3FOURTH to DBG_WIDTH-1) when '0',
|
||||
debug_grp_rotated(DBG_3FOURTH to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
|
||||
with select_bits(11 to 12) select trigg_grp_selected <=
|
||||
trg_group0 when "00",
|
||||
trg_group1 when "01",
|
||||
trg_group2 when "10",
|
||||
trg_group3 when others;
|
||||
|
||||
with select_bits(13) select
|
||||
trigg_grp_rotated <= trigg_grp_selected(6 to 11) & trigg_grp_selected(0 to 5) when '1',
|
||||
trigg_grp_selected(0 to 11) when others;
|
||||
|
||||
with select_bits(14) select trigger_data_out(0 to 5) <=
|
||||
trigger_data_in(0 to 5) when '0',
|
||||
trigg_grp_rotated(0 to 5) when others;
|
||||
|
||||
with select_bits(15) select trigger_data_out(6 to 11) <=
|
||||
trigger_data_in(6 to 11) when '0',
|
||||
trigg_grp_rotated(6 to 11) when others;
|
||||
|
||||
|
||||
end c_debug_mux4;
|
@ -0,0 +1,139 @@
|
||||
-- © 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 support;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
entity c_debug_mux8 is
|
||||
generic( DBG_WIDTH : integer := 88
|
||||
);
|
||||
port(
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
|
||||
select_bits : in std_ulogic_vector(0 to 15);
|
||||
trace_data_in : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_in : in std_ulogic_vector(0 to 11);
|
||||
|
||||
dbg_group0 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group1 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group2 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group3 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group4 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group5 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group6 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
dbg_group7 : in std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
|
||||
trg_group0 : in std_ulogic_vector(0 to 11);
|
||||
trg_group1 : in std_ulogic_vector(0 to 11);
|
||||
trg_group2 : in std_ulogic_vector(0 to 11);
|
||||
trg_group3 : in std_ulogic_vector(0 to 11);
|
||||
|
||||
trace_data_out : out std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
trigger_data_out : out std_ulogic_vector(0 to 11)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end c_debug_mux8;
|
||||
|
||||
|
||||
architecture c_debug_mux8 of c_debug_mux8 is
|
||||
|
||||
constant DBG_1FOURTH : positive := DBG_WIDTH/4;
|
||||
constant DBG_2FOURTH : positive := DBG_WIDTH/2;
|
||||
constant DBG_3FOURTH : positive := 3*DBG_WIDTH/4;
|
||||
|
||||
signal debug_grp_selected : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal debug_grp_rotated : std_ulogic_vector(0 to DBG_WIDTH-1);
|
||||
signal trigg_grp_selected : std_ulogic_vector(0 to 11);
|
||||
signal trigg_grp_rotated : std_ulogic_vector(0 to 11);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
unused <= select_bits(3) or select_bits(4);
|
||||
|
||||
with select_bits(0 to 2) select debug_grp_selected <=
|
||||
dbg_group0 when "000",
|
||||
dbg_group1 when "001",
|
||||
dbg_group2 when "010",
|
||||
dbg_group3 when "011",
|
||||
dbg_group4 when "100",
|
||||
dbg_group5 when "101",
|
||||
dbg_group6 when "110",
|
||||
dbg_group7 when others;
|
||||
|
||||
with select_bits(5 to 6) select
|
||||
debug_grp_rotated <= debug_grp_selected(DBG_1FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_1FOURTH-1) when "11",
|
||||
debug_grp_selected(DBG_2FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_2FOURTH-1) when "10",
|
||||
debug_grp_selected(DBG_3FOURTH to DBG_WIDTH-1) & debug_grp_selected(0 to DBG_3FOURTH-1) when "01",
|
||||
debug_grp_selected(0 to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
with select_bits(7) select trace_data_out(0 to DBG_1FOURTH-1) <=
|
||||
trace_data_in(0 to DBG_1FOURTH-1) when '0',
|
||||
debug_grp_rotated(0 to DBG_1FOURTH-1) when others;
|
||||
|
||||
with select_bits(8) select trace_data_out(DBG_1FOURTH to DBG_2FOURTH-1) <=
|
||||
trace_data_in(DBG_1FOURTH to DBG_2FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_1FOURTH to DBG_2FOURTH-1) when others;
|
||||
|
||||
with select_bits(9) select trace_data_out(DBG_2FOURTH to DBG_3FOURTH-1) <=
|
||||
trace_data_in(DBG_2FOURTH to DBG_3FOURTH-1) when '0',
|
||||
debug_grp_rotated(DBG_2FOURTH to DBG_3FOURTH-1) when others;
|
||||
|
||||
with select_bits(10) select trace_data_out(DBG_3FOURTH to DBG_WIDTH-1) <=
|
||||
trace_data_in(DBG_3FOURTH to DBG_WIDTH-1) when '0',
|
||||
debug_grp_rotated(DBG_3FOURTH to DBG_WIDTH-1) when others;
|
||||
|
||||
|
||||
|
||||
with select_bits(11 to 12) select trigg_grp_selected <=
|
||||
trg_group0 when "00",
|
||||
trg_group1 when "01",
|
||||
trg_group2 when "10",
|
||||
trg_group3 when others;
|
||||
|
||||
with select_bits(13) select
|
||||
trigg_grp_rotated <= trigg_grp_selected(6 to 11) & trigg_grp_selected(0 to 5) when '1',
|
||||
trigg_grp_selected(0 to 11) when others;
|
||||
|
||||
with select_bits(14) select trigger_data_out(0 to 5) <=
|
||||
trigger_data_in(0 to 5) when '0',
|
||||
trigg_grp_rotated(0 to 5) when others;
|
||||
|
||||
with select_bits(15) select trigger_data_out(6 to 11) <=
|
||||
trigger_data_in(6 to 11) when '0',
|
||||
trigg_grp_rotated(6 to 11) when others;
|
||||
|
||||
|
||||
end c_debug_mux8;
|
@ -0,0 +1,146 @@
|
||||
-- © 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,support,ibm;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
entity c_event_mux is
|
||||
generic( events_in : integer := 32;
|
||||
events_out : integer := 8 );
|
||||
port(
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
t0_events : in std_ulogic_vector(0 to events_in/4-1);
|
||||
t1_events : in std_ulogic_vector(0 to events_in/4-1);
|
||||
t2_events : in std_ulogic_vector(0 to events_in/4-1);
|
||||
t3_events : in std_ulogic_vector(0 to events_in/4-1);
|
||||
|
||||
select_bits : in std_ulogic_vector(0 to ((events_in/64+4)*events_out)-1);
|
||||
|
||||
event_bits : out std_ulogic_vector(0 to events_out-1)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end c_event_mux;
|
||||
|
||||
|
||||
architecture c_event_mux of c_event_mux is
|
||||
|
||||
constant INCR : natural := events_in/64+4;
|
||||
constant SIZE : natural := events_in/64+1;
|
||||
|
||||
|
||||
signal inMuxDec : std_ulogic_vector(0 to events_out*events_in/4-1);
|
||||
signal inMuxOut : std_ulogic_vector(0 to events_out*events_in/4-1);
|
||||
|
||||
signal thrd_sel : std_ulogic_vector(0 to events_out-1);
|
||||
signal inMux_sel : std_ulogic_vector(0 to ((events_in/64+3)*events_out)-1);
|
||||
|
||||
|
||||
begin
|
||||
thrd_sel <= select_bits(0*INCR) & select_bits(1*INCR) &
|
||||
select_bits(2*INCR) & select_bits(3*INCR) &
|
||||
select_bits(4*INCR) & select_bits(5*INCR) &
|
||||
select_bits(6*INCR) & select_bits(7*INCR) ;
|
||||
|
||||
inMux_sel <= select_bits(0*INCR+1 to (0+1)*INCR-1) &
|
||||
select_bits(1*INCR+1 to (1+1)*INCR-1) &
|
||||
select_bits(2*INCR+1 to (2+1)*INCR-1) &
|
||||
select_bits(3*INCR+1 to (3+1)*INCR-1) &
|
||||
select_bits(4*INCR+1 to (4+1)*INCR-1) &
|
||||
select_bits(5*INCR+1 to (5+1)*INCR-1) &
|
||||
select_bits(6*INCR+1 to (6+1)*INCR-1) &
|
||||
select_bits(7*INCR+1 to (7+1)*INCR-1) ;
|
||||
|
||||
|
||||
decode: for X in 0 to events_out-1 generate
|
||||
Mux32: if (events_in = 32) generate
|
||||
inMuxDec(X*events_in/4 to X*events_in/4+7) <= decode_3to8(inMux_sel(X*3 to X*3+2));
|
||||
end generate Mux32;
|
||||
|
||||
Mux64: if (events_in = 64) generate
|
||||
inMuxDec(X*events_in/4 to X*events_in/4+15) <= decode_4to16(inMux_sel(X*4 to X*4+3));
|
||||
end generate Mux64;
|
||||
|
||||
Mux128: if (events_in = 128) generate
|
||||
inMuxDec(X*events_in/4 to X*events_in/4+31) <= decode_5to32(inMux_sel(X*5 to X*5+4));
|
||||
end generate Mux128;
|
||||
end generate decode;
|
||||
|
||||
|
||||
inpMuxHi: for X in 0 to events_out/2-1 generate
|
||||
eventSel: for I in 0 to events_in/4-1 generate
|
||||
inMuxOut(X*events_in/4 + I) <=
|
||||
((inMuxDec(X*events_in/4 + I) and not thrd_sel(X) and t0_events(I)) or
|
||||
(inMuxDec(X*events_in/4 + I) and thrd_sel(X) and t1_events(I)) );
|
||||
end generate eventSel;
|
||||
end generate inpMuxHi;
|
||||
|
||||
inpMuxLo: for X in events_out/2 to events_out-1 generate
|
||||
eventSel: for I in 0 to events_in/4-1 generate
|
||||
inMuxOut(X*events_in/4 + I) <=
|
||||
((inMuxDec(X*events_in/4 + I) and not thrd_sel(X) and t2_events(I)) or
|
||||
(inMuxDec(X*events_in/4 + I) and thrd_sel(X) and t3_events(I)) );
|
||||
end generate eventSel;
|
||||
end generate inpMuxLo;
|
||||
|
||||
|
||||
bitOutHi: for X in 0 to events_out/2-1 generate
|
||||
Mux32: if (events_in = 32) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 7));
|
||||
end generate Mux32;
|
||||
|
||||
Mux64: if (events_in = 64) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 15));
|
||||
end generate Mux64;
|
||||
|
||||
Mux128: if (events_in = 128) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 31));
|
||||
end generate Mux128;
|
||||
end generate bitOutHi;
|
||||
|
||||
bitOutLo: for X in events_out/2 to events_out-1 generate
|
||||
Mux32: if (events_in = 32) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 7));
|
||||
end generate Mux32;
|
||||
|
||||
Mux64: if (events_in = 64) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 15));
|
||||
end generate Mux64;
|
||||
|
||||
Mux128: if (events_in = 128) generate
|
||||
event_bits(X) <= or_reduce(inMuxOut(X*events_in/4 to X*events_in/4 + 31));
|
||||
end generate Mux128;
|
||||
end generate bitOutLo;
|
||||
|
||||
end c_event_mux;
|
||||
|
@ -0,0 +1,97 @@
|
||||
-- © 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_ao_support.all;
|
||||
use ibm.std_ulogic_mux_support.all;
|
||||
library support; use support.power_logic_pkg.all;
|
||||
|
||||
ENTITY c_prism_bthmx IS
|
||||
GENERIC ( btr : string := "BTHMX_X1_A12TH" );
|
||||
PORT(
|
||||
X : IN STD_ULOGIC;
|
||||
SNEG : IN STD_ULOGIC;
|
||||
SX : IN STD_ULOGIC;
|
||||
SX2 : IN STD_ULOGIC;
|
||||
RIGHT : IN STD_ULOGIC;
|
||||
LEFT : OUT STD_ULOGIC;
|
||||
Q : OUT STD_ULOGIC;
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
|
||||
ATTRIBUTE PIN_BIT_INFORMATION of c_prism_bthmx : entity is
|
||||
(
|
||||
1 => (" ","X ","SAME","PIN_BIT_SCALAR"),
|
||||
2 => (" ","SNEG ","SAME","PIN_BIT_SCALAR"),
|
||||
3 => (" ","SX ","SAME","PIN_BIT_SCALAR"),
|
||||
4 => (" ","SX2 ","SAME","PIN_BIT_SCALAR"),
|
||||
5 => (" ","RIGHT ","SAME","PIN_BIT_SCALAR"),
|
||||
6 => (" ","LEFT ","SAME","PIN_BIT_SCALAR"),
|
||||
7 => (" ","Q ","SAME","PIN_BIT_SCALAR"),
|
||||
8 => (" ","VDD ","SAME","PIN_BIT_SCALAR"),
|
||||
9 => (" ","VSS ","SAME","PIN_BIT_SCALAR")
|
||||
);
|
||||
-- synopsys translate_on
|
||||
END c_prism_bthmx;
|
||||
|
||||
ARCHITECTURE c_prism_bthmx OF c_prism_bthmx IS
|
||||
|
||||
SIGNAL CENTER :STD_ULOGIC;
|
||||
SIGNAL XN :STD_ULOGIC;
|
||||
SIGNAL SPOS :STD_ULOGIC;
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
XN <= NOT X;
|
||||
|
||||
SPOS <= NOT SNEG;
|
||||
|
||||
CENTER <= NOT( ( XN AND SPOS ) OR
|
||||
( X AND SNEG ) );
|
||||
|
||||
LEFT <= CENTER;
|
||||
|
||||
|
||||
Q <= ( CENTER AND SX ) OR
|
||||
( RIGHT AND SX2 ) ;
|
||||
|
||||
|
||||
END;
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,82 @@
|
||||
-- © 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_ao_support.all;
|
||||
use ibm.std_ulogic_mux_support.all;
|
||||
library support; use support.power_logic_pkg.all;
|
||||
|
||||
ENTITY c_prism_csa32 IS
|
||||
GENERIC ( btr : string := "CSA32_A2_A12TH" );
|
||||
PORT(
|
||||
A : IN std_ulogic;
|
||||
B : IN std_ulogic;
|
||||
C : IN std_ulogic;
|
||||
CAR : OUT std_ulogic;
|
||||
SUM : OUT std_ulogic;
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
|
||||
ATTRIBUTE PIN_BIT_INFORMATION of c_prism_csa32 : entity is
|
||||
(
|
||||
1 => (" ","A ","SAME","PIN_BIT_SCALAR"),
|
||||
2 => (" ","B ","SAME","PIN_BIT_SCALAR"),
|
||||
3 => (" ","C ","SAME","PIN_BIT_SCALAR"),
|
||||
4 => (" ","CAR ","SAME","PIN_BIT_SCALAR"),
|
||||
5 => (" ","SUM ","SAME","PIN_BIT_SCALAR"),
|
||||
6 => (" ","VDD ","SAME","PIN_BIT_SCALAR"),
|
||||
7 => (" ","VSS ","SAME","PIN_BIT_SCALAR")
|
||||
);
|
||||
-- synopsys translate_on
|
||||
END c_prism_csa32;
|
||||
|
||||
ARCHITECTURE c_prism_csa32 OF c_prism_csa32 IS
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
sum <= a XOR b XOR c ;
|
||||
|
||||
car <= (a AND b ) OR
|
||||
(a AND c ) OR
|
||||
(b AND c );
|
||||
|
||||
|
||||
END;
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,96 @@
|
||||
-- © 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 support;
|
||||
library ibm;
|
||||
use ibm.std_ulogic_support.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use ibm.std_ulogic_ao_support.all;
|
||||
use ibm.std_ulogic_mux_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
ENTITY c_prism_csa42 IS
|
||||
GENERIC ( btr : string := "CSA42_A2_A12TH" );
|
||||
PORT(
|
||||
A : IN std_ulogic;
|
||||
B : IN std_ulogic;
|
||||
C : IN std_ulogic;
|
||||
D : IN std_ulogic;
|
||||
KI : IN std_ulogic;
|
||||
KO : OUT std_ulogic;
|
||||
CAR : OUT std_ulogic;
|
||||
SUM : OUT std_ulogic;
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
|
||||
ATTRIBUTE PIN_BIT_INFORMATION of c_prism_csa42 : entity is
|
||||
(
|
||||
1 => (" ","A ","SAME","PIN_BIT_SCALAR"),
|
||||
2 => (" ","B ","SAME","PIN_BIT_SCALAR"),
|
||||
3 => (" ","C ","SAME","PIN_BIT_SCALAR"),
|
||||
4 => (" ","D ","SAME","PIN_BIT_SCALAR"),
|
||||
5 => (" ","KI ","SAME","PIN_BIT_SCALAR"),
|
||||
6 => (" ","KO ","SAME","PIN_BIT_SCALAR"),
|
||||
7 => (" ","CAR ","SAME","PIN_BIT_SCALAR"),
|
||||
8 => (" ","SUM ","SAME","PIN_BIT_SCALAR"),
|
||||
9 => (" ","VDD ","SAME","PIN_BIT_SCALAR"),
|
||||
10 => (" ","VSS ","SAME","PIN_BIT_SCALAR")
|
||||
);
|
||||
-- synopsys translate_on
|
||||
END c_prism_csa42;
|
||||
|
||||
ARCHITECTURE c_prism_csa42 OF c_prism_csa42 IS
|
||||
|
||||
signal s1 : std_ulogic;
|
||||
|
||||
BEGIN
|
||||
|
||||
s1 <= b XOR c XOR d ;
|
||||
sum <= s1 XOR a XOR ki;
|
||||
|
||||
car <= (s1 AND a ) OR
|
||||
(s1 AND ki) OR
|
||||
(a AND ki);
|
||||
|
||||
ko <= (b AND c ) OR
|
||||
(b AND d ) OR
|
||||
(c AND d );
|
||||
|
||||
|
||||
END;
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,70 @@
|
||||
-- © 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,ibm,latches,clib, support;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_support.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
|
||||
entity c_scom_addr_decode is
|
||||
generic( satid_nobits : positive := 5
|
||||
; use_addr : std_ulogic_vector := "1"
|
||||
; addr_is_rdable : std_ulogic_vector := "1"
|
||||
; addr_is_wrable : std_ulogic_vector := "1"
|
||||
);
|
||||
port( sc_addr : in std_ulogic_vector(0 to 11-satid_nobits-1)
|
||||
; scaddr_dec : out std_ulogic_vector(0 to use_addr'length-1)
|
||||
; sc_req : in std_ulogic
|
||||
; sc_r_nw : in std_ulogic
|
||||
; scaddr_nvld : out std_ulogic
|
||||
; sc_wr_nvld : out std_ulogic
|
||||
; sc_rd_nvld : out std_ulogic
|
||||
; vd : inout power_logic
|
||||
; gd : inout power_logic
|
||||
);
|
||||
|
||||
end c_scom_addr_decode;
|
||||
|
||||
|
||||
|
||||
architecture c_scom_addr_decode of c_scom_addr_decode is
|
||||
signal address : std_ulogic_vector(0 to use_addr'length-1);
|
||||
begin
|
||||
decode_it : for i in 0 to use_addr'length-1 generate
|
||||
address(i) <= ((sc_addr = tconv(i,sc_addr'length)) and (use_addr(i)='1'));
|
||||
end generate decode_it;
|
||||
|
||||
scaddr_dec <= address;
|
||||
scaddr_nvld <= sc_req and not or_reduce(address);
|
||||
sc_wr_nvld <= not or_reduce(address and addr_is_wrable) and sc_req and not sc_r_nw;
|
||||
sc_rd_nvld <= not or_reduce(address and addr_is_rdable) and sc_req and sc_r_nw;
|
||||
end c_scom_addr_decode;
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,38 @@
|
||||
-- © 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;
|
||||
|
||||
package power_logic_pkg is
|
||||
|
||||
subtype power_logic is std_logic;
|
||||
subtype power_logic_vector is std_logic_vector;
|
||||
|
||||
end package power_logic_pkg;
|
||||
|
@ -0,0 +1,360 @@
|
||||
-- © 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;
|
||||
|
||||
library UNISIM;
|
||||
use UNISIM.vcomponents.all;
|
||||
|
||||
library UNIMACRO;
|
||||
use UNIMACRO.vcomponents.all;
|
||||
|
||||
entity RAMB16_S18_S18 is
|
||||
generic (
|
||||
INIT_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_08 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_09 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_10 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_11 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_12 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_13 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_14 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_15 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_16 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_17 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_18 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_19 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_20 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_21 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_22 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_23 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_24 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_25 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_26 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_27 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_28 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_29 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_30 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_31 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_32 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_33 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_34 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_35 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_36 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_37 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_38 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_39 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_A : bit_vector := X"000000000";
|
||||
INIT_B : bit_vector := X"000000000";
|
||||
SIM_COLLISION_CHECK : string := "ALL";
|
||||
SRVAL_A : bit_vector := X"000000000";
|
||||
SRVAL_B : bit_vector := X"000000000";
|
||||
WRITE_MODE_A : string := "WRITE_FIRST";
|
||||
WRITE_MODE_B : string := "WRITE_FIRST"
|
||||
);
|
||||
port (
|
||||
DOA : out std_logic_vector(15 downto 0);
|
||||
DOB : out std_logic_vector(15 downto 0);
|
||||
DOPA : out std_logic_vector(1 downto 0);
|
||||
DOPB : out std_logic_vector(1 downto 0);
|
||||
ADDRA : in std_logic_vector(9 downto 0);
|
||||
ADDRB : in std_logic_vector(9 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(15 downto 0);
|
||||
DIB : in std_logic_vector(15 downto 0);
|
||||
DIPA : in std_logic_vector(1 downto 0);
|
||||
DIPB : in std_logic_vector(1 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic
|
||||
);
|
||||
end RAMB16_S18_S18;
|
||||
|
||||
architecture RAMB16_S18_S18 of RAMB16_S18_S18 is
|
||||
|
||||
signal DINA, DINB : std_logic_vector(17 downto 0);
|
||||
signal DOUTA, DOUTB : std_logic_vector(17 downto 0);
|
||||
signal SSRA_t, SSRB_t : std_logic;
|
||||
signal WEA_t, WEB_t : std_logic_vector(1 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
DINA <= DIPA & DIA;
|
||||
DOPA <= DOUTA(17 downto 16);
|
||||
DOA <= DOUTA(15 downto 0);
|
||||
|
||||
DINB <= DIPB & DIB;
|
||||
DOPB <= DOUTB(17 downto 16);
|
||||
DOB <= DOUTB(15 downto 0);
|
||||
|
||||
SSRA_t <= SSRA;
|
||||
SSRB_t <= SSRB;
|
||||
WEA_t <= WEA & WEA;
|
||||
WEB_t <= WEB & WEB;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BRAM_0 : BRAM_TDP_MACRO
|
||||
generic map (
|
||||
BRAM_SIZE => "18Kb",
|
||||
DEVICE => "7SERIES",
|
||||
DOA_REG => 0,
|
||||
DOB_REG => 0,
|
||||
INIT_A => INIT_A,
|
||||
INIT_B => INIT_B,
|
||||
INIT_FILE => "NONE",
|
||||
READ_WIDTH_A => 18,
|
||||
READ_WIDTH_B => 18,
|
||||
SIM_COLLISION_CHECK => "NONE",
|
||||
SRVAL_A => SRVAL_A,
|
||||
SRVAL_B => SRVAL_A,
|
||||
WRITE_MODE_A => WRITE_MODE_A,
|
||||
WRITE_MODE_B => WRITE_MODE_B,
|
||||
WRITE_WIDTH_A => 18,
|
||||
WRITE_WIDTH_B => 18,
|
||||
INIT_00 => INIT_00,
|
||||
INIT_01 => INIT_01,
|
||||
INIT_02 => INIT_02,
|
||||
INIT_03 => INIT_03,
|
||||
INIT_04 => INIT_04,
|
||||
INIT_05 => INIT_05,
|
||||
INIT_06 => INIT_06,
|
||||
INIT_07 => INIT_07,
|
||||
INIT_08 => INIT_08,
|
||||
INIT_09 => INIT_09,
|
||||
INIT_0A => INIT_0A,
|
||||
INIT_0B => INIT_0B,
|
||||
INIT_0C => INIT_0C,
|
||||
INIT_0D => INIT_0D,
|
||||
INIT_0E => INIT_0E,
|
||||
INIT_0F => INIT_0F,
|
||||
INIT_10 => INIT_10,
|
||||
INIT_11 => INIT_11,
|
||||
INIT_12 => INIT_12,
|
||||
INIT_13 => INIT_13,
|
||||
INIT_14 => INIT_14,
|
||||
INIT_15 => INIT_15,
|
||||
INIT_16 => INIT_16,
|
||||
INIT_17 => INIT_17,
|
||||
INIT_18 => INIT_18,
|
||||
INIT_19 => INIT_19,
|
||||
INIT_1A => INIT_1A,
|
||||
INIT_1B => INIT_1B,
|
||||
INIT_1C => INIT_1C,
|
||||
INIT_1D => INIT_1D,
|
||||
INIT_1E => INIT_1E,
|
||||
INIT_1F => INIT_1F,
|
||||
INIT_20 => INIT_20,
|
||||
INIT_21 => INIT_21,
|
||||
INIT_22 => INIT_22,
|
||||
INIT_23 => INIT_23,
|
||||
INIT_24 => INIT_24,
|
||||
INIT_25 => INIT_25,
|
||||
INIT_26 => INIT_26,
|
||||
INIT_27 => INIT_27,
|
||||
INIT_28 => INIT_28,
|
||||
INIT_29 => INIT_29,
|
||||
INIT_2A => INIT_2A,
|
||||
INIT_2B => INIT_2B,
|
||||
INIT_2C => INIT_2C,
|
||||
INIT_2D => INIT_2D,
|
||||
INIT_2E => INIT_2E,
|
||||
INIT_2F => INIT_2F,
|
||||
INIT_30 => INIT_30,
|
||||
INIT_31 => INIT_31,
|
||||
INIT_32 => INIT_32,
|
||||
INIT_33 => INIT_33,
|
||||
INIT_34 => INIT_34,
|
||||
INIT_35 => INIT_35,
|
||||
INIT_36 => INIT_36,
|
||||
INIT_37 => INIT_37,
|
||||
INIT_38 => INIT_38,
|
||||
INIT_39 => INIT_39,
|
||||
INIT_3A => INIT_3A,
|
||||
INIT_3B => INIT_3B,
|
||||
INIT_3C => INIT_3C,
|
||||
INIT_3D => INIT_3D,
|
||||
INIT_3E => INIT_3E,
|
||||
INIT_3F => INIT_3F,
|
||||
|
||||
INIT_40 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_41 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_42 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_43 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_44 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_45 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_46 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_47 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_48 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_49 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_50 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_51 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_52 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_53 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_54 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_55 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_56 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_57 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_58 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_59 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_60 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_61 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_62 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_63 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_64 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_65 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_66 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_67 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_68 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_69 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_70 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_71 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_72 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_73 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_74 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_75 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_76 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_77 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_78 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_79 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
|
||||
INITP_00 => INITP_00,
|
||||
INITP_01 => INITP_01,
|
||||
INITP_02 => INITP_02,
|
||||
INITP_03 => INITP_03,
|
||||
INITP_04 => INITP_04,
|
||||
INITP_05 => INITP_05,
|
||||
INITP_06 => INITP_06,
|
||||
INITP_07 => INITP_07,
|
||||
|
||||
INITP_08 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0F => X"0000000000000000000000000000000000000000000000000000000000000000"
|
||||
)
|
||||
port map (
|
||||
DOA => DOUTA,
|
||||
DOB => DOUTB,
|
||||
ADDRA => ADDRA,
|
||||
ADDRB => ADDRB,
|
||||
CLKA => CLKA,
|
||||
CLKB => CLKB,
|
||||
DIA => DINA,
|
||||
DIB => DINB,
|
||||
ENA => ENA,
|
||||
ENB => ENB,
|
||||
REGCEA => '1',
|
||||
REGCEB => '1',
|
||||
RSTA => SSRA_t,
|
||||
RSTB => SSRB_t,
|
||||
WEA => WEA_t,
|
||||
WEB => WEB_t
|
||||
);
|
||||
|
||||
|
||||
|
||||
end RAMB16_S18_S18;
|
@ -0,0 +1,364 @@
|
||||
-- © 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;
|
||||
|
||||
library UNISIM;
|
||||
use UNISIM.vcomponents.all;
|
||||
|
||||
library UNIMACRO;
|
||||
use UNIMACRO.vcomponents.all;
|
||||
|
||||
entity RAMB16_S36_S36 is
|
||||
generic (
|
||||
INIT_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_08 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_09 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_10 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_11 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_12 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_13 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_14 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_15 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_16 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_17 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_18 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_19 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_20 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_21 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_22 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_23 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_24 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_25 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_26 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_27 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_28 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_29 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_30 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_31 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_32 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_33 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_34 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_35 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_36 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_37 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_38 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_39 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_A : bit_vector := X"000000000";
|
||||
INIT_B : bit_vector := X"000000000";
|
||||
SIM_COLLISION_CHECK : string := "ALL";
|
||||
SRVAL_A : bit_vector := X"000000000";
|
||||
SRVAL_B : bit_vector := X"000000000";
|
||||
WRITE_MODE_A : string := "WRITE_FIRST";
|
||||
WRITE_MODE_B : string := "WRITE_FIRST"
|
||||
);
|
||||
port (
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic
|
||||
);
|
||||
end RAMB16_S36_S36;
|
||||
|
||||
architecture RAMB16_S36_S36 of RAMB16_S36_S36 is
|
||||
|
||||
signal ADDRA_10, ADDRB_10 : std_logic_vector(9 downto 0);
|
||||
signal DINA, DINB : std_logic_vector(35 downto 0);
|
||||
signal DOUTA, DOUTB : std_logic_vector(35 downto 0);
|
||||
signal SSRA_t, SSRB_t : std_logic;
|
||||
signal WEA_t, WEB_t : std_logic_vector(3 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
ADDRA_10 <= '0' & ADDRA;
|
||||
ADDRB_10 <= '0' & ADDRB;
|
||||
|
||||
DINA <= DIPA & DIA;
|
||||
DOPA <= DOUTA(35 downto 32);
|
||||
DOA <= DOUTA(31 downto 0);
|
||||
|
||||
DINB <= DIPB & DIB;
|
||||
DOPB <= DOUTB(35 downto 32);
|
||||
DOB <= DOUTB(31 downto 0);
|
||||
|
||||
SSRA_t <= SSRA;
|
||||
SSRB_t <= SSRB;
|
||||
WEA_t <= WEA & WEA & WEA & WEA;
|
||||
WEB_t <= WEB & WEB & WEB & WEB;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BRAM_0 : BRAM_TDP_MACRO
|
||||
generic map (
|
||||
BRAM_SIZE => "36Kb",
|
||||
DEVICE => "7SERIES",
|
||||
DOA_REG => 0,
|
||||
DOB_REG => 0,
|
||||
INIT_A => INIT_A,
|
||||
INIT_B => INIT_B,
|
||||
INIT_FILE => "NONE",
|
||||
READ_WIDTH_A => 36,
|
||||
READ_WIDTH_B => 36,
|
||||
SIM_COLLISION_CHECK => "NONE",
|
||||
SRVAL_A => SRVAL_A,
|
||||
SRVAL_B => SRVAL_A,
|
||||
WRITE_MODE_A => WRITE_MODE_A,
|
||||
WRITE_MODE_B => WRITE_MODE_B,
|
||||
WRITE_WIDTH_A => 36,
|
||||
WRITE_WIDTH_B => 36,
|
||||
INIT_00 => INIT_00,
|
||||
INIT_01 => INIT_01,
|
||||
INIT_02 => INIT_02,
|
||||
INIT_03 => INIT_03,
|
||||
INIT_04 => INIT_04,
|
||||
INIT_05 => INIT_05,
|
||||
INIT_06 => INIT_06,
|
||||
INIT_07 => INIT_07,
|
||||
INIT_08 => INIT_08,
|
||||
INIT_09 => INIT_09,
|
||||
INIT_0A => INIT_0A,
|
||||
INIT_0B => INIT_0B,
|
||||
INIT_0C => INIT_0C,
|
||||
INIT_0D => INIT_0D,
|
||||
INIT_0E => INIT_0E,
|
||||
INIT_0F => INIT_0F,
|
||||
INIT_10 => INIT_10,
|
||||
INIT_11 => INIT_11,
|
||||
INIT_12 => INIT_12,
|
||||
INIT_13 => INIT_13,
|
||||
INIT_14 => INIT_14,
|
||||
INIT_15 => INIT_15,
|
||||
INIT_16 => INIT_16,
|
||||
INIT_17 => INIT_17,
|
||||
INIT_18 => INIT_18,
|
||||
INIT_19 => INIT_19,
|
||||
INIT_1A => INIT_1A,
|
||||
INIT_1B => INIT_1B,
|
||||
INIT_1C => INIT_1C,
|
||||
INIT_1D => INIT_1D,
|
||||
INIT_1E => INIT_1E,
|
||||
INIT_1F => INIT_1F,
|
||||
INIT_20 => INIT_20,
|
||||
INIT_21 => INIT_21,
|
||||
INIT_22 => INIT_22,
|
||||
INIT_23 => INIT_23,
|
||||
INIT_24 => INIT_24,
|
||||
INIT_25 => INIT_25,
|
||||
INIT_26 => INIT_26,
|
||||
INIT_27 => INIT_27,
|
||||
INIT_28 => INIT_28,
|
||||
INIT_29 => INIT_29,
|
||||
INIT_2A => INIT_2A,
|
||||
INIT_2B => INIT_2B,
|
||||
INIT_2C => INIT_2C,
|
||||
INIT_2D => INIT_2D,
|
||||
INIT_2E => INIT_2E,
|
||||
INIT_2F => INIT_2F,
|
||||
INIT_30 => INIT_30,
|
||||
INIT_31 => INIT_31,
|
||||
INIT_32 => INIT_32,
|
||||
INIT_33 => INIT_33,
|
||||
INIT_34 => INIT_34,
|
||||
INIT_35 => INIT_35,
|
||||
INIT_36 => INIT_36,
|
||||
INIT_37 => INIT_37,
|
||||
INIT_38 => INIT_38,
|
||||
INIT_39 => INIT_39,
|
||||
INIT_3A => INIT_3A,
|
||||
INIT_3B => INIT_3B,
|
||||
INIT_3C => INIT_3C,
|
||||
INIT_3D => INIT_3D,
|
||||
INIT_3E => INIT_3E,
|
||||
INIT_3F => INIT_3F,
|
||||
|
||||
INIT_40 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_41 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_42 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_43 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_44 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_45 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_46 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_47 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_48 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_49 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_50 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_51 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_52 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_53 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_54 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_55 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_56 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_57 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_58 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_59 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_60 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_61 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_62 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_63 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_64 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_65 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_66 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_67 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_68 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_69 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_70 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_71 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_72 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_73 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_74 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_75 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_76 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_77 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_78 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_79 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
|
||||
INITP_00 => INITP_00,
|
||||
INITP_01 => INITP_01,
|
||||
INITP_02 => INITP_02,
|
||||
INITP_03 => INITP_03,
|
||||
INITP_04 => INITP_04,
|
||||
INITP_05 => INITP_05,
|
||||
INITP_06 => INITP_06,
|
||||
INITP_07 => INITP_07,
|
||||
|
||||
INITP_08 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0F => X"0000000000000000000000000000000000000000000000000000000000000000"
|
||||
)
|
||||
port map (
|
||||
DOA => DOUTA,
|
||||
DOB => DOUTB,
|
||||
ADDRA => ADDRA_10,
|
||||
ADDRB => ADDRB_10,
|
||||
CLKA => CLKA,
|
||||
CLKB => CLKB,
|
||||
DIA => DINA,
|
||||
DIB => DINB,
|
||||
ENA => ENA,
|
||||
ENB => ENB,
|
||||
REGCEA => '1',
|
||||
REGCEB => '1',
|
||||
RSTA => SSRA_t,
|
||||
RSTB => SSRB_t,
|
||||
WEA => WEA_t,
|
||||
WEB => WEB_t
|
||||
);
|
||||
|
||||
|
||||
|
||||
end RAMB16_S36_S36;
|
@ -0,0 +1,360 @@
|
||||
-- © 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;
|
||||
|
||||
library UNISIM;
|
||||
use UNISIM.vcomponents.all;
|
||||
|
||||
library UNIMACRO;
|
||||
use UNIMACRO.vcomponents.all;
|
||||
|
||||
entity RAMB16_S9_S9 is
|
||||
generic (
|
||||
INIT_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_08 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_09 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_0F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_10 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_11 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_12 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_13 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_14 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_15 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_16 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_17 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_18 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_19 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_1F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_20 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_21 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_22 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_23 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_24 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_25 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_26 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_27 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_28 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_29 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_2F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_30 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_31 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_32 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_33 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_34 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_35 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_36 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_37 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_38 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_39 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3A : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3B : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3C : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3D : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3E : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_3F : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_00 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_01 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_02 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_03 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_04 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_05 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_06 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INITP_07 : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000";
|
||||
INIT_A : bit_vector := X"000000000";
|
||||
INIT_B : bit_vector := X"000000000";
|
||||
SIM_COLLISION_CHECK : string := "ALL";
|
||||
SRVAL_A : bit_vector := X"000000000";
|
||||
SRVAL_B : bit_vector := X"000000000";
|
||||
WRITE_MODE_A : string := "WRITE_FIRST";
|
||||
WRITE_MODE_B : string := "WRITE_FIRST"
|
||||
);
|
||||
port (
|
||||
DOA : out std_logic_vector(7 downto 0);
|
||||
DOB : out std_logic_vector(7 downto 0);
|
||||
DOPA : out std_logic_vector(0 downto 0);
|
||||
DOPB : out std_logic_vector(0 downto 0);
|
||||
ADDRA : in std_logic_vector(10 downto 0);
|
||||
ADDRB : in std_logic_vector(10 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(7 downto 0);
|
||||
DIB : in std_logic_vector(7 downto 0);
|
||||
DIPA : in std_logic_vector(0 downto 0);
|
||||
DIPB : in std_logic_vector(0 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic
|
||||
);
|
||||
end RAMB16_S9_S9;
|
||||
|
||||
architecture RAMB16_S9_S9 of RAMB16_S9_S9 is
|
||||
|
||||
signal DINA, DINB : std_logic_vector(8 downto 0);
|
||||
signal DOUTA, DOUTB : std_logic_vector(8 downto 0);
|
||||
signal SSRA_t, SSRB_t : std_logic;
|
||||
signal WEA_t, WEB_t : std_logic_vector(0 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
DINA <= DIPA & DIA;
|
||||
DOPA(0) <= DOUTA(8);
|
||||
DOA <= DOUTA(7 downto 0);
|
||||
|
||||
DINB <= DIPB & DIB;
|
||||
DOPB(0) <= DOUTB(8);
|
||||
DOB <= DOUTB(7 downto 0);
|
||||
|
||||
SSRA_t <= SSRA;
|
||||
SSRB_t <= SSRB;
|
||||
WEA_t(0) <= WEA;
|
||||
WEB_t(0) <= WEB;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BRAM_0 : BRAM_TDP_MACRO
|
||||
generic map (
|
||||
BRAM_SIZE => "18Kb",
|
||||
DEVICE => "7SERIES",
|
||||
DOA_REG => 0,
|
||||
DOB_REG => 0,
|
||||
INIT_A => INIT_A,
|
||||
INIT_B => INIT_B,
|
||||
INIT_FILE => "NONE",
|
||||
READ_WIDTH_A => 9,
|
||||
READ_WIDTH_B => 9,
|
||||
SIM_COLLISION_CHECK => "NONE",
|
||||
SRVAL_A => SRVAL_A,
|
||||
SRVAL_B => SRVAL_A,
|
||||
WRITE_MODE_A => WRITE_MODE_A,
|
||||
WRITE_MODE_B => WRITE_MODE_B,
|
||||
WRITE_WIDTH_A => 9,
|
||||
WRITE_WIDTH_B => 9,
|
||||
INIT_00 => INIT_00,
|
||||
INIT_01 => INIT_01,
|
||||
INIT_02 => INIT_02,
|
||||
INIT_03 => INIT_03,
|
||||
INIT_04 => INIT_04,
|
||||
INIT_05 => INIT_05,
|
||||
INIT_06 => INIT_06,
|
||||
INIT_07 => INIT_07,
|
||||
INIT_08 => INIT_08,
|
||||
INIT_09 => INIT_09,
|
||||
INIT_0A => INIT_0A,
|
||||
INIT_0B => INIT_0B,
|
||||
INIT_0C => INIT_0C,
|
||||
INIT_0D => INIT_0D,
|
||||
INIT_0E => INIT_0E,
|
||||
INIT_0F => INIT_0F,
|
||||
INIT_10 => INIT_10,
|
||||
INIT_11 => INIT_11,
|
||||
INIT_12 => INIT_12,
|
||||
INIT_13 => INIT_13,
|
||||
INIT_14 => INIT_14,
|
||||
INIT_15 => INIT_15,
|
||||
INIT_16 => INIT_16,
|
||||
INIT_17 => INIT_17,
|
||||
INIT_18 => INIT_18,
|
||||
INIT_19 => INIT_19,
|
||||
INIT_1A => INIT_1A,
|
||||
INIT_1B => INIT_1B,
|
||||
INIT_1C => INIT_1C,
|
||||
INIT_1D => INIT_1D,
|
||||
INIT_1E => INIT_1E,
|
||||
INIT_1F => INIT_1F,
|
||||
INIT_20 => INIT_20,
|
||||
INIT_21 => INIT_21,
|
||||
INIT_22 => INIT_22,
|
||||
INIT_23 => INIT_23,
|
||||
INIT_24 => INIT_24,
|
||||
INIT_25 => INIT_25,
|
||||
INIT_26 => INIT_26,
|
||||
INIT_27 => INIT_27,
|
||||
INIT_28 => INIT_28,
|
||||
INIT_29 => INIT_29,
|
||||
INIT_2A => INIT_2A,
|
||||
INIT_2B => INIT_2B,
|
||||
INIT_2C => INIT_2C,
|
||||
INIT_2D => INIT_2D,
|
||||
INIT_2E => INIT_2E,
|
||||
INIT_2F => INIT_2F,
|
||||
INIT_30 => INIT_30,
|
||||
INIT_31 => INIT_31,
|
||||
INIT_32 => INIT_32,
|
||||
INIT_33 => INIT_33,
|
||||
INIT_34 => INIT_34,
|
||||
INIT_35 => INIT_35,
|
||||
INIT_36 => INIT_36,
|
||||
INIT_37 => INIT_37,
|
||||
INIT_38 => INIT_38,
|
||||
INIT_39 => INIT_39,
|
||||
INIT_3A => INIT_3A,
|
||||
INIT_3B => INIT_3B,
|
||||
INIT_3C => INIT_3C,
|
||||
INIT_3D => INIT_3D,
|
||||
INIT_3E => INIT_3E,
|
||||
INIT_3F => INIT_3F,
|
||||
|
||||
INIT_40 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_41 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_42 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_43 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_44 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_45 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_46 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_47 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_48 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_49 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_4F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_50 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_51 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_52 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_53 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_54 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_55 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_56 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_57 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_58 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_59 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_5F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_60 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_61 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_62 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_63 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_64 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_65 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_66 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_67 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_68 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_69 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_6F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_70 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_71 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_72 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_73 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_74 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_75 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_76 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_77 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_78 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_79 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INIT_7F => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
|
||||
INITP_00 => INITP_00,
|
||||
INITP_01 => INITP_01,
|
||||
INITP_02 => INITP_02,
|
||||
INITP_03 => INITP_03,
|
||||
INITP_04 => INITP_04,
|
||||
INITP_05 => INITP_05,
|
||||
INITP_06 => INITP_06,
|
||||
INITP_07 => INITP_07,
|
||||
|
||||
INITP_08 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0C => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0D => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0E => X"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
INITP_0F => X"0000000000000000000000000000000000000000000000000000000000000000"
|
||||
)
|
||||
port map (
|
||||
DOA => DOUTA,
|
||||
DOB => DOUTB,
|
||||
ADDRA => ADDRA,
|
||||
ADDRB => ADDRB,
|
||||
CLKA => CLKA,
|
||||
CLKB => CLKB,
|
||||
DIA => DINA,
|
||||
DIB => DINB,
|
||||
ENA => ENA,
|
||||
ENB => ENB,
|
||||
REGCEA => '1',
|
||||
REGCEB => '1',
|
||||
RSTA => SSRA_t,
|
||||
RSTB => SSRB_t,
|
||||
WEA => WEA_t,
|
||||
WEB => WEB_t
|
||||
);
|
||||
|
||||
|
||||
|
||||
end RAMB16_S9_S9;
|
@ -0,0 +1,338 @@
|
||||
-- © 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;
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri;
|
||||
use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_128x168_1w_0 is
|
||||
generic (addressable_ports : positive := 128;
|
||||
addressbus_width : positive := 7;
|
||||
port_bitwidth : positive := 168;
|
||||
ways : positive := 1;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
|
||||
nclk : in clk_logic;
|
||||
act : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
|
||||
abst_scan_in : in std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
time_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
time_scan_out : out std_ulogic;
|
||||
|
||||
lcb_d_mode_dc : in std_ulogic;
|
||||
lcb_clkoff_dc_b : in std_ulogic;
|
||||
lcb_act_dis_dc : in std_ulogic;
|
||||
lcb_mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
lcb_mpw2_dc_b : in std_ulogic;
|
||||
lcb_delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
|
||||
lcb_sg_1 : in std_ulogic;
|
||||
lcb_time_sg_0 : in std_ulogic;
|
||||
lcb_repr_sg_0 : in std_ulogic;
|
||||
|
||||
lcb_abst_sl_thold_0 : in std_ulogic;
|
||||
lcb_repr_sl_thold_0 : in std_ulogic;
|
||||
lcb_time_sl_thold_0 : in std_ulogic;
|
||||
lcb_ary_nsl_thold_0 : in std_ulogic;
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_en_1 : in std_ulogic;
|
||||
din_abist : in std_ulogic_vector(0 to 3);
|
||||
abist_cmp_en : in std_ulogic;
|
||||
abist_raw_b_dc : in std_ulogic;
|
||||
data_cmp_abist : in std_ulogic_vector(0 to 3);
|
||||
addr_abist : in std_ulogic_vector(0 to 6);
|
||||
r_wb_abist : in std_ulogic;
|
||||
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic;
|
||||
bo_pc_failout : out std_ulogic;
|
||||
bo_pc_diagloop : out std_ulogic;
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
|
||||
write_enable : in std_ulogic;
|
||||
addr : in std_ulogic_vector (0 to addressbus_width-1);
|
||||
data_in : in std_ulogic_vector (0 to port_bitwidth-1);
|
||||
data_out : out std_ulogic_vector(0 to port_bitwidth-1)
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_128x168_1w_0;
|
||||
|
||||
architecture tri_128x168_1w_0 of tri_128x168_1w_0 is
|
||||
|
||||
constant wga_base_width : integer := 168;
|
||||
constant wga_width_mult : integer := (port_bitwidth*ways-1)/wga_base_width + 1;
|
||||
constant ramb_base_width : integer := 36;
|
||||
constant ramb_base_addr : integer := 9;
|
||||
constant ramb_width_mult : integer := (port_bitwidth-1)/ramb_base_width + 1;
|
||||
constant way : std_ulogic_vector(0 to 0) := "0";
|
||||
|
||||
|
||||
type RAMB_DATA_ARRAY is array (natural range <>) of std_logic_vector(0 to (ramb_base_width*ramb_width_mult - 1));
|
||||
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal write_enable_d : std_ulogic;
|
||||
signal write_enable_l2 : std_ulogic;
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
addr_latch: tri_rlmreg_p
|
||||
generic map (width => addr'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => addr,
|
||||
dout => addr_l2 );
|
||||
|
||||
|
||||
write_enable_latch: tri_rlmlatch_p
|
||||
generic map (init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => tidn,
|
||||
scout => open,
|
||||
din => write_enable_d,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => data_in,
|
||||
dout => data_in_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
write_enable_d <= act and write_enable;
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(x) when (( write_enable_l2 and addr_l2 = tconv(y, addressbus_width)) = '1')
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out <= array_l2( tconv(addr_l2)*port_bitwidth*ways to tconv(addr_l2)*port_bitwidth*ways+port_bitwidth*ways-1 );
|
||||
|
||||
abst_scan_out <= abst_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
time_scan_out <= time_scan_in;
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal ramb_data_in : std_logic_vector(0 to (ramb_base_width*ramb_width_mult - 1));
|
||||
signal ramb_data_out : RAMB_DATA_ARRAY(way'range);
|
||||
signal ramb_addr : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
|
||||
signal write : std_ulogic_vector(way'range);
|
||||
signal tidn : std_ulogic;
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
|
||||
tidn <= '0';
|
||||
|
||||
add0: if (addressbus_width < ramb_base_addr) generate
|
||||
begin
|
||||
ramb_addr(0 to (ramb_base_addr-addressbus_width-1)) <= (others => '0');
|
||||
ramb_addr(ramb_base_addr-addressbus_width to ramb_base_addr-1) <= tconv( addr );
|
||||
end generate;
|
||||
add1: if (addressbus_width >= ramb_base_addr) generate
|
||||
begin
|
||||
ramb_addr <= tconv( addr(addressbus_width-ramb_base_addr to addressbus_width-1) );
|
||||
end generate;
|
||||
|
||||
din: for i in ramb_data_in'range generate
|
||||
begin
|
||||
R0: if(i < port_bitwidth) generate begin ramb_data_in(i) <= data_in(i); end generate;
|
||||
R1: if(i >= port_bitwidth) generate begin ramb_data_in(i) <= '0'; end generate;
|
||||
end generate;
|
||||
|
||||
aw: for w in way'range generate begin
|
||||
write(w) <= write_enable;
|
||||
|
||||
ax: for x in 0 to (ramb_width_mult - 1) generate begin
|
||||
ram: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(w)(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_out(w)(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr,
|
||||
ADDRB => ramb_addr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => tidn,
|
||||
DIA => ramb_data_in(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIB => ramb_data_in(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIPA => ramb_data_in(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DIPB => ramb_data_in(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
ENA => act,
|
||||
ENB => tidn,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => tidn,
|
||||
WEA => write(w),
|
||||
WEB => tidn
|
||||
);
|
||||
|
||||
end generate ax;
|
||||
|
||||
data_out(w*port_bitwidth to ((w+1)*port_bitwidth)-1 ) <= tconv( ramb_data_out(w)(0 to port_bitwidth-1) );
|
||||
|
||||
end generate aw;
|
||||
|
||||
abst_scan_out <= abst_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
time_scan_out <= time_scan_in;
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
unused <= or_reduce( std_ulogic_vector(ramb_data_out(0)(port_bitwidth to ramb_base_width*ramb_width_mult - 1))
|
||||
& ccflush_dc & scan_dis_dc_b & scan_diag_dc & lcb_d_mode_dc
|
||||
& lcb_clkoff_dc_b & lcb_act_dis_dc & lcb_mpw1_dc_b & lcb_mpw2_dc_b
|
||||
& lcb_delay_lclkr_dc & lcb_sg_1 & lcb_time_sg_0 & lcb_repr_sg_0
|
||||
& lcb_abst_sl_thold_0 & lcb_repr_sl_thold_0 & lcb_time_sl_thold_0
|
||||
& lcb_ary_nsl_thold_0 & lcb_bolt_sl_thold_0 & tc_lbist_ary_wrt_thru_dc
|
||||
& abist_en_1 & din_abist & abist_cmp_en & abist_raw_b_dc & data_cmp_abist
|
||||
& addr_abist & r_wb_abist & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate a;
|
||||
|
||||
end tri_128x168_1w_0;
|
||||
|
@ -0,0 +1,466 @@
|
||||
-- © 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 support;
|
||||
use support.power_logic_pkg.all;
|
||||
library ibm;
|
||||
use ibm.std_ulogic_support.all ;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_128x16_1r1w_1 is
|
||||
generic (addressable_ports : positive := 128;
|
||||
addressbus_width : positive := 7;
|
||||
port_bitwidth : positive := 16;
|
||||
ways : positive := 1;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
vdd : INOUT power_logic;
|
||||
vcs : INOUT power_logic;
|
||||
gnd : INOUT power_logic;
|
||||
|
||||
nclk : IN clk_logic;
|
||||
|
||||
rd_act : IN std_ulogic;
|
||||
wr_act : IN std_ulogic;
|
||||
|
||||
lcb_d_mode_dc : IN std_ulogic;
|
||||
lcb_clkoff_dc_b : IN std_ulogic;
|
||||
lcb_mpw1_dc_b : IN std_ulogic_vector(0 TO 4);
|
||||
lcb_mpw2_dc_b : IN std_ulogic;
|
||||
lcb_delay_lclkr_dc : IN std_ulogic_vector(0 TO 4);
|
||||
|
||||
ccflush_dc : IN std_ulogic;
|
||||
scan_dis_dc_b : IN std_ulogic;
|
||||
scan_diag_dc : IN std_ulogic;
|
||||
func_scan_in : IN std_ulogic;
|
||||
func_scan_out : OUT std_ulogic;
|
||||
|
||||
lcb_sg_0 : IN std_ulogic;
|
||||
lcb_sl_thold_0_b : IN std_ulogic;
|
||||
lcb_time_sl_thold_0 : IN std_ulogic;
|
||||
lcb_abst_sl_thold_0 : IN std_ulogic;
|
||||
lcb_ary_nsl_thold_0 : IN std_ulogic;
|
||||
lcb_repr_sl_thold_0 : IN std_ulogic;
|
||||
time_scan_in : IN std_ulogic;
|
||||
time_scan_out : OUT std_ulogic;
|
||||
abst_scan_in : IN std_ulogic;
|
||||
abst_scan_out : OUT std_ulogic;
|
||||
repr_scan_in : IN std_ulogic;
|
||||
repr_scan_out : OUT std_ulogic;
|
||||
|
||||
abist_di : IN std_ulogic_vector(0 TO 3);
|
||||
abist_bw_odd : IN std_ulogic;
|
||||
abist_bw_even : IN std_ulogic;
|
||||
abist_wr_adr : IN std_ulogic_vector(0 TO 6);
|
||||
wr_abst_act : IN std_ulogic;
|
||||
abist_rd0_adr : IN std_ulogic_vector(0 TO 6);
|
||||
rd0_abst_act : IN std_ulogic;
|
||||
tc_lbist_ary_wrt_thru_dc : IN std_ulogic;
|
||||
abist_ena_1 : IN std_ulogic;
|
||||
abist_g8t_rd0_comp_ena : IN std_ulogic;
|
||||
abist_raw_dc_b : IN std_ulogic;
|
||||
obs0_abist_cmp : IN std_ulogic_vector(0 TO 3);
|
||||
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic;
|
||||
bo_pc_failout : out std_ulogic;
|
||||
bo_pc_diagloop : out std_ulogic;
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
|
||||
bw : IN std_ulogic_vector( 0 TO 15 );
|
||||
wr_adr : IN std_ulogic_vector( 0 TO 6 );
|
||||
rd_adr : IN std_ulogic_vector( 0 TO 6 );
|
||||
di : IN std_ulogic_vector( 0 TO 15 );
|
||||
do : OUT std_ulogic_vector( 0 TO 15 )
|
||||
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_128x16_1r1w_1;
|
||||
|
||||
architecture tri_128x16_1r1w_1 of tri_128x16_1r1w_1 is
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
|
||||
constant rd_addr_offset : natural := 0;
|
||||
constant wr_addr_offset : natural := rd_addr_offset + addressbus_width;
|
||||
constant write_enable_offset : natural := wr_addr_offset + addressbus_width;
|
||||
constant data_in_offset : natural := write_enable_offset + port_bitwidth;
|
||||
constant data_out_offset : natural := data_in_offset + port_bitwidth;
|
||||
constant array_offset : natural := data_out_offset + port_bitwidth;
|
||||
constant scan_right : natural := array_offset + addressable_ports*port_bitwidth*ways - 1;
|
||||
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal rd_addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal wr_addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal write_enable_d : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal write_enable_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal data_out_d : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal data_out_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal siv : std_ulogic_vector(0 to scan_right);
|
||||
signal sov : std_ulogic_vector(0 to scan_right);
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
rd_addr_latch: tri_rlmreg_p
|
||||
generic map (width => rd_adr'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => rd_act,
|
||||
scin => siv(rd_addr_offset to rd_addr_offset+rd_addr_l2'length-1),
|
||||
scout => sov(rd_addr_offset to rd_addr_offset+rd_addr_l2'length-1),
|
||||
din => rd_adr,
|
||||
dout => rd_addr_l2 );
|
||||
|
||||
wr_addr_latch: tri_rlmreg_p
|
||||
generic map (width => wr_adr'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => siv(wr_addr_offset to wr_addr_offset+wr_addr_l2'length-1),
|
||||
scout => sov(wr_addr_offset to wr_addr_offset+wr_addr_l2'length-1),
|
||||
din => wr_adr,
|
||||
dout => wr_addr_l2 );
|
||||
|
||||
|
||||
|
||||
write_enable_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => siv(write_enable_offset to write_enable_offset+write_enable_l2'length-1),
|
||||
scout => sov(write_enable_offset to write_enable_offset+write_enable_l2'length-1),
|
||||
din => write_enable_d,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => siv(data_in_offset to data_in_offset+data_in_l2'length-1),
|
||||
scout => sov(data_in_offset to data_in_offset+data_in_l2'length-1),
|
||||
din => di,
|
||||
dout => data_in_l2 );
|
||||
|
||||
data_out_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => siv(data_out_offset to data_out_offset+data_out_l2'length-1),
|
||||
scout => sov(data_out_offset to data_out_offset+data_out_l2'length-1),
|
||||
din => data_out_d,
|
||||
dout => data_out_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => siv(array_offset to array_offset+array_l2'length-1),
|
||||
scout => sov(array_offset to array_offset+array_l2'length-1),
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
write_enable_d <= bw when wr_act='1' else (others => '0');
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(x) when ( write_enable_l2(x)='1' and wr_addr_l2 = tconv(y, addressbus_width))
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out_d(0) <= array_l2( tconv(rd_addr_l2)*port_bitwidth);
|
||||
data_out_d(1) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+1);
|
||||
data_out_d(2) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+2);
|
||||
data_out_d(3) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+3);
|
||||
data_out_d(4) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+4);
|
||||
data_out_d(5) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+5);
|
||||
data_out_d(6) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+6);
|
||||
data_out_d(7) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+7);
|
||||
data_out_d(8) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+8);
|
||||
data_out_d(9) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+9);
|
||||
data_out_d(10) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+10);
|
||||
data_out_d(11) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+11);
|
||||
data_out_d(12) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+12);
|
||||
data_out_d(13) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+13);
|
||||
data_out_d(14) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+14);
|
||||
data_out_d(15) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+15);
|
||||
|
||||
do(0) <= array_l2( tconv(rd_addr_l2)*port_bitwidth);
|
||||
do(1) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+1);
|
||||
do(2) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+2);
|
||||
do(3) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+3);
|
||||
do(4) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+4);
|
||||
do(5) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+5);
|
||||
do(6) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+6);
|
||||
do(7) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+7);
|
||||
do(8) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+8);
|
||||
do(9) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+9);
|
||||
do(10) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+10);
|
||||
do(11) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+11);
|
||||
do(12) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+12);
|
||||
do(13) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+13);
|
||||
do(14) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+14);
|
||||
do(15) <= array_l2( tconv(rd_addr_l2)*port_bitwidth+15);
|
||||
|
||||
siv(0 to scan_right) <= sov(1 to scan_right) & func_scan_in;
|
||||
func_scan_out <= sov(0);
|
||||
|
||||
time_scan_out <= time_scan_in;
|
||||
abst_scan_out <= abst_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
a : if expand_type = 1 generate
|
||||
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
|
||||
|
||||
signal clk,clk2x : std_ulogic;
|
||||
signal b0addra, b0addrb : std_ulogic_vector(0 to 8);
|
||||
signal wea, web : std_ulogic;
|
||||
signal wren_a : std_ulogic;
|
||||
signal reset_q : std_ulogic;
|
||||
signal gate_fq, gate_d : std_ulogic;
|
||||
signal r_data_out_1_d, r_data_out_1_fq : std_ulogic_vector(0 to 35);
|
||||
signal w_data_in_0 : std_ulogic_vector(0 to 35);
|
||||
|
||||
signal r_data_out_0_bram : std_logic_vector(0 to 35);
|
||||
signal r_data_out_1_bram : std_logic_vector(0 to 35);
|
||||
|
||||
signal toggle_d : std_ulogic;
|
||||
signal toggle_q : std_ulogic;
|
||||
signal toggle2x_d : std_ulogic;
|
||||
signal toggle2x_q : std_ulogic;
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
clk <= nclk.clk;
|
||||
clk2x <= nclk.clk2x;
|
||||
|
||||
rlatch: process (clk) begin
|
||||
if(rising_edge(clk)) then
|
||||
reset_q <= nclk.sreset;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
tlatch: process (nclk.clk,reset_q)
|
||||
begin
|
||||
if(rising_edge(nclk.clk)) then
|
||||
if (reset_q = '1') then
|
||||
toggle_q <= '1';
|
||||
else
|
||||
toggle_q <= toggle_d;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
flatch: process (nclk.clk2x)
|
||||
begin
|
||||
if(rising_edge(nclk.clk2x)) then
|
||||
toggle2x_q <= toggle2x_d;
|
||||
gate_fq <= gate_d;
|
||||
r_data_out_1_fq <= r_data_out_1_d;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
toggle_d <= not toggle_q;
|
||||
toggle2x_d <= toggle_q;
|
||||
|
||||
gate_d <= not(toggle_q xor toggle2x_q);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
b0addra(2 to 8) <= wr_adr;
|
||||
b0addrb(2 to 8) <= rd_adr;
|
||||
|
||||
b0addra(0 to 1) <= "00";
|
||||
b0addrb(0 to 1) <= "00";
|
||||
|
||||
|
||||
|
||||
wren_a <= '1' when bw /= "0000000000000000" else '0';
|
||||
wea <= wren_a and not(gate_fq);
|
||||
web <= '0';
|
||||
w_data_in_0(0) <= di(0) when bw(0)='1' else r_data_out_0_bram(0);
|
||||
w_data_in_0(1) <= di(1) when bw(1)='1' else r_data_out_0_bram(1);
|
||||
w_data_in_0(2) <= di(2) when bw(2)='1' else r_data_out_0_bram(2);
|
||||
w_data_in_0(3) <= di(3) when bw(3)='1' else r_data_out_0_bram(3);
|
||||
w_data_in_0(4) <= di(4) when bw(4)='1' else r_data_out_0_bram(4);
|
||||
w_data_in_0(5) <= di(5) when bw(5)='1' else r_data_out_0_bram(5);
|
||||
w_data_in_0(6) <= di(6) when bw(6)='1' else r_data_out_0_bram(6);
|
||||
w_data_in_0(7) <= di(7) when bw(7)='1' else r_data_out_0_bram(7);
|
||||
w_data_in_0(8) <= di(8) when bw(8)='1' else r_data_out_0_bram(8);
|
||||
w_data_in_0(9) <= di(9) when bw(9)='1' else r_data_out_0_bram(9);
|
||||
w_data_in_0(10) <= di(10) when bw(10)='1' else r_data_out_0_bram(10);
|
||||
w_data_in_0(11) <= di(11) when bw(11)='1' else r_data_out_0_bram(11);
|
||||
w_data_in_0(12) <= di(12) when bw(12)='1' else r_data_out_0_bram(12);
|
||||
w_data_in_0(13) <= di(13) when bw(13)='1' else r_data_out_0_bram(13);
|
||||
w_data_in_0(14) <= di(14) when bw(14)='1' else r_data_out_0_bram(14);
|
||||
w_data_in_0(15) <= di(15) when bw(15)='1' else r_data_out_0_bram(15);
|
||||
w_data_in_0(16 to 35) <= (others => '0');
|
||||
|
||||
r_data_out_1_d <= std_ulogic_vector(r_data_out_1_bram);
|
||||
|
||||
bram0a : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => reset_q,
|
||||
ssrb => reset_q,
|
||||
addra => std_logic_vector(b0addra),
|
||||
addrb => std_logic_vector(b0addrb),
|
||||
dia => std_logic_vector(w_data_in_0(0 to 31)),
|
||||
dib => (others => '0'),
|
||||
doa => r_data_out_0_bram(0 to 31),
|
||||
dob => r_data_out_1_bram(0 to 31),
|
||||
dopa => r_data_out_0_bram(32 to 35),
|
||||
dopb => r_data_out_1_bram(32 to 35),
|
||||
dipa => std_logic_vector(w_data_in_0(32 to 35)),
|
||||
dipb => (others => '0'),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea,
|
||||
web => web
|
||||
);
|
||||
|
||||
|
||||
do <= r_data_out_1_fq(0 to 15);
|
||||
|
||||
func_scan_out <= func_scan_in;
|
||||
time_scan_out <= time_scan_in;
|
||||
abst_scan_out <= abst_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
unused <= or_reduce( std_ulogic_vector(r_data_out_0_bram(16 to 35)) & rd_act & wr_act
|
||||
& lcb_d_mode_dc & lcb_clkoff_dc_b & lcb_mpw1_dc_b & lcb_mpw2_dc_b
|
||||
& lcb_delay_lclkr_dc & ccflush_dc & scan_dis_dc_b & scan_diag_dc
|
||||
& lcb_sg_0 & lcb_sl_thold_0_b & lcb_time_sl_thold_0 & lcb_abst_sl_thold_0
|
||||
& lcb_ary_nsl_thold_0 & lcb_repr_sl_thold_0 & abist_di & abist_bw_odd
|
||||
& abist_bw_even & abist_wr_adr & wr_abst_act & abist_rd0_adr & rd0_abst_act
|
||||
& tc_lbist_ary_wrt_thru_dc & abist_ena_1 & abist_g8t_rd0_comp_ena
|
||||
& abist_raw_dc_b & obs0_abist_cmp & lcb_bolt_sl_thold_0 & pc_bo_enable_2
|
||||
& pc_bo_reset & pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate a;
|
||||
|
||||
|
||||
end architecture tri_128x16_1r1w_1;
|
||||
|
||||
|
@ -0,0 +1,411 @@
|
||||
-- © 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,ibm,support,tri;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use ibm.std_ulogic_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_144x78_2r2w is
|
||||
generic(
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
vdd :inout power_logic;
|
||||
gnd :inout power_logic;
|
||||
nclk :in clk_logic;
|
||||
abist_en :in std_ulogic;
|
||||
abist_raw_dc_b :in std_ulogic;
|
||||
r0e_abist_comp_en :in std_ulogic;
|
||||
r1e_abist_comp_en :in std_ulogic;
|
||||
lbist_en :in std_ulogic;
|
||||
|
||||
lcb_act_dis_dc :in std_ulogic;
|
||||
lcb_clkoff_dc_b :in std_ulogic_vector(0 to 1);
|
||||
lcb_d_mode_dc :in std_ulogic;
|
||||
lcb_delay_lclkr_dc :in std_ulogic_vector(0 to 9);
|
||||
lcb_fce_0 :in std_ulogic;
|
||||
lcb_mpw1_dc_b :in std_ulogic_vector(1 to 9);
|
||||
lcb_mpw2_dc_b :in std_ulogic;
|
||||
lcb_scan_diag_dc :in std_ulogic;
|
||||
lcb_scan_dis_dc_b :in std_ulogic;
|
||||
lcb_sg_0 :in std_ulogic;
|
||||
lcb_time_sg_0 :in std_ulogic;
|
||||
lcb_obs0_sg_0 :in std_ulogic;
|
||||
lcb_obs1_sg_0 :in std_ulogic;
|
||||
lcb_obs0_sl_thold_0 :in std_ulogic;
|
||||
lcb_obs1_sl_thold_0 :in std_ulogic;
|
||||
|
||||
lcb_abst_sl_thold_0 :in std_ulogic;
|
||||
lcb_time_sl_thold_0 :in std_ulogic;
|
||||
lcb_ary_nsl_thold_0 :in std_ulogic;
|
||||
|
||||
r_scan_in :in std_ulogic;
|
||||
r_scan_out :out std_ulogic;
|
||||
w_scan_in :in std_ulogic;
|
||||
w_scan_out :out std_ulogic;
|
||||
time_scan_in :in std_ulogic;
|
||||
time_scan_out :out std_ulogic;
|
||||
obs0_scan_in :in std_ulogic;
|
||||
obs0_scan_out :out std_ulogic;
|
||||
obs1_scan_in :in std_ulogic;
|
||||
obs1_scan_out :out std_ulogic;
|
||||
|
||||
lcb_bolt_sl_thold_0 :in std_ulogic;
|
||||
pc_bo_enable_2 :in std_ulogic;
|
||||
pc_bo_reset :in std_ulogic;
|
||||
pc_bo_unload :in std_ulogic;
|
||||
pc_bo_load :in std_ulogic;
|
||||
pc_bo_shdata :in std_ulogic;
|
||||
pc_bo_select :in std_ulogic;
|
||||
bo_pc_failout :out std_ulogic;
|
||||
bo_pc_diagloop :out std_ulogic;
|
||||
tri_lcb_mpw1_dc_b :in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b :in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc :in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b :in std_ulogic;
|
||||
tri_lcb_act_dis_dc :in std_ulogic;
|
||||
|
||||
r0e_act :in std_ulogic;
|
||||
r0e_en_func :in std_ulogic;
|
||||
r0e_en_abist :in std_ulogic;
|
||||
r0e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
r0e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
r0e_data_out :out std_ulogic_vector(0 to 77);
|
||||
r0e_byp_e :in std_ulogic;
|
||||
r0e_byp_l :in std_ulogic;
|
||||
r0e_byp_r :in std_ulogic;
|
||||
r0e_sel_lbist :in std_ulogic;
|
||||
|
||||
r1e_act :in std_ulogic;
|
||||
r1e_en_func :in std_ulogic;
|
||||
r1e_en_abist :in std_ulogic;
|
||||
r1e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
r1e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
r1e_data_out :out std_ulogic_vector(0 to 77);
|
||||
r1e_byp_e :in std_ulogic;
|
||||
r1e_byp_l :in std_ulogic;
|
||||
r1e_byp_r :in std_ulogic;
|
||||
r1e_sel_lbist :in std_ulogic;
|
||||
|
||||
w0e_act :in std_ulogic;
|
||||
w0e_en_func :in std_ulogic;
|
||||
w0e_en_abist :in std_ulogic;
|
||||
w0e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
w0e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
w0e_data_func :in std_ulogic_vector(0 to 77);
|
||||
w0e_data_abist :in std_ulogic_vector(0 to 3);
|
||||
|
||||
w0l_act :in std_ulogic;
|
||||
w0l_en_func :in std_ulogic;
|
||||
w0l_en_abist :in std_ulogic;
|
||||
w0l_addr_func :in std_ulogic_vector(0 to 7);
|
||||
w0l_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
w0l_data_func :in std_ulogic_vector(0 to 77);
|
||||
w0l_data_abist :in std_ulogic_vector(0 to 3) );
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_144x78_2r2w;
|
||||
architecture tri_144x78_2r2w of tri_144x78_2r2w is
|
||||
|
||||
begin
|
||||
|
||||
a : if expand_type = 1 generate
|
||||
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal tilo : std_ulogic;
|
||||
signal tihi : std_ulogic;
|
||||
signal zeross : std_logic_vector(0 to 3);
|
||||
|
||||
signal correct_clk : std_ulogic;
|
||||
signal clk2x : std_ulogic;
|
||||
signal reset : std_ulogic;
|
||||
signal reset_hi : std_ulogic;
|
||||
signal reset_lo : std_ulogic;
|
||||
signal reset_q : std_ulogic;
|
||||
signal sinit0_q : std_logic;
|
||||
signal sinit1_q : std_logic;
|
||||
signal flipper_d : std_ulogic;
|
||||
signal flipper_q : std_ulogic;
|
||||
|
||||
signal doutb0 : std_logic_vector(0 to 77);
|
||||
signal doutb0_q : std_ulogic_vector(0 to 77);
|
||||
signal dinfa0_par : std_logic_vector(64 to 95);
|
||||
signal doutb0_par : std_logic_vector(64 to 95);
|
||||
signal weaf : std_logic;
|
||||
signal addra : std_logic_vector(0 to 8);
|
||||
signal addrb0 : std_logic_vector(0 to 8);
|
||||
signal dinfa : std_logic_vector(0 to 77);
|
||||
signal dinfb : std_logic_vector(0 to 31);
|
||||
|
||||
signal w0e_data_q : std_ulogic_vector(0 to 77);
|
||||
signal w0l_data_q : std_ulogic_vector(0 to 77);
|
||||
signal w0l_en_q : std_ulogic;
|
||||
signal w0l_addr_q : std_ulogic_vector(0 to 7);
|
||||
signal r1e_addr_q : std_ulogic_vector(0 to 7);
|
||||
|
||||
signal r0e_byp_e_q : std_ulogic;
|
||||
signal r0e_byp_l_q : std_ulogic;
|
||||
signal r1e_byp_e_q : std_ulogic;
|
||||
signal r1e_byp_l_q : std_ulogic;
|
||||
signal r0_byp_sel : std_ulogic_vector(0 to 1);
|
||||
signal r1_byp_sel : std_ulogic_vector(0 to 1);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
tilo <= '0';
|
||||
tihi <= '1';
|
||||
zeross <= (0 to 3 => '0');
|
||||
|
||||
reset <= nclk.sreset;
|
||||
correct_clk <= nclk.clk;
|
||||
clk2x <= nclk.clk2x;
|
||||
|
||||
reset_hi <= reset;
|
||||
reset_lo <= not reset_q after 1 ns ;
|
||||
|
||||
|
||||
flipper_d <= not flipper_q;
|
||||
|
||||
slatch: process (correct_clk,reset) begin
|
||||
if rising_edge(correct_clk) then
|
||||
if (reset = '1') then
|
||||
w0l_en_q <= '0';
|
||||
r1e_addr_q <= (others => '0');
|
||||
r0e_byp_e_q <= '0';
|
||||
r0e_byp_l_q <= '0';
|
||||
r1e_byp_e_q <= '0';
|
||||
r1e_byp_l_q <= '0';
|
||||
|
||||
else
|
||||
w0e_data_q <= w0e_data_func;
|
||||
w0l_data_q <= w0l_data_func;
|
||||
w0l_en_q <= w0l_en_func;
|
||||
w0l_addr_q <= w0l_addr_func;
|
||||
r1e_addr_q <= r1e_addr_func;
|
||||
r0e_byp_e_q <= r0e_byp_e;
|
||||
r0e_byp_l_q <= r0e_byp_l;
|
||||
r1e_byp_e_q <= r1e_byp_e;
|
||||
r1e_byp_l_q <= r1e_byp_l;
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
flatch: process (clk2x,reset_lo) begin
|
||||
if clk2x'event and clk2x = '1' then
|
||||
if (reset_lo = '0') then
|
||||
flipper_q <= '0';
|
||||
|
||||
else
|
||||
flipper_q <= flipper_d;
|
||||
doutb0_q <= tconv(doutb0);
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
rlatch: process (correct_clk) begin
|
||||
if(rising_edge(correct_clk)) then
|
||||
reset_q <= reset_hi;
|
||||
sinit0_q <= reset_hi;
|
||||
sinit1_q <= reset_hi;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
addra(0) <= '0';
|
||||
addra(1 to 8) <= (tconv((w0e_addr_func and (0 to 7 => flipper_q)) or (w0l_addr_q and (0 to 7 => not flipper_q)))) after 1 ns ;
|
||||
weaf <= (( w0e_en_func and flipper_q) or ( w0l_en_q and not flipper_q)) after 1 ns;
|
||||
dinfa <= (tconv((w0e_data_func and (0 to 77 => flipper_q)) or (w0l_data_q and (0 to 77 => not flipper_q)))) after 1 ns;
|
||||
|
||||
dinfb <= (others => '0');
|
||||
addrb0(0) <= '0';
|
||||
addrb0(1 to 8) <= (tconv((r0e_addr_func and (0 to 7 => flipper_q)) or (r1e_addr_q and (0 to 7 => not flipper_q)))) after 1 ns ;
|
||||
|
||||
r0_byp_sel <= r0e_byp_e & r0e_byp_l;
|
||||
with r0_byp_sel select
|
||||
r0e_data_out <= w0e_data_q when "10",
|
||||
w0l_data_q when "01",
|
||||
doutb0_q when others;
|
||||
|
||||
r1_byp_sel <= r1e_byp_e & r1e_byp_l;
|
||||
with r1_byp_sel select
|
||||
r1e_data_out <= w0e_data_q when "10",
|
||||
w0l_data_q when "01",
|
||||
tconv(doutb0) when others;
|
||||
|
||||
|
||||
U0 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0(0 to 31),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa(0 to 31),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit0_q,
|
||||
SSRB => sinit0_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
U1 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0(32 to 63),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa(32 to 63),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit1_q,
|
||||
SSRB => sinit1_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
|
||||
doutb0(64 to 77) <= doutb0_par(64 to 77);
|
||||
dinfa0_par(64 to 95) <= dinfa(64 to 77) & (78 to 95 => '0');
|
||||
|
||||
U2 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0_par(64 to 95),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa0_par(64 to 95),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit1_q,
|
||||
SSRB => sinit1_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
|
||||
r_scan_out <= '0';
|
||||
w_scan_out <= '0';
|
||||
time_scan_out <= '0';
|
||||
obs0_scan_out <= '0';
|
||||
obs1_scan_out <= '0';
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
unused <= or_reduce( std_ulogic_vector(doutb0_par(78 to 95))
|
||||
& abist_en & abist_raw_dc_b & r0e_abist_comp_en & r1e_abist_comp_en
|
||||
& lbist_en & lcb_act_dis_dc & lcb_clkoff_dc_b & lcb_d_mode_dc
|
||||
& lcb_delay_lclkr_dc & lcb_fce_0 & lcb_mpw1_dc_b & lcb_mpw2_dc_b
|
||||
& lcb_scan_diag_dc & lcb_scan_dis_dc_b & lcb_sg_0 & lcb_time_sg_0
|
||||
& lcb_obs0_sg_0 & lcb_obs1_sg_0 & lcb_obs0_sl_thold_0 & lcb_obs1_sl_thold_0
|
||||
& lcb_abst_sl_thold_0 & lcb_time_sl_thold_0 & lcb_ary_nsl_thold_0
|
||||
& r_scan_in & w_scan_in & time_scan_in & obs0_scan_in & obs1_scan_in
|
||||
& r0e_act & r0e_en_func & r0e_en_abist & r0e_addr_abist & r0e_byp_r & r0e_sel_lbist
|
||||
& r1e_act & r1e_en_func & r1e_en_abist & r1e_addr_abist & r1e_byp_r & r1e_sel_lbist
|
||||
& w0e_act & w0e_en_abist & w0e_addr_abist & w0e_data_abist
|
||||
& w0l_act & w0l_en_abist & w0l_addr_abist & w0l_data_abist
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_load & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate;
|
||||
|
||||
end architecture tri_144x78_2r2w;
|
@ -0,0 +1,412 @@
|
||||
-- © 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,ibm,support,tri;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use ibm.std_ulogic_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_144x78_2r2w_eco is
|
||||
generic(
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
vdd :inout power_logic;
|
||||
gnd :inout power_logic;
|
||||
nclk :in clk_logic;
|
||||
abist_en :in std_ulogic;
|
||||
abist_raw_dc_b :in std_ulogic;
|
||||
r0e_abist_comp_en :in std_ulogic;
|
||||
r1e_abist_comp_en :in std_ulogic;
|
||||
lbist_en :in std_ulogic;
|
||||
|
||||
lcb_act_dis_dc :in std_ulogic;
|
||||
lcb_clkoff_dc_b :in std_ulogic_vector(0 to 1);
|
||||
lcb_d_mode_dc :in std_ulogic;
|
||||
lcb_delay_lclkr_dc :in std_ulogic_vector(0 to 9);
|
||||
lcb_fce_0 :in std_ulogic;
|
||||
lcb_mpw1_dc_b :in std_ulogic_vector(1 to 9);
|
||||
lcb_mpw2_dc_b :in std_ulogic;
|
||||
lcb_scan_diag_dc :in std_ulogic;
|
||||
lcb_scan_dis_dc_b :in std_ulogic;
|
||||
lcb_sg_0 :in std_ulogic;
|
||||
lcb_time_sg_0 :in std_ulogic;
|
||||
|
||||
lcb_obs0_sg_0 :in std_ulogic;
|
||||
lcb_obs1_sg_0 :in std_ulogic;
|
||||
lcb_obs0_sl_thold_0 :in std_ulogic;
|
||||
lcb_obs1_sl_thold_0 :in std_ulogic;
|
||||
|
||||
lcb_abst_sl_thold_0 :in std_ulogic;
|
||||
lcb_time_sl_thold_0 :in std_ulogic;
|
||||
lcb_ary_nsl_thold_0 :in std_ulogic;
|
||||
|
||||
r_scan_in :in std_ulogic;
|
||||
r_scan_out :out std_ulogic;
|
||||
w_scan_in :in std_ulogic;
|
||||
w_scan_out :out std_ulogic;
|
||||
time_scan_in :in std_ulogic;
|
||||
time_scan_out :out std_ulogic;
|
||||
obs0_scan_in :in std_ulogic;
|
||||
obs0_scan_out :out std_ulogic;
|
||||
obs1_scan_in :in std_ulogic;
|
||||
obs1_scan_out :out std_ulogic;
|
||||
|
||||
lcb_bolt_sl_thold_0 :in std_ulogic;
|
||||
pc_bo_enable_2 :in std_ulogic;
|
||||
pc_bo_reset :in std_ulogic;
|
||||
pc_bo_unload :in std_ulogic;
|
||||
pc_bo_load :in std_ulogic;
|
||||
pc_bo_shdata :in std_ulogic;
|
||||
pc_bo_select :in std_ulogic;
|
||||
bo_pc_failout :out std_ulogic;
|
||||
bo_pc_diagloop :out std_ulogic;
|
||||
tri_lcb_mpw1_dc_b :in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b :in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc :in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b :in std_ulogic;
|
||||
tri_lcb_act_dis_dc :in std_ulogic;
|
||||
|
||||
r0e_act :in std_ulogic;
|
||||
r0e_en_func :in std_ulogic;
|
||||
r0e_en_abist :in std_ulogic;
|
||||
r0e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
r0e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
r0e_data_out :out std_ulogic_vector(0 to 77);
|
||||
r0e_byp_e :in std_ulogic;
|
||||
r0e_byp_l :in std_ulogic;
|
||||
r0e_byp_r :in std_ulogic;
|
||||
r0e_sel_lbist :in std_ulogic;
|
||||
|
||||
r1e_act :in std_ulogic;
|
||||
r1e_en_func :in std_ulogic;
|
||||
r1e_en_abist :in std_ulogic;
|
||||
r1e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
r1e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
r1e_data_out :out std_ulogic_vector(0 to 77);
|
||||
r1e_byp_e :in std_ulogic;
|
||||
r1e_byp_l :in std_ulogic;
|
||||
r1e_byp_r :in std_ulogic;
|
||||
r1e_sel_lbist :in std_ulogic;
|
||||
|
||||
w0e_act :in std_ulogic;
|
||||
w0e_en_func :in std_ulogic;
|
||||
w0e_en_abist :in std_ulogic;
|
||||
w0e_addr_func :in std_ulogic_vector(0 to 7);
|
||||
w0e_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
w0e_data_func :in std_ulogic_vector(0 to 77);
|
||||
w0e_data_abist :in std_ulogic_vector(0 to 3);
|
||||
|
||||
w0l_act :in std_ulogic;
|
||||
w0l_en_func :in std_ulogic;
|
||||
w0l_en_abist :in std_ulogic;
|
||||
w0l_addr_func :in std_ulogic_vector(0 to 7);
|
||||
w0l_addr_abist :in std_ulogic_vector(0 to 7);
|
||||
w0l_data_func :in std_ulogic_vector(0 to 77);
|
||||
w0l_data_abist :in std_ulogic_vector(0 to 3) );
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_144x78_2r2w_eco;
|
||||
architecture tri_144x78_2r2w_eco of tri_144x78_2r2w_eco is
|
||||
|
||||
begin
|
||||
|
||||
a : if expand_type = 1 generate
|
||||
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal tilo : std_ulogic;
|
||||
signal tihi : std_ulogic;
|
||||
signal zeross : std_logic_vector(0 to 3);
|
||||
|
||||
signal correct_clk : std_ulogic;
|
||||
signal clk2x : std_ulogic;
|
||||
signal reset : std_ulogic;
|
||||
signal reset_hi : std_ulogic;
|
||||
signal reset_lo : std_ulogic;
|
||||
signal reset_q : std_ulogic;
|
||||
signal sinit0_q : std_logic;
|
||||
signal sinit1_q : std_logic;
|
||||
signal flipper_d : std_ulogic;
|
||||
signal flipper_q : std_ulogic;
|
||||
|
||||
signal doutb0 : std_logic_vector(0 to 77);
|
||||
signal doutb0_q : std_ulogic_vector(0 to 77);
|
||||
signal dinfa0_par : std_logic_vector(64 to 95);
|
||||
signal doutb0_par : std_logic_vector(64 to 95);
|
||||
signal weaf : std_logic;
|
||||
signal addra : std_logic_vector(0 to 8);
|
||||
signal addrb0 : std_logic_vector(0 to 8);
|
||||
signal dinfa : std_logic_vector(0 to 77);
|
||||
signal dinfb : std_logic_vector(0 to 31);
|
||||
|
||||
signal w0e_data_q : std_ulogic_vector(0 to 77);
|
||||
signal w0l_data_q : std_ulogic_vector(0 to 77);
|
||||
signal w0l_en_q : std_ulogic;
|
||||
signal w0l_addr_q : std_ulogic_vector(0 to 7);
|
||||
signal r1e_addr_q : std_ulogic_vector(0 to 7);
|
||||
|
||||
signal r0e_byp_e_q : std_ulogic;
|
||||
signal r0e_byp_l_q : std_ulogic;
|
||||
signal r1e_byp_e_q : std_ulogic;
|
||||
signal r1e_byp_l_q : std_ulogic;
|
||||
signal r0_byp_sel : std_ulogic_vector(0 to 1);
|
||||
signal r1_byp_sel : std_ulogic_vector(0 to 1);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
tilo <= '0';
|
||||
tihi <= '1';
|
||||
zeross <= (0 to 3 => '0');
|
||||
|
||||
reset <= nclk.sreset;
|
||||
correct_clk <= nclk.clk;
|
||||
clk2x <= nclk.clk2x;
|
||||
|
||||
reset_hi <= reset;
|
||||
reset_lo <= not reset_q after 1 ns ;
|
||||
|
||||
|
||||
flipper_d <= not flipper_q;
|
||||
|
||||
slatch: process (correct_clk,reset) begin
|
||||
if rising_edge(correct_clk) then
|
||||
if (reset = '1') then
|
||||
w0l_en_q <= '0';
|
||||
r1e_addr_q <= (others => '0');
|
||||
r0e_byp_e_q <= '0';
|
||||
r0e_byp_l_q <= '0';
|
||||
r1e_byp_e_q <= '0';
|
||||
r1e_byp_l_q <= '0';
|
||||
|
||||
else
|
||||
w0e_data_q <= w0e_data_func;
|
||||
w0l_data_q <= w0l_data_func;
|
||||
w0l_en_q <= w0l_en_func;
|
||||
w0l_addr_q <= w0l_addr_func;
|
||||
r1e_addr_q <= r1e_addr_func;
|
||||
r0e_byp_e_q <= r0e_byp_e;
|
||||
r0e_byp_l_q <= r0e_byp_l;
|
||||
r1e_byp_e_q <= r1e_byp_e;
|
||||
r1e_byp_l_q <= r1e_byp_l;
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
flatch: process (clk2x,reset_lo) begin
|
||||
if clk2x'event and clk2x = '1' then
|
||||
if (reset_lo = '0') then
|
||||
flipper_q <= '0';
|
||||
|
||||
else
|
||||
flipper_q <= flipper_d;
|
||||
doutb0_q <= tconv(doutb0);
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
rlatch: process (correct_clk) begin
|
||||
if(rising_edge(correct_clk)) then
|
||||
reset_q <= reset_hi;
|
||||
sinit0_q <= reset_hi;
|
||||
sinit1_q <= reset_hi;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
addra(0) <= '0';
|
||||
addra(1 to 8) <= (tconv((w0e_addr_func and (0 to 7 => flipper_q)) or (w0l_addr_q and (0 to 7 => not flipper_q)))) after 1 ns ;
|
||||
weaf <= (( w0e_en_func and flipper_q) or ( w0l_en_q and not flipper_q)) after 1 ns;
|
||||
dinfa <= (tconv((w0e_data_func and (0 to 77 => flipper_q)) or (w0l_data_q and (0 to 77 => not flipper_q)))) after 1 ns;
|
||||
|
||||
dinfb <= (others => '0');
|
||||
addrb0(0) <= '0';
|
||||
addrb0(1 to 8) <= (tconv((r0e_addr_func and (0 to 7 => flipper_q)) or (r1e_addr_q and (0 to 7 => not flipper_q)))) after 1 ns ;
|
||||
|
||||
r0_byp_sel <= r0e_byp_e & r0e_byp_l;
|
||||
with r0_byp_sel select
|
||||
r0e_data_out <= w0e_data_q when "10",
|
||||
w0l_data_q when "01",
|
||||
doutb0_q when others;
|
||||
|
||||
r1_byp_sel <= r1e_byp_e & r1e_byp_l;
|
||||
with r1_byp_sel select
|
||||
r1e_data_out <= w0e_data_q when "10",
|
||||
w0l_data_q when "01",
|
||||
tconv(doutb0) when others;
|
||||
|
||||
|
||||
U0 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0(0 to 31),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa(0 to 31),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit0_q,
|
||||
SSRB => sinit0_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
U1 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0(32 to 63),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa(32 to 63),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit1_q,
|
||||
SSRB => sinit1_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
|
||||
doutb0(64 to 77) <= doutb0_par(64 to 77);
|
||||
dinfa0_par(64 to 95) <= dinfa(64 to 77) & (78 to 95 => '0');
|
||||
|
||||
U2 : RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map
|
||||
(
|
||||
DOA => open,
|
||||
DOB => doutb0_par(64 to 95),
|
||||
DOPA => open,
|
||||
DOPB => open,
|
||||
ADDRA => addra,
|
||||
ADDRB => addrb0,
|
||||
CLKA => clk2x,
|
||||
CLKB => clk2x,
|
||||
DIA => dinfa0_par(64 to 95),
|
||||
DIB => dinfb,
|
||||
DIPA => zeross,
|
||||
DIPB => zeross,
|
||||
ENA => tihi,
|
||||
ENB => tihi,
|
||||
SSRA => sinit1_q,
|
||||
SSRB => sinit1_q,
|
||||
WEA => weaf,
|
||||
WEB => tilo
|
||||
);
|
||||
|
||||
r_scan_out <= '0';
|
||||
w_scan_out <= '0';
|
||||
time_scan_out <= '0';
|
||||
obs0_scan_out <= '0';
|
||||
obs1_scan_out <= '0';
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
unused <= or_reduce( std_ulogic_vector(doutb0_par(78 to 95))
|
||||
& abist_en & abist_raw_dc_b & r0e_abist_comp_en & r1e_abist_comp_en
|
||||
& lbist_en & lcb_act_dis_dc & lcb_clkoff_dc_b & lcb_d_mode_dc
|
||||
& lcb_delay_lclkr_dc & lcb_fce_0 & lcb_mpw1_dc_b & lcb_mpw2_dc_b
|
||||
& lcb_scan_diag_dc & lcb_scan_dis_dc_b & lcb_sg_0 & lcb_time_sg_0
|
||||
& lcb_obs0_sg_0 & lcb_obs1_sg_0 & lcb_obs0_sl_thold_0 & lcb_obs1_sl_thold_0
|
||||
& lcb_abst_sl_thold_0 & lcb_time_sl_thold_0 & lcb_ary_nsl_thold_0
|
||||
& r_scan_in & w_scan_in & time_scan_in & obs0_scan_in & obs1_scan_in
|
||||
& r0e_act & r0e_en_func & r0e_en_abist & r0e_addr_abist & r0e_byp_r & r0e_sel_lbist
|
||||
& r1e_act & r1e_en_func & r1e_en_abist & r1e_addr_abist & r1e_byp_r & r1e_sel_lbist
|
||||
& w0e_act & w0e_en_abist & w0e_addr_abist & w0e_data_abist
|
||||
& w0l_act & w0l_en_abist & w0l_addr_abist & w0l_data_abist
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_load & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate;
|
||||
|
||||
end architecture tri_144x78_2r2w_eco;
|
@ -0,0 +1,359 @@
|
||||
-- © 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;
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_256x162_4w_0 is
|
||||
generic (addressable_ports : positive := 256;
|
||||
addressbus_width : positive := 8;
|
||||
port_bitwidth : positive := 162;
|
||||
ways : positive := 4;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
lcb_clkoff_dc_b : in std_ulogic;
|
||||
lcb_d_mode_dc : in std_ulogic;
|
||||
lcb_act_dis_dc : in std_ulogic;
|
||||
lcb_ary_nsl_thold_0 : in std_ulogic;
|
||||
lcb_sg_1 : in std_ulogic;
|
||||
lcb_abst_sl_thold_0 : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
abst_scan_in : in std_ulogic_vector(0 to 1);
|
||||
abst_scan_out : out std_ulogic_vector(0 to 1);
|
||||
lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
ctrl_lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
dibw_lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
ctrl_lcb_mpw1_np_dc_b : in std_ulogic;
|
||||
dibw_lcb_mpw1_np_dc_b : in std_ulogic;
|
||||
lcb_mpw1_pp_dc_b : in std_ulogic;
|
||||
lcb_mpw1_2_pp_dc_b : in std_ulogic;
|
||||
aodo_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
aodo_lcb_mpw1_dc_b : in std_ulogic;
|
||||
aodo_lcb_mpw2_dc_b : in std_ulogic;
|
||||
lcb_time_sg_0 : in std_ulogic;
|
||||
lcb_time_sl_thold_0 : in std_ulogic;
|
||||
time_scan_in : in std_ulogic;
|
||||
time_scan_out : out std_ulogic;
|
||||
bitw_abist : in std_ulogic_vector(0 to 1);
|
||||
lcb_repr_sl_thold_0 : in std_ulogic;
|
||||
lcb_repr_sg_0 : in std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_en_1 : in std_ulogic;
|
||||
din_abist : in std_ulogic_vector(0 to 3);
|
||||
abist_cmp_en : in std_ulogic;
|
||||
abist_raw_b_dc : in std_ulogic;
|
||||
data_cmp_abist : in std_ulogic_vector(0 to 3);
|
||||
addr_abist : in std_ulogic_vector(0 to (addressbus_width-1));
|
||||
r_wb_abist : in std_ulogic;
|
||||
write_thru_en_dc : in std_ulogic;
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic_vector(0 to 1);
|
||||
bo_pc_failout : out std_ulogic_vector(0 to 1);
|
||||
bo_pc_diagloop : out std_ulogic_vector(0 to 1);
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
read_act : in std_ulogic;
|
||||
write_enable : in std_ulogic;
|
||||
write_way : in std_ulogic_vector (0 to (ways-1));
|
||||
addr : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
data_in : in std_ulogic_vector (0 to (port_bitwidth-1));
|
||||
data_out : out std_ulogic_vector(0 to (port_bitwidth*ways-1))
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_256x162_4w_0;
|
||||
|
||||
architecture tri_256x162_4w_0 of tri_256x162_4w_0 is
|
||||
|
||||
constant wga_base_width : integer := 324;
|
||||
constant wga_width_mult : integer := (port_bitwidth*ways-1)/wga_base_width + 1;
|
||||
constant ramb_base_width : integer := 36;
|
||||
constant ramb_base_addr : integer := 9;
|
||||
constant ramb_width_mult : integer := (port_bitwidth-1)/ramb_base_width + 1;
|
||||
|
||||
|
||||
type RAMB_DATA_ARRAY is array (natural range <>) of std_logic_vector(0 to (ramb_base_width*ramb_width_mult - 1));
|
||||
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal act : std_ulogic;
|
||||
signal addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal write_way_l2 : std_ulogic_vector (0 TO write_way'right);
|
||||
signal write_enable_d : std_ulogic;
|
||||
signal write_enable_l2 : std_ulogic;
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
act <= read_act or or_reduce(write_way);
|
||||
|
||||
addr_latch: tri_rlmreg_p
|
||||
generic map (width => addr'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => addr,
|
||||
dout => addr_l2 );
|
||||
|
||||
write_way_latch: tri_rlmreg_p
|
||||
generic map (width => write_way'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => write_way,
|
||||
dout => write_way_l2 );
|
||||
|
||||
write_enable_latch: tri_rlmlatch_p
|
||||
generic map (init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => tidn,
|
||||
scout => open,
|
||||
din => write_enable_d,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => data_in,
|
||||
dout => data_in_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
write_enable_d <= act and write_enable;
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(x) when (( write_enable_l2 and addr_l2 = tconv(y, addressbus_width) and
|
||||
write_way_l2(w)) = '1')
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out <= array_l2( tconv(addr_l2)*port_bitwidth*ways to tconv(addr_l2)*port_bitwidth*ways+port_bitwidth*ways-1 );
|
||||
|
||||
abst_scan_out <= "00";
|
||||
time_scan_out <= '0';
|
||||
repr_scan_out <= '0';
|
||||
|
||||
bo_pc_failout <= "00";
|
||||
bo_pc_diagloop <= "00";
|
||||
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal ramb_data_in : std_logic_vector(0 to (ramb_base_width*ramb_width_mult - 1));
|
||||
signal ramb_data_out : RAMB_DATA_ARRAY(0 to ways-1);
|
||||
signal ramb_addr : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
|
||||
signal act : std_ulogic_vector(0 to ways-1);
|
||||
signal write : std_ulogic_vector(0 to ways-1);
|
||||
signal tidn : std_ulogic;
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
|
||||
tidn <= '0';
|
||||
|
||||
add0: if (addressbus_width < ramb_base_addr) generate
|
||||
begin
|
||||
ramb_addr(0 to (ramb_base_addr-addressbus_width-1)) <= (others => '0');
|
||||
ramb_addr(ramb_base_addr-addressbus_width to ramb_base_addr-1) <= tconv( addr );
|
||||
end generate;
|
||||
add1: if (addressbus_width >= ramb_base_addr) generate
|
||||
begin
|
||||
ramb_addr <= tconv( addr(addressbus_width-ramb_base_addr to addressbus_width-1) );
|
||||
end generate;
|
||||
|
||||
din: for i in ramb_data_in'range generate
|
||||
begin
|
||||
R0: if(i < port_bitwidth) generate begin ramb_data_in(i) <= data_in(i); end generate;
|
||||
R1: if(i >= port_bitwidth) generate begin ramb_data_in(i) <= '0'; end generate;
|
||||
end generate;
|
||||
|
||||
aw: for w in 0 to ways-1 generate begin
|
||||
act(w) <= read_act or write_way(w);
|
||||
write(w) <= write_enable and write_way(w);
|
||||
|
||||
ax: for x in 0 to (ramb_width_mult - 1) generate begin
|
||||
arr: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(w)(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_out(w)(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr,
|
||||
ADDRB => ramb_addr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => tidn,
|
||||
DIA => ramb_data_in(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIB => ramb_data_in(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIPA => ramb_data_in(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DIPB => ramb_data_in(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
ENA => act(w),
|
||||
ENB => tidn,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => tidn,
|
||||
WEA => write(w),
|
||||
WEB => tidn
|
||||
);
|
||||
|
||||
end generate ax;
|
||||
|
||||
data_out(w*port_bitwidth to ((w+1)*port_bitwidth)-1 ) <= tconv( ramb_data_out(w)(0 to port_bitwidth-1) );
|
||||
|
||||
end generate aw;
|
||||
|
||||
abst_scan_out <= "00";
|
||||
time_scan_out <= '0';
|
||||
repr_scan_out <= '0';
|
||||
|
||||
bo_pc_failout <= "00";
|
||||
bo_pc_diagloop <= "00";
|
||||
|
||||
unused <= or_reduce( std_ulogic_vector(ramb_data_out(0)(port_bitwidth to ramb_base_width*ramb_width_mult - 1))
|
||||
& std_ulogic_vector(ramb_data_out(1)(port_bitwidth to ramb_base_width*ramb_width_mult - 1))
|
||||
& std_ulogic_vector(ramb_data_out(2)(port_bitwidth to ramb_base_width*ramb_width_mult - 1))
|
||||
& std_ulogic_vector(ramb_data_out(3)(port_bitwidth to ramb_base_width*ramb_width_mult - 1))
|
||||
& ccflush_dc & lcb_clkoff_dc_b & lcb_d_mode_dc & lcb_act_dis_dc
|
||||
& scan_dis_dc_b & scan_diag_dc & bitw_abist
|
||||
& lcb_sg_1 & lcb_time_sg_0 & lcb_repr_sg_0
|
||||
& lcb_abst_sl_thold_0 & lcb_repr_sl_thold_0
|
||||
& lcb_time_sl_thold_0 & lcb_ary_nsl_thold_0 & tc_lbist_ary_wrt_thru_dc
|
||||
& abist_en_1 & din_abist & abist_cmp_en & abist_raw_b_dc & data_cmp_abist
|
||||
& addr_abist & r_wb_abist & write_thru_en_dc & abst_scan_in & time_scan_in & repr_scan_in
|
||||
& lcb_delay_lclkr_np_dc & ctrl_lcb_delay_lclkr_np_dc & dibw_lcb_delay_lclkr_np_dc
|
||||
& ctrl_lcb_mpw1_np_dc_b & dibw_lcb_mpw1_np_dc_b & lcb_mpw1_pp_dc_b & lcb_mpw1_2_pp_dc_b
|
||||
& aodo_lcb_delay_lclkr_dc & aodo_lcb_mpw1_dc_b & aodo_lcb_mpw2_dc_b
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate a;
|
||||
|
||||
end tri_256x162_4w_0;
|
||||
|
@ -0,0 +1,578 @@
|
||||
-- © 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;
|
||||
library support; use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_32x35_8w_1r1w is
|
||||
generic (addressable_ports : positive := 32;
|
||||
addressbus_width : positive := 5;
|
||||
port_bitwidth : positive := 35;
|
||||
ways : positive := 8;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
rd0_act : in std_ulogic;
|
||||
sg_0 : in std_ulogic;
|
||||
abst_slp_sl_thold_0 : in std_ulogic;
|
||||
ary_slp_nsl_thold_0 : in std_ulogic;
|
||||
time_sl_thold_0 : in std_ulogic;
|
||||
repr_sl_thold_0 : in std_ulogic;
|
||||
clkoff_dc_b : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
d_mode_dc : in std_ulogic;
|
||||
mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
mpw2_dc_b : in std_ulogic;
|
||||
delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
wr_abst_act : in std_ulogic;
|
||||
rd0_abst_act : in std_ulogic;
|
||||
abist_di : in std_ulogic_vector(0 to 3);
|
||||
abist_bw_odd : in std_ulogic;
|
||||
abist_bw_even : in std_ulogic;
|
||||
abist_wr_adr : in std_ulogic_vector(0 to 4);
|
||||
abist_rd0_adr : in std_ulogic_vector(0 to 4);
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_ena_1 : in std_ulogic;
|
||||
abist_g8t_rd0_comp_ena : in std_ulogic;
|
||||
abist_raw_dc_b : in std_ulogic;
|
||||
obs0_abist_cmp : in std_ulogic_vector(0 to 3);
|
||||
abst_scan_in : in std_ulogic;
|
||||
time_scan_in : in std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic;
|
||||
time_scan_out : out std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic_vector(0 to 3);
|
||||
bo_pc_failout : out std_ulogic_vector(0 to 3);
|
||||
bo_pc_diagloop : out std_ulogic_vector(0 to 3);
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
write_enable : in std_ulogic_vector (0 to ((port_bitwidth*ways-1)/(port_bitwidth*2)));
|
||||
way : in std_ulogic_vector (0 to (ways-1));
|
||||
addr_wr : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
data_in : in std_ulogic_vector (0 to (port_bitwidth-1));
|
||||
addr_rd_01 : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
addr_rd_23 : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
addr_rd_45 : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
addr_rd_67 : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
data_out : out std_ulogic_vector(0 to (port_bitwidth*ways-1))
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_32x35_8w_1r1w;
|
||||
|
||||
architecture tri_32x35_8w_1r1w of tri_32x35_8w_1r1w is
|
||||
|
||||
constant wga_base_width : integer := 70;
|
||||
constant wga_base_addr : integer := 5;
|
||||
constant wga_width_mult : integer := (port_bitwidth*ways-1)/wga_base_width + 1;
|
||||
constant ramb_base_width : integer := 36;
|
||||
constant ramb_base_addr : integer := 9;
|
||||
constant ramb_width_mult : integer := (port_bitwidth-1)/ramb_base_width + 1;
|
||||
|
||||
|
||||
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal addr_rd_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal addr_wr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal way_l2 : std_ulogic_vector (0 TO way'right);
|
||||
signal write_enable_d : std_ulogic_vector(0 to wga_width_mult-1);
|
||||
signal write_enable_l2 : std_ulogic_vector(0 to wga_width_mult-1);
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal act : std_ulogic;
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
act <= or_reduce(write_enable) or rd0_act;
|
||||
|
||||
addr_rd_latch: tri_rlmreg_p
|
||||
generic map (width => addr_rd_01'length, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => addr_rd_01,
|
||||
dout => addr_rd_l2 );
|
||||
|
||||
addr_wr_latch: tri_rlmreg_p
|
||||
generic map (width => addr_wr'length, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => addr_wr,
|
||||
dout => addr_wr_l2 );
|
||||
|
||||
way_latch: tri_rlmreg_p
|
||||
generic map (width => way'length, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => way,
|
||||
dout => way_l2 );
|
||||
|
||||
write_enable_latch: tri_rlmreg_p
|
||||
generic map (width => wga_width_mult, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => write_enable_d,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => data_in,
|
||||
dout => data_in_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => tiup,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
write_enable_d <= write_enable;
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(x) when (( or_reduce(write_enable_l2) and addr_wr_l2 = tconv(y, addressbus_width) and
|
||||
way_l2(w)) = '1')
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out <= array_l2( tconv(addr_rd_l2)*port_bitwidth*ways to tconv(addr_rd_l2)*port_bitwidth*ways+port_bitwidth*ways-1 );
|
||||
|
||||
abst_scan_out <= tidn;
|
||||
time_scan_out <= tidn;
|
||||
repr_scan_out <= tidn;
|
||||
|
||||
bo_pc_failout <= "0000";
|
||||
bo_pc_diagloop <= "0000";
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal array_wr_data : std_logic_vector(0 to port_bitwidth - 1);
|
||||
signal ramb_data_in : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outA : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outB : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outC : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outD : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outE : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outF : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outG : std_logic_vector(0 to 35);
|
||||
signal ramb_data_outH : std_logic_vector(0 to 35);
|
||||
signal ramb_addr_wr : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
signal ramb_addr_rd : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
signal data_outA : std_ulogic_vector(0 to 35);
|
||||
signal data_outB : std_ulogic_vector(0 to 35);
|
||||
signal data_outC : std_ulogic_vector(0 to 35);
|
||||
signal data_outD : std_ulogic_vector(0 to 35);
|
||||
signal data_outE : std_ulogic_vector(0 to 35);
|
||||
signal data_outF : std_ulogic_vector(0 to 35);
|
||||
signal data_outG : std_ulogic_vector(0 to 35);
|
||||
signal data_outH : std_ulogic_vector(0 to 35);
|
||||
|
||||
signal rd_addr : std_ulogic_vector(0 to ramb_base_addr - 1);
|
||||
signal wr_addr : std_ulogic_vector(0 to ramb_base_addr - 1);
|
||||
signal write_enable_wA : std_ulogic;
|
||||
signal write_enable_wB : std_ulogic;
|
||||
signal write_enable_wC : std_ulogic;
|
||||
signal write_enable_wD : std_ulogic;
|
||||
signal write_enable_wE : std_ulogic;
|
||||
signal write_enable_wF : std_ulogic;
|
||||
signal write_enable_wG : std_ulogic;
|
||||
signal write_enable_wH : std_ulogic;
|
||||
signal tidn : std_logic_vector(0 to 35);
|
||||
signal act : std_ulogic;
|
||||
signal wen : std_ulogic;
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
|
||||
tidn <= (others=>'0');
|
||||
|
||||
wen <= or_reduce(write_enable);
|
||||
act <= rd0_act or wen;
|
||||
|
||||
array_wr_data <= tconv(data_in);
|
||||
addr_calc : for t in 0 to 35 generate begin
|
||||
R0 : if(t < 35 - (port_bitwidth-1)) generate begin ramb_data_in(t) <= '0'; end generate;
|
||||
R1 : if(t >= 35 - (port_bitwidth-1)) generate begin ramb_data_in(t) <= array_wr_data(t-(35-(port_bitwidth-1))); end generate;
|
||||
end generate addr_calc;
|
||||
|
||||
write_enable_wA <= wen and way(0);
|
||||
write_enable_wB <= wen and way(1);
|
||||
write_enable_wC <= wen and way(2);
|
||||
write_enable_wD <= wen and way(3);
|
||||
write_enable_wE <= wen and way(4);
|
||||
write_enable_wF <= wen and way(5);
|
||||
write_enable_wG <= wen and way(6);
|
||||
write_enable_wH <= wen and way(7);
|
||||
|
||||
rambAddrCalc : for t in 0 to ramb_base_addr-1 generate begin
|
||||
R0 : if(t < ramb_base_addr-addressbus_width) generate begin
|
||||
rd_addr(t) <= '0';
|
||||
wr_addr(t) <= '0';
|
||||
end generate;
|
||||
R1 : if(t >= ramb_base_addr-addressbus_width) generate begin
|
||||
rd_addr(t) <= addr_rd_01(t-(ramb_base_addr-addressbus_width));
|
||||
wr_addr(t) <= addr_wr(t-(ramb_base_addr-addressbus_width));
|
||||
end generate;
|
||||
end generate rambAddrCalc;
|
||||
|
||||
ramb_addr_wr <= tconv(wr_addr);
|
||||
ramb_addr_rd <= tconv(rd_addr);
|
||||
|
||||
data_outA <= tconv(ramb_data_outA);
|
||||
data_outB <= tconv(ramb_data_outB);
|
||||
data_outC <= tconv(ramb_data_outC);
|
||||
data_outD <= tconv(ramb_data_outD);
|
||||
data_outE <= tconv(ramb_data_outE);
|
||||
data_outF <= tconv(ramb_data_outF);
|
||||
data_outG <= tconv(ramb_data_outG);
|
||||
data_outH <= tconv(ramb_data_outH);
|
||||
|
||||
data_out <= data_outA((35-(port_bitwidth-1)) to 35) & data_outB((35-(port_bitwidth-1)) to 35) &
|
||||
data_outC((35-(port_bitwidth-1)) to 35) & data_outD((35-(port_bitwidth-1)) to 35) &
|
||||
data_outE((35-(port_bitwidth-1)) to 35) & data_outF((35-(port_bitwidth-1)) to 35) &
|
||||
data_outG((35-(port_bitwidth-1)) to 35) & data_outH((35-(port_bitwidth-1)) to 35);
|
||||
|
||||
arr0_A: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outA(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outA(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wA
|
||||
);
|
||||
|
||||
arr1_B: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outB(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outB(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wB
|
||||
);
|
||||
|
||||
arr2_C: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outC(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outC(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wC
|
||||
);
|
||||
|
||||
arr3_D: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outD(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outD(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wD
|
||||
);
|
||||
|
||||
arr4_E: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outE(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outE(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wE
|
||||
);
|
||||
|
||||
arr5_F: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outF(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outF(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wF
|
||||
);
|
||||
|
||||
arr6_G: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outG(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outG(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wG
|
||||
);
|
||||
|
||||
arr7_H: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_outH(0 to 31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_outH(32 to 35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_addr_rd,
|
||||
ADDRB => ramb_addr_wr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => tidn(0 to 31),
|
||||
DIB => ramb_data_in(0 to 31),
|
||||
DIPA => tidn(32 to 35),
|
||||
DIPB => ramb_data_in(32 to 35),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn(0),
|
||||
WEB => write_enable_wH
|
||||
);
|
||||
|
||||
abst_scan_out <= tidn(0);
|
||||
time_scan_out <= tidn(0);
|
||||
repr_scan_out <= tidn(0);
|
||||
|
||||
bo_pc_failout <= "0000";
|
||||
bo_pc_diagloop <= "0000";
|
||||
|
||||
unused <= or_reduce( data_outA(0) & data_outB(0) & data_outC(0) & data_outD(0)
|
||||
& data_outE(0) & data_outF(0) & data_outG(0) & data_outH(0)
|
||||
& sg_0 & abst_slp_sl_thold_0 & ary_slp_nsl_thold_0
|
||||
& time_sl_thold_0 & repr_sl_thold_0 & clkoff_dc_b & ccflush_dc
|
||||
& scan_dis_dc_b & scan_diag_dc & d_mode_dc & mpw1_dc_b & mpw2_dc_b
|
||||
& delay_lclkr_dc & wr_abst_act & rd0_abst_act & abist_di
|
||||
& abist_bw_odd & abist_bw_even & abist_wr_adr & abist_rd0_adr
|
||||
& tc_lbist_ary_wrt_thru_dc & abist_ena_1 & abist_g8t_rd0_comp_ena
|
||||
& abist_raw_dc_b & obs0_abist_cmp & abst_scan_in & time_scan_in
|
||||
& repr_scan_in & addr_rd_23 & addr_rd_45 & addr_rd_67
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
end generate a;
|
||||
|
||||
end tri_32x35_8w_1r1w;
|
||||
|
@ -0,0 +1,762 @@
|
||||
-- © 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;
|
||||
library support; use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_512x288_9 is
|
||||
generic (addressable_ports : positive := 512;
|
||||
addressbus_width : positive := 6;
|
||||
port_bitwidth : positive := 288;
|
||||
bit_write_type : positive := 9;
|
||||
ways : positive := 1;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
act : in std_ulogic;
|
||||
sg_0 : in std_ulogic;
|
||||
sg_1 : in std_ulogic;
|
||||
ary_nsl_thold_0 : in std_ulogic;
|
||||
abst_sl_thold_0 : in std_ulogic;
|
||||
time_sl_thold_0 : in std_ulogic;
|
||||
repr_sl_thold_0 : in std_ulogic;
|
||||
clkoff_dc_b : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
d_mode_dc : in std_ulogic;
|
||||
act_dis_dc : in std_ulogic;
|
||||
lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
ctrl_lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
dibw_lcb_delay_lclkr_np_dc : in std_ulogic;
|
||||
ctrl_lcb_mpw1_np_dc_b : in std_ulogic;
|
||||
dibw_lcb_mpw1_np_dc_b : in std_ulogic;
|
||||
lcb_mpw1_pp_dc_b : in std_ulogic;
|
||||
lcb_mpw1_2_pp_dc_b : in std_ulogic;
|
||||
aodo_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
aodo_lcb_mpw1_dc_b : in std_ulogic;
|
||||
aodo_lcb_mpw2_dc_b : in std_ulogic;
|
||||
bitw_abist : in std_ulogic_vector(0 to 1);
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_en_1 : in std_ulogic;
|
||||
din_abist : in std_ulogic_vector(0 to 3);
|
||||
abist_cmp_en : in std_ulogic;
|
||||
abist_raw_b_dc : in std_ulogic;
|
||||
data_cmp_abist : in std_ulogic_vector(0 to 3);
|
||||
addr_abist : in std_ulogic_vector(0 to 8);
|
||||
r_wb_abist : in std_ulogic;
|
||||
abst_scan_in : in std_ulogic_vector(0 to 1);
|
||||
time_scan_in : in std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic_vector(0 to 1);
|
||||
time_scan_out : out std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic_vector(0 to 1);
|
||||
bo_pc_failout : out std_ulogic_vector(0 to 1);
|
||||
bo_pc_diagloop : out std_ulogic_vector(0 to 1);
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
write_enable : in std_ulogic;
|
||||
bw : in std_ulogic_vector (0 to (port_bitwidth-1));
|
||||
arr_up_addr : in std_ulogic_vector (0 to 2);
|
||||
addr : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
data_in : in std_ulogic_vector (0 to (port_bitwidth-1));
|
||||
data_out : out std_ulogic_vector(0 to (port_bitwidth*ways-1))
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_512x288_9;
|
||||
|
||||
architecture tri_512x288_9 of tri_512x288_9 is
|
||||
|
||||
|
||||
|
||||
|
||||
constant ramb_base_addr : integer := 11;
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal addr_l2 : std_ulogic_vector(0 TO addressbus_width-1);
|
||||
signal bw_l2 : std_ulogic_vector(0 TO bw'right);
|
||||
signal write_enable_d : std_ulogic;
|
||||
signal write_enable_l2 : std_ulogic;
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
addr_latch: tri_rlmreg_p
|
||||
generic map (width => addr'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => addr,
|
||||
dout => addr_l2 );
|
||||
|
||||
bw_latch: tri_rlmreg_p
|
||||
generic map (width => bw'length, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => bw,
|
||||
dout => bw_l2 );
|
||||
|
||||
write_enable_latch: tri_rlmlatch_p
|
||||
generic map (init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => tidn,
|
||||
scout => open,
|
||||
din => write_enable_d,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => data_in,
|
||||
dout => data_in_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
write_enable_d <= act and write_enable;
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(x) when (( write_enable_l2 and addr_l2 = tconv(y, addressbus_width) and bw_l2(x/bit_write_type) ) = '1')
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out <= array_l2( tconv(addr_l2)*port_bitwidth*ways to tconv(addr_l2)*port_bitwidth*ways+port_bitwidth*ways-1 );
|
||||
|
||||
abst_scan_out <= (others=>'0');
|
||||
time_scan_out <= tidn;
|
||||
repr_scan_out <= tidn;
|
||||
|
||||
bo_pc_failout <= (others=>'0');
|
||||
bo_pc_diagloop <= (others=>'0');
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
component RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic
|
||||
(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port
|
||||
(
|
||||
DOA : out std_logic_vector(7 downto 0);
|
||||
DOB : out std_logic_vector(7 downto 0);
|
||||
DOPA : out std_logic_vector(0 downto 0);
|
||||
DOPB : out std_logic_vector(0 downto 0);
|
||||
ADDRA : in std_logic_vector(10 downto 0);
|
||||
ADDRB : in std_logic_vector(10 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(7 downto 0);
|
||||
DIB : in std_logic_vector(7 downto 0);
|
||||
DIPA : in std_logic_vector(0 downto 0);
|
||||
DIPB : in std_logic_vector(0 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
constant addresswidth : integer := addressbus_width+3+1;
|
||||
signal arr_data_in : std_logic_vector(0 to 287);
|
||||
signal ramb_data_in : std_logic_vector(0 to 255);
|
||||
signal ramb_parity_in : std_logic_vector(0 to 31);
|
||||
signal ramb_uh_addr : std_ulogic_vector(0 to 10);
|
||||
signal ramb_lh_addr : std_ulogic_vector(0 to 10);
|
||||
signal uh_addr : std_ulogic_vector(0 to addresswidth-1);
|
||||
signal lh_addr : std_ulogic_vector(0 to addresswidth-1);
|
||||
signal ramb_data_out : std_logic_vector(0 to 255);
|
||||
signal ramb_parity_out : std_logic_vector(0 to 31);
|
||||
|
||||
signal tidn : std_ulogic;
|
||||
signal wrt_en_wAH : std_ulogic_vector(0 to 31);
|
||||
signal bitWrt : std_ulogic_vector(0 to 31);
|
||||
signal rdDataOut : std_ulogic_vector(0 to 255);
|
||||
signal rdParityOut : std_ulogic_vector(0 to 31);
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
|
||||
tidn <= '0';
|
||||
|
||||
arr_data_in <= tconv(data_in);
|
||||
|
||||
dWFixUp : for t in 0 to 31 generate begin
|
||||
ramb_data_in((8*t) to (8*t)+7) <= arr_data_in(t+0) & arr_data_in(t+32) & arr_data_in(t+64) & arr_data_in(t+96) &
|
||||
arr_data_in(t+144) & arr_data_in(t+176) & arr_data_in(t+208) & arr_data_in(t+240);
|
||||
ramb_parity_in(t) <= arr_data_in(t+128+(128*(t/16)));
|
||||
bitWrt(t) <= bw(t);
|
||||
end generate dWFixUp;
|
||||
|
||||
wrtEn_gen : for t in 0 to 31 generate begin
|
||||
wrt_en_wAH(t) <= write_enable and bitWrt(t);
|
||||
end generate wrtEn_gen;
|
||||
|
||||
uh_addr <= arr_up_addr & addr & '0';
|
||||
lh_addr <= arr_up_addr & addr & '1';
|
||||
|
||||
rambAddrCalc : for t in 0 to ramb_base_addr-1 generate begin
|
||||
R0 : if(t < ramb_base_addr-addresswidth) generate begin
|
||||
ramb_uh_addr(t) <= '0';
|
||||
ramb_lh_addr(t) <= '0';
|
||||
end generate;
|
||||
R1 : if(t >= ramb_base_addr-addresswidth) generate begin
|
||||
ramb_uh_addr(t) <= uh_addr(t-(ramb_base_addr-addresswidth));
|
||||
ramb_lh_addr(t) <= lh_addr(t-(ramb_base_addr-addresswidth));
|
||||
end generate;
|
||||
end generate rambAddrCalc;
|
||||
|
||||
dRFixUp : for t in 0 to 31 generate begin
|
||||
data_out(t+0) <= rdDataOut((t*8)+0);
|
||||
data_out(t+32) <= rdDataOut((t*8)+1);
|
||||
data_out(t+64) <= rdDataOut((t*8)+2);
|
||||
data_out(t+96) <= rdDataOut((t*8)+3);
|
||||
data_out(t+144) <= rdDataOut((t*8)+4);
|
||||
data_out(t+176) <= rdDataOut((t*8)+5);
|
||||
data_out(t+208) <= rdDataOut((t*8)+6);
|
||||
data_out(t+240) <= rdDataOut((t*8)+7);
|
||||
data_out(t+128+(128*(t/16))) <= rdParityOut(t);
|
||||
end generate dRFixUp;
|
||||
|
||||
rdDataOut <= tconv(ramb_data_out);
|
||||
rdParityOut <= tconv(ramb_parity_out);
|
||||
|
||||
arr0: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(0 to 7),
|
||||
DOB => ramb_data_out(128 to 135),
|
||||
DOPA => ramb_parity_out(0 to 0),
|
||||
DOPB => ramb_parity_out(16 to 16),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(0 to 7),
|
||||
DIB => ramb_data_in(128 to 135),
|
||||
DIPA => ramb_parity_in(0 to 0),
|
||||
DIPB => ramb_parity_in(16 to 16),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(0),
|
||||
WEB => wrt_en_wAH(16)
|
||||
);
|
||||
|
||||
arr1: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(8 to 15),
|
||||
DOB => ramb_data_out(136 to 143),
|
||||
DOPA => ramb_parity_out(1 to 1),
|
||||
DOPB => ramb_parity_out(17 to 17),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(8 to 15),
|
||||
DIB => ramb_data_in(136 to 143),
|
||||
DIPA => ramb_parity_in(1 to 1),
|
||||
DIPB => ramb_parity_in(17 to 17),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(1),
|
||||
WEB => wrt_en_wAH(17)
|
||||
);
|
||||
|
||||
arr2: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(16 to 23),
|
||||
DOB => ramb_data_out(144 to 151),
|
||||
DOPA => ramb_parity_out(2 to 2),
|
||||
DOPB => ramb_parity_out(18 to 18),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(16 to 23),
|
||||
DIB => ramb_data_in(144 to 151),
|
||||
DIPA => ramb_parity_in(2 to 2),
|
||||
DIPB => ramb_parity_in(18 to 18),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(2),
|
||||
WEB => wrt_en_wAH(18)
|
||||
);
|
||||
|
||||
arr3: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(24 to 31),
|
||||
DOB => ramb_data_out(152 to 159),
|
||||
DOPA => ramb_parity_out(3 to 3),
|
||||
DOPB => ramb_parity_out(19 to 19),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(24 to 31),
|
||||
DIB => ramb_data_in(152 to 159),
|
||||
DIPA => ramb_parity_in(3 to 3),
|
||||
DIPB => ramb_parity_in(19 to 19),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(3),
|
||||
WEB => wrt_en_wAH(19)
|
||||
);
|
||||
|
||||
arr4: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(32 to 39),
|
||||
DOB => ramb_data_out(160 to 167),
|
||||
DOPA => ramb_parity_out(4 to 4),
|
||||
DOPB => ramb_parity_out(20 to 20),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(32 to 39),
|
||||
DIB => ramb_data_in(160 to 167),
|
||||
DIPA => ramb_parity_in(4 to 4),
|
||||
DIPB => ramb_parity_in(20 to 20),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(4),
|
||||
WEB => wrt_en_wAH(20)
|
||||
);
|
||||
|
||||
arr5: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(40 to 47),
|
||||
DOB => ramb_data_out(168 to 175),
|
||||
DOPA => ramb_parity_out(5 to 5),
|
||||
DOPB => ramb_parity_out(21 to 21),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(40 to 47),
|
||||
DIB => ramb_data_in(168 to 175),
|
||||
DIPA => ramb_parity_in(5 to 5),
|
||||
DIPB => ramb_parity_in(21 to 21),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(5),
|
||||
WEB => wrt_en_wAH(21)
|
||||
);
|
||||
|
||||
arr6: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(48 to 55),
|
||||
DOB => ramb_data_out(176 to 183),
|
||||
DOPA => ramb_parity_out(6 to 6),
|
||||
DOPB => ramb_parity_out(22 to 22),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(48 to 55),
|
||||
DIB => ramb_data_in(176 to 183),
|
||||
DIPA => ramb_parity_in(6 to 6),
|
||||
DIPB => ramb_parity_in(22 to 22),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(6),
|
||||
WEB => wrt_en_wAH(22)
|
||||
);
|
||||
|
||||
arr7: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(56 to 63),
|
||||
DOB => ramb_data_out(184 to 191),
|
||||
DOPA => ramb_parity_out(7 to 7),
|
||||
DOPB => ramb_parity_out(23 to 23),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(56 to 63),
|
||||
DIB => ramb_data_in(184 to 191),
|
||||
DIPA => ramb_parity_in(7 to 7),
|
||||
DIPB => ramb_parity_in(23 to 23),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(7),
|
||||
WEB => wrt_en_wAH(23)
|
||||
);
|
||||
|
||||
arr8: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(64 to 71),
|
||||
DOB => ramb_data_out(192 to 199),
|
||||
DOPA => ramb_parity_out(8 to 8),
|
||||
DOPB => ramb_parity_out(24 to 24),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(64 to 71),
|
||||
DIB => ramb_data_in(192 to 199),
|
||||
DIPA => ramb_parity_in(8 to 8),
|
||||
DIPB => ramb_parity_in(24 to 24),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(8),
|
||||
WEB => wrt_en_wAH(24)
|
||||
);
|
||||
|
||||
arr9: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(72 to 79),
|
||||
DOB => ramb_data_out(200 to 207),
|
||||
DOPA => ramb_parity_out(9 to 9),
|
||||
DOPB => ramb_parity_out(25 to 25),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(72 to 79),
|
||||
DIB => ramb_data_in(200 to 207),
|
||||
DIPA => ramb_parity_in(9 to 9),
|
||||
DIPB => ramb_parity_in(25 to 25),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(9),
|
||||
WEB => wrt_en_wAH(25)
|
||||
);
|
||||
|
||||
arrA: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(80 to 87),
|
||||
DOB => ramb_data_out(208 to 215),
|
||||
DOPA => ramb_parity_out(10 to 10),
|
||||
DOPB => ramb_parity_out(26 to 26),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(80 to 87),
|
||||
DIB => ramb_data_in(208 to 215),
|
||||
DIPA => ramb_parity_in(10 to 10),
|
||||
DIPB => ramb_parity_in(26 to 26),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(10),
|
||||
WEB => wrt_en_wAH(26)
|
||||
);
|
||||
|
||||
arrB: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(88 to 95),
|
||||
DOB => ramb_data_out(216 to 223),
|
||||
DOPA => ramb_parity_out(11 to 11),
|
||||
DOPB => ramb_parity_out(27 to 27),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(88 to 95),
|
||||
DIB => ramb_data_in(216 to 223),
|
||||
DIPA => ramb_parity_in(11 to 11),
|
||||
DIPB => ramb_parity_in(27 to 27),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(11),
|
||||
WEB => wrt_en_wAH(27)
|
||||
);
|
||||
|
||||
arrC: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(96 to 103),
|
||||
DOB => ramb_data_out(224 to 231),
|
||||
DOPA => ramb_parity_out(12 to 12),
|
||||
DOPB => ramb_parity_out(28 to 28),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(96 to 103),
|
||||
DIB => ramb_data_in(224 to 231),
|
||||
DIPA => ramb_parity_in(12 to 12),
|
||||
DIPB => ramb_parity_in(28 to 28),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(12),
|
||||
WEB => wrt_en_wAH(28)
|
||||
);
|
||||
|
||||
arrD: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(104 to 111),
|
||||
DOB => ramb_data_out(232 to 239),
|
||||
DOPA => ramb_parity_out(13 to 13),
|
||||
DOPB => ramb_parity_out(29 to 29),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(104 to 111),
|
||||
DIB => ramb_data_in(232 to 239),
|
||||
DIPA => ramb_parity_in(13 to 13),
|
||||
DIPB => ramb_parity_in(29 to 29),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(13),
|
||||
WEB => wrt_en_wAH(29)
|
||||
);
|
||||
|
||||
arrE: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(112 to 119),
|
||||
DOB => ramb_data_out(240 to 247),
|
||||
DOPA => ramb_parity_out(14 to 14),
|
||||
DOPB => ramb_parity_out(30 to 30),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(112 to 119),
|
||||
DIB => ramb_data_in(240 to 247),
|
||||
DIPA => ramb_parity_in(14 to 14),
|
||||
DIPB => ramb_parity_in(30 to 30),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(14),
|
||||
WEB => wrt_en_wAH(30)
|
||||
);
|
||||
|
||||
arrF: RAMB16_S9_S9
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(120 to 127),
|
||||
DOB => ramb_data_out(248 to 255),
|
||||
DOPA => ramb_parity_out(15 to 15),
|
||||
DOPB => ramb_parity_out(31 to 31),
|
||||
ADDRA => tconv(ramb_uh_addr),
|
||||
ADDRB => tconv(ramb_lh_addr),
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(120 to 127),
|
||||
DIB => ramb_data_in(248 to 255),
|
||||
DIPA => ramb_parity_in(15 to 15),
|
||||
DIPB => ramb_parity_in(31 to 31),
|
||||
ENA => act,
|
||||
ENB => act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => wrt_en_wAH(15),
|
||||
WEB => wrt_en_wAH(31)
|
||||
);
|
||||
|
||||
abst_scan_out <= (others=>'0');
|
||||
time_scan_out <= tidn;
|
||||
repr_scan_out <= tidn;
|
||||
|
||||
bo_pc_failout <= (others=>'0');
|
||||
bo_pc_diagloop <= (others=>'0');
|
||||
|
||||
unused <= or_reduce( bw(32 to port_bitwidth-1)
|
||||
& clkoff_dc_b & ccflush_dc & scan_dis_dc_b & scan_diag_dc & d_mode_dc & act_dis_dc
|
||||
& bitw_abist & sg_0 & sg_1
|
||||
& abst_sl_thold_0 & repr_sl_thold_0
|
||||
& time_sl_thold_0 & ary_nsl_thold_0 & tc_lbist_ary_wrt_thru_dc
|
||||
& abist_en_1 & din_abist & abist_cmp_en & abist_raw_b_dc & data_cmp_abist
|
||||
& addr_abist & r_wb_abist & abst_scan_in & time_scan_in & repr_scan_in
|
||||
& lcb_delay_lclkr_np_dc & ctrl_lcb_delay_lclkr_np_dc & dibw_lcb_delay_lclkr_np_dc
|
||||
& ctrl_lcb_mpw1_np_dc_b & dibw_lcb_mpw1_np_dc_b & lcb_mpw1_pp_dc_b & lcb_mpw1_2_pp_dc_b
|
||||
& aodo_lcb_delay_lclkr_dc & aodo_lcb_mpw1_dc_b & aodo_lcb_mpw2_dc_b
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate a;
|
||||
|
||||
|
||||
end tri_512x288_9;
|
||||
|
@ -0,0 +1,357 @@
|
||||
-- © 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;
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_64x36_4w_1r1w is
|
||||
generic (addressable_ports : positive := 64;
|
||||
addressbus_width : positive := 6;
|
||||
port_bitwidth : positive := 36;
|
||||
ways : positive := 4;
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
rd_act : in std_ulogic;
|
||||
wr_act : in std_ulogic;
|
||||
sg_0 : in std_ulogic;
|
||||
abst_sl_thold_0 : in std_ulogic;
|
||||
ary_nsl_thold_0 : in std_ulogic;
|
||||
time_sl_thold_0 : in std_ulogic;
|
||||
repr_sl_thold_0 : in std_ulogic;
|
||||
clkoff_dc_b : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
d_mode_dc : in std_ulogic;
|
||||
mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
mpw2_dc_b : in std_ulogic;
|
||||
delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
wr_abst_act : in std_ulogic;
|
||||
rd0_abst_act : in std_ulogic;
|
||||
abist_di : in std_ulogic_vector(0 to 3);
|
||||
abist_bw_odd : in std_ulogic;
|
||||
abist_bw_even : in std_ulogic;
|
||||
abist_wr_adr : in std_ulogic_vector(0 to 5);
|
||||
abist_rd0_adr : in std_ulogic_vector(0 to 5);
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_ena_1 : in std_ulogic;
|
||||
abist_g8t_rd0_comp_ena : in std_ulogic;
|
||||
abist_raw_dc_b : in std_ulogic;
|
||||
obs0_abist_cmp : in std_ulogic_vector(0 to 3);
|
||||
abst_scan_in : in std_ulogic_vector(0 to 1);
|
||||
time_scan_in : in std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic_vector(0 to 1);
|
||||
time_scan_out : out std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic_vector(0 to 1);
|
||||
bo_pc_failout : out std_ulogic_vector(0 to 1);
|
||||
bo_pc_diagloop : out std_ulogic_vector(0 to 1);
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
wr_way : in std_ulogic_vector (0 to (ways-1));
|
||||
wr_addr : in std_ulogic_vector (0 to (addressbus_width-1));
|
||||
data_in : in std_ulogic_vector (0 to (port_bitwidth*ways-1));
|
||||
rd_addr : in std_ulogic_vector(0 to (addressbus_width-1));
|
||||
data_out : out std_ulogic_vector(0 to (port_bitwidth*ways-1))
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_64x36_4w_1r1w;
|
||||
|
||||
architecture tri_64x36_4w_1r1w of tri_64x36_4w_1r1w is
|
||||
|
||||
constant wga_base_width : integer := 72;
|
||||
constant wga_width_mult : integer := (port_bitwidth*ways-1)/wga_base_width + 1;
|
||||
constant ramb_base_width : integer := 36;
|
||||
constant ramb_base_addr : integer := 9;
|
||||
constant ramb_width_mult : integer := (port_bitwidth-1)/ramb_base_width + 1;
|
||||
|
||||
|
||||
type RAMB_DATA_ARRAY is array (natural range <>) of std_logic_vector(0 to (ramb_base_width*ramb_width_mult - 1));
|
||||
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
signal tiup : std_ulogic;
|
||||
signal tidn : std_ulogic;
|
||||
|
||||
signal wr_addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal rd_addr_l2 : std_ulogic_vector (0 TO addressbus_width-1);
|
||||
signal way_l2 : std_ulogic_vector (0 TO wr_way'right);
|
||||
signal write_enable_l2 : std_ulogic;
|
||||
signal data_in_l2 : std_ulogic_vector(0 to port_bitwidth*ways-1);
|
||||
signal array_d : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
signal array_l2 : std_ulogic_vector(0 to addressable_ports*port_bitwidth*ways-1);
|
||||
begin
|
||||
tiup <= '1';
|
||||
tidn <= '0';
|
||||
|
||||
wr_addr_latch: tri_rlmreg_p
|
||||
generic map (width => wr_addr'length, init => 0, needs_sreset => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => wr_addr,
|
||||
dout => wr_addr_l2 );
|
||||
|
||||
rd_addr_latch: tri_rlmreg_p
|
||||
generic map (width => rd_addr'length, init => 0, needs_sreset => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => rd_act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => rd_addr,
|
||||
dout => rd_addr_l2 );
|
||||
|
||||
way_latch: tri_rlmreg_p
|
||||
generic map (width => wr_way'length, init => 0, needs_sreset => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => wr_way,
|
||||
dout => way_l2 );
|
||||
|
||||
write_enable_latch: tri_rlmlatch_p
|
||||
generic map (init => 0, needs_sreset => 1, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => tidn,
|
||||
scout => open,
|
||||
din => wr_act,
|
||||
dout => write_enable_l2 );
|
||||
|
||||
data_in_latch: tri_rlmreg_p
|
||||
generic map (width => port_bitwidth*ways, init => 0, needs_sreset => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => wr_act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => data_in,
|
||||
dout => data_in_l2 );
|
||||
|
||||
array_latch: tri_rlmreg_p
|
||||
generic map (width => addressable_ports*port_bitwidth*ways, init => 0, needs_sreset => 0, expand_type => expand_type)
|
||||
port map (vd => vdd,
|
||||
gd => gnd,
|
||||
nclk => nclk,
|
||||
act => tiup,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => array_d,
|
||||
dout => array_l2 );
|
||||
|
||||
ww: for w in 0 to ways-1 generate
|
||||
begin
|
||||
wy: for y in 0 to addressable_ports-1 generate
|
||||
begin
|
||||
wx: for x in 0 to port_bitwidth-1 generate
|
||||
begin
|
||||
array_d(y*port_bitwidth*ways+w*port_bitwidth+x) <=
|
||||
data_in_l2(w*port_bitwidth+x) when (( write_enable_l2 and wr_addr_l2 = tconv(y, addressbus_width) and
|
||||
way_l2(w)) = '1')
|
||||
else array_l2(y*port_bitwidth*ways+w*port_bitwidth+x);
|
||||
|
||||
end generate wx;
|
||||
end generate wy;
|
||||
end generate ww;
|
||||
|
||||
data_out <= array_l2( tconv(rd_addr_l2)*port_bitwidth*ways to tconv(rd_addr_l2)*port_bitwidth*ways+port_bitwidth*ways-1 );
|
||||
|
||||
abst_scan_out <= tidn & tidn;
|
||||
time_scan_out <= tidn;
|
||||
repr_scan_out <= tidn;
|
||||
|
||||
bo_pc_failout <= tidn & tidn;
|
||||
bo_pc_diagloop <= tidn & tidn;
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic
|
||||
(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port
|
||||
(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal ramb_data_in : RAMB_DATA_ARRAY(wr_way'range);
|
||||
signal ramb_data_out : RAMB_DATA_ARRAY(wr_way'range);
|
||||
signal ramb_rd_addr : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
signal ramb_wr_addr : std_logic_vector(0 to ramb_base_addr - 1);
|
||||
|
||||
signal tidn : std_ulogic;
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
|
||||
tidn <= '0';
|
||||
|
||||
add0: if (addressbus_width < ramb_base_addr) generate
|
||||
begin
|
||||
ramb_rd_addr(0 to (ramb_base_addr-addressbus_width-1)) <= (others => '0');
|
||||
ramb_rd_addr(ramb_base_addr-addressbus_width to ramb_base_addr-1) <= tconv( rd_addr );
|
||||
|
||||
ramb_wr_addr(0 to (ramb_base_addr-addressbus_width-1)) <= (others => '0');
|
||||
ramb_wr_addr(ramb_base_addr-addressbus_width to ramb_base_addr-1) <= tconv( wr_addr );
|
||||
end generate;
|
||||
add1: if (addressbus_width >= ramb_base_addr) generate
|
||||
begin
|
||||
ramb_rd_addr <= tconv( rd_addr(addressbus_width-ramb_base_addr to addressbus_width-1) );
|
||||
ramb_wr_addr <= tconv( wr_addr(addressbus_width-ramb_base_addr to addressbus_width-1) );
|
||||
end generate;
|
||||
|
||||
dw: for w in wr_way'range generate begin
|
||||
din: for i in 0 to (ramb_base_width*ramb_width_mult - 1) generate
|
||||
begin
|
||||
R0: if(i < port_bitwidth) generate begin ramb_data_in(w)(i) <= data_in(w*port_bitwidth+i); end generate;
|
||||
R1: if(i >= port_bitwidth) generate begin ramb_data_in(w)(i) <= '0'; end generate;
|
||||
end generate din;
|
||||
end generate dw;
|
||||
|
||||
aw: for w in wr_way'range generate begin
|
||||
ax: for x in 0 to (ramb_width_mult - 1) generate begin
|
||||
arr: RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
DOA => ramb_data_out(w)(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DOB => open,
|
||||
DOPA => ramb_data_out(w)(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DOPB => open,
|
||||
ADDRA => ramb_rd_addr,
|
||||
ADDRB => ramb_wr_addr,
|
||||
CLKA => nclk.clk,
|
||||
CLKB => nclk.clk,
|
||||
DIA => ramb_data_in(w)(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIB => ramb_data_in(w)(x*ramb_base_width to x*ramb_base_width+31),
|
||||
DIPA => ramb_data_in(w)(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
DIPB => ramb_data_in(w)(x*ramb_base_width+32 to x*ramb_base_width+35),
|
||||
ENA => rd_act,
|
||||
ENB => wr_act,
|
||||
SSRA => nclk.sreset,
|
||||
SSRB => nclk.sreset,
|
||||
WEA => tidn,
|
||||
WEB => wr_way(w)
|
||||
);
|
||||
|
||||
end generate ax;
|
||||
|
||||
data_out(w*port_bitwidth to ((w+1)*port_bitwidth)-1 ) <= tconv( ramb_data_out(w)(0 to port_bitwidth-1) );
|
||||
|
||||
end generate aw;
|
||||
|
||||
abst_scan_out <= tidn & tidn;
|
||||
time_scan_out <= tidn;
|
||||
repr_scan_out <= tidn;
|
||||
|
||||
bo_pc_failout <= tidn & tidn;
|
||||
bo_pc_diagloop <= tidn & tidn;
|
||||
|
||||
unused <= or_reduce( sg_0 & abst_sl_thold_0 & ary_nsl_thold_0
|
||||
& time_sl_thold_0 & repr_sl_thold_0 & clkoff_dc_b & ccflush_dc
|
||||
& scan_dis_dc_b & scan_diag_dc & d_mode_dc & mpw1_dc_b & mpw2_dc_b
|
||||
& delay_lclkr_dc & wr_abst_act & rd0_abst_act & abist_di
|
||||
& abist_bw_odd & abist_bw_even & abist_wr_adr & abist_rd0_adr
|
||||
& tc_lbist_ary_wrt_thru_dc & abist_ena_1 & abist_g8t_rd0_comp_ena
|
||||
& abist_raw_dc_b & obs0_abist_cmp & abst_scan_in & time_scan_in
|
||||
& repr_scan_in & lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
end generate a;
|
||||
|
||||
|
||||
end tri_64x36_4w_1r1w;
|
||||
|
@ -0,0 +1,381 @@
|
||||
-- © 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,ibm,support,tri;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_64x42_4w_1r1w is
|
||||
generic(
|
||||
expand_type : integer := 1);
|
||||
port (
|
||||
vdd : INOUT power_logic;
|
||||
vcs : INOUT power_logic;
|
||||
gnd : INOUT power_logic;
|
||||
|
||||
nclk : in clk_logic;
|
||||
sg_0 : in std_ulogic;
|
||||
abst_sl_thold_0 : in std_ulogic;
|
||||
ary_nsl_thold_0 : in std_ulogic;
|
||||
time_sl_thold_0 : in std_ulogic;
|
||||
repr_sl_thold_0 : in std_ulogic;
|
||||
|
||||
rd0_act : in std_ulogic;
|
||||
rd0_adr : in std_ulogic_vector(0 to 5);
|
||||
do0 : out std_ulogic_vector(0 to 167);
|
||||
|
||||
wr_way : in std_ulogic_vector (0 to 3);
|
||||
wr_act : in std_ulogic;
|
||||
wr_adr : in std_ulogic_vector(0 to 5);
|
||||
di : in std_ulogic_vector(0 to 167);
|
||||
|
||||
abst_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic;
|
||||
time_scan_in : in std_ulogic;
|
||||
time_scan_out : out std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
ary0_clkoff_dc_b : in std_ulogic;
|
||||
ary0_d_mode_dc : in std_ulogic;
|
||||
ary0_mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
ary0_mpw2_dc_b : in std_ulogic;
|
||||
ary0_delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
ary1_clkoff_dc_b : in std_ulogic;
|
||||
ary1_d_mode_dc : in std_ulogic;
|
||||
ary1_mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
ary1_mpw2_dc_b : in std_ulogic;
|
||||
ary1_delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic_vector(0 to 1);
|
||||
bo_pc_failout : out std_ulogic_vector(0 to 1);
|
||||
bo_pc_diagloop : out std_ulogic_vector(0 to 1);
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
|
||||
abist_di : in std_ulogic_vector(0 to 3);
|
||||
abist_bw_odd : in std_ulogic;
|
||||
abist_bw_even : in std_ulogic;
|
||||
abist_wr_adr : in std_ulogic_vector(0 to 5);
|
||||
wr_abst_act : in std_ulogic;
|
||||
abist_rd0_adr : in std_ulogic_vector(0 to 5);
|
||||
rd0_abst_act : in std_ulogic;
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_ena_1 : in std_ulogic;
|
||||
abist_g8t_rd0_comp_ena : in std_ulogic;
|
||||
abist_raw_dc_b : in std_ulogic;
|
||||
obs0_abist_cmp : in std_ulogic_vector(0 to 3)
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
end entity tri_64x42_4w_1r1w;
|
||||
architecture tri_64x42_4w_1r1w of tri_64x42_4w_1r1w is
|
||||
|
||||
begin
|
||||
|
||||
a : if expand_type = 1 generate
|
||||
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal clk, clk2x : std_ulogic;
|
||||
signal addra, addrb : std_ulogic_vector(0 to 8);
|
||||
signal wea0, wea1, wea2, wea3 : std_ulogic;
|
||||
signal web0, web1, web2, web3 : std_ulogic;
|
||||
signal bdo0, bdo1, bdo2, bdo3 : std_logic_vector(0 to 71);
|
||||
signal bdi0, bdi1, bdi2, bdi3 : std_ulogic_vector(0 to 71);
|
||||
signal sreset : std_ulogic;
|
||||
signal tidn : std_ulogic_vector(36 to 65);
|
||||
signal reset_q : std_ulogic;
|
||||
signal gate_fq, gate_d : std_ulogic;
|
||||
signal bdo_d, bdo_fq : std_ulogic_vector(0 to 167);
|
||||
|
||||
signal toggle_d : std_ulogic;
|
||||
signal toggle_q : std_ulogic;
|
||||
signal toggle2x_d : std_ulogic;
|
||||
signal toggle2x_q : std_ulogic;
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
tidn <= (others=>'0');
|
||||
clk <= nclk.clk;
|
||||
clk2x <= nclk.clk2x;
|
||||
sreset<= nclk.sreset;
|
||||
|
||||
rlatch: process (clk) begin
|
||||
if(rising_edge(clk)) then
|
||||
reset_q <= sreset after 10 ps;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
tlatch: process (nclk.clk,reset_q)
|
||||
begin
|
||||
if(rising_edge(nclk.clk)) then
|
||||
if (reset_q = '1') then
|
||||
toggle_q <= '1';
|
||||
else
|
||||
toggle_q <= toggle_d;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
flatch: process (nclk.clk2x)
|
||||
begin
|
||||
if(rising_edge(nclk.clk2x)) then
|
||||
toggle2x_q <= toggle2x_d;
|
||||
gate_fq <= gate_d;
|
||||
bdo_fq <= bdo_d;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
toggle_d <= not toggle_q;
|
||||
toggle2x_d <= toggle_q;
|
||||
|
||||
gate_d <= not(toggle_q xor toggle2x_q);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bdi0 <= di(0 to 35) & tidn(36 to 65) & di(36 to 41);
|
||||
bdi1 <= di(42 to 77) & tidn(36 to 65) & di(78 to 83);
|
||||
bdi2 <= di(84 to 119) & tidn(36 to 65) & di(120 to 125);
|
||||
bdi3 <= di(126 to 161) & tidn(36 to 65) & di(162 to 167);
|
||||
|
||||
bdo_d(0 to 41) <= std_ulogic_vector(bdo0(0 to 35) & bdo0(66 to 71));
|
||||
bdo_d(42 to 83) <= std_ulogic_vector(bdo1(0 to 35) & bdo1(66 to 71));
|
||||
bdo_d(84 to 125) <= std_ulogic_vector(bdo2(0 to 35) & bdo2(66 to 71));
|
||||
bdo_d(126 to 167) <= std_ulogic_vector(bdo3(0 to 35) & bdo3(66 to 71));
|
||||
|
||||
do0 <= bdo_fq;
|
||||
|
||||
wea0 <= (wr_act and gate_fq and wr_way(0)) after 10 ps;
|
||||
web0 <= (wr_act and gate_fq and wr_way(0)) after 10 ps;
|
||||
wea1 <= (wr_act and gate_fq and wr_way(1)) after 10 ps;
|
||||
web1 <= (wr_act and gate_fq and wr_way(1)) after 10 ps;
|
||||
wea2 <= (wr_act and gate_fq and wr_way(2)) after 10 ps;
|
||||
web2 <= (wr_act and gate_fq and wr_way(2)) after 10 ps;
|
||||
wea3 <= (wr_act and gate_fq and wr_way(3)) after 10 ps;
|
||||
web3 <= (wr_act and gate_fq and wr_way(3)) after 10 ps;
|
||||
|
||||
with gate_fq select
|
||||
addra <= ("00" & wr_adr & '0') after 10 ps when '1',
|
||||
("00" & rd0_adr & '0') after 10 ps when others;
|
||||
|
||||
with gate_fq select
|
||||
addrb <= ("00" & wr_adr & '1') after 10 ps when '1',
|
||||
("00" & rd0_adr & '1') after 10 ps when others;
|
||||
|
||||
bram0a : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => sreset,
|
||||
ssrb => sreset,
|
||||
addra => std_logic_vector(addra),
|
||||
addrb => std_logic_vector(addrb),
|
||||
dia => std_logic_vector(bdi0(00 to 31)),
|
||||
dipa => std_logic_vector(bdi0(32 to 35)),
|
||||
dib => std_logic_vector(bdi0(36 to 67)),
|
||||
dipb => std_logic_vector(bdi0(68 to 71)),
|
||||
doa => bdo0(00 to 31),
|
||||
dopa => bdo0(32 to 35),
|
||||
dob => bdo0(36 to 67),
|
||||
dopb => bdo0(68 to 71),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea0,
|
||||
web => web0
|
||||
);
|
||||
|
||||
bram0b : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => sreset,
|
||||
ssrb => sreset,
|
||||
addra => std_logic_vector(addra),
|
||||
addrb => std_logic_vector(addrb),
|
||||
dia => std_logic_vector(bdi1(00 to 31)),
|
||||
dipa => std_logic_vector(bdi1(32 to 35)),
|
||||
dib => std_logic_vector(bdi1(36 to 67)),
|
||||
dipb => std_logic_vector(bdi1(68 to 71)),
|
||||
doa => bdo1(00 to 31),
|
||||
dopa => bdo1(32 to 35),
|
||||
dob => bdo1(36 to 67),
|
||||
dopb => bdo1(68 to 71),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea1,
|
||||
web => web1
|
||||
);
|
||||
|
||||
bram0c : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => sreset,
|
||||
ssrb => sreset,
|
||||
addra => std_logic_vector(addra),
|
||||
addrb => std_logic_vector(addrb),
|
||||
dia => std_logic_vector(bdi2(00 to 31)),
|
||||
dipa => std_logic_vector(bdi2(32 to 35)),
|
||||
dib => std_logic_vector(bdi2(36 to 67)),
|
||||
dipb => std_logic_vector(bdi2(68 to 71)),
|
||||
doa => bdo2(00 to 31),
|
||||
dopa => bdo2(32 to 35),
|
||||
dob => bdo2(36 to 67),
|
||||
dopb => bdo2(68 to 71),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea2,
|
||||
web => web2
|
||||
);
|
||||
|
||||
|
||||
bram0d : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => sreset,
|
||||
ssrb => sreset,
|
||||
addra => std_logic_vector(addra),
|
||||
addrb => std_logic_vector(addrb),
|
||||
dia => std_logic_vector(bdi3(00 to 31)),
|
||||
dipa => std_logic_vector(bdi3(32 to 35)),
|
||||
dib => std_logic_vector(bdi3(36 to 67)),
|
||||
dipb => std_logic_vector(bdi3(68 to 71)),
|
||||
doa => bdo3(00 to 31),
|
||||
dopa => bdo3(32 to 35),
|
||||
dob => bdo3(36 to 67),
|
||||
dopb => bdo3(68 to 71),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea3,
|
||||
web => web3
|
||||
);
|
||||
|
||||
|
||||
abst_scan_out <= abst_scan_in;
|
||||
time_scan_out <= time_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
|
||||
bo_pc_failout <= "00";
|
||||
bo_pc_diagloop <= "00";
|
||||
|
||||
unused <= or_reduce( sg_0 & abst_sl_thold_0 & ary_nsl_thold_0 & time_sl_thold_0 & repr_sl_thold_0
|
||||
& ary0_clkoff_dc_b & ary0_d_mode_dc & ary0_mpw1_dc_b & ary0_mpw2_dc_b
|
||||
& ary0_delay_lclkr_dc & ccflush_dc & scan_dis_dc_b & scan_diag_dc
|
||||
& ary1_clkoff_dc_b & ary1_d_mode_dc & ary1_mpw1_dc_b & ary1_mpw2_dc_b
|
||||
& ary1_delay_lclkr_dc & abist_di
|
||||
& abist_bw_odd & abist_bw_even & abist_wr_adr & abist_rd0_adr
|
||||
& wr_abst_act & rd0_abst_act
|
||||
& tc_lbist_ary_wrt_thru_dc & abist_ena_1 & abist_g8t_rd0_comp_ena
|
||||
& abist_raw_dc_b & obs0_abist_cmp & rd0_act
|
||||
& std_ulogic_vector( bdo0(36 to 65) ) & std_ulogic_vector( bdo1(36 to 65) )
|
||||
& std_ulogic_vector( bdo2(36 to 65) ) & std_ulogic_vector( bdo3(36 to 65) )
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
end generate;
|
||||
|
||||
end architecture tri_64x42_4w_1r1w;
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,285 @@
|
||||
-- © 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,ibm,support,tri;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
use support.power_logic_pkg.all;
|
||||
use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_64x72_1r1w is
|
||||
generic(
|
||||
expand_type : integer := 1;
|
||||
regsize : integer := 64);
|
||||
port (
|
||||
vdd : INOUT power_logic;
|
||||
vcs : INOUT power_logic;
|
||||
gnd : INOUT power_logic;
|
||||
|
||||
nclk : in clk_logic;
|
||||
sg_0 : in std_ulogic;
|
||||
abst_sl_thold_0 : in std_ulogic;
|
||||
ary_nsl_thold_0 : in std_ulogic;
|
||||
time_sl_thold_0 : in std_ulogic;
|
||||
repr_sl_thold_0 : in std_ulogic;
|
||||
|
||||
rd0_act : in std_ulogic;
|
||||
rd0_adr : in std_ulogic_vector(0 to 5);
|
||||
do0 : out std_ulogic_vector(64-regsize to 72-(64/regsize));
|
||||
|
||||
wr_act : in std_ulogic;
|
||||
wr_adr : in std_ulogic_vector(0 to 5);
|
||||
di : in std_ulogic_vector(64-regsize to 72-(64/regsize));
|
||||
|
||||
abst_scan_in : in std_ulogic;
|
||||
abst_scan_out : out std_ulogic;
|
||||
time_scan_in : in std_ulogic;
|
||||
time_scan_out : out std_ulogic;
|
||||
repr_scan_in : in std_ulogic;
|
||||
repr_scan_out : out std_ulogic;
|
||||
|
||||
scan_dis_dc_b : in std_ulogic;
|
||||
scan_diag_dc : in std_ulogic;
|
||||
ccflush_dc : in std_ulogic;
|
||||
clkoff_dc_b : in std_ulogic;
|
||||
d_mode_dc : in std_ulogic;
|
||||
mpw1_dc_b : in std_ulogic_vector(0 to 4);
|
||||
mpw2_dc_b : in std_ulogic;
|
||||
delay_lclkr_dc : in std_ulogic_vector(0 to 4);
|
||||
|
||||
lcb_bolt_sl_thold_0 : in std_ulogic;
|
||||
pc_bo_enable_2 : in std_ulogic;
|
||||
pc_bo_reset : in std_ulogic;
|
||||
pc_bo_unload : in std_ulogic;
|
||||
pc_bo_repair : in std_ulogic;
|
||||
pc_bo_shdata : in std_ulogic;
|
||||
pc_bo_select : in std_ulogic;
|
||||
bo_pc_failout : out std_ulogic;
|
||||
bo_pc_diagloop : out std_ulogic;
|
||||
tri_lcb_mpw1_dc_b : in std_ulogic;
|
||||
tri_lcb_mpw2_dc_b : in std_ulogic;
|
||||
tri_lcb_delay_lclkr_dc : in std_ulogic;
|
||||
tri_lcb_clkoff_dc_b : in std_ulogic;
|
||||
tri_lcb_act_dis_dc : in std_ulogic;
|
||||
|
||||
abist_di : in std_ulogic_vector(0 to 3);
|
||||
abist_bw_odd : in std_ulogic;
|
||||
abist_bw_even : in std_ulogic;
|
||||
abist_wr_adr : in std_ulogic_vector(0 to 5);
|
||||
wr_abst_act : in std_ulogic;
|
||||
abist_rd0_adr : in std_ulogic_vector(0 to 5);
|
||||
rd0_abst_act : in std_ulogic;
|
||||
tc_lbist_ary_wrt_thru_dc : in std_ulogic;
|
||||
abist_ena_1 : in std_ulogic;
|
||||
abist_g8t_rd0_comp_ena : in std_ulogic;
|
||||
abist_raw_dc_b : in std_ulogic;
|
||||
obs0_abist_cmp : in std_ulogic_vector(0 to 3)
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
|
||||
end entity tri_64x72_1r1w;
|
||||
architecture tri_64x72_1r1w of tri_64x72_1r1w is
|
||||
|
||||
begin
|
||||
|
||||
a : if expand_type = 1 generate
|
||||
|
||||
component RAMB16_S36_S36
|
||||
-- pragma translate_off
|
||||
generic(
|
||||
SIM_COLLISION_CHECK : string := "none");
|
||||
-- pragma translate_on
|
||||
port(
|
||||
DOA : out std_logic_vector(31 downto 0);
|
||||
DOB : out std_logic_vector(31 downto 0);
|
||||
DOPA : out std_logic_vector(3 downto 0);
|
||||
DOPB : out std_logic_vector(3 downto 0);
|
||||
ADDRA : in std_logic_vector(8 downto 0);
|
||||
ADDRB : in std_logic_vector(8 downto 0);
|
||||
CLKA : in std_ulogic;
|
||||
CLKB : in std_ulogic;
|
||||
DIA : in std_logic_vector(31 downto 0);
|
||||
DIB : in std_logic_vector(31 downto 0);
|
||||
DIPA : in std_logic_vector(3 downto 0);
|
||||
DIPB : in std_logic_vector(3 downto 0);
|
||||
ENA : in std_ulogic;
|
||||
ENB : in std_ulogic;
|
||||
SSRA : in std_ulogic;
|
||||
SSRB : in std_ulogic;
|
||||
WEA : in std_ulogic;
|
||||
WEB : in std_ulogic);
|
||||
end component;
|
||||
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
signal clk, clk2x : std_ulogic;
|
||||
signal addra, addrb : std_ulogic_vector(0 to 8);
|
||||
signal wea, web : std_ulogic;
|
||||
signal bdo : std_logic_vector(0 to 71);
|
||||
signal bdi : std_ulogic_vector(0 to 71);
|
||||
signal sreset : std_ulogic;
|
||||
signal tidn : std_ulogic_vector(0 to 71);
|
||||
signal reset_q : std_ulogic;
|
||||
signal gate_fq, gate_d : std_ulogic;
|
||||
signal bdo_d, bdo_fq : std_ulogic_vector(64-regsize to 72-(64/regsize));
|
||||
|
||||
signal toggle_d : std_ulogic;
|
||||
signal toggle_q : std_ulogic;
|
||||
signal toggle2x_d : std_ulogic;
|
||||
signal toggle2x_q : std_ulogic;
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
tidn <= (others=>'0');
|
||||
clk <= nclk.clk;
|
||||
clk2x <= nclk.clk2x;
|
||||
sreset<= nclk.sreset;
|
||||
|
||||
rlatch: process (clk) begin
|
||||
if(rising_edge(clk)) then
|
||||
reset_q <= sreset after 10 ps;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
tlatch: process (nclk.clk,reset_q)
|
||||
begin
|
||||
if(rising_edge(nclk.clk)) then
|
||||
if (reset_q = '1') then
|
||||
toggle_q <= '1';
|
||||
else
|
||||
toggle_q <= toggle_d;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
flatch: process (nclk.clk2x)
|
||||
begin
|
||||
if(rising_edge(nclk.clk2x)) then
|
||||
toggle2x_q <= toggle2x_d;
|
||||
gate_fq <= gate_d;
|
||||
bdo_fq <= bdo_d;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
toggle_d <= not toggle_q;
|
||||
toggle2x_d <= toggle_q;
|
||||
|
||||
gate_d <= not(toggle_q xor toggle2x_q);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
in32 : if regsize = 32 generate
|
||||
bdi <= tidn(0 to 31) & di(32 to 63) & di(64 to 70) & tidn(71);
|
||||
end generate;
|
||||
in64 : if regsize = 64 generate
|
||||
bdi <= di(0 to 71);
|
||||
end generate;
|
||||
|
||||
bdo_d <= std_ulogic_vector(bdo(64-regsize to 72-(64/regsize)));
|
||||
do0 <= bdo_fq;
|
||||
|
||||
wea <= (wr_act and gate_fq) after 10 ps;
|
||||
web <= (wr_act and gate_fq) after 10 ps;
|
||||
|
||||
with gate_fq select
|
||||
addra <= ("00" & wr_adr & '0') after 10 ps when '1',
|
||||
("00" & rd0_adr & '0') after 10 ps when others;
|
||||
|
||||
with gate_fq select
|
||||
addrb <= ("00" & wr_adr & '1') after 10 ps when '1',
|
||||
("00" & rd0_adr & '1') after 10 ps when others;
|
||||
|
||||
bram0a : ramb16_s36_s36
|
||||
-- pragma translate_off
|
||||
generic map(
|
||||
sim_collision_check => "none")
|
||||
-- pragma translate_on
|
||||
port map(
|
||||
clka => clk2x,
|
||||
clkb => clk2x,
|
||||
ssra => sreset,
|
||||
ssrb => sreset,
|
||||
addra => std_logic_vector(addra),
|
||||
addrb => std_logic_vector(addrb),
|
||||
dia => std_logic_vector(bdi(00 to 31)),
|
||||
dib => std_logic_vector(bdi(32 to 63)),
|
||||
dipa => std_logic_vector(bdi(64 to 67)),
|
||||
dipb => std_logic_vector(bdi(68 to 71)),
|
||||
doa => bdo(00 to 31),
|
||||
dob => bdo(32 to 63),
|
||||
dopa => bdo(64 to 67),
|
||||
dopb => bdo(68 to 71),
|
||||
ena => '1',
|
||||
enb => '1',
|
||||
wea => wea,
|
||||
web => web
|
||||
);
|
||||
|
||||
|
||||
abst_scan_out <= abst_scan_in;
|
||||
time_scan_out <= time_scan_in;
|
||||
repr_scan_out <= repr_scan_in;
|
||||
|
||||
bo_pc_failout <= '0';
|
||||
bo_pc_diagloop <= '0';
|
||||
|
||||
unused <= or_reduce( sg_0 & abst_sl_thold_0 & ary_nsl_thold_0 & time_sl_thold_0 & repr_sl_thold_0
|
||||
& scan_dis_dc_b & scan_diag_dc & ccflush_dc
|
||||
& clkoff_dc_b & d_mode_dc & mpw1_dc_b & mpw2_dc_b
|
||||
& delay_lclkr_dc & abist_di
|
||||
& abist_bw_odd & abist_bw_even & abist_wr_adr & abist_rd0_adr
|
||||
& wr_abst_act & rd0_abst_act
|
||||
& tc_lbist_ary_wrt_thru_dc & abist_ena_1 & abist_g8t_rd0_comp_ena
|
||||
& abist_raw_dc_b & obs0_abist_cmp & rd0_act & tidn
|
||||
& lcb_bolt_sl_thold_0 & pc_bo_enable_2 & pc_bo_reset
|
||||
& pc_bo_unload & pc_bo_repair & pc_bo_shdata & pc_bo_select
|
||||
& tri_lcb_mpw1_dc_b & tri_lcb_mpw2_dc_b & tri_lcb_delay_lclkr_dc
|
||||
& tri_lcb_clkoff_dc_b & tri_lcb_act_dis_dc );
|
||||
|
||||
|
||||
end generate;
|
||||
|
||||
end architecture tri_64x72_1r1w;
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,122 @@
|
||||
-- © 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;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_aoi22_nlats is
|
||||
|
||||
generic (
|
||||
offset : natural range 0 to 65535 := 0;
|
||||
width : positive range 1 to 65536 := 1 ;
|
||||
init : std_ulogic_vector := "0" ;
|
||||
synthclonedlatch : string := "" ;
|
||||
btr : string := "NLL0001_X2_A12TH" ;
|
||||
needs_sreset : integer := 1 ;
|
||||
expand_type : integer := 1 );
|
||||
port (
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
LCLK : in clk_logic;
|
||||
D1CLK : in std_ulogic;
|
||||
D2CLK : in std_ulogic;
|
||||
SCANIN : in std_ulogic_vector(offset to offset+width-1);
|
||||
SCANOUT : out std_ulogic_vector(offset to offset+width-1);
|
||||
A1 : in std_ulogic_vector(offset to offset+width-1);
|
||||
A2 : in std_ulogic_vector(offset to offset+width-1);
|
||||
B1 : in std_ulogic_vector(offset to offset+width-1);
|
||||
B2 : in std_ulogic_vector(offset to offset+width-1);
|
||||
QB : out std_ulogic_vector(offset to offset+width-1)
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_aoi22_nlats;
|
||||
|
||||
architecture tri_aoi22_nlats of tri_aoi22_nlats is
|
||||
|
||||
begin
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
constant init_v : std_ulogic_vector(0 to (init'length + width-1)):=init & (0 to width-1=>'0');
|
||||
constant zeros : std_ulogic_vector(0 to width-1) := (0 to width-1 => '0');
|
||||
|
||||
signal sreset : std_ulogic;
|
||||
signal int_din : std_ulogic_vector(0 to width-1);
|
||||
signal int_dout : std_ulogic_vector(0 to width-1) := init_v(0 to width-1);
|
||||
signal vact, vact_b : std_ulogic_vector(0 to width-1);
|
||||
signal vsreset, vsreset_b : std_ulogic_vector(0 to width-1);
|
||||
signal vthold, vthold_b : std_ulogic_vector(0 to width-1);
|
||||
signal din : std_ulogic_vector(0 to width-1);
|
||||
signal unused : std_ulogic_vector(0 to width-1);
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
rst: if needs_sreset = 1 generate
|
||||
sreset <= LCLK.sreset;
|
||||
end generate rst;
|
||||
no_rst: if needs_sreset /=1 generate
|
||||
sreset <= '0';
|
||||
end generate no_rst;
|
||||
|
||||
vsreset <= (0 to width-1 => sreset);
|
||||
vsreset_b <= (0 to width-1 => not sreset);
|
||||
din <= (A1 and A2) or (B1 and B2) ;
|
||||
int_din <= (vsreset_b and din) or
|
||||
(vsreset and init_v(0 to width-1));
|
||||
|
||||
vact <= (0 to width-1 => D1CLK);
|
||||
vact_b <= (0 to width-1 => not D1CLK);
|
||||
|
||||
vthold_b <= (0 to width-1 => D2CLK);
|
||||
vthold <= (0 to width-1 => not D2CLK);
|
||||
|
||||
l: process (LCLK, vact, int_din, vact_b, int_dout, vsreset, vsreset_b, vthold_b, vthold)
|
||||
begin
|
||||
if rising_edge(LCLK.clk) then
|
||||
int_dout <= (((vact and vthold_b) or vsreset) and int_din) or
|
||||
(((vact_b or vthold) and vsreset_b) and int_dout);
|
||||
end if;
|
||||
end process l;
|
||||
QB <= not int_dout;
|
||||
SCANOUT <= zeros;
|
||||
|
||||
unused <= SCANIN;
|
||||
end generate a;
|
||||
|
||||
end tri_aoi22_nlats;
|
||||
|
@ -0,0 +1,133 @@
|
||||
-- © 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;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_aoi22_nlats_wlcb is
|
||||
|
||||
generic (
|
||||
width : integer := 4;
|
||||
offset : integer range 0 to 65535 := 0 ;
|
||||
init : integer := 0;
|
||||
ibuf : boolean := false;
|
||||
dualscan : string := "";
|
||||
needs_sreset: integer := 1 ;
|
||||
expand_type : integer := 1 ;
|
||||
synthclonedlatch : string := "" ;
|
||||
btr : string := "NLL0001_X2_A12TH" );
|
||||
|
||||
port (
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
act : in std_ulogic := '1';
|
||||
forcee : in std_ulogic := '0';
|
||||
thold_b : in std_ulogic := '1';
|
||||
d_mode : in std_ulogic := '0';
|
||||
sg : in std_ulogic := '0';
|
||||
delay_lclkr : in std_ulogic := '0';
|
||||
mpw1_b : in std_ulogic := '1';
|
||||
mpw2_b : in std_ulogic := '1';
|
||||
scin : in std_ulogic_vector(offset to offset+width-1);
|
||||
scout : out std_ulogic_vector(offset to offset+width-1);
|
||||
A1 : in std_ulogic_vector(offset to offset+width-1);
|
||||
A2 : in std_ulogic_vector(offset to offset+width-1);
|
||||
B1 : in std_ulogic_vector(offset to offset+width-1);
|
||||
B2 : in std_ulogic_vector(offset to offset+width-1);
|
||||
QB : out std_ulogic_vector(offset to offset+width-1));
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_aoi22_nlats_wlcb;
|
||||
|
||||
architecture tri_aoi22_nlats_wlcb of tri_aoi22_nlats_wlcb is
|
||||
|
||||
constant init_v : std_ulogic_vector(0 to width-1) := std_ulogic_vector( to_unsigned( init, width ) );
|
||||
constant zeros : std_ulogic_vector(0 to width-1) := (0 to width-1 => '0');
|
||||
|
||||
begin
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
signal sreset : std_ulogic;
|
||||
signal int_din, din : std_ulogic_vector(0 to width-1);
|
||||
signal int_dout : std_ulogic_vector(0 to width-1) := init_v;
|
||||
signal vact, vact_b : std_ulogic_vector(0 to width-1);
|
||||
signal vsreset, vsreset_b : std_ulogic_vector(0 to width-1);
|
||||
signal vthold, vthold_b : std_ulogic_vector(0 to width-1);
|
||||
signal unused : std_ulogic_vector(0 to width);
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
rst: if needs_sreset = 1 generate
|
||||
sreset <= nclk.sreset;
|
||||
end generate rst;
|
||||
no_rst: if needs_sreset /=1 generate
|
||||
sreset <= '0';
|
||||
end generate no_rst;
|
||||
|
||||
vsreset <= (0 to width-1 => sreset);
|
||||
vsreset_b <= (0 to width-1 => not sreset);
|
||||
|
||||
din <= (A1 and A2) or (B1 and B2) ;
|
||||
int_din <= (vsreset_b and din) or
|
||||
(vsreset and init_v);
|
||||
|
||||
vact <= (0 to width-1 => (act or forcee));
|
||||
vact_b <= (0 to width-1 => not (act or forcee));
|
||||
|
||||
vthold_b <= (0 to width-1 => thold_b);
|
||||
vthold <= (0 to width-1 => not thold_b);
|
||||
|
||||
l: process (nclk, vact, int_din, vact_b, int_dout, vsreset, vsreset_b, vthold_b, vthold)
|
||||
begin
|
||||
if rising_edge(nclk.clk) then
|
||||
int_dout <= (((vact and vthold_b) or vsreset) and int_din) or
|
||||
(((vact_b or vthold) and vsreset_b) and int_dout);
|
||||
end if;
|
||||
end process l;
|
||||
|
||||
QB <= not int_dout;
|
||||
|
||||
scout <= zeros;
|
||||
|
||||
unused(0) <= d_mode or sg or delay_lclkr or mpw1_b or mpw2_b;
|
||||
unused(1 to width) <= scin;
|
||||
end generate a;
|
||||
|
||||
end tri_aoi22_nlats_wlcb;
|
||||
|
@ -0,0 +1,501 @@
|
||||
-- © 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 );
|
||||
port(
|
||||
gnd : inout power_logic;
|
||||
vdd : inout power_logic;
|
||||
vcs : inout power_logic;
|
||||
|
||||
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);
|
||||
|
||||
pc_iu_bo_enable_2 : in std_ulogic;
|
||||
pc_iu_bo_reset : in std_ulogic;
|
||||
pc_iu_bo_unload : in std_ulogic;
|
||||
pc_iu_bo_repair : in std_ulogic;
|
||||
pc_iu_bo_shdata : in std_ulogic;
|
||||
pc_iu_bo_select : in std_ulogic;
|
||||
iu_pc_bo_fail : out std_ulogic;
|
||||
iu_pc_bo_diagout : out std_ulogic;
|
||||
|
||||
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
|
||||
|
||||
|
||||
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";
|
||||
|
||||
|
||||
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') ;
|
||||
|
||||
|
||||
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);
|
||||
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
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);
|
||||
|
||||
|
||||
|
||||
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);
|
||||
|
||||
|
||||
|
||||
siv(0 to scan_right) <= func_scan_in & sov(0 to scan_right-1);
|
||||
func_scan_out <= sov(scan_right);
|
||||
|
||||
|
||||
end tri_bht;
|
@ -0,0 +1,191 @@
|
||||
-- © 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;
|
||||
use ieee.numeric_std.all;
|
||||
library ibm;
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_boltreg_p is
|
||||
|
||||
generic (
|
||||
width : integer := 4;
|
||||
offset : integer range 0 to 65535 := 0 ;
|
||||
init : integer := 0;
|
||||
ibuf : boolean := false;
|
||||
dualscan : string := "";
|
||||
needs_sreset: integer := 1 ;
|
||||
expand_type : integer := 1 );
|
||||
|
||||
port (
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
nclk : in clk_logic;
|
||||
act : in std_ulogic := '1';
|
||||
forcee : in std_ulogic := '0';
|
||||
thold_b : in std_ulogic := '1';
|
||||
d_mode : in std_ulogic := '0';
|
||||
sg : in std_ulogic := '0';
|
||||
delay_lclkr : in std_ulogic := '0';
|
||||
mpw1_b : in std_ulogic := '1';
|
||||
mpw2_b : in std_ulogic := '1';
|
||||
scin : in std_ulogic_vector(offset to offset+width-1);
|
||||
din : in std_ulogic_vector(offset to offset+width-1);
|
||||
scout : out std_ulogic_vector(offset to offset+width-1);
|
||||
dout : out std_ulogic_vector(offset to offset+width-1) );
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end entity tri_boltreg_p;
|
||||
|
||||
architecture tri_boltreg_p of tri_boltreg_p is
|
||||
|
||||
constant init_v : std_ulogic_vector(0 to width-1) := std_ulogic_vector( to_unsigned( init, width ) );
|
||||
constant zeros : std_ulogic_vector(0 to width-1) := (0 to width-1 => '0');
|
||||
|
||||
begin
|
||||
|
||||
-- synopsys translate_off
|
||||
um: if expand_type = 0 generate
|
||||
component c_rlmreg_p
|
||||
generic ( width : positive := 4 ;
|
||||
init : std_ulogic_vector := "0";
|
||||
dualscan : string := ""
|
||||
);
|
||||
port (
|
||||
nclk : in std_ulogic;
|
||||
act : in std_ulogic;
|
||||
thold_b : in std_ulogic;
|
||||
sg : in std_ulogic;
|
||||
scin : in std_ulogic_vector(0 to width-1);
|
||||
din : in std_ulogic_vector(0 to width-1);
|
||||
dout : out std_ulogic_vector(0 to width-1);
|
||||
scout : out std_ulogic_vector(0 to width-1)
|
||||
);
|
||||
end component;
|
||||
signal scanin_inv : std_ulogic_vector(0 to width-1);
|
||||
signal scanout_inv : std_ulogic_vector(0 to width-1);
|
||||
signal act_or_force : std_ulogic;
|
||||
signal din_buf : std_ulogic_vector(0 to width-1);
|
||||
signal dout_buf : std_ulogic_vector(0 to width-1);
|
||||
begin
|
||||
act_or_force <= act or forcee;
|
||||
|
||||
cib:
|
||||
if ibuf = true generate
|
||||
din_buf <= not din;
|
||||
dout <= not dout_buf;
|
||||
end generate cib;
|
||||
cnib:
|
||||
if ibuf = false generate
|
||||
din_buf <= din;
|
||||
dout <= dout_buf;
|
||||
end generate cnib;
|
||||
|
||||
l:c_rlmreg_p
|
||||
generic map (width => width, init => init_v, dualscan => dualscan)
|
||||
port map (
|
||||
nclk => nclk.clk,
|
||||
act => act_or_force,
|
||||
thold_b => thold_b,
|
||||
sg => sg,
|
||||
scin => scanin_inv,
|
||||
din => din_buf,
|
||||
scout => scanout_inv,
|
||||
dout => dout_buf);
|
||||
|
||||
scanin_inv <= scin xor init_v;
|
||||
scout <= scanout_inv xor init_v;
|
||||
end generate um;
|
||||
-- synopsys translate_on
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
signal sreset : std_ulogic;
|
||||
signal int_din : std_ulogic_vector(0 to width-1);
|
||||
signal int_dout : std_ulogic_vector(0 to width-1) := init_v;
|
||||
signal vact, vact_b : std_ulogic_vector(0 to width-1);
|
||||
signal vsreset, vsreset_b : std_ulogic_vector(0 to width-1);
|
||||
signal vthold, vthold_b : std_ulogic_vector(0 to width-1);
|
||||
signal unused : std_ulogic_vector(0 to width);
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
begin
|
||||
rst: if needs_sreset = 1 generate
|
||||
sreset <= nclk.sreset;
|
||||
end generate rst;
|
||||
no_rst: if needs_sreset /=1 generate
|
||||
sreset <= '0';
|
||||
end generate no_rst;
|
||||
|
||||
vsreset <= (0 to width-1 => sreset);
|
||||
vsreset_b <= (0 to width-1 => not sreset);
|
||||
|
||||
cib: if ibuf = true generate
|
||||
int_din <= (vsreset_b and not din) or
|
||||
(vsreset and init_v);
|
||||
end generate cib;
|
||||
cnib: if ibuf = false generate
|
||||
int_din <= (vsreset_b and din) or
|
||||
(vsreset and init_v);
|
||||
end generate cnib;
|
||||
|
||||
vact <= (0 to width-1 => (act or forcee));
|
||||
vact_b <= (0 to width-1 => not (act or forcee));
|
||||
|
||||
vthold_b <= (0 to width-1 => thold_b);
|
||||
vthold <= (0 to width-1 => not thold_b);
|
||||
|
||||
l: process (nclk, vact, int_din, vact_b, int_dout, vsreset, vsreset_b, vthold_b, vthold)
|
||||
begin
|
||||
if rising_edge(nclk.clk) then
|
||||
int_dout <= (((vact and vthold_b) or vsreset) and int_din) or
|
||||
(((vact_b or vthold) and vsreset_b) and int_dout);
|
||||
end if;
|
||||
end process l;
|
||||
|
||||
cob: if ibuf = true generate
|
||||
dout <= not int_dout;
|
||||
end generate cob;
|
||||
|
||||
cnob: if ibuf = false generate
|
||||
dout <= int_dout;
|
||||
end generate cnob;
|
||||
|
||||
scout <= zeros;
|
||||
|
||||
unused(0) <= d_mode or sg or delay_lclkr or mpw1_b or mpw2_b;
|
||||
unused(1 to width) <= scin;
|
||||
end generate a;
|
||||
|
||||
end tri_boltreg_p;
|
||||
|
@ -0,0 +1,145 @@
|
||||
-- © 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, ibm;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ibm.std_ulogic_support.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
library support;
|
||||
USE support.power_logic_pkg.all;
|
||||
library tri;
|
||||
use tri.tri_latches_pkg.all;
|
||||
|
||||
|
||||
entity tri_caa_prism_abist is
|
||||
generic(expand_type : integer := 1 );
|
||||
Port (vdd : INOUT power_logic;
|
||||
gnd : INOUT power_logic;
|
||||
nclk : In clk_logic;
|
||||
scan_dis_dc_b : In std_ulogic;
|
||||
lcb_clkoff_dc_b : In std_ulogic;
|
||||
lcb_mpw1_dc_b : In std_ulogic;
|
||||
lcb_mpw2_dc_b : In std_ulogic;
|
||||
lcb_delay_lclkr_dc : In std_ulogic;
|
||||
lcb_delay_lclkr_np_dc : In std_ulogic;
|
||||
lcb_act_dis_dc : In std_ulogic;
|
||||
lcb_d_mode_dc : In std_ulogic;
|
||||
gptr_thold : In std_ulogic;
|
||||
gptr_scan_in : In std_ulogic;
|
||||
gptr_scan_out : Out std_ulogic;
|
||||
abist_thold : In std_ulogic;
|
||||
abist_sg : In std_ulogic;
|
||||
abist_scan_in : In std_ulogic;
|
||||
abist_scan_out : Out std_ulogic;
|
||||
abist_done_in_dc : In std_ulogic;
|
||||
abist_done_out_dc : Out std_ulogic;
|
||||
abist_mode_dc : In std_ulogic;
|
||||
abist_start_test : In std_ulogic;
|
||||
lbist_mode_dc : In std_ulogic;
|
||||
lbist_ac_mode_dc : In std_ulogic;
|
||||
abist_waddr_0 : Out std_ulogic_vector(0 to 9);
|
||||
abist_waddr_1 : Out std_ulogic_vector(0 to 9);
|
||||
abist_grf_wenb_0 : Out std_ulogic;
|
||||
abist_grf_wenb_1 : Out std_ulogic;
|
||||
abist_raddr_0 : Out std_ulogic_vector(0 to 9);
|
||||
abist_raddr_1 : Out std_ulogic_vector(0 to 9);
|
||||
abist_grf_renb_0 : Out std_ulogic;
|
||||
abist_grf_renb_1 : Out std_ulogic;
|
||||
abist_g8t_wenb : Out std_ulogic;
|
||||
abist_g8t1p_renb_0 : Out std_ulogic;
|
||||
abist_g6t_r_wb : Out std_ulogic;
|
||||
abist_di_g6t_2r : Out std_ulogic_vector(0 to 3);
|
||||
abist_di_0 : Out std_ulogic_vector(0 to 3);
|
||||
abist_di_1 : Out std_ulogic_vector(0 to 3);
|
||||
abist_dcomp : Out std_ulogic_vector(0 to 3);
|
||||
abist_dcomp_g6t_2r : Out std_ulogic_vector(0 to 3);
|
||||
abist_bw_0 : Out std_ulogic;
|
||||
abist_bw_1 : Out std_ulogic;
|
||||
abist_wl32_g8t_comp_ena : Out std_ulogic;
|
||||
abist_wl64_g8t_comp_ena : Out std_ulogic;
|
||||
abist_wl128_g8t_comp_ena : Out std_ulogic;
|
||||
abist_wl144_comp_ena : Out std_ulogic;
|
||||
abist_wl256_comp_ena : Out std_ulogic;
|
||||
abist_wl512_comp_ena : Out std_ulogic;
|
||||
abist_ena_dc : Out std_ulogic;
|
||||
abist_raw_dc_b : Out std_ulogic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
|
||||
|
||||
|
||||
|
||||
-- synopsys translate_on
|
||||
end entity tri_caa_prism_abist;
|
||||
|
||||
architecture tri_caa_prism_abist of tri_caa_prism_abist is
|
||||
|
||||
signal unused : std_ulogic;
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
begin
|
||||
|
||||
gptr_scan_out <= '0';
|
||||
abist_scan_out <= '0';
|
||||
abist_done_out_dc <= '0';
|
||||
abist_waddr_0 <= "0000000000";
|
||||
abist_waddr_1 <= "0000000000";
|
||||
abist_grf_wenb_0 <= '0';
|
||||
abist_grf_wenb_1 <= '0';
|
||||
abist_raddr_0 <= "0000000000";
|
||||
abist_raddr_1 <= "0000000000";
|
||||
abist_grf_renb_0 <= '0';
|
||||
abist_grf_renb_1 <= '0';
|
||||
abist_g8t_wenb <= '0';
|
||||
abist_g8t1p_renb_0 <= '0';
|
||||
abist_g6t_r_wb <= '0';
|
||||
abist_di_g6t_2r <= "0000";
|
||||
abist_di_0 <= "0000";
|
||||
abist_di_1 <= "0000";
|
||||
abist_dcomp <= "0000";
|
||||
abist_dcomp_g6t_2r <= "0000";
|
||||
abist_bw_0 <= '0';
|
||||
abist_bw_1 <= '0';
|
||||
abist_wl32_g8t_comp_ena <= '0';
|
||||
abist_wl64_g8t_comp_ena <= '0';
|
||||
abist_wl128_g8t_comp_ena <= '0';
|
||||
abist_wl144_comp_ena <= '0';
|
||||
abist_wl256_comp_ena <= '0';
|
||||
abist_wl512_comp_ena <= '0';
|
||||
abist_ena_dc <= '0';
|
||||
abist_raw_dc_b <= '0';
|
||||
|
||||
unused <= or_reduce(scan_dis_dc_b & lcb_clkoff_dc_b & lcb_mpw1_dc_b & lcb_mpw2_dc_b &
|
||||
lcb_delay_lclkr_dc & lcb_delay_lclkr_np_dc & lcb_act_dis_dc & lcb_d_mode_dc &
|
||||
gptr_thold & gptr_scan_in & abist_thold & abist_sg & abist_scan_in &
|
||||
abist_done_in_dc & abist_mode_dc & abist_start_test &
|
||||
lbist_mode_dc & lbist_ac_mode_dc );
|
||||
|
||||
end tri_caa_prism_abist;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,396 @@
|
||||
-- © 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;
|
||||
|
||||
|
||||
entity tri_cam_16x143_1r1w1c_matchline is
|
||||
generic (have_xbit : integer := 1;
|
||||
num_pgsizes : integer := 5;
|
||||
have_cmpmask : integer := 1;
|
||||
cmpmask_width : integer := 4);
|
||||
|
||||
port(
|
||||
addr_in : in std_ulogic_vector(0 to 51);
|
||||
addr_enable : in std_ulogic_vector(0 to 1);
|
||||
comp_pgsize : in std_ulogic_vector(0 to 2);
|
||||
pgsize_enable : in std_ulogic;
|
||||
entry_size : in std_ulogic_vector(0 to 2);
|
||||
entry_cmpmask : in std_ulogic_vector(0 to cmpmask_width-1);
|
||||
entry_xbit : in std_ulogic;
|
||||
entry_xbitmask : in std_ulogic_vector(0 to cmpmask_width-1);
|
||||
entry_epn : in std_ulogic_vector(0 to 51);
|
||||
comp_class : in std_ulogic_vector(0 to 1);
|
||||
entry_class : in std_ulogic_vector(0 to 1);
|
||||
class_enable : in std_ulogic_vector(0 to 2);
|
||||
comp_extclass : in std_ulogic_vector(0 to 1);
|
||||
entry_extclass : in std_ulogic_vector(0 to 1);
|
||||
extclass_enable : in std_ulogic_vector(0 to 1);
|
||||
comp_state : in std_ulogic_vector(0 to 1);
|
||||
entry_hv : in std_ulogic;
|
||||
entry_ds : in std_ulogic;
|
||||
state_enable : in std_ulogic_vector(0 to 1);
|
||||
entry_thdid : in std_ulogic_vector(0 to 3);
|
||||
comp_thdid : in std_ulogic_vector(0 to 3);
|
||||
thdid_enable : in std_ulogic_vector(0 to 1);
|
||||
entry_pid : in std_ulogic_vector(0 to 7);
|
||||
comp_pid : in std_ulogic_vector(0 to 7);
|
||||
pid_enable : in std_ulogic;
|
||||
entry_v : in std_ulogic;
|
||||
comp_invalidate : in std_ulogic;
|
||||
|
||||
match : out std_ulogic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
end tri_cam_16x143_1r1w1c_matchline;
|
||||
|
||||
architecture tri_cam_16x143_1r1w1c_matchline of tri_cam_16x143_1r1w1c_matchline is
|
||||
|
||||
|
||||
|
||||
signal entry_epn_b : std_ulogic_vector(34 to 51);
|
||||
signal function_50_51 : std_ulogic;
|
||||
signal function_48_51 : std_ulogic;
|
||||
signal function_46_51 : std_ulogic;
|
||||
signal function_44_51 : std_ulogic;
|
||||
signal function_40_51 : std_ulogic;
|
||||
signal function_36_51 : std_ulogic;
|
||||
signal function_34_51 : std_ulogic;
|
||||
signal pgsize_eq_16K : std_ulogic;
|
||||
signal pgsize_eq_64K : std_ulogic;
|
||||
signal pgsize_eq_256K : std_ulogic;
|
||||
signal pgsize_eq_1M : std_ulogic;
|
||||
signal pgsize_eq_16M : std_ulogic;
|
||||
signal pgsize_eq_256M : std_ulogic;
|
||||
signal pgsize_eq_1G : std_ulogic;
|
||||
signal pgsize_gte_16K : std_ulogic;
|
||||
signal pgsize_gte_64K : std_ulogic;
|
||||
signal pgsize_gte_256K : std_ulogic;
|
||||
signal pgsize_gte_1M : std_ulogic;
|
||||
signal pgsize_gte_16M : std_ulogic;
|
||||
signal pgsize_gte_256M : std_ulogic;
|
||||
signal pgsize_gte_1G : std_ulogic;
|
||||
signal comp_or_34_35 : std_ulogic;
|
||||
signal comp_or_34_39 : std_ulogic;
|
||||
signal comp_or_36_39 : std_ulogic;
|
||||
signal comp_or_40_43 : std_ulogic;
|
||||
signal comp_or_44_45 : std_ulogic;
|
||||
signal comp_or_44_47 : std_ulogic;
|
||||
signal comp_or_46_47 : std_ulogic;
|
||||
signal comp_or_48_49 : std_ulogic;
|
||||
signal comp_or_48_51 : std_ulogic;
|
||||
signal comp_or_50_51 : std_ulogic;
|
||||
signal match_line : std_ulogic_vector(0 to 72);
|
||||
signal pgsize_match : std_ulogic;
|
||||
signal addr_match : std_ulogic;
|
||||
signal class_match : std_ulogic;
|
||||
signal extclass_match : std_ulogic;
|
||||
signal state_match : std_ulogic;
|
||||
signal thdid_match : std_ulogic;
|
||||
signal pid_match : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
match_line(0 to 72) <= not((entry_epn(0 to 51) & entry_size(0 to 2) & entry_class(0 to 1) & entry_extclass(0 to 1) & entry_hv & entry_ds & entry_pid(0 to 7) & entry_thdid(0 to 3)) xor
|
||||
(addr_in(0 to 51) & comp_pgsize(0 to 2) & comp_class(0 to 1) & comp_extclass(0 to 1) & comp_state(0 to 1) & comp_pid(0 to 7) & comp_thdid(0 to 3))
|
||||
);
|
||||
|
||||
numpgsz8 : if num_pgsizes = 8 generate
|
||||
|
||||
entry_epn_b(34 to 51) <= not(entry_epn(34 to 51));
|
||||
|
||||
|
||||
gen_nocmpmask80 : if have_cmpmask = 0 generate
|
||||
pgsize_eq_1G <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_256M <= ( entry_size(0) and entry_size(1) and not(entry_size(2)));
|
||||
pgsize_eq_16M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2) );
|
||||
pgsize_eq_1M <= ( entry_size(0) and not(entry_size(1)) and not(entry_size(2)));
|
||||
pgsize_eq_256K <= (not(entry_size(0)) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_64K <= (not(entry_size(0)) and entry_size(1) and not(entry_size(2)));
|
||||
pgsize_eq_16K <= (not(entry_size(0)) and not(entry_size(1)) and entry_size(2) );
|
||||
|
||||
pgsize_gte_1G <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_gte_256M <= ( entry_size(0) and entry_size(1) and not(entry_size(2))) or
|
||||
pgsize_gte_1G;
|
||||
pgsize_gte_16M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2) ) or
|
||||
pgsize_gte_256M;
|
||||
pgsize_gte_1M <= ( entry_size(0) and not(entry_size(1)) and not(entry_size(2))) or
|
||||
pgsize_gte_16M;
|
||||
pgsize_gte_256K <= (not(entry_size(0)) and entry_size(1) and entry_size(2) ) or
|
||||
pgsize_gte_1M;
|
||||
pgsize_gte_64K <= (not(entry_size(0)) and entry_size(1) and not(entry_size(2))) or
|
||||
pgsize_gte_256K;
|
||||
pgsize_gte_16K <= (not(entry_size(0)) and not(entry_size(1)) and entry_size(2) ) or
|
||||
pgsize_gte_64K;
|
||||
|
||||
end generate gen_nocmpmask80;
|
||||
|
||||
gen_cmpmask80 : if have_cmpmask = 1 generate
|
||||
pgsize_gte_1G <= not entry_cmpmask(0);
|
||||
pgsize_gte_256M <= not entry_cmpmask(1);
|
||||
pgsize_gte_16M <= not entry_cmpmask(2);
|
||||
pgsize_gte_1M <= not entry_cmpmask(3);
|
||||
pgsize_gte_256K <= not entry_cmpmask(4);
|
||||
pgsize_gte_64K <= not entry_cmpmask(5);
|
||||
pgsize_gte_16K <= not entry_cmpmask(6);
|
||||
|
||||
pgsize_eq_1G <= entry_xbitmask(0);
|
||||
pgsize_eq_256M <= entry_xbitmask(1);
|
||||
pgsize_eq_16M <= entry_xbitmask(2);
|
||||
pgsize_eq_1M <= entry_xbitmask(3);
|
||||
pgsize_eq_256K <= entry_xbitmask(4);
|
||||
pgsize_eq_64K <= entry_xbitmask(5);
|
||||
pgsize_eq_16K <= entry_xbitmask(6);
|
||||
end generate gen_cmpmask80;
|
||||
|
||||
gen_noxbit80 : if have_xbit = 0 generate
|
||||
function_34_51 <= '0';
|
||||
function_36_51 <= '0';
|
||||
function_40_51 <= '0';
|
||||
function_44_51 <= '0';
|
||||
function_46_51 <= '0';
|
||||
function_48_51 <= '0';
|
||||
function_50_51 <= '0';
|
||||
end generate gen_noxbit80;
|
||||
|
||||
gen_xbit80 : if have_xbit /= 0 generate
|
||||
function_34_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1G) or
|
||||
or_reduce(entry_epn_b(34 to 51) and addr_in(34 to 51));
|
||||
function_36_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_256M) or
|
||||
or_reduce(entry_epn_b(36 to 51) and addr_in(36 to 51));
|
||||
function_40_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16M) or
|
||||
or_reduce(entry_epn_b(40 to 51) and addr_in(40 to 51));
|
||||
function_44_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1M) or
|
||||
or_reduce(entry_epn_b(44 to 51) and addr_in(44 to 51));
|
||||
function_46_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_256K) or
|
||||
or_reduce(entry_epn_b(46 to 51) and addr_in(46 to 51));
|
||||
function_48_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_64K) or
|
||||
or_reduce(entry_epn_b(48 to 51) and addr_in(48 to 51));
|
||||
function_50_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16K) or
|
||||
or_reduce(entry_epn_b(50 to 51) and addr_in(50 to 51));
|
||||
end generate gen_xbit80;
|
||||
|
||||
|
||||
|
||||
comp_or_50_51 <= and_reduce(match_line(50 to 51)) or pgsize_gte_16K;
|
||||
comp_or_48_49 <= and_reduce(match_line(48 to 49)) or pgsize_gte_64K;
|
||||
comp_or_46_47 <= and_reduce(match_line(46 to 47)) or pgsize_gte_256K;
|
||||
comp_or_44_45 <= and_reduce(match_line(44 to 45)) or pgsize_gte_1M;
|
||||
comp_or_40_43 <= and_reduce(match_line(40 to 43)) or pgsize_gte_16M;
|
||||
comp_or_36_39 <= and_reduce(match_line(36 to 39)) or pgsize_gte_256M;
|
||||
comp_or_34_35 <= and_reduce(match_line(34 to 35)) or pgsize_gte_1G;
|
||||
|
||||
gen_noxbit81 : if have_xbit = 0 generate
|
||||
addr_match <= (comp_or_34_35 and
|
||||
comp_or_36_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_45 and
|
||||
comp_or_46_47 and
|
||||
comp_or_48_49 and
|
||||
comp_or_50_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_noxbit81;
|
||||
|
||||
gen_xbit81 : if have_xbit /= 0 generate
|
||||
addr_match <= (function_50_51 and
|
||||
function_48_51 and
|
||||
function_46_51 and
|
||||
function_44_51 and
|
||||
function_40_51 and
|
||||
function_36_51 and
|
||||
function_34_51 and
|
||||
comp_or_34_35 and
|
||||
comp_or_36_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_45 and
|
||||
comp_or_46_47 and
|
||||
comp_or_48_49 and
|
||||
comp_or_50_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_xbit81;
|
||||
|
||||
end generate numpgsz8;
|
||||
|
||||
|
||||
numpgsz5 : if num_pgsizes = 5 generate
|
||||
|
||||
function_50_51 <= '0';
|
||||
function_46_51 <= '0';
|
||||
function_36_51 <= '0';
|
||||
pgsize_eq_16K <= '0';
|
||||
pgsize_eq_256K <= '0';
|
||||
pgsize_eq_256M <= '0';
|
||||
pgsize_gte_16K <= '0';
|
||||
pgsize_gte_256K <= '0';
|
||||
pgsize_gte_256M <= '0';
|
||||
comp_or_34_35 <= '0';
|
||||
comp_or_36_39 <= '0';
|
||||
comp_or_44_45 <= '0';
|
||||
comp_or_46_47 <= '0';
|
||||
comp_or_48_49 <= '0';
|
||||
comp_or_50_51 <= '0';
|
||||
|
||||
entry_epn_b(34 to 51) <= not(entry_epn(34 to 51));
|
||||
|
||||
|
||||
gen_nocmpmask50 : if have_cmpmask = 0 generate
|
||||
pgsize_eq_1G <= ( entry_size(0) and entry_size(1) and not(entry_size(2)) );
|
||||
pgsize_eq_16M <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_1M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2));
|
||||
pgsize_eq_64K <= (not(entry_size(0)) and entry_size(1) and entry_size(2));
|
||||
|
||||
|
||||
pgsize_gte_1G <= ( entry_size(0) and entry_size(1) and not(entry_size(2)) );
|
||||
|
||||
pgsize_gte_16M <= ( entry_size(0) and entry_size(1) and entry_size(2) ) or
|
||||
pgsize_gte_1G;
|
||||
pgsize_gte_1M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2)) or
|
||||
pgsize_gte_16M;
|
||||
pgsize_gte_64K <= (not(entry_size(0)) and entry_size(1) and entry_size(2)) or
|
||||
pgsize_gte_1M;
|
||||
end generate gen_nocmpmask50;
|
||||
|
||||
gen_cmpmask50 : if have_cmpmask = 1 generate
|
||||
pgsize_gte_1G <= not entry_cmpmask(0);
|
||||
pgsize_gte_16M <= not entry_cmpmask(1);
|
||||
pgsize_gte_1M <= not entry_cmpmask(2);
|
||||
pgsize_gte_64K <= not entry_cmpmask(3);
|
||||
|
||||
pgsize_eq_1G <= entry_xbitmask(0);
|
||||
pgsize_eq_16M <= entry_xbitmask(1);
|
||||
pgsize_eq_1M <= entry_xbitmask(2);
|
||||
pgsize_eq_64K <= entry_xbitmask(3);
|
||||
end generate gen_cmpmask50;
|
||||
|
||||
gen_noxbit50 : if have_xbit = 0 generate
|
||||
function_34_51 <= '0';
|
||||
function_40_51 <= '0';
|
||||
function_44_51 <= '0';
|
||||
function_48_51 <= '0';
|
||||
end generate gen_noxbit50;
|
||||
|
||||
gen_xbit50 : if have_xbit /= 0 generate
|
||||
function_34_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1G) or
|
||||
or_reduce(entry_epn_b(34 to 51) and addr_in(34 to 51));
|
||||
function_40_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16M) or
|
||||
or_reduce(entry_epn_b(40 to 51) and addr_in(40 to 51));
|
||||
function_44_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1M) or
|
||||
or_reduce(entry_epn_b(44 to 51) and addr_in(44 to 51));
|
||||
function_48_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_64K) or
|
||||
or_reduce(entry_epn_b(48 to 51) and addr_in(48 to 51));
|
||||
end generate gen_xbit50;
|
||||
|
||||
comp_or_48_51 <= and_reduce(match_line(48 to 51)) or pgsize_gte_64K;
|
||||
comp_or_44_47 <= and_reduce(match_line(44 to 47)) or pgsize_gte_1M;
|
||||
comp_or_40_43 <= and_reduce(match_line(40 to 43)) or pgsize_gte_16M;
|
||||
comp_or_34_39 <= and_reduce(match_line(34 to 39)) or pgsize_gte_1G;
|
||||
|
||||
gen_noxbit51 : if have_xbit = 0 generate
|
||||
addr_match <= (comp_or_34_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_47 and
|
||||
comp_or_48_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_noxbit51;
|
||||
|
||||
gen_xbit51 : if have_xbit /= 0 generate
|
||||
addr_match <= (function_48_51 and
|
||||
function_44_51 and
|
||||
function_40_51 and
|
||||
function_34_51 and
|
||||
comp_or_34_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_47 and
|
||||
comp_or_48_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_xbit51;
|
||||
|
||||
end generate numpgsz5;
|
||||
|
||||
|
||||
pgsize_match <= and_reduce(match_line(52 to 54)) or
|
||||
not(pgsize_enable);
|
||||
|
||||
class_match <= (match_line(55) or not(class_enable(0))) and
|
||||
(match_line(56) or not(class_enable(1))) and
|
||||
(and_reduce(match_line(55 to 56)) or not(class_enable(2)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate));
|
||||
|
||||
extclass_match <= (match_line(57) or not(extclass_enable(0))) and
|
||||
(match_line(58) or not(extclass_enable(1)));
|
||||
|
||||
state_match <= (match_line(59) or
|
||||
not(state_enable(0))) and
|
||||
(match_line(60) or
|
||||
not(state_enable(1)));
|
||||
|
||||
thdid_match <= (or_reduce(entry_thdid(0 to 3) and comp_thdid(0 to 3)) or not(thdid_enable(0))) and
|
||||
(and_reduce(match_line(69 to 72)) or not(thdid_enable(1)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate));
|
||||
|
||||
pid_match <= and_reduce(match_line(61 to 68)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate) or
|
||||
not(pid_enable);
|
||||
|
||||
match <= addr_match and
|
||||
pgsize_match and
|
||||
class_match and
|
||||
extclass_match and
|
||||
state_match and
|
||||
thdid_match and
|
||||
pid_match and
|
||||
entry_v;
|
||||
|
||||
end tri_cam_16x143_1r1w1c_matchline;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,398 @@
|
||||
-- © 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;
|
||||
|
||||
|
||||
entity tri_cam_32x143_1r1w1c_matchline is
|
||||
generic (have_xbit : integer := 1;
|
||||
num_pgsizes : integer := 5;
|
||||
have_cmpmask : integer := 1;
|
||||
cmpmask_width : integer := 4);
|
||||
|
||||
port(
|
||||
addr_in : in std_ulogic_vector(0 to 51);
|
||||
addr_enable : in std_ulogic_vector(0 to 1);
|
||||
comp_pgsize : in std_ulogic_vector(0 to 2);
|
||||
pgsize_enable : in std_ulogic;
|
||||
entry_size : in std_ulogic_vector(0 to 2);
|
||||
entry_cmpmask : in std_ulogic_vector(0 to cmpmask_width-1);
|
||||
entry_xbit : in std_ulogic;
|
||||
entry_xbitmask : in std_ulogic_vector(0 to cmpmask_width-1);
|
||||
entry_epn : in std_ulogic_vector(0 to 51);
|
||||
comp_class : in std_ulogic_vector(0 to 1);
|
||||
entry_class : in std_ulogic_vector(0 to 1);
|
||||
class_enable : in std_ulogic_vector(0 to 2);
|
||||
comp_extclass : in std_ulogic_vector(0 to 1);
|
||||
entry_extclass : in std_ulogic_vector(0 to 1);
|
||||
extclass_enable : in std_ulogic_vector(0 to 1);
|
||||
comp_state : in std_ulogic_vector(0 to 1);
|
||||
entry_hv : in std_ulogic;
|
||||
entry_ds : in std_ulogic;
|
||||
state_enable : in std_ulogic_vector(0 to 1);
|
||||
entry_thdid : in std_ulogic_vector(0 to 3);
|
||||
comp_thdid : in std_ulogic_vector(0 to 3);
|
||||
thdid_enable : in std_ulogic_vector(0 to 1);
|
||||
entry_pid : in std_ulogic_vector(0 to 7);
|
||||
comp_pid : in std_ulogic_vector(0 to 7);
|
||||
pid_enable : in std_ulogic;
|
||||
entry_v : in std_ulogic;
|
||||
comp_invalidate : in std_ulogic;
|
||||
|
||||
match : out std_ulogic
|
||||
);
|
||||
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
|
||||
end tri_cam_32x143_1r1w1c_matchline;
|
||||
|
||||
architecture tri_cam_32x143_1r1w1c_matchline of tri_cam_32x143_1r1w1c_matchline is
|
||||
|
||||
|
||||
|
||||
signal entry_epn_b : std_ulogic_vector(34 to 51);
|
||||
signal function_50_51 : std_ulogic;
|
||||
signal function_48_51 : std_ulogic;
|
||||
signal function_46_51 : std_ulogic;
|
||||
signal function_44_51 : std_ulogic;
|
||||
signal function_40_51 : std_ulogic;
|
||||
signal function_36_51 : std_ulogic;
|
||||
signal function_34_51 : std_ulogic;
|
||||
signal pgsize_eq_16K : std_ulogic;
|
||||
signal pgsize_eq_64K : std_ulogic;
|
||||
signal pgsize_eq_256K : std_ulogic;
|
||||
signal pgsize_eq_1M : std_ulogic;
|
||||
signal pgsize_eq_16M : std_ulogic;
|
||||
signal pgsize_eq_256M : std_ulogic;
|
||||
signal pgsize_eq_1G : std_ulogic;
|
||||
signal pgsize_gte_16K : std_ulogic;
|
||||
signal pgsize_gte_64K : std_ulogic;
|
||||
signal pgsize_gte_256K : std_ulogic;
|
||||
signal pgsize_gte_1M : std_ulogic;
|
||||
signal pgsize_gte_16M : std_ulogic;
|
||||
signal pgsize_gte_256M : std_ulogic;
|
||||
signal pgsize_gte_1G : std_ulogic;
|
||||
signal comp_or_34_35 : std_ulogic;
|
||||
signal comp_or_34_39 : std_ulogic;
|
||||
signal comp_or_36_39 : std_ulogic;
|
||||
signal comp_or_40_43 : std_ulogic;
|
||||
signal comp_or_44_45 : std_ulogic;
|
||||
signal comp_or_44_47 : std_ulogic;
|
||||
signal comp_or_46_47 : std_ulogic;
|
||||
signal comp_or_48_49 : std_ulogic;
|
||||
signal comp_or_48_51 : std_ulogic;
|
||||
signal comp_or_50_51 : std_ulogic;
|
||||
signal match_line : std_ulogic_vector(0 to 72);
|
||||
signal pgsize_match : std_ulogic;
|
||||
signal addr_match : std_ulogic;
|
||||
signal class_match : std_ulogic;
|
||||
signal extclass_match : std_ulogic;
|
||||
signal state_match : std_ulogic;
|
||||
signal thdid_match : std_ulogic;
|
||||
signal pid_match : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
match_line(0 to 72) <= not((entry_epn(0 to 51) & entry_size(0 to 2) & entry_class(0 to 1) & entry_extclass(0 to 1) & entry_hv & entry_ds & entry_pid(0 to 7) & entry_thdid(0 to 3)) xor
|
||||
(addr_in(0 to 51) & comp_pgsize(0 to 2) & comp_class(0 to 1) & comp_extclass(0 to 1) & comp_state(0 to 1) & comp_pid(0 to 7) & comp_thdid(0 to 3))
|
||||
);
|
||||
|
||||
numpgsz8 : if num_pgsizes = 8 generate
|
||||
|
||||
entry_epn_b(34 to 51) <= not(entry_epn(34 to 51));
|
||||
|
||||
|
||||
gen_nocmpmask80 : if have_cmpmask = 0 generate
|
||||
pgsize_eq_1G <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_256M <= ( entry_size(0) and entry_size(1) and not(entry_size(2)));
|
||||
pgsize_eq_16M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2) );
|
||||
pgsize_eq_1M <= ( entry_size(0) and not(entry_size(1)) and not(entry_size(2)));
|
||||
pgsize_eq_256K <= (not(entry_size(0)) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_64K <= (not(entry_size(0)) and entry_size(1) and not(entry_size(2)));
|
||||
pgsize_eq_16K <= (not(entry_size(0)) and not(entry_size(1)) and entry_size(2) );
|
||||
|
||||
pgsize_gte_1G <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_gte_256M <= ( entry_size(0) and entry_size(1) and not(entry_size(2))) or
|
||||
pgsize_gte_1G;
|
||||
pgsize_gte_16M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2) ) or
|
||||
pgsize_gte_256M;
|
||||
pgsize_gte_1M <= ( entry_size(0) and not(entry_size(1)) and not(entry_size(2))) or
|
||||
pgsize_gte_16M;
|
||||
pgsize_gte_256K <= (not(entry_size(0)) and entry_size(1) and entry_size(2) ) or
|
||||
pgsize_gte_1M;
|
||||
pgsize_gte_64K <= (not(entry_size(0)) and entry_size(1) and not(entry_size(2))) or
|
||||
pgsize_gte_256K;
|
||||
pgsize_gte_16K <= (not(entry_size(0)) and not(entry_size(1)) and entry_size(2) ) or
|
||||
pgsize_gte_64K;
|
||||
|
||||
|
||||
end generate gen_nocmpmask80;
|
||||
|
||||
gen_cmpmask80 : if have_cmpmask = 1 generate
|
||||
pgsize_gte_1G <= not entry_cmpmask(0);
|
||||
pgsize_gte_256M <= not entry_cmpmask(1);
|
||||
pgsize_gte_16M <= not entry_cmpmask(2);
|
||||
pgsize_gte_1M <= not entry_cmpmask(3);
|
||||
pgsize_gte_256K <= not entry_cmpmask(4);
|
||||
pgsize_gte_64K <= not entry_cmpmask(5);
|
||||
pgsize_gte_16K <= not entry_cmpmask(6);
|
||||
|
||||
pgsize_eq_1G <= entry_xbitmask(0);
|
||||
pgsize_eq_256M <= entry_xbitmask(1);
|
||||
pgsize_eq_16M <= entry_xbitmask(2);
|
||||
pgsize_eq_1M <= entry_xbitmask(3);
|
||||
pgsize_eq_256K <= entry_xbitmask(4);
|
||||
pgsize_eq_64K <= entry_xbitmask(5);
|
||||
pgsize_eq_16K <= entry_xbitmask(6);
|
||||
end generate gen_cmpmask80;
|
||||
|
||||
gen_noxbit80 : if have_xbit = 0 generate
|
||||
function_34_51 <= '0';
|
||||
function_36_51 <= '0';
|
||||
function_40_51 <= '0';
|
||||
function_44_51 <= '0';
|
||||
function_46_51 <= '0';
|
||||
function_48_51 <= '0';
|
||||
function_50_51 <= '0';
|
||||
end generate gen_noxbit80;
|
||||
|
||||
gen_xbit80 : if have_xbit /= 0 generate
|
||||
function_34_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1G) or
|
||||
or_reduce(entry_epn_b(34 to 51) and addr_in(34 to 51));
|
||||
function_36_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_256M) or
|
||||
or_reduce(entry_epn_b(36 to 51) and addr_in(36 to 51));
|
||||
function_40_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16M) or
|
||||
or_reduce(entry_epn_b(40 to 51) and addr_in(40 to 51));
|
||||
function_44_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1M) or
|
||||
or_reduce(entry_epn_b(44 to 51) and addr_in(44 to 51));
|
||||
function_46_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_256K) or
|
||||
or_reduce(entry_epn_b(46 to 51) and addr_in(46 to 51));
|
||||
function_48_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_64K) or
|
||||
or_reduce(entry_epn_b(48 to 51) and addr_in(48 to 51));
|
||||
function_50_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16K) or
|
||||
or_reduce(entry_epn_b(50 to 51) and addr_in(50 to 51));
|
||||
end generate gen_xbit80;
|
||||
|
||||
|
||||
comp_or_50_51 <= and_reduce(match_line(50 to 51)) or pgsize_gte_16K;
|
||||
comp_or_48_49 <= and_reduce(match_line(48 to 49)) or pgsize_gte_64K;
|
||||
comp_or_46_47 <= and_reduce(match_line(46 to 47)) or pgsize_gte_256K;
|
||||
comp_or_44_45 <= and_reduce(match_line(44 to 45)) or pgsize_gte_1M;
|
||||
comp_or_40_43 <= and_reduce(match_line(40 to 43)) or pgsize_gte_16M;
|
||||
comp_or_36_39 <= and_reduce(match_line(36 to 39)) or pgsize_gte_256M;
|
||||
comp_or_34_35 <= and_reduce(match_line(34 to 35)) or pgsize_gte_1G;
|
||||
|
||||
gen_noxbit81 : if have_xbit = 0 generate
|
||||
addr_match <= (comp_or_34_35 and
|
||||
comp_or_36_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_45 and
|
||||
comp_or_46_47 and
|
||||
comp_or_48_49 and
|
||||
comp_or_50_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_noxbit81;
|
||||
|
||||
gen_xbit81 : if have_xbit /= 0 generate
|
||||
addr_match <= (function_50_51 and
|
||||
function_48_51 and
|
||||
function_46_51 and
|
||||
function_44_51 and
|
||||
function_40_51 and
|
||||
function_36_51 and
|
||||
function_34_51 and
|
||||
comp_or_34_35 and
|
||||
comp_or_36_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_45 and
|
||||
comp_or_46_47 and
|
||||
comp_or_48_49 and
|
||||
comp_or_50_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_xbit81;
|
||||
|
||||
end generate numpgsz8;
|
||||
|
||||
|
||||
numpgsz5 : if num_pgsizes = 5 generate
|
||||
|
||||
function_50_51 <= '0';
|
||||
function_46_51 <= '0';
|
||||
function_36_51 <= '0';
|
||||
pgsize_eq_16K <= '0';
|
||||
pgsize_eq_256K <= '0';
|
||||
pgsize_eq_256M <= '0';
|
||||
pgsize_gte_16K <= '0';
|
||||
pgsize_gte_256K <= '0';
|
||||
pgsize_gte_256M <= '0';
|
||||
comp_or_34_35 <= '0';
|
||||
comp_or_36_39 <= '0';
|
||||
comp_or_44_45 <= '0';
|
||||
comp_or_46_47 <= '0';
|
||||
comp_or_48_49 <= '0';
|
||||
comp_or_50_51 <= '0';
|
||||
|
||||
entry_epn_b(34 to 51) <= not(entry_epn(34 to 51));
|
||||
|
||||
|
||||
gen_nocmpmask50 : if have_cmpmask = 0 generate
|
||||
pgsize_eq_1G <= ( entry_size(0) and entry_size(1) and not(entry_size(2)) );
|
||||
pgsize_eq_16M <= ( entry_size(0) and entry_size(1) and entry_size(2) );
|
||||
pgsize_eq_1M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2));
|
||||
pgsize_eq_64K <= (not(entry_size(0)) and entry_size(1) and entry_size(2));
|
||||
|
||||
|
||||
pgsize_gte_1G <= ( entry_size(0) and entry_size(1) and not(entry_size(2)) );
|
||||
|
||||
pgsize_gte_16M <= ( entry_size(0) and entry_size(1) and entry_size(2) ) or
|
||||
pgsize_gte_1G;
|
||||
pgsize_gte_1M <= ( entry_size(0) and not(entry_size(1)) and entry_size(2)) or
|
||||
pgsize_gte_16M;
|
||||
pgsize_gte_64K <= (not(entry_size(0)) and entry_size(1) and entry_size(2)) or
|
||||
pgsize_gte_1M;
|
||||
|
||||
end generate gen_nocmpmask50;
|
||||
|
||||
gen_cmpmask50 : if have_cmpmask = 1 generate
|
||||
pgsize_gte_1G <= not entry_cmpmask(0);
|
||||
pgsize_gte_16M <= not entry_cmpmask(1);
|
||||
pgsize_gte_1M <= not entry_cmpmask(2);
|
||||
pgsize_gte_64K <= not entry_cmpmask(3);
|
||||
|
||||
pgsize_eq_1G <= entry_xbitmask(0);
|
||||
pgsize_eq_16M <= entry_xbitmask(1);
|
||||
pgsize_eq_1M <= entry_xbitmask(2);
|
||||
pgsize_eq_64K <= entry_xbitmask(3);
|
||||
end generate gen_cmpmask50;
|
||||
|
||||
gen_noxbit50 : if have_xbit = 0 generate
|
||||
function_34_51 <= '0';
|
||||
function_40_51 <= '0';
|
||||
function_44_51 <= '0';
|
||||
function_48_51 <= '0';
|
||||
end generate gen_noxbit50;
|
||||
|
||||
gen_xbit50 : if have_xbit /= 0 generate
|
||||
function_34_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1G) or
|
||||
or_reduce(entry_epn_b(34 to 51) and addr_in(34 to 51));
|
||||
function_40_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_16M) or
|
||||
or_reduce(entry_epn_b(40 to 51) and addr_in(40 to 51));
|
||||
function_44_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_1M) or
|
||||
or_reduce(entry_epn_b(44 to 51) and addr_in(44 to 51));
|
||||
function_48_51 <= not(entry_xbit) or
|
||||
not(pgsize_eq_64K) or
|
||||
or_reduce(entry_epn_b(48 to 51) and addr_in(48 to 51));
|
||||
end generate gen_xbit50;
|
||||
|
||||
comp_or_48_51 <= and_reduce(match_line(48 to 51)) or pgsize_gte_64K;
|
||||
comp_or_44_47 <= and_reduce(match_line(44 to 47)) or pgsize_gte_1M;
|
||||
comp_or_40_43 <= and_reduce(match_line(40 to 43)) or pgsize_gte_16M;
|
||||
comp_or_34_39 <= and_reduce(match_line(34 to 39)) or pgsize_gte_1G;
|
||||
|
||||
gen_noxbit51 : if have_xbit = 0 generate
|
||||
addr_match <= (comp_or_34_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_47 and
|
||||
comp_or_48_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_noxbit51;
|
||||
|
||||
gen_xbit51 : if have_xbit /= 0 generate
|
||||
addr_match <= (function_48_51 and
|
||||
function_44_51 and
|
||||
function_40_51 and
|
||||
function_34_51 and
|
||||
comp_or_34_39 and
|
||||
comp_or_40_43 and
|
||||
comp_or_44_47 and
|
||||
comp_or_48_51 and
|
||||
and_reduce(match_line(31 to 33)) and
|
||||
(and_reduce(match_line(0 to 30)) or not(addr_enable(1)))) or
|
||||
not(addr_enable(0));
|
||||
end generate gen_xbit51;
|
||||
|
||||
end generate numpgsz5;
|
||||
|
||||
|
||||
pgsize_match <= and_reduce(match_line(52 to 54)) or
|
||||
not(pgsize_enable);
|
||||
|
||||
class_match <= (match_line(55) or not(class_enable(0))) and
|
||||
(match_line(56) or not(class_enable(1))) and
|
||||
(and_reduce(match_line(55 to 56)) or not(class_enable(2)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate));
|
||||
|
||||
extclass_match <= (match_line(57) or not(extclass_enable(0))) and
|
||||
(match_line(58) or not(extclass_enable(1)));
|
||||
|
||||
state_match <= (match_line(59) or
|
||||
not(state_enable(0))) and
|
||||
(match_line(60) or
|
||||
not(state_enable(1)));
|
||||
|
||||
thdid_match <= (or_reduce(entry_thdid(0 to 3) and comp_thdid(0 to 3)) or not(thdid_enable(0))) and
|
||||
(and_reduce(match_line(69 to 72)) or not(thdid_enable(1)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate));
|
||||
|
||||
pid_match <= and_reduce(match_line(61 to 68)) or
|
||||
(not(entry_extclass(1)) and not comp_invalidate) or
|
||||
not(pid_enable);
|
||||
|
||||
match <= addr_match and
|
||||
pgsize_match and
|
||||
class_match and
|
||||
extclass_match and
|
||||
state_match and
|
||||
thdid_match and
|
||||
pid_match and
|
||||
entry_v;
|
||||
|
||||
|
||||
end tri_cam_32x143_1r1w1c_matchline;
|
@ -0,0 +1,178 @@
|
||||
-- © 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_unsigned.all;
|
||||
use ibm.std_ulogic_function_support.all;
|
||||
library support;
|
||||
use support.power_logic_pkg.all;
|
||||
library tri;
|
||||
use tri.tri_latches_pkg.all;
|
||||
|
||||
entity tri_cam_parerr_mac is
|
||||
generic (expand_type : integer := 1);
|
||||
port(
|
||||
|
||||
np1_cam_cmp_data :in std_ulogic_vector(0 to 83);
|
||||
np1_array_cmp_data :in std_ulogic_vector(0 to 67);
|
||||
|
||||
np2_cam_cmp_data :out std_ulogic_vector(0 to 83);
|
||||
np2_array_cmp_data :out std_ulogic_vector(0 to 67);
|
||||
np2_cmp_data_parerr_epn :out std_ulogic;
|
||||
np2_cmp_data_parerr_rpn :out std_ulogic;
|
||||
|
||||
gnd :inout power_logic;
|
||||
vdd :inout power_logic;
|
||||
nclk :in clk_logic;
|
||||
act :in std_ulogic;
|
||||
lcb_act_dis_dc :in std_ulogic;
|
||||
lcb_delay_lclkr_dc :in std_ulogic;
|
||||
lcb_clkoff_dc_b_0 :in std_ulogic;
|
||||
lcb_mpw1_dc_b :in std_ulogic;
|
||||
lcb_mpw2_dc_b :in std_ulogic;
|
||||
lcb_sg_0 :in std_ulogic;
|
||||
lcb_func_sl_thold_0 :in std_ulogic;
|
||||
func_scan_in :in std_ulogic;
|
||||
func_scan_out :out std_ulogic
|
||||
);
|
||||
-- synopsys translate_off
|
||||
-- synopsys translate_on
|
||||
end entity tri_cam_parerr_mac;
|
||||
|
||||
architecture tri_cam_parerr_mac of tri_cam_parerr_mac is
|
||||
|
||||
begin
|
||||
|
||||
um: if expand_type = 0 generate
|
||||
signal np2_cam_cmp_data_q :std_ulogic_vector(0 to np1_cam_cmp_data'length-1);
|
||||
signal np2_array_cmp_data_q :std_ulogic_vector(0 to np1_array_cmp_data'length-1);
|
||||
signal np2_cmp_data_calc_par :std_ulogic_vector(50 to 67);
|
||||
|
||||
begin
|
||||
np1_cam_cmp_data_latch: tri_rlmreg_p
|
||||
generic map (width => np1_cam_cmp_data'length, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => np1_cam_cmp_data,
|
||||
dout => np2_cam_cmp_data_q);
|
||||
|
||||
np1_array_cmp_data_latch: tri_rlmreg_p
|
||||
generic map (width => np1_array_cmp_data'length, init => 0, expand_type => expand_type)
|
||||
port map (nclk => nclk,
|
||||
act => act,
|
||||
scin => (others => '0'),
|
||||
scout => open,
|
||||
din => np1_array_cmp_data,
|
||||
dout => np2_array_cmp_data_q);
|
||||
|
||||
np2_cmp_data_calc_par(50) <= xor_reduce(np2_cam_cmp_data_q(75 to 82));
|
||||
np2_cmp_data_calc_par(51) <= xor_reduce(np2_cam_cmp_data_q(0 to 7));
|
||||
np2_cmp_data_calc_par(52) <= xor_reduce(np2_cam_cmp_data_q(8 to 15));
|
||||
np2_cmp_data_calc_par(53) <= xor_reduce(np2_cam_cmp_data_q(16 to 23));
|
||||
np2_cmp_data_calc_par(54) <= xor_reduce(np2_cam_cmp_data_q(24 to 31));
|
||||
np2_cmp_data_calc_par(55) <= xor_reduce(np2_cam_cmp_data_q(32 to 39));
|
||||
np2_cmp_data_calc_par(56) <= xor_reduce(np2_cam_cmp_data_q(40 to 47));
|
||||
np2_cmp_data_calc_par(57) <= xor_reduce(np2_cam_cmp_data_q(48 to 55));
|
||||
np2_cmp_data_calc_par(58) <= xor_reduce(np2_cam_cmp_data_q(57 to 62));
|
||||
np2_cmp_data_calc_par(59) <= xor_reduce(np2_cam_cmp_data_q(63 to 66));
|
||||
np2_cmp_data_calc_par(60) <= xor_reduce(np2_cam_cmp_data_q(67 to 74));
|
||||
np2_cmp_data_calc_par(61) <= xor_reduce(np2_array_cmp_data_q(0 to 5));
|
||||
np2_cmp_data_calc_par(62) <= xor_reduce(np2_array_cmp_data_q(6 to 13));
|
||||
np2_cmp_data_calc_par(63) <= xor_reduce(np2_array_cmp_data_q(14 to 21));
|
||||
np2_cmp_data_calc_par(64) <= xor_reduce(np2_array_cmp_data_q(22 to 29));
|
||||
np2_cmp_data_calc_par(65) <= xor_reduce(np2_array_cmp_data_q(30 to 37));
|
||||
np2_cmp_data_calc_par(66) <= xor_reduce(np2_array_cmp_data_q(38 to 44));
|
||||
np2_cmp_data_calc_par(67) <= xor_reduce(np2_array_cmp_data_q(45 to 50));
|
||||
|
||||
np2_cmp_data_parerr_epn <= or_reduce(np2_cmp_data_calc_par(50 to 60) xor (np2_cam_cmp_data_q(83) & np2_array_cmp_data_q(51 to 60)));
|
||||
np2_cmp_data_parerr_rpn <= or_reduce(np2_cmp_data_calc_par(61 to 67) xor np2_array_cmp_data_q(61 to 67));
|
||||
np2_cam_cmp_data <= np2_cam_cmp_data_q;
|
||||
np2_array_cmp_data <= np2_array_cmp_data_q;
|
||||
end generate um;
|
||||
|
||||
a: if expand_type = 1 generate
|
||||
signal np2_cam_cmp_data_q :std_ulogic_vector(0 to np1_cam_cmp_data'length-1);
|
||||
signal np2_array_cmp_data_q :std_ulogic_vector(0 to np1_array_cmp_data'length-1);
|
||||
signal np2_cmp_data_calc_par :std_ulogic_vector(50 to 67);
|
||||
signal clk :std_ulogic;
|
||||
signal sreset_q :std_ulogic;
|
||||
begin
|
||||
clk <= not nclk.clk;
|
||||
rlatch: process (clk)
|
||||
begin
|
||||
if(rising_edge(clk)) then
|
||||
sreset_q <= nclk.sreset;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
slatch: process (nclk,sreset_q)
|
||||
begin
|
||||
if(rising_edge(nclk.clk)) then
|
||||
if (sreset_q = '1') then
|
||||
np2_cam_cmp_data_q <= (others=>'0');
|
||||
np2_array_cmp_data_q <= (others=>'0');
|
||||
else
|
||||
np2_cam_cmp_data_q <= np1_cam_cmp_data;
|
||||
np2_array_cmp_data_q <= np1_array_cmp_data;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
np2_cmp_data_calc_par(50) <= xor_reduce(np2_cam_cmp_data_q(75 to 82));
|
||||
np2_cmp_data_calc_par(51) <= xor_reduce(np2_cam_cmp_data_q(0 to 7));
|
||||
np2_cmp_data_calc_par(52) <= xor_reduce(np2_cam_cmp_data_q(8 to 15));
|
||||
np2_cmp_data_calc_par(53) <= xor_reduce(np2_cam_cmp_data_q(16 to 23));
|
||||
np2_cmp_data_calc_par(54) <= xor_reduce(np2_cam_cmp_data_q(24 to 31));
|
||||
np2_cmp_data_calc_par(55) <= xor_reduce(np2_cam_cmp_data_q(32 to 39));
|
||||
np2_cmp_data_calc_par(56) <= xor_reduce(np2_cam_cmp_data_q(40 to 47));
|
||||
np2_cmp_data_calc_par(57) <= xor_reduce(np2_cam_cmp_data_q(48 to 55));
|
||||
np2_cmp_data_calc_par(58) <= xor_reduce(np2_cam_cmp_data_q(57 to 62));
|
||||
np2_cmp_data_calc_par(59) <= xor_reduce(np2_cam_cmp_data_q(63 to 66));
|
||||
np2_cmp_data_calc_par(60) <= xor_reduce(np2_cam_cmp_data_q(67 to 74));
|
||||
np2_cmp_data_calc_par(61) <= xor_reduce(np2_array_cmp_data_q(0 to 5));
|
||||
np2_cmp_data_calc_par(62) <= xor_reduce(np2_array_cmp_data_q(6 to 13));
|
||||
np2_cmp_data_calc_par(63) <= xor_reduce(np2_array_cmp_data_q(14 to 21));
|
||||
np2_cmp_data_calc_par(64) <= xor_reduce(np2_array_cmp_data_q(22 to 29));
|
||||
np2_cmp_data_calc_par(65) <= xor_reduce(np2_array_cmp_data_q(30 to 37));
|
||||
np2_cmp_data_calc_par(66) <= xor_reduce(np2_array_cmp_data_q(38 to 44));
|
||||
np2_cmp_data_calc_par(67) <= xor_reduce(np2_array_cmp_data_q(45 to 50));
|
||||
|
||||
np2_cmp_data_parerr_epn <= or_reduce(np2_cmp_data_calc_par(50 to 60) xor (np2_cam_cmp_data_q(83) & np2_array_cmp_data_q(51 to 60)));
|
||||
np2_cmp_data_parerr_rpn <= or_reduce(np2_cmp_data_calc_par(61 to 67) xor np2_array_cmp_data_q(61 to 67));
|
||||
np2_cam_cmp_data <= np2_cam_cmp_data_q;
|
||||
np2_array_cmp_data <= np2_array_cmp_data_q;
|
||||
|
||||
func_scan_out <= func_scan_in;
|
||||
end generate a;
|
||||
|
||||
end tri_cam_parerr_mac;
|
||||
|
@ -0,0 +1,66 @@
|
||||
-- © 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;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library support; use support.power_logic_pkg.all;
|
||||
library tri; use tri.tri_latches_pkg.all;
|
||||
-- pragma translate_off
|
||||
-- pragma translate_on
|
||||
|
||||
entity tri_direct_err_rpt is
|
||||
|
||||
generic (
|
||||
width : positive := 1 ;
|
||||
expand_type : integer := 1 );
|
||||
port (
|
||||
vd : inout power_logic;
|
||||
gd : inout power_logic;
|
||||
|
||||
err_in : in std_ulogic_vector(0 to width-1);
|
||||
err_out : out std_ulogic_vector(0 to width-1)
|
||||
);
|
||||
-- synopsys translate_off
|
||||
|
||||
-- synopsys translate_on
|
||||
|
||||
end tri_direct_err_rpt;
|
||||
|
||||
architecture tri_direct_err_rpt of tri_direct_err_rpt is
|
||||
|
||||
begin
|
||||
|
||||
a: if expand_type /= 2 generate
|
||||
begin
|
||||
err_out <= err_in;
|
||||
end generate a;
|
||||
|
||||
end tri_direct_err_rpt;
|
||||
|
@ -0,0 +1,132 @@
|
||||
-- © 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;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||