From b3dfeb245c477494ab6fa56b56d3fc07845b9632 Mon Sep 17 00:00:00 2001 From: Adrian Weber Date: Mon, 15 Nov 2021 11:33:29 +0100 Subject: [PATCH] ECP5 files for GbE support --- gbe_trb/base/gbe_med_interface_ExtClk.vhd | 891 ++++ gbe_trb/base/gbe_med_interface_ecp5.vhd | 644 +++ gbe_trb/base/gbe_med_interface_onlyPCS.vhd | 338 ++ gbe_trb/base/gbe_med_interface_sfp.vhd | 918 ++++ gbe_trb/ipcores/ecp5/_math_real.vhd | 2574 +++++++++ gbe_trb/ipcores/ecp5/fifo_2048x8x16.lpc | 53 + gbe_trb/ipcores/ecp5/fifo_2048x8x16.vhd | 1330 +++++ gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.ipx | 9 + gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.lpc | 53 + gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.vhd | 4644 +++++++++++++++++ gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.lpc | 53 + gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.vhd | 2772 ++++++++++ gbe_trb/ipcores/ecp5/ip_mem.lpc | 56 + gbe_trb/ipcores/ecp5/ip_mem.vhd | 266 + gbe_trb/media/ecp5/pcs_sync_reset.vhd | 211 + gbe_trb/media/ecp5/pcstest/sgmii_ecp5.lpc | 97 + gbe_trb/media/ecp5/pcstest/sgmii_ecp5.ngd | Bin 0 -> 391330 bytes gbe_trb/media/ecp5/pcstest/sgmii_ecp5.vhd | 433 ++ .../media/ecp5/pcstest/sgmii_ecp5_softlogic.v | 2003 +++++++ ...o_dcEEan163201024102410241818p12701671.ngo | Bin 0 -> 73162 bytes ..._ram_dpEbnonessdn208256208256p138702ef.ngo | Bin 0 -> 11424 bytes .../pmi_ram_dpEbnonessdn96649664p13506f63.ngo | Bin 0 -> 8956 bytes gbe_trb/media/ecp5/rate_resolution.v | 66 + gbe_trb/media/ecp5/register_interface_hb.v | 1393 +++++ gbe_trb/media/ecp5/sgmii_channel_smi.v | 230 + gbe_trb/media/ecp5/sgmii_channel_smi_core.v | 230 + gbe_trb/media/ecp5/sgmii_defines.v | 4 + gbe_trb/media/ecp5/sgmii_ecp5.lpc | 97 + gbe_trb/media/ecp5/sgmii_ecp5.lpc_old | 97 + gbe_trb/media/ecp5/sgmii_ecp5.ngd | Bin 0 -> 393974 bytes gbe_trb/media/ecp5/sgmii_ecp5.ngo | Bin 0 -> 203442 bytes gbe_trb/media/ecp5/sgmii_ecp5.ngo_old | Bin 0 -> 102117 bytes gbe_trb/media/ecp5/sgmii_ecp5.vhd | 433 ++ gbe_trb/media/ecp5/sgmii_ecp5.vhd_old | 351 ++ gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v | 2003 +++++++ gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v_old | 1060 ++++ .../media/ecp5/sgmii_ecp5_txpllLoLdeleted.vhd | 433 ++ gbe_trb/media/ecp5/sgmii_gbe_pcs35.vhd | 191 + gbe_trb/media/ecp5/sgmii_gbe_pcs35_core.ngo | Bin 0 -> 387770 bytes .../ecp5/test/sgmii_channel_smi_core.ngo | Bin 0 -> 194270 bytes .../ecp5/test/sgmii_channel_smi_core.vhd | 359 ++ .../ecp5/test/sgmii_channel_smi_core_core.ngo | Bin 0 -> 387784 bytes .../ecp5/test/sgmii_channel_smi_core_pcs.v | 476 ++ gbe_trb/media/ecp5/tsmac.lpc | 37 + gbe_trb/media/ecp5/tsmac.ngd | Bin 0 -> 1743567 bytes gbe_trb/media/ecp5/tsmac.ngo | Bin 0 -> 952095 bytes gbe_trb/media/ecp5/tsmac.v | 212 + gbe_trb/media/ecp5/tsmac35.lpc | 37 + gbe_trb/media/ecp5/tsmac35.ngo | Bin 0 -> 952099 bytes gbe_trb/media/ecp5/tsmac35.v | 212 + 50 files changed, 25266 insertions(+) create mode 100644 gbe_trb/base/gbe_med_interface_ExtClk.vhd create mode 100644 gbe_trb/base/gbe_med_interface_ecp5.vhd create mode 100644 gbe_trb/base/gbe_med_interface_onlyPCS.vhd create mode 100644 gbe_trb/base/gbe_med_interface_sfp.vhd create mode 100644 gbe_trb/ipcores/ecp5/_math_real.vhd create mode 100644 gbe_trb/ipcores/ecp5/fifo_2048x8x16.lpc create mode 100644 gbe_trb/ipcores/ecp5/fifo_2048x8x16.vhd create mode 100644 gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.ipx create mode 100644 gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.lpc create mode 100644 gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.vhd create mode 100644 gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.lpc create mode 100644 gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.vhd create mode 100644 gbe_trb/ipcores/ecp5/ip_mem.lpc create mode 100644 gbe_trb/ipcores/ecp5/ip_mem.vhd create mode 100644 gbe_trb/media/ecp5/pcs_sync_reset.vhd create mode 100644 gbe_trb/media/ecp5/pcstest/sgmii_ecp5.lpc create mode 100644 gbe_trb/media/ecp5/pcstest/sgmii_ecp5.ngd create mode 100644 gbe_trb/media/ecp5/pcstest/sgmii_ecp5.vhd create mode 100644 gbe_trb/media/ecp5/pcstest/sgmii_ecp5_softlogic.v create mode 100644 gbe_trb/media/ecp5/pmi_fifo_dcEEan163201024102410241818p12701671.ngo create mode 100644 gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn208256208256p138702ef.ngo create mode 100644 gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn96649664p13506f63.ngo create mode 100755 gbe_trb/media/ecp5/rate_resolution.v create mode 100755 gbe_trb/media/ecp5/register_interface_hb.v create mode 100644 gbe_trb/media/ecp5/sgmii_channel_smi.v create mode 100644 gbe_trb/media/ecp5/sgmii_channel_smi_core.v create mode 100644 gbe_trb/media/ecp5/sgmii_defines.v create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.lpc create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.lpc_old create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.ngd create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.ngo create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.ngo_old create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.vhd create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5.vhd_old create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v_old create mode 100644 gbe_trb/media/ecp5/sgmii_ecp5_txpllLoLdeleted.vhd create mode 100644 gbe_trb/media/ecp5/sgmii_gbe_pcs35.vhd create mode 100644 gbe_trb/media/ecp5/sgmii_gbe_pcs35_core.ngo create mode 100644 gbe_trb/media/ecp5/test/sgmii_channel_smi_core.ngo create mode 100644 gbe_trb/media/ecp5/test/sgmii_channel_smi_core.vhd create mode 100644 gbe_trb/media/ecp5/test/sgmii_channel_smi_core_core.ngo create mode 100644 gbe_trb/media/ecp5/test/sgmii_channel_smi_core_pcs.v create mode 100644 gbe_trb/media/ecp5/tsmac.lpc create mode 100644 gbe_trb/media/ecp5/tsmac.ngd create mode 100644 gbe_trb/media/ecp5/tsmac.ngo create mode 100644 gbe_trb/media/ecp5/tsmac.v create mode 100644 gbe_trb/media/ecp5/tsmac35.lpc create mode 100644 gbe_trb/media/ecp5/tsmac35.ngo create mode 100644 gbe_trb/media/ecp5/tsmac35.v diff --git a/gbe_trb/base/gbe_med_interface_ExtClk.vhd b/gbe_trb/base/gbe_med_interface_ExtClk.vhd new file mode 100644 index 0000000..3b17e43 --- /dev/null +++ b/gbe_trb/base/gbe_med_interface_ExtClk.vhd @@ -0,0 +1,891 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE IEEE.std_logic_ARITH.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; + +library work; +use work.trb_net_std.all; +use work.trb_net_components.all; + +use work.trb_net_gbe_components.all; +use work.config.all; + +entity gbe_med_interface is + generic ( + DO_SIMULATION : integer range 0 to 1; + NUMBER_OF_GBE_LINKS : integer range 1 to 4; + LINKS_ACTIVE : std_logic_vector(3 downto 0) + ); + port ( + RESET : in std_logic; + GSR_N : in std_logic; + CLK_SYS_IN : in std_logic; + CLK_125_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + CLK_125_IN : in std_logic; + CLK_125_RX_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC status and config + MAC_READY_CONF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RECONF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_AN_READY_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC data interface + MAC_FIFOAVAIL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEOF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEMPTY_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_FIFOFULL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_TX_DATA_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_TX_READ_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_DISCRFRM_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 31 - 1 downto 0); + MAC_TX_DONE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_RX_FIFO_ERR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 32 - 1 downto 0); + MAC_RX_DATA_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_RX_WRITE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_EOF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_ERROR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + --SFP Connection + SD_RXD_P_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_RXD_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_P_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_N_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_PRSNT_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_LOS_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP Loss Of Signal ('0' = OK, '1' = no signal) + SD_TXDIS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP disable + SD_REFCLK_P_IN : in std_logic; + SD_REFCLK_N_IN : in std_logic; + --CONTROL INTERFACE + BUS_SCI_RX : in CTRLBUS_RX; + BUS_SCI_TX : out CTRLBUS_TX; + + DEBUG_OUT : out std_logic_vector(255 downto 0) + ); +end entity gbe_med_interface; + +architecture RTL of gbe_med_interface is + + component sgmii_gbe_pcs35_core +port( rst_n : in std_logic; + signal_detect : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + operational_rate : in std_logic_vector(1 downto 0); + debug_link_timer_short : in std_logic; + + force_isolate : in std_logic; + force_loopback : in std_logic; + force_unidir : in std_logic; + + rx_compensation_err : out std_logic; + + ctc_drop_flag : out std_logic; + ctc_add_flag : out std_logic; + an_link_ok : out std_logic; + + tx_clk_125 : in std_logic; + tx_clock_enable_source : out std_logic; + tx_clock_enable_sink : in std_logic; + tx_d : in std_logic_vector(7 downto 0); + tx_en : in std_logic; + tx_er : in std_logic; + rx_clk_125 : in std_logic; + rx_clock_enable_source : out std_logic; + rx_clock_enable_sink : in std_logic; + rx_d : out std_logic_vector(7 downto 0); + rx_dv : out std_logic; + rx_er : out std_logic; + col : out std_logic; + crs : out std_logic; + tx_data : out std_logic_vector(7 downto 0); + tx_kcntl : out std_logic; + tx_disparity_cntl : out std_logic; + + xmit_autoneg : out std_logic; + + serdes_recovered_clk : in std_logic; + rx_data : in std_logic_vector(7 downto 0); + rx_even : in std_logic; + rx_kcntl : in std_logic; + rx_disp_err : in std_logic; + rx_cv_err : in std_logic; + rx_err_decode_mode : in std_logic; + mr_an_complete : out std_logic; + mr_page_rx : out std_logic; + mr_lp_adv_ability : out std_logic_vector(15 downto 0); + mr_main_reset : in std_logic; + mr_an_enable : in std_logic; + mr_restart_an : in std_logic; + mr_adv_ability : in std_logic_vector(15 downto 0) + ); +end component; + +component reset_controller_pcs port ( + rst_n : in std_logic; + clk : in std_logic; + tx_plol : in std_logic; + rx_cdr_lol : in std_logic; + quad_rst_out : out std_logic; + tx_pcs_rst_out : out std_logic; + rx_pcs_rst_out : out std_logic + ); +end component; +component reset_controller_cdr port ( + rst_n : in std_logic; + clk : in std_logic; + cdr_lol : in std_logic; + cdr_rst_out : out std_logic + ); +end component; + +component rate_resolution port ( + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + an_enable : in std_logic; + advertised_rate : in std_logic_vector(1 downto 0); + link_partner_rate : in std_logic_vector(1 downto 0); + non_an_rate : in std_logic_vector(1 downto 0); + operational_rate : out std_logic_vector(1 downto 0) + ); +end component; + +component register_interface_hb port ( + rst_n : in std_logic; + hclk : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + hcs_n : in std_logic; + hwrite_n : in std_logic; + haddr : in std_logic_vector(3 downto 0); + hdatain : in std_logic_vector(7 downto 0); + hdataout : out std_logic_vector(7 downto 0); + hready_n : out std_logic; + mr_an_complete : in std_logic; + mr_page_rx : in std_logic; + mr_lp_adv_ability : in std_logic_vector(15 downto 0); + mr_main_reset : out std_logic; + mr_an_enable : out std_logic; + mr_restart_an : out std_logic; + mr_adv_ability : out std_logic_vector(15 downto 0) + ); +end component; + +component tsmac35 --tsmac36 --tsmac35 +port( + --------------- clock and reset port declarations ------------------ + hclk : in std_logic; + txmac_clk : in std_logic; + rxmac_clk : in std_logic; + reset_n : in std_logic; + txmac_clk_en : in std_logic; + rxmac_clk_en : in std_logic; + ------------------- Input signals to the GMII ---------------- + rxd : in std_logic_vector(7 downto 0); + rx_dv : in std_logic; + rx_er : in std_logic; + col : in std_logic; + crs : in std_logic; + -------------------- Input signals to the CPU I/F ------------------- + haddr : in std_logic_vector(7 downto 0); + hdatain : in std_logic_vector(7 downto 0); + hcs_n : in std_logic; + hwrite_n : in std_logic; + hread_n : in std_logic; + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata : in std_logic_vector(7 downto 0); + tx_fifoavail : in std_logic; + tx_fifoeof : in std_logic; + tx_fifoempty : in std_logic; + tx_sndpaustim : in std_logic_vector(15 downto 0); + tx_sndpausreq : in std_logic; + tx_fifoctrl : in std_logic; + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full : in std_logic; + ignore_pkt : in std_logic; + -------------------- Output signals from the GMII ----------------------- + txd : out std_logic_vector(7 downto 0); + tx_en : out std_logic; + tx_er : out std_logic; + -------------------- Output signals from the CPU I/F ------------------- + hdataout : out std_logic_vector(7 downto 0); + hdataout_en_n : out std_logic; + hready_n : out std_logic; + cpu_if_gbit_en : out std_logic; + ---------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread : out std_logic; + tx_discfrm : out std_logic; + tx_staten : out std_logic; + tx_done : out std_logic; + tx_statvec : out std_logic_vector(30 downto 0); + ---------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error : out std_logic; + rx_stat_vector : out std_logic_vector(31 downto 0); + rx_dbout : out std_logic_vector(7 downto 0); + rx_write : out std_logic; + rx_stat_en : out std_logic; + rx_eof : out std_logic; + rx_error : out std_logic +); +end component; + + signal sd_rx_clk : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_kcntl_q, sd_tx_kcntl : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_data_q, sd_tx_data : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal xmit : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_correct_disp_q, sd_tx_correct_disp : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_data, sd_rx_data_q : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal sd_rx_kcntl, sd_rx_kcntl_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_disp_error, sd_rx_disp_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_cv_error, sd_rx_cv_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_power, rx_power : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal los, signal_detected : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rx_cdr_lol: std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_pll_lol, quad_rst : std_logic; + signal tx_pcs_rst, rx_pcs_rst, rx_serdes_rst : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + --signal rst_n : std_logic; + signal rx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal operational_rate : std_logic_vector(NUMBER_OF_GBE_LINKS * 2 - 1 downto 0); + signal an_complete : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_page_rx : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_lp_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_main_reset : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_restart_an : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_an_enable : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rxd, pcs_rxd_q, pcs_rxd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_rx_en, pcs_rx_en_q, pcs_rx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rx_er, pcs_rx_er_q, pcs_rx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_col, pcs_crs : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_txd, pcs_txd_q, pcs_txd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_tx_en, pcs_tx_en_q, pcs_tx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_tx_er, pcs_tx_er_q, pcs_tx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdataout_en_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hready_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hread_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hwrite_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hcs_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdata : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal tsm_haddr : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal rx_compensation_err, an_link_ok : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + signal synced_rst, ff : std_logic; + + signal fifo_eof_q, fifo_eof_qq, fifo_eof_qqq, fifo_eof_qqqq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rsl_rx_rdy,rsl_tx_rdy : std_logic; + + signal sci_data_in_i : std_logic_vector(7 downto 0); + signal sci_addr_i : std_logic_vector(5 downto 0); + signal sci_data_out_i : std_logic_vector(7 downto 0); + signal reset_n, sci_read_i, sci_write_i : std_logic; + signal sci_ch_i : std_logic_vector(4 downto 0); + signal wa_position : std_logic_vector(15 downto 0) := x"FFFF"; + signal wa_position_sel : std_logic_vector(3 downto 0); + + signal stat_fsm_reset_i, stat_tx_control_i, stat_rx_control_i : std_logic_vector(31 downto 0); + signal cnt_125_dbg : unsigned(30 downto 0) := (others => '0'); + +begin + + rx_power <= "1111"; + tx_power <= "1111"; + + --rst_n <= not RESET; + + reset_sync : process(GSR_N, CLK_SYS_IN) + begin + if (GSR_N = '0') then + ff <= '0'; + synced_rst <= '0'; + elsif rising_edge(CLK_SYS_IN) then + ff <= '1'; + synced_rst <= ff; + end if; + end process reset_sync; + + SD_TXDIS_OUT <= "0000"; + + CLK_125_OUT <= CLK_125_IN & CLK_125_IN & CLK_125_IN & CLK_125_IN; + CLK_125_RX_OUT <= sd_rx_clk; + + impl_gen : if DO_SIMULATION = 0 generate + + serdes_ch4_gen : if FPGA_TYPE /= 5 generate + gbe_serdes : entity work.serdes_gbe_4ch + port map( + ------------------ + -- CH0 -- + hdinp_ch0 => SD_RXD_P_IN(0), + hdinn_ch0 => SD_RXD_N_IN(0), + hdoutp_ch0 => SD_TXD_P_OUT(0), + hdoutn_ch0 => SD_TXD_N_OUT(0), + rxiclk_ch0 => sd_rx_clk(0), + txiclk_ch0 => CLK_125_IN, + rx_full_clk_ch0 => sd_rx_clk(0), + rx_half_clk_ch0 => open, + tx_full_clk_ch0 => open, + tx_half_clk_ch0 => open, + fpga_rxrefclk_ch0 => CLK_125_IN, + txdata_ch0 => sd_tx_data_q(7 downto 0), + tx_k_ch0 => sd_tx_kcntl_q(0), + xmit_ch0 => xmit(0), + tx_disp_correct_ch0 => sd_tx_correct_disp_q(0), + rxdata_ch0 => sd_rx_data(7 downto 0), + rx_k_ch0 => sd_rx_kcntl(0), + rx_disp_err_ch0 => sd_rx_disp_error(0), + rx_cv_err_ch0 => sd_rx_cv_error(0), + rx_serdes_rst_ch0_c => rx_serdes_rst(0), + sb_felb_ch0_c => '0', + sb_felb_rst_ch0_c => '0', + tx_pwrup_ch0_c => tx_power(0), + rx_pwrup_ch0_c => rx_power(0), + rx_los_low_ch0_s => los(0), + lsm_status_ch0_s => signal_detected(0), + rx_cdr_lol_ch0_s => rx_cdr_lol(0), + tx_pcs_rst_ch0_c => tx_pcs_rst(0), + rx_pcs_rst_ch0_c => rx_pcs_rst(0), + -- CH1 -- + hdinp_ch1 => SD_RXD_P_IN(1), + hdinn_ch1 => SD_RXD_N_IN(1), + hdoutp_ch1 => SD_TXD_P_OUT(1), + hdoutn_ch1 => SD_TXD_N_OUT(1), + rxiclk_ch1 => sd_rx_clk(1), + txiclk_ch1 => CLK_125_IN, + rx_full_clk_ch1 => sd_rx_clk(1), + rx_half_clk_ch1 => open, + tx_full_clk_ch1 => open, + tx_half_clk_ch1 => open, + fpga_rxrefclk_ch1 => CLK_125_IN, + txdata_ch1 => sd_tx_data_q(15 downto 8), + tx_k_ch1 => sd_tx_kcntl_q(1), + xmit_ch1 => xmit(1), + tx_disp_correct_ch1 => sd_tx_correct_disp_q(1), + rxdata_ch1 => sd_rx_data(15 downto 8), + rx_k_ch1 => sd_rx_kcntl(1), + rx_disp_err_ch1 => sd_rx_disp_error(1), + rx_cv_err_ch1 => sd_rx_cv_error(1), + rx_serdes_rst_ch1_c => rx_serdes_rst(1), + sb_felb_ch1_c => '0', + sb_felb_rst_ch1_c => '0', + tx_pwrup_ch1_c => tx_power(1), + rx_pwrup_ch1_c => rx_power(1), + rx_los_low_ch1_s => los(1), + lsm_status_ch1_s => signal_detected(1), + rx_cdr_lol_ch1_s => rx_cdr_lol(1), + tx_pcs_rst_ch1_c => tx_pcs_rst(1), + rx_pcs_rst_ch1_c => rx_pcs_rst(1), + -- CH2 -- + hdinp_ch2 => SD_RXD_P_IN(2), + hdinn_ch2 => SD_RXD_N_IN(2), + hdoutp_ch2 => SD_TXD_P_OUT(2), + hdoutn_ch2 => SD_TXD_N_OUT(2), + rxiclk_ch2 => sd_rx_clk(2), + txiclk_ch2 => CLK_125_IN, + rx_full_clk_ch2 => sd_rx_clk(2), + rx_half_clk_ch2 => open, + tx_full_clk_ch2 => open, + tx_half_clk_ch2 => open, + fpga_rxrefclk_ch2 => CLK_125_IN, + txdata_ch2 => sd_tx_data_q(23 downto 16), + tx_k_ch2 => sd_tx_kcntl_q(2), + xmit_ch2 => xmit(2), + tx_disp_correct_ch2 => sd_tx_correct_disp_q(2), + rxdata_ch2 => sd_rx_data(23 downto 16), + rx_k_ch2 => sd_rx_kcntl(2), + rx_disp_err_ch2 => sd_rx_disp_error(2), + rx_cv_err_ch2 => sd_rx_cv_error(2), + rx_serdes_rst_ch2_c => rx_serdes_rst(2), + sb_felb_ch2_c => '0', + sb_felb_rst_ch2_c => '0', + tx_pwrup_ch2_c => tx_power(2), + rx_pwrup_ch2_c => rx_power(2), + rx_los_low_ch2_s => los(2), + lsm_status_ch2_s => signal_detected(2), + rx_cdr_lol_ch2_s => rx_cdr_lol(2), + tx_pcs_rst_ch2_c => tx_pcs_rst(2), + rx_pcs_rst_ch2_c => rx_pcs_rst(2), + -- CH3 -- + hdinp_ch3 => SD_RXD_P_IN(3), + hdinn_ch3 => SD_RXD_N_IN(3), + hdoutp_ch3 => SD_TXD_P_OUT(3), + hdoutn_ch3 => SD_TXD_N_OUT(3), + rxiclk_ch3 => sd_rx_clk(3), + txiclk_ch3 => CLK_125_IN, + rx_full_clk_ch3 => sd_rx_clk(3), + rx_half_clk_ch3 => open, + tx_full_clk_ch3 => open, + tx_half_clk_ch3 => open, + fpga_rxrefclk_ch3 => CLK_125_IN, + txdata_ch3 => sd_tx_data_q(31 downto 24), + tx_k_ch3 => sd_tx_kcntl_q(3), + xmit_ch3 => xmit(3), + tx_disp_correct_ch3 => sd_tx_correct_disp_q(3), + rxdata_ch3 => sd_rx_data(31 downto 24), + rx_k_ch3 => sd_rx_kcntl(3), + rx_disp_err_ch3 => sd_rx_disp_error(3), + rx_cv_err_ch3 => sd_rx_cv_error(3), + rx_serdes_rst_ch3_c => rx_serdes_rst(3), + sb_felb_ch3_c => '0', + sb_felb_rst_ch3_c => '0', + tx_pwrup_ch3_c => tx_power(3), + rx_pwrup_ch3_c => rx_power(3), + rx_los_low_ch3_s => los(3), + lsm_status_ch3_s => signal_detected(3), + rx_cdr_lol_ch3_s => rx_cdr_lol(3), + tx_pcs_rst_ch3_c => tx_pcs_rst(3), + rx_pcs_rst_ch3_c => rx_pcs_rst(3), + ---- Miscillaneous ports + fpga_txrefclk => CLK_125_IN, + tx_serdes_rst_c => '0', + tx_pll_lol_qd_s => tx_pll_lol, + tx_sync_qd_c => '0', + rst_qd_c => quad_rst, + serdes_rst_qd_c => '0' + ); + end generate serdes_ch4_gen; + + reset_n <= not RESET; + + serdes_ch1_gen : if FPGA_TYPE = 5 generate + gbe_serdes : entity work.GbePcsExtrefclk + port map( + sgmii_ecp5_rx_cv_err => sd_rx_cv_error(0 downto 0), + sgmii_ecp5_rx_disp_err => sd_rx_disp_error(0 downto 0), + sgmii_ecp5_rx_k => sd_rx_kcntl(0 downto 0), + sgmii_ecp5_rxdata => sd_rx_data(7 downto 0), + sgmii_ecp5_sci_addr => sci_addr_i, + sgmii_ecp5_sci_rddata => sci_data_out_i, + sgmii_ecp5_sci_wrdata => sci_data_in_i, + sgmii_ecp5_tx_disp_correct => sd_tx_correct_disp_q(0 downto 0), + sgmii_ecp5_tx_k => sd_tx_kcntl_q(0 downto 0), + sgmii_ecp5_txdata => sd_tx_data_q(7 downto 0), + sgmii_ecp5_xmit => xmit(0 downto 0), + extref_refclkn => SD_REFCLK_N_IN, + extref_refclkp => SD_REFCLK_P_IN, + sgmii_ecp5_ctc_del_s => open, + sgmii_ecp5_ctc_ins_s => open, + sgmii_ecp5_ctc_orun_s => open, + sgmii_ecp5_ctc_urun_s => open, + sgmii_ecp5_cyawstn => '0', + sgmii_ecp5_hdinn => SD_RXD_N_IN(0), + sgmii_ecp5_hdinp => SD_RXD_P_IN(0), + sgmii_ecp5_hdoutn => SD_TXD_N_OUT(0), + sgmii_ecp5_hdoutp => SD_TXD_P_OUT(0), + sgmii_ecp5_lsm_status_s => signal_detected(0), + sgmii_ecp5_pll_lol => tx_pll_lol, + sgmii_ecp5_rsl_disable => '0', + sgmii_ecp5_rsl_rst => '0', + sgmii_ecp5_rsl_rx_rdy => rsl_rx_rdy, + sgmii_ecp5_rsl_tx_rdy => rsl_tx_rdy, + sgmii_ecp5_rst_dual_c => quad_rst, + sgmii_ecp5_rx_cdr_lol_s => rx_cdr_lol(0), + sgmii_ecp5_rx_los_low_s => los(0), + sgmii_ecp5_rx_pcs_rst_c => rx_pcs_rst(0), + sgmii_ecp5_rx_pwrup_c => rx_power(0), + sgmii_ecp5_rx_serdes_rst_c => rx_serdes_rst(0), + sgmii_ecp5_sci_en => reset_n, + sgmii_ecp5_sci_en_dual => reset_n, + sgmii_ecp5_sci_int => open, + sgmii_ecp5_sci_rd => sci_read_i, + sgmii_ecp5_sci_sel => sci_ch_i(0), + sgmii_ecp5_sci_sel_dual => sci_ch_i(4), + sgmii_ecp5_sci_wrn => sci_write_i, + sgmii_ecp5_serdes_pdb => '1', + sgmii_ecp5_serdes_rst_dual_c => '0', + sgmii_ecp5_signal_detect_c => '0', + sgmii_ecp5_tx_pclk => sd_rx_clk(0), + sgmii_ecp5_tx_pcs_rst_c => tx_pcs_rst(0), + sgmii_ecp5_tx_pwrup_c => tx_power(0), + sgmii_ecp5_tx_serdes_rst_c => '0', + sgmii_ecp5_txi_clk => sd_rx_clk(0) + ); + + end generate serdes_ch1_gen; + + wa_position_sel <= x"0"; +--TO DO + THE_PCS_RESET : entity work.pcs_sync_reset + generic map( + IS_SYNC_SLAVE => 0,--????ß + IS_TX_RESET => 1 + ) + port map( + CLK_SYS => CLK_SYS_IN, + CLK_RXI => sd_rx_clk(0), --??correct?? + CLK_REF => CLK_125_IN, + RESET => RESET, + CLEAR => '0', + + SFP_LOS => SD_LOS_IN(0), + TX_LOL => tx_pll_lol, + RX_CDR_LOL => rx_cdr_lol(0), + RX_LOS => los(0), + WA_POSITION => wa_position_sel, + + RX_SERDES_RST => rx_serdes_rst(0), + RX_PCS_RST => rx_pcs_rst(0), + QUAD_RST => quad_rst, + TX_PCS_RST => tx_pcs_rst(0), + + SERDES_RX_READY_IN => rsl_rx_rdy, + SERDES_TX_READY_IN => rsl_tx_rdy, + + STAT_TX_CONTROL => stat_tx_control_i, + STAT_RX_CONTROL => stat_rx_control_i, + DEBUG_TX_CONTROL => open,--debug_tx_control_i, + DEBUG_RX_CONTROL => open,--debug_rx_control_i, + STAT_RESET => stat_fsm_reset_i, + DEBUG_OUT => open--debug_med_sync_control_i + ); + + + + THE_SCI_READER : entity work.sci_reader + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + --SCI + SCI_WRDATA => sci_data_in_i, + SCI_RDDATA => sci_data_out_i, + SCI_ADDR => sci_addr_i, + SCI_SEL => sci_ch_i, + SCI_RD => sci_read_i, + SCI_WR => sci_write_i, + + WA_POS_OUT => wa_position, + + --Slowcontrol + BUS_RX => BUS_SCI_RX, + BUS_TX => BUS_SCI_TX, + + MEDIA_STATUS_REG_IN(31 downto 0) => stat_rx_control_i, + MEDIA_STATUS_REG_IN(63 downto 32) => stat_tx_control_i, + MEDIA_STATUS_REG_IN(95 downto 64) => stat_fsm_reset_i, + --MEDIA_STATUS_REG_IN(127 downto 96) => stat_med, + MEDIA_STATUS_REG_IN(255 downto 96) => (others => '0'), + DEBUG_OUT => open + ); + + DEBUG_CLK : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + cnt_125_dbg <= cnt_125_dbg + 1; + end if; + end process DEBUG_CLK; + + DEBUG : process(CLK_SYS_IN) + begin + if rising_edge(CLK_SYS_IN) then + DEBUG_OUT(0) <= xmit(0); + DEBUG_OUT(1) <= los(0); + DEBUG_OUT(2) <= signal_detected(0); + DEBUG_OUT(3) <= tx_pll_lol; + DEBUG_OUT(4) <= rx_cdr_lol(0); + DEBUG_OUT(5) <= sd_rx_cv_error(0); + DEBUG_OUT(6) <= sd_rx_disp_error(0); + DEBUG_OUT(8 downto 7) <= operational_rate(1 downto 0); + DEBUG_OUT(9) <= rx_compensation_err(0); + DEBUG_OUT(10)<= an_link_ok(0); + DEBUG_OUT(11)<= MAC_READY_CONF_OUT(0); + DEBUG_OUT(12)<= an_complete(0); + DEBUG_OUT(13)<= rsl_rx_rdy; + DEBUG_OUT(14)<= rsl_tx_rdy; + DEBUG_OUT(15)<= cnt_125_dbg(30); + DEBUG_OUT(19 downto 16) <= '0' & '0' & '0' & '0'; + DEBUG_OUT(255 downto 20) <= (others => '0'); + end if; + end process DEBUG; + + + SYNC_TX_PROC : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + sd_tx_data_q <= sd_tx_data; + sd_tx_kcntl_q <= sd_tx_kcntl; + sd_tx_correct_disp_q <= sd_tx_correct_disp; + end if; + end process SYNC_TX_PROC; + + + pcs_gen : for i in 0 to NUMBER_OF_GBE_LINKS - 1 generate + + pcs_active_gen : if LINKS_ACTIVE(i) = '1' generate + + SYNC_RX_PROC : process(sd_rx_clk) + begin + if rising_edge(sd_rx_clk(i)) then + sd_rx_data_q( (i + 1) * 8 - 1 downto i * 8) <= sd_rx_data( (i + 1) * 8 - 1 downto i * 8); + sd_rx_kcntl_q(i) <= sd_rx_kcntl(i); + sd_rx_disp_error_q(i) <= sd_rx_disp_error(i); + sd_rx_cv_error_q(i) <= sd_rx_cv_error(i); + end if; + end process SYNC_RX_PROC; + + SGMII_GBE_PCS : sgmii_gbe_pcs35_core + port map( + rst_n => synced_rst, --rst_n, + signal_detect => signal_detected(i), + gbe_mode => '1', + sgmii_mode => '0', + operational_rate => operational_rate( (i + 1) * 2 - 1 downto (i * 2)), + debug_link_timer_short => '0', + + force_isolate => '0', + force_loopback => '0', + force_unidir => '0', + + rx_compensation_err => rx_compensation_err(i), + + ctc_drop_flag => open, + ctc_add_flag => open, + an_link_ok => an_link_ok(i), + + -- MAC interface + tx_clk_125 => CLK_125_IN, --refclkcore, -- original clock from SerDes + tx_clock_enable_source => tx_clk_en(i), + tx_clock_enable_sink => tx_clk_en(i), + tx_d => pcs_txd( (i + 1) * 8 - 1 downto i * 8), -- TX data from MAC + tx_en => pcs_tx_en(i), -- TX data enable from MAC + tx_er => pcs_tx_er(i), -- TX error from MAC + rx_clk_125 => sd_rx_clk(i), + rx_clock_enable_source => rx_clk_en(i), + rx_clock_enable_sink => rx_clk_en(i), + rx_d => pcs_rxd( (i + 1) * 8 - 1 downto i * 8), -- RX data to MAC + rx_dv => pcs_rx_en(i), -- RX data enable to MAC + rx_er => pcs_rx_er(i), -- RX error to MAC + col => pcs_col(i), + crs => pcs_crs(i), + + -- SerDes interface + tx_data => sd_tx_data( (i + 1) * 8 - 1 downto i * 8), -- TX data to SerDes + tx_kcntl => sd_tx_kcntl(i), -- TX komma control to SerDes + tx_disparity_cntl => sd_tx_correct_disp(i), -- idle parity state control in IPG (to SerDes) + + xmit_autoneg => xmit(i), + + serdes_recovered_clk => sd_rx_clk(i), -- 125MHz recovered from receive bit stream + rx_data => sd_rx_data_q( (i + 1) * 8 - 1 downto i * 8), -- RX data from SerDes + rx_kcntl => sd_rx_kcntl_q(i), -- RX komma control from SerDes + rx_err_decode_mode => '0', -- receive error control mode fixed to normal + rx_even => '0', -- unused (receive error control mode = normal, tie to GND) + rx_disp_err => sd_rx_disp_error_q(i), -- RX disparity error from SerDes + rx_cv_err => sd_rx_cv_error_q(i), -- RX code violation error from SerDes + -- Autonegotiation stuff + mr_an_complete => an_complete(i), + mr_page_rx => mr_page_rx(i), + mr_lp_adv_ability => mr_lp_adv_ability( (i + 1) * 16 - 1 downto i * 16), + mr_main_reset => mr_main_reset(i), + mr_an_enable => '1', + mr_restart_an => '0',--mr_restart_an(i), + mr_adv_ability => mr_adv_ability( (i + 1) * 16 - 1 downto i * 16) + ); + + MAC_AN_READY_OUT(i) <= an_complete(i); + +-- u0_reset_controller_pcs : reset_controller_pcs port map( +-- rst_n => synced_rst, --rst_n, +-- clk => CLK_125_IN, +-- tx_plol => tx_pll_lol, +-- rx_cdr_lol => rx_cdr_lol(i), +-- quad_rst_out => open, --quad_rst, +-- tx_pcs_rst_out => tx_pcs_rst(i), +-- rx_pcs_rst_out => rx_pcs_rst(i) +-- ); +-- +-- u0_reset_controller_cdr : reset_controller_cdr port map( +-- rst_n => synced_rst, --rst_n, +-- clk => CLK_125_IN, +-- cdr_lol => rx_cdr_lol(i), +-- cdr_rst_out => rx_serdes_rst(i) +-- ); + + u0_rate_resolution : rate_resolution port map( + gbe_mode => '1', + sgmii_mode => '0', + an_enable => '1', + advertised_rate => mr_adv_ability(i * 16 + 11 downto i * 16 + 10), + link_partner_rate => mr_lp_adv_ability(i * 16 + 11 downto i * 16 + 10), + non_an_rate => "10", -- 1Gbps is rate when auto-negotiation disabled + + operational_rate => operational_rate( (i + 1) * 2 - 1 downto i * 2) + ); + + u0_ri : register_interface_hb port map( + -- Control Signals + rst_n => synced_rst, --rst_n, + hclk => CLK_125_IN, + gbe_mode => '1', + sgmii_mode => '0', + + -- Host Bus + hcs_n => '1', + hwrite_n => '1', + haddr => (others => '0'), + hdatain => (others => '0'), + + hdataout => open, + hready_n => open, + + -- Register Outputs + mr_an_enable => mr_an_enable(i), + mr_restart_an => mr_restart_an(i), + mr_main_reset => mr_main_reset(i), + mr_adv_ability => mr_adv_ability( (i + 1 ) * 16 - 1 downto i * 16), + + -- Register Inputs + mr_an_complete => an_complete(i), + mr_page_rx => mr_page_rx(i), + mr_lp_adv_ability => mr_lp_adv_ability( (i + 1 ) * 16 - 1 downto i * 16) + ); + + MAC: tsmac35 + port map( + ----------------- clock and reset port declarations ------------------ + hclk => CLK_SYS_IN, + txmac_clk => CLK_125_IN, + rxmac_clk => sd_rx_clk(i), + reset_n => GSR_N, + txmac_clk_en => '1', + rxmac_clk_en => '1', + ------------------- Input signals to the GMII ---------------- + rxd => pcs_rxd_qq( (i + 1) * 8 - 1 downto i * 8), + rx_dv => pcs_rx_en_qq(i), + rx_er => pcs_rx_er_qq(i), + col => pcs_col(i), + crs => pcs_crs(i), + -------------------- Input signals to the CPU I/F ------------------- + haddr => tsm_haddr( (i + 1) * 8 - 1 downto i * 8), + hdatain => tsm_hdata( (i + 1) * 8 - 1 downto i * 8), + hcs_n => tsm_hcs_n(i), + hwrite_n => tsm_hwrite_n(i), + hread_n => tsm_hread_n(i), + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata => MAC_TX_DATA_IN( (i + 1) * 8 - 1 downto i * 8), + tx_fifoavail => MAC_FIFOAVAIL_IN(i), + tx_fifoeof => MAC_FIFOEOF_IN(i), + tx_fifoempty => MAC_FIFOEMPTY_IN(i), + tx_sndpaustim => x"0000", + tx_sndpausreq => '0', + tx_fifoctrl => '0', -- always data frame + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full => MAC_RX_FIFOFULL_IN(i), --'0', + ignore_pkt => '0', + ---------------- Output signals from the GMII ----------------------- + txd => pcs_txd( (i + 1) * 8 - 1 downto i * 8), + tx_en => pcs_tx_en(i), + tx_er => pcs_tx_er(i), + ----------------- Output signals from the CPU I/F ------------------- + hdataout => open, + hdataout_en_n => tsm_hdataout_en_n(i), + hready_n => tsm_hready_n(i), + cpu_if_gbit_en => open, + ------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread => MAC_TX_READ_OUT(i), + tx_discfrm => MAC_TX_DISCRFRM_OUT(i), + tx_staten => MAC_TX_STAT_EN_OUT(i), + tx_statvec => MAC_TX_STATS_OUT( (i + 1) * 31 - 1 downto i * 31), + tx_done => MAC_TX_DONE_OUT(i), + ------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error => MAC_RX_FIFO_ERR_OUT(i), + rx_stat_vector => MAC_RX_STATS_OUT( (i + 1) * 32 - 1 downto i * 32), + rx_dbout => MAC_RX_DATA_OUT( (i + 1) * 8 - 1 downto i * 8), + rx_write => MAC_RX_WRITE_OUT(i), + rx_stat_en => MAC_RX_STAT_EN_OUT(i), + rx_eof => MAC_RX_EOF_OUT(i), + rx_error => MAC_RX_ERROR_OUT(i) + ); + + TSMAC_CONTROLLER : trb_net16_gbe_mac_control + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + -- signals to/from main controller + MC_TSMAC_READY_OUT => MAC_READY_CONF_OUT(i), + MC_RECONF_IN => MAC_RECONF_IN(i), + MC_GBE_EN_IN => '1', + MC_RX_DISCARD_FCS => '0', + MC_PROMISC_IN => '1', + MC_MAC_ADDR_IN => (others => '0'), + + -- signal to/from Host interface of TriSpeed MAC + TSM_HADDR_OUT => tsm_haddr( (i + 1) * 8 - 1 downto i * 8), + TSM_HDATA_OUT => tsm_hdata( (i + 1) * 8 - 1 downto i * 8), + TSM_HCS_N_OUT => tsm_hcs_n(i), + TSM_HWRITE_N_OUT => tsm_hwrite_n(i), + TSM_HREAD_N_OUT => tsm_hread_n(i), + TSM_HREADY_N_IN => tsm_hready_n(i), + TSM_HDATA_EN_N_IN => tsm_hdataout_en_n(i), + + DEBUG_OUT => open + ); + + SYNC_GMII_RX_PROC : process(sd_rx_clk) + begin + if rising_edge(sd_rx_clk(i)) then + pcs_rxd_q( (i + 1) * 8 - 1 downto i * 8) <= pcs_rxd( (i + 1) * 8 - 1 downto i * 8); + pcs_rx_en_q(i) <= pcs_rx_en(i); + pcs_rx_er_q(i) <= pcs_rx_er(i); + + pcs_rxd_qq( (i + 1) * 8 - 1 downto i * 8) <= pcs_rxd_q( (i + 1) * 8 - 1 downto i * 8); + pcs_rx_en_qq(i) <= pcs_rx_en_q(i); + pcs_rx_er_qq(i) <= pcs_rx_er_q(i); + end if; + end process SYNC_GMII_RX_PROC; + + SYNC_GMII_TX_PROC : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + pcs_txd_q( (i + 1) * 8 - 1 downto i * 8) <= pcs_txd( (i + 1) * 8 - 1 downto i * 8); + pcs_tx_en_q <= pcs_tx_en; + pcs_tx_er_q <= pcs_tx_er; + + pcs_txd_qq( (i + 1) * 8 - 1 downto i * 8) <= pcs_txd_q( (i + 1) * 8 - 1 downto i * 8); + pcs_tx_en_qq <= pcs_tx_en_q; + pcs_tx_er_qq <= pcs_tx_er_q; + end if; + end process SYNC_GMII_TX_PROC; + + end generate pcs_active_gen; + + end generate pcs_gen; + + end generate impl_gen; + + sim_gen : if DO_SIMULATION = 1 generate + + process + begin + + MAC_AN_READY_OUT <= (others => '0'); + wait for 2 us; + MAC_AN_READY_OUT <= (others => '1'); + + wait; + end process; + + process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + MAC_TX_READ_OUT <= MAC_FIFOAVAIL_IN; + + fifo_eof_q <= MAC_FIFOEOF_IN; + fifo_eof_qq <= fifo_eof_q; + fifo_eof_qqq <= fifo_eof_qq; + fifo_eof_qqqq <= fifo_eof_qqq; + + MAC_TX_DONE_OUT <= fifo_eof_qqqq; -- MAC_FIFOEOF_IN; + end if; + end process; + + + end generate sim_gen; + + +end architecture RTL; diff --git a/gbe_trb/base/gbe_med_interface_ecp5.vhd b/gbe_trb/base/gbe_med_interface_ecp5.vhd new file mode 100644 index 0000000..a0da7ea --- /dev/null +++ b/gbe_trb/base/gbe_med_interface_ecp5.vhd @@ -0,0 +1,644 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE IEEE.std_logic_ARITH.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; + +library work; +use work.trb_net_std.all; +use work.trb_net_components.all; + +use work.trb_net_gbe_components.all; +use work.config.all; + +entity gbe_med_interface_ecp5 is + generic ( + DO_SIMULATION : integer range 0 to 1; + NUMBER_OF_GBE_LINKS : integer range 1 to 4; + LINKS_ACTIVE : std_logic_vector(3 downto 0) + ); + port ( + RESET : in std_logic; + GSR_N : in std_logic; + CLK_SYS_IN : in std_logic; + CLK_125_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + CLK_125_IN : in std_logic; + CLK_125_RX_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC status and config + MAC_READY_CONF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RECONF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_AN_READY_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC data interface + MAC_FIFOAVAIL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEOF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEMPTY_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_FIFOFULL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_TX_DATA_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_TX_READ_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_DISCRFRM_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 31 - 1 downto 0); + MAC_TX_DONE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_RX_FIFO_ERR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 32 - 1 downto 0); + MAC_RX_DATA_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_RX_WRITE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_EOF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_ERROR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + --SFP Connection + SD_RXD_P_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_RXD_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_P_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_N_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_PRSNT_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_LOS_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP Loss Of Signal ('0' = OK, '1' = no signal) + SD_TXDIS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP disable + + DEBUG_OUT : out std_logic_vector(255 downto 0) + ); +end entity gbe_med_interface_ecp5; + +architecture RTL of gbe_med_interface_ecp5 is + + component sgmii_channel_smi_core + port( + rst_n : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + operational_rate : in std_logic_vector(1 downto 0); + debug_link_timer_short : in std_logic; + force_isolate : in std_logic; + force_loopback : in std_logic; + force_unidir : in std_logic; + --rx_compensation_err : out std_logic; + --ctc_drop_flag : out std_logic; + --ctc_add_flag : out std_logic; + an_link_ok : out std_logic; + tx_clock_enable_sink : in std_logic; + tx_clock_enable_source : out std_logic; + + rx_clock_enable_sink : in std_logic; + rx_clock_enable_source : out std_logic; + tx_clk_125 : in std_logic; + rx_clk_125 : in std_logic; + tx_d : in std_logic_vector(7 downto 0); + tx_en : in std_logic; + tx_er : in std_logic; + rx_d : out std_logic_vector(7 downto 0); + rx_dv : out std_logic; + rx_er : out std_logic; + col : out std_logic; + crs : out std_logic; + mr_an_complete : out std_logic; + mr_page_rx : out std_logic; + mr_lp_adv_ability : out std_logic_vector(15 downto 0); + mr_main_reset : in std_logic; + mr_an_enable : in std_logic; + mr_restart_an : in std_logic; + mr_adv_ability : in std_logic_vector(15 downto 0); + + hdoutp : out std_logic; + hdoutn : out std_logic; + hdinp : in std_logic; + hdinn : in std_logic; + + sli_rst : in std_logic; + serdes_rst_dual_c : out std_logic; + tx_serdes_rst_c : out std_logic; + serdes_pdb : out std_logic; + tx_pwrup_c : out std_logic; + + pll_refclki : in std_logic; + rxrefclk : in std_logic; + + sci_wrdata : in std_logic_vector(7 downto 0); + sci_addr : in std_logic_vector(5 downto 0); + sci_rddata : out std_logic_vector(7 downto 0); + sci_en_dual : in std_logic; + sci_sel_dual : in std_logic; + sci_en : in std_logic; + sci_sel : in std_logic; + sci_rd : in std_logic; + sci_wrn : in std_logic; + sci_int : out std_logic; + cyawstn : in std_logic; + + rx_cdr_lol_s : out std_logic; + + tx_pcs_rst_c : in std_logic; + rx_pcs_rst_c : in std_logic; + rx_serdes_rst_c : in std_logic; + + rst_dual_c : in std_logic; + pll_lol : out std_logic; + + mr_power_down : in std_logic + ); +end component; + +component rate_resolution port ( + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + an_enable : in std_logic; + advertised_rate : in std_logic_vector(1 downto 0); + link_partner_rate : in std_logic_vector(1 downto 0); + non_an_rate : in std_logic_vector(1 downto 0); + operational_rate : out std_logic_vector(1 downto 0) + ); +end component; + +component register_interface_hb port ( + --Control Signals + rst_n : in std_logic; + hclk : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + --Host Bus + hcs_n : in std_logic; + hwrite_n : in std_logic; + haddr : in std_logic_vector(3 downto 0); + hdatain : in std_logic_vector(7 downto 0); + + hdataout : out std_logic_vector(7 downto 0); + hready_n : out std_logic; + --Register Inputs + mr_stat_1000base_x_fd : in std_logic; + mr_stat_1000base_x_hd : in std_logic; + mr_stat_1000base_t_fd : in std_logic; + mr_stat_1000base_t_hd : in std_logic; + mr_stat_100base_t4 : in std_logic; + mr_stat_100base_x_fd : in std_logic; + mr_stat_100base_x_hd : in std_logic; + mr_stat_10mbps_fd : in std_logic; + mr_stat_10mbps_hd : in std_logic; + mr_stat_100base_t2_fd : in std_logic; + mr_stat_100base_t2_hd : in std_logic; + mr_stat_extended_stat : in std_logic; + mr_stat_unidir_able : in std_logic; + mr_stat_preamb_supr : in std_logic; + mr_stat_an_complete : in std_logic; + mr_stat_remote_fault : in std_logic; + mr_stat_an_able : in std_logic; + mr_stat_link_stat : in std_logic; + mr_stat_jab_det : in std_logic; + mr_stat_extended_cap : in std_logic; + mr_page_rx : in std_logic; + mr_lp_adv_ability : in std_logic_vector(15 downto 0); + --Register Outputs + mr_main_reset : out std_logic; + mr_loopback_enable : out std_logic; + mr_speed_selection : out std_logic_vector(1 downto 0); + mr_an_enable : out std_logic; + mr_power_down : out std_logic; + mr_isolate : out std_logic; + mr_restart_an : out std_logic; + mr_duplex_mode : out std_logic; + mr_col_test : out std_logic; + mr_unidir_enable : out std_logic; + mr_adv_ability : out std_logic_vector(15 downto 0) + ); +end component; + +component tsmac35 --tsmac36 --tsmac35 +port( + --------------- clock and reset port declarations ------------------ + hclk : in std_logic; + txmac_clk : in std_logic; + rxmac_clk : in std_logic; + reset_n : in std_logic; + txmac_clk_en : in std_logic; + rxmac_clk_en : in std_logic; + ------------------- Input signals to the GMII ---------------- + rxd : in std_logic_vector(7 downto 0); + rx_dv : in std_logic; + rx_er : in std_logic; + col : in std_logic; + crs : in std_logic; + -------------------- Input signals to the CPU I/F ------------------- + haddr : in std_logic_vector(7 downto 0); + hdatain : in std_logic_vector(7 downto 0); + hcs_n : in std_logic; + hwrite_n : in std_logic; + hread_n : in std_logic; + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata : in std_logic_vector(7 downto 0); + tx_fifoavail : in std_logic; + tx_fifoeof : in std_logic; + tx_fifoempty : in std_logic; + tx_sndpaustim : in std_logic_vector(15 downto 0); + tx_sndpausreq : in std_logic; + tx_fifoctrl : in std_logic; + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full : in std_logic; + ignore_pkt : in std_logic; + -------------------- Output signals from the GMII ----------------------- + txd : out std_logic_vector(7 downto 0); + tx_en : out std_logic; + tx_er : out std_logic; + -------------------- Output signals from the CPU I/F ------------------- + hdataout : out std_logic_vector(7 downto 0); + hdataout_en_n : out std_logic; + hready_n : out std_logic; + cpu_if_gbit_en : out std_logic; + ---------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread : out std_logic; + tx_discfrm : out std_logic; + tx_staten : out std_logic; + tx_done : out std_logic; + tx_statvec : out std_logic_vector(30 downto 0); + ---------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error : out std_logic; + rx_stat_vector : out std_logic_vector(31 downto 0); + rx_dbout : out std_logic_vector(7 downto 0); + rx_write : out std_logic; + rx_stat_en : out std_logic; + rx_eof : out std_logic; + rx_error : out std_logic +); +end component; + + signal sd_rx_clk : std_logic; + signal xmit : std_logic; + signal rx_cdr_lol: std_logic; + signal tx_pll_lol, quad_rst : std_logic; + --signal rst_n : std_logic; + signal rx_clk_en : std_logic; + signal tx_clk_en : std_logic; + signal operational_rate : std_logic_vector(1 downto 0); + signal an_complete : std_logic; + signal mr_page_rx : std_logic; + signal mr_lp_adv_ability : std_logic_vector(15 downto 0); + signal mr_main_reset : std_logic; + signal mr_restart_an : std_logic; + signal mr_adv_ability : std_logic_vector(15 downto 0); + signal mr_an_enable : std_logic; + signal pcs_rxd, pcs_rxd_q, pcs_rxd_qq : std_logic_vector(7 downto 0); + signal pcs_rx_en, pcs_rx_en_q, pcs_rx_en_qq : std_logic; + signal pcs_rx_er, pcs_rx_er_q, pcs_rx_er_qq : std_logic; + signal pcs_col, pcs_crs : std_logic; + signal pcs_txd, pcs_txd_q, pcs_txd_qq : std_logic_vector(7 downto 0); + signal pcs_tx_en, pcs_tx_en_q, pcs_tx_en_qq : std_logic; + signal pcs_tx_er, pcs_tx_er_q, pcs_tx_er_qq : std_logic; + signal tsm_hdataout_en_n : std_logic; + signal tsm_hready_n : std_logic; + signal tsm_hread_n : std_logic; + signal tsm_hwrite_n : std_logic; + signal tsm_hcs_n : std_logic; + signal tsm_hdata : std_logic_vector(7 downto 0); + signal tsm_haddr : std_logic_vector(7 downto 0); + + signal synced_rst, ff : std_logic; + + signal fifo_eof_q, fifo_eof_qq, fifo_eof_qqq, fifo_eof_qqqq : std_logic; + + + signal serdes_rst_dual_c : std_logic; + signal sli_rst : std_logic; + signal tx_serdes_rst_c : std_logic; + signal serdes_pdb : std_logic; + signal tx_pwrup_c : std_logic; + signal reset_n : std_logic; + signal mr_power_down : std_logic; + + signal mr_unidir_enable : std_logic; + signal mr_isolate : std_logic; + signal mr_loopback_enable : std_logic; + signal an_link_ok : std_logic; + signal mr_speed_selection : std_logic_vector(1 downto 0); + +begin + + + sli_rst <= serdes_rst_dual_c or tx_serdes_rst_c or (not serdes_pdb) or (not tx_pwrup_c); + --rst_n <= not RESET; + + reset_sync : process(GSR_N, CLK_SYS_IN) + begin + if (GSR_N = '0') then + ff <= '0'; + synced_rst <= '0'; + elsif rising_edge(CLK_SYS_IN) then + ff <= '1'; + synced_rst <= ff; + end if; + end process reset_sync; + + SD_TXDIS_OUT <= "0000"; + + CLK_125_OUT <= CLK_125_IN & CLK_125_IN & CLK_125_IN & CLK_125_IN; + sd_rx_clk <= CLK_125_IN; + CLK_125_RX_OUT <= sd_rx_clk & sd_rx_clk & sd_rx_clk & sd_rx_clk; + + impl_gen : if DO_SIMULATION = 0 generate + + gbe_serdes : sgmii_channel_smi_core + port map( + rst_n => not RESET, + gbe_mode => '1', + sgmii_mode => '0', + operational_rate => operational_rate, + debug_link_timer_short => '0', + force_isolate => '0',--mr_isolate, + force_loopback => '0',--mr_loopback_enable, --0, + force_unidir => '0',--mr_unidir_enable, + --rx_compensation_err : out std_logic; + --ctc_drop_flag : out std_logic; + --ctc_add_flag : out std_logic; + an_link_ok => an_link_ok, + tx_clock_enable_sink => tx_clk_en, + tx_clock_enable_source => tx_clk_en, + rx_clock_enable_sink => rx_clk_en, + rx_clock_enable_source => rx_clk_en, + tx_clk_125 => CLK_125_IN, + rx_clk_125 => CLK_125_IN, + + --START TSMAC + tx_d => pcs_txd, --: in std_logic_vector(7 downto 0); + tx_en => pcs_tx_en, + tx_er => pcs_tx_er, + rx_d => pcs_rxd, + rx_dv => pcs_rx_en, + rx_er => pcs_rx_er, + col => pcs_col, + crs => pcs_crs, + --END TSMAC + + --Managment Control Outputs + mr_an_complete => an_complete, + mr_page_rx => mr_page_rx, + mr_lp_adv_ability => mr_lp_adv_ability, + + --Managment Control Inputs + mr_main_reset => '0',--mr_main_reset, + mr_an_enable => mr_an_enable, + mr_restart_an => '0',--mr_restart_an, + mr_adv_ability => x"0000",--mr_adv_ability, + + hdoutp => SD_TXD_P_OUT(0), + hdoutn => SD_TXD_N_OUT(0), + hdinp => SD_RXD_P_IN(0), + hdinn => SD_RXD_N_IN(0), + + sli_rst => sli_rst, + serdes_rst_dual_c => serdes_rst_dual_c, + tx_serdes_rst_c => tx_serdes_rst_c, + serdes_pdb => serdes_pdb, + tx_pwrup_c => tx_pwrup_c, + + pll_refclki => CLK_125_IN, + rxrefclk => CLK_125_IN, + + sci_wrdata => x"00", + sci_addr => b"000000", + sci_rddata => open, + sci_en_dual => '0', + sci_sel_dual => '0', + sci_en => '0', + sci_sel => '0', + sci_rd => '0', + sci_wrn => '1', + sci_int => open, + cyawstn => '0', + + rx_cdr_lol_s => rx_cdr_lol, + + tx_pcs_rst_c => '0', + rx_pcs_rst_c => '0', + rx_serdes_rst_c => '0', + + rst_dual_c => not GSR_N, + pll_lol => open, + + mr_power_down => '0'--mr_power_down + ); + + SD_TXD_P_OUT(3 downto 1) <= "000"; + SD_TXD_N_OUT(3 downto 1) <= "111"; + + MAC_AN_READY_OUT(0) <= an_complete; + MAC_AN_READY_OUT(3 downto 1) <= (others => '0'); + mr_an_enable <= '1'; + + u0_rate_resolution : rate_resolution port map( + gbe_mode => '1', + sgmii_mode => '0', + an_enable => '1', + advertised_rate => "10",--mr_adv_ability(11 downto 10), + link_partner_rate => "10",--mr_lp_adv_ability(11 downto 10), + non_an_rate => "10", --mr_speed_selection,-- 1Gbps is rate when auto-negotiation disabled + + operational_rate => operational_rate + ); + + u0_ri_hb : register_interface_hb + port map( + rst_n => synced_rst, + hclk => CLK_125_IN, + gbe_mode => '1', + sgmii_mode => '0', + -- Host Bus + hcs_n => '1', + hwrite_n => '1', + haddr => (others => '0'), + hdatain => (others => '0'), + hdataout => open, + hready_n => open, + --Register Inputs + mr_stat_1000base_x_fd => '1', + mr_stat_1000base_x_hd => '0', + mr_stat_1000base_t_fd => '0', + mr_stat_1000base_t_hd => '0', + mr_stat_100base_t4 => '0', + mr_stat_100base_x_fd => '0', + mr_stat_100base_x_hd => '0', + mr_stat_10mbps_fd => '0', + mr_stat_10mbps_hd => '0', + mr_stat_100base_t2_fd => '0', + mr_stat_100base_t2_hd => '0', + mr_stat_extended_stat => '1', + mr_stat_unidir_able => mr_unidir_enable, + mr_stat_preamb_supr => '0', + mr_stat_an_complete => an_complete, + mr_stat_remote_fault => '0', + mr_stat_an_able => '1', + mr_stat_link_stat => an_link_ok, + mr_stat_jab_det => '0', + mr_stat_extended_cap => '0', + mr_page_rx => mr_page_rx, + mr_lp_adv_ability => mr_lp_adv_ability, + --Register Outputs + mr_main_reset => mr_main_reset, + mr_loopback_enable => mr_loopback_enable, + mr_speed_selection => mr_speed_selection, + mr_an_enable => open,--mr_an_enable, + mr_power_down => mr_power_down, + mr_isolate => mr_isolate, + mr_restart_an => mr_restart_an, + mr_duplex_mode => open, + mr_col_test => open, + mr_unidir_enable => mr_unidir_enable, + mr_adv_ability => mr_adv_ability + ); + + MAC: tsmac35 + port map( + ----------------- clock and reset port declarations ------------------ + hclk => CLK_SYS_IN, + txmac_clk => CLK_125_IN, + rxmac_clk => sd_rx_clk, + reset_n => GSR_N, + txmac_clk_en => '1', + rxmac_clk_en => '1', + ------------------- Input signals to the GMII ---------------- + rxd => pcs_rxd_qq( 7 downto 0), + rx_dv => pcs_rx_en_qq, + rx_er => pcs_rx_er_qq, + col => pcs_col, + crs => pcs_crs, + -------------------- Input signals to the CPU I/F ------------------- + haddr => tsm_haddr( 7 downto 0), + hdatain => tsm_hdata( 7 downto 0), + hcs_n => tsm_hcs_n, + hwrite_n => tsm_hwrite_n, + hread_n => tsm_hread_n, + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata => MAC_TX_DATA_IN( 7 downto 0), + tx_fifoavail => MAC_FIFOAVAIL_IN(0), + tx_fifoeof => MAC_FIFOEOF_IN(0), + tx_fifoempty => MAC_FIFOEMPTY_IN(0), + tx_sndpaustim => x"0000", + tx_sndpausreq => '0', + tx_fifoctrl => '0', -- always data frame + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full => MAC_RX_FIFOFULL_IN(0), --'0', + ignore_pkt => '0', + ---------------- Output signals from the GMII ----------------------- + txd => pcs_txd( 7 downto 0), + tx_en => pcs_tx_en, + tx_er => pcs_tx_er, + ----------------- Output signals from the CPU I/F ------------------- + hdataout => open, + hdataout_en_n => tsm_hdataout_en_n, + hready_n => tsm_hready_n, + cpu_if_gbit_en => open, + ------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread => MAC_TX_READ_OUT(0), + tx_discfrm => MAC_TX_DISCRFRM_OUT(0), + tx_staten => MAC_TX_STAT_EN_OUT(0), + tx_statvec => MAC_TX_STATS_OUT( 30 downto 0), + tx_done => MAC_TX_DONE_OUT(0), + ------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error => MAC_RX_FIFO_ERR_OUT(0), + rx_stat_vector => MAC_RX_STATS_OUT(31 downto 0), + rx_dbout => MAC_RX_DATA_OUT( 7 downto 0), + rx_write => MAC_RX_WRITE_OUT(0), + rx_stat_en => MAC_RX_STAT_EN_OUT(0), + rx_eof => MAC_RX_EOF_OUT(0), + rx_error => MAC_RX_ERROR_OUT(0) + ); + + MAC_TX_READ_OUT(3 downto 1) <= (others => '0'); + MAC_TX_DISCRFRM_OUT(3 downto 1) <= (others => '0'); + MAC_TX_STAT_EN_OUT(3 downto 1) <= (others => '0'); + MAC_TX_STATS_OUT(123 downto 31) <= (others => '0'); + MAC_TX_DONE_OUT(3 downto 1) <= (others => '0'); + + MAC_RX_FIFO_ERR_OUT(3 downto 1) <= (others => '0'); + MAC_RX_STATS_OUT(127 downto 32) <= (others => '0'); + MAC_RX_DATA_OUT(31 downto 8) <= (others => '0'); + MAC_RX_WRITE_OUT(3 downto 1) <= (others => '0'); + MAC_RX_STAT_EN_OUT(3 downto 1) <= (others => '0'); + MAC_RX_EOF_OUT(3 downto 1) <= (others => '0'); + MAC_RX_ERROR_OUT(3 downto 1) <= (others => '0'); + + TSMAC_CONTROLLER : trb_net16_gbe_mac_control + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + -- signals to/from main controller + MC_TSMAC_READY_OUT => MAC_READY_CONF_OUT(0), + MC_RECONF_IN => MAC_RECONF_IN(0), + MC_GBE_EN_IN => '1', + MC_RX_DISCARD_FCS => '0', + MC_PROMISC_IN => '1', + MC_MAC_ADDR_IN => (others => '0'), + + -- signal to/from Host interface of TriSpeed MAC + TSM_HADDR_OUT => tsm_haddr( 7 downto 0), + TSM_HDATA_OUT => tsm_hdata( 7 downto 0), + TSM_HCS_N_OUT => tsm_hcs_n, + TSM_HWRITE_N_OUT => tsm_hwrite_n, + TSM_HREAD_N_OUT => tsm_hread_n, + TSM_HREADY_N_IN => tsm_hready_n, + TSM_HDATA_EN_N_IN => tsm_hdataout_en_n, + + DEBUG_OUT => open + ); + + MAC_READY_CONF_OUT(3 downto 1) <= (others => '0'); + + SYNC_GMII_RX_PROC : process(sd_rx_clk) + begin + if rising_edge(sd_rx_clk) then + pcs_rxd_q(7 downto 0) <= pcs_rxd( 7 downto 0); + pcs_rx_en_q <= pcs_rx_en; + pcs_rx_er_q <= pcs_rx_er; + + pcs_rxd_qq( 7 downto 0) <= pcs_rxd_q( 7 downto 0); + pcs_rx_en_qq <= pcs_rx_en_q; + pcs_rx_er_qq <= pcs_rx_er_q; + end if; + end process SYNC_GMII_RX_PROC; + + SYNC_GMII_TX_PROC : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + pcs_txd_q( 7 downto 0) <= pcs_txd(7 downto 0); + pcs_tx_en_q <= pcs_tx_en; + pcs_tx_er_q <= pcs_tx_er; + + pcs_txd_qq( 7 downto 0) <= pcs_txd_q( 7 downto 0); + pcs_tx_en_qq <= pcs_tx_en_q; + pcs_tx_er_qq <= pcs_tx_er_q; + end if; + end process SYNC_GMII_TX_PROC; + + end generate impl_gen; + + sim_gen : if DO_SIMULATION = 1 generate + + process + begin + + MAC_AN_READY_OUT <= (others => '0'); + wait for 2 us; + MAC_AN_READY_OUT <= (others => '1'); + + wait; + end process; + + process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + MAC_TX_READ_OUT <= MAC_FIFOAVAIL_IN; + + fifo_eof_q <= MAC_FIFOEOF_IN; + fifo_eof_qq <= fifo_eof_q; + fifo_eof_qqq <= fifo_eof_qq; + fifo_eof_qqqq <= fifo_eof_qqq; + + MAC_TX_DONE_OUT <= fifo_eof_qqqq; -- MAC_FIFOEOF_IN; + end if; + end process; + + + end generate sim_gen; + + +end architecture RTL; diff --git a/gbe_trb/base/gbe_med_interface_onlyPCS.vhd b/gbe_trb/base/gbe_med_interface_onlyPCS.vhd new file mode 100644 index 0000000..2fdca0a --- /dev/null +++ b/gbe_trb/base/gbe_med_interface_onlyPCS.vhd @@ -0,0 +1,338 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE IEEE.std_logic_ARITH.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; + +library work; +use work.trb_net_std.all; +use work.trb_net_components.all; + +use work.trb_net_gbe_components.all; +use work.config.all; + +entity gbe_med_interface is + generic ( + DO_SIMULATION : integer range 0 to 1; + NUMBER_OF_GBE_LINKS : integer range 1 to 4; + LINKS_ACTIVE : std_logic_vector(3 downto 0) + ); + port ( + RESET : in std_logic; + GSR_N : in std_logic; + CLK_SYS_IN : in std_logic; + CLK_125_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + CLK_125_IN : in std_logic; + CLK_125_RX_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC status and config + MAC_READY_CONF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RECONF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_AN_READY_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC data interface + MAC_FIFOAVAIL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEOF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEMPTY_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_FIFOFULL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_TX_DATA_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_TX_READ_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_DISCRFRM_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 31 - 1 downto 0); + MAC_TX_DONE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_RX_FIFO_ERR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 32 - 1 downto 0); + MAC_RX_DATA_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_RX_WRITE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_EOF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_ERROR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + --SFP Connection + SD_RXD_P_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_RXD_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_P_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_N_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_PRSNT_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_LOS_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP Loss Of Signal ('0' = OK, '1' = no signal) + SD_TXDIS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP disable + + --CONTROL INTERFACE + BUS_SCI_RX : in CTRLBUS_RX; + BUS_SCI_TX : out CTRLBUS_TX; + + DEBUG_OUT : out std_logic_vector(255 downto 0) + ); +end entity gbe_med_interface; + +architecture RTL of gbe_med_interface is + + signal sd_rx_clk : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_kcntl_q, sd_tx_kcntl : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_data_q, sd_tx_data : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal xmit : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_correct_disp_q, sd_tx_correct_disp : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_data, sd_rx_data_q : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal sd_rx_kcntl, sd_rx_kcntl_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_disp_error, sd_rx_disp_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_cv_error, sd_rx_cv_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_power, rx_power : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal los, signal_detected : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rx_cdr_lol: std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_pll_lol, quad_rst : std_logic; + signal tx_pcs_rst, rx_pcs_rst, rx_serdes_rst : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + --signal rst_n : std_logic; + signal rx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal operational_rate : std_logic_vector(NUMBER_OF_GBE_LINKS * 2 - 1 downto 0); + signal an_complete : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_page_rx : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_lp_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_main_reset : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_restart_an : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_an_enable : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rxd, pcs_rxd_q, pcs_rxd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_rx_en, pcs_rx_en_q, pcs_rx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rx_er, pcs_rx_er_q, pcs_rx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_col, pcs_crs : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_txd, pcs_txd_q, pcs_txd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_tx_en, pcs_tx_en_q, pcs_tx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_tx_er, pcs_tx_er_q, pcs_tx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdataout_en_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hready_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hread_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hwrite_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hcs_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdata : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal tsm_haddr : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal rx_compensation_err, an_link_ok : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + signal synced_rst, ff : std_logic; + + signal fifo_eof_q, fifo_eof_qq, fifo_eof_qqq, fifo_eof_qqqq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rsl_rx_rdy,rsl_tx_rdy : std_logic; + + signal sci_data_in_i : std_logic_vector(7 downto 0); + signal sci_addr_i : std_logic_vector(5 downto 0); + signal sci_data_out_i : std_logic_vector(7 downto 0); + signal reset_n, sci_read_i, sci_write_i : std_logic; + signal sci_ch_i : std_logic_vector(4 downto 0); + signal wa_position : std_logic_vector(15 downto 0) := x"FFFF"; + signal wa_position_sel : std_logic_vector(3 downto 0); + + signal stat_fsm_reset_i, stat_tx_control_i, stat_rx_control_i : std_logic_vector(31 downto 0); + signal cnt_125_dbg : unsigned(30 downto 0) := (others => '0'); + +begin + + rx_power <= "1111"; + tx_power <= "1111"; + + --rst_n <= not RESET; + + reset_sync : process(GSR_N, CLK_SYS_IN) + begin + if (GSR_N = '0') then + ff <= '0'; + synced_rst <= '0'; + elsif rising_edge(CLK_SYS_IN) then + ff <= '1'; + synced_rst <= ff; + end if; + end process reset_sync; + + SD_TXDIS_OUT <= "0000"; + + CLK_125_OUT <= CLK_125_IN & CLK_125_IN & CLK_125_IN & CLK_125_IN; + CLK_125_RX_OUT <= sd_rx_clk; + + impl_gen : if DO_SIMULATION = 0 generate + + reset_n <= not RESET; + + serdes_ch1_gen : if FPGA_TYPE = 5 generate + gbe_serdes : entity work.sgmii_ecp5 + port map( + hdoutp => SD_TXD_P_OUT(0),-- + hdoutn => SD_TXD_N_OUT(0),-- + hdinp => SD_RXD_P_IN(0),-- + hdinn => SD_RXD_N_IN(0),-- + rxrefclk => CLK_125_IN,-- + tx_pclk => sd_rx_clk(0),--open, + txi_clk => sd_rx_clk(0),-- + txdata => "00000000",--sd_tx_data_q(7 downto 0),-- + tx_k => "0",--sd_tx_kcntl_q(0 downto 0),-- + xmit => "1",--xmit(0 downto 0),-- + tx_disp_correct => "1",--sd_tx_correct_disp_q(0 downto 0),-- + rxdata => sd_rx_data(7 downto 0),-- + rx_k => sd_rx_kcntl(0 downto 0),-- + rx_disp_err => sd_rx_disp_error(0 downto 0),-- + rx_cv_err => sd_rx_cv_error(0 downto 0),-- + signal_detect_c => '0',--signal_detected(0),-- + rx_los_low_s => los(0),-- + lsm_status_s => signal_detected(0), + ctc_urun_s => open, + ctc_orun_s => open, + rx_cdr_lol_s => rx_cdr_lol(0), + ctc_ins_s => open, + ctc_del_s => open, + sli_rst => '0', + tx_pwrup_c => tx_power(0),-- + rx_pwrup_c => rx_power(0),-- + sci_wrdata => sci_data_in_i, + sci_addr => sci_addr_i, + sci_rddata => sci_data_out_i, + sci_en_dual => reset_n, + sci_sel_dual => sci_ch_i(4), + sci_en => reset_n, + sci_sel => sci_ch_i(0), + sci_rd => sci_read_i, + sci_wrn => sci_write_i, + sci_int => open, + cyawstn => '0', + serdes_pdb => '1', --powerdown control register + pll_refclki => CLK_125_IN,-- + rsl_disable => '0',--changed 2019.05.08;16:42 + rsl_rst => '0', + serdes_rst_dual_c => '0',-- + rst_dual_c => quad_rst,-- + tx_serdes_rst_c => '0',-- + tx_pcs_rst_c => '0',--tx_pcs_rst(0),-- + pll_lol => tx_pll_lol,-- + rsl_tx_rdy => rsl_tx_rdy, + rx_serdes_rst_c => rx_serdes_rst(0),-- + rx_pcs_rst_c => rx_pcs_rst(0),-- + rsl_rx_rdy => rsl_rx_rdy + ); + end generate serdes_ch1_gen; + + wa_position_sel <= x"0"; +--TO DO + THE_PCS_RESET : entity work.pcs_sync_reset + generic map( + IS_SYNC_SLAVE => 1,--????ß + IS_TX_RESET => 1 + ) + port map( + CLK_SYS => CLK_SYS_IN, + CLK_RXI => sd_rx_clk(0), --??correct?? + CLK_REF => CLK_125_IN, + RESET => RESET, + CLEAR => '0', + + SFP_LOS => SD_LOS_IN(0), + TX_LOL => tx_pll_lol, + RX_CDR_LOL => rx_cdr_lol(0), + RX_LOS => los(0), + WA_POSITION => wa_position_sel, + + RX_SERDES_RST => rx_serdes_rst(0), + RX_PCS_RST => rx_pcs_rst(0), + QUAD_RST => quad_rst, + TX_PCS_RST => tx_pcs_rst(0), + + SERDES_RX_READY_IN => rsl_rx_rdy, + SERDES_TX_READY_IN => rsl_tx_rdy, + + STAT_TX_CONTROL => stat_tx_control_i, + STAT_RX_CONTROL => stat_rx_control_i, + DEBUG_TX_CONTROL => open,--debug_tx_control_i, + DEBUG_RX_CONTROL => open,--debug_rx_control_i, + STAT_RESET => stat_fsm_reset_i, + DEBUG_OUT => open--debug_med_sync_control_i + ); + + + + THE_SCI_READER : entity work.sci_reader + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + --SCI + SCI_WRDATA => sci_data_in_i, + SCI_RDDATA => sci_data_out_i, + SCI_ADDR => sci_addr_i, + SCI_SEL => sci_ch_i, + SCI_RD => sci_read_i, + SCI_WR => sci_write_i, + + WA_POS_OUT => wa_position, + + --Slowcontrol + BUS_RX => BUS_SCI_RX, + BUS_TX => BUS_SCI_TX, + + MEDIA_STATUS_REG_IN(31 downto 0) => stat_rx_control_i, + MEDIA_STATUS_REG_IN(63 downto 32) => stat_tx_control_i, + MEDIA_STATUS_REG_IN(95 downto 64) => stat_fsm_reset_i, + --MEDIA_STATUS_REG_IN(127 downto 96) => stat_med, + MEDIA_STATUS_REG_IN(255 downto 96) => (others => '0'), + DEBUG_OUT => open + ); + + DEBUG_CLK : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + cnt_125_dbg <= cnt_125_dbg + 1; + end if; + end process DEBUG_CLK; + + DEBUG : process(CLK_SYS_IN) + begin + if rising_edge(CLK_SYS_IN) then + DEBUG_OUT(0) <= xmit(0); + DEBUG_OUT(1) <= los(0); + DEBUG_OUT(2) <= signal_detected(0); + DEBUG_OUT(3) <= tx_pll_lol; + DEBUG_OUT(4) <= rx_cdr_lol(0); + DEBUG_OUT(5) <= sd_rx_cv_error(0); + DEBUG_OUT(6) <= sd_rx_disp_error(0); + DEBUG_OUT(8 downto 7) <= operational_rate(1 downto 0); + DEBUG_OUT(9) <= rx_compensation_err(0); + DEBUG_OUT(10)<= an_link_ok(0); + DEBUG_OUT(11)<= MAC_READY_CONF_OUT(0); + DEBUG_OUT(12)<= an_complete(0); + DEBUG_OUT(13)<= rsl_rx_rdy; + DEBUG_OUT(14)<= rsl_tx_rdy; + DEBUG_OUT(15)<= cnt_125_dbg(30); + end if; + end process DEBUG; + + + end generate impl_gen; + + sim_gen : if DO_SIMULATION = 1 generate + + process + begin + + MAC_AN_READY_OUT <= (others => '0'); + wait for 2 us; + MAC_AN_READY_OUT <= (others => '1'); + + wait; + end process; + + process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + MAC_TX_READ_OUT <= MAC_FIFOAVAIL_IN; + + fifo_eof_q <= MAC_FIFOEOF_IN; + fifo_eof_qq <= fifo_eof_q; + fifo_eof_qqq <= fifo_eof_qq; + fifo_eof_qqqq <= fifo_eof_qqq; + + MAC_TX_DONE_OUT <= fifo_eof_qqqq; -- MAC_FIFOEOF_IN; + end if; + end process; + + + end generate sim_gen; + + +end architecture RTL; diff --git a/gbe_trb/base/gbe_med_interface_sfp.vhd b/gbe_trb/base/gbe_med_interface_sfp.vhd new file mode 100644 index 0000000..b867021 --- /dev/null +++ b/gbe_trb/base/gbe_med_interface_sfp.vhd @@ -0,0 +1,918 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE IEEE.std_logic_ARITH.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; + +library work; +use work.trb_net_std.all; +use work.trb_net_components.all; + +use work.trb_net_gbe_components.all; +use work.config.all; + +entity gbe_med_interface is + generic ( + DO_SIMULATION : integer range 0 to 1; + NUMBER_OF_GBE_LINKS : integer range 1 to 4; + LINKS_ACTIVE : std_logic_vector(3 downto 0) + ); + port ( + RESET : in std_logic; + GSR_N : in std_logic; + CLK_SYS_IN : in std_logic; + CLK_125_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + CLK_125_IN : in std_logic; + CLK_125_RX_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC status and config + MAC_READY_CONF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RECONF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_AN_READY_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + -- MAC data interface + MAC_FIFOAVAIL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEOF_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_FIFOEMPTY_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_FIFOFULL_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_TX_DATA_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_TX_READ_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_DISCRFRM_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_TX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 31 - 1 downto 0); + MAC_TX_DONE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + MAC_RX_FIFO_ERR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STATS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 32 - 1 downto 0); + MAC_RX_DATA_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + MAC_RX_WRITE_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_STAT_EN_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_EOF_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + MAC_RX_ERROR_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + --SFP Connection + SD_RXD_P_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_RXD_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_P_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_TXD_N_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_PRSNT_N_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + SD_LOS_IN : in std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP Loss Of Signal ('0' = OK, '1' = no signal) + SD_TXDIS_OUT : out std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); -- SFP disable + + --CONTROL INTERFACE + BUS_SCI_RX : in CTRLBUS_RX; + BUS_SCI_TX : out CTRLBUS_TX; + + DEBUG_OUT : out std_logic_vector(255 downto 0) + ); +end entity gbe_med_interface; + +architecture RTL of gbe_med_interface is + + component sgmii_gbe_pcs35_core +port( rst_n : in std_logic; + signal_detect : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + operational_rate : in std_logic_vector(1 downto 0); + debug_link_timer_short : in std_logic; + + force_isolate : in std_logic; + force_loopback : in std_logic; + force_unidir : in std_logic; + + rx_compensation_err : out std_logic; + + ctc_drop_flag : out std_logic; + ctc_add_flag : out std_logic; + an_link_ok : out std_logic; + + tx_clk_125 : in std_logic; + tx_clock_enable_source : out std_logic; + tx_clock_enable_sink : in std_logic; + tx_d : in std_logic_vector(7 downto 0); + tx_en : in std_logic; + tx_er : in std_logic; + rx_clk_125 : in std_logic; + rx_clock_enable_source : out std_logic; + rx_clock_enable_sink : in std_logic; + rx_d : out std_logic_vector(7 downto 0); + rx_dv : out std_logic; + rx_er : out std_logic; + col : out std_logic; + crs : out std_logic; + tx_data : out std_logic_vector(7 downto 0); + tx_kcntl : out std_logic; + tx_disparity_cntl : out std_logic; + + xmit_autoneg : out std_logic; + + serdes_recovered_clk : in std_logic; + rx_data : in std_logic_vector(7 downto 0); + rx_even : in std_logic; + rx_kcntl : in std_logic; + rx_disp_err : in std_logic; + rx_cv_err : in std_logic; + rx_err_decode_mode : in std_logic; + mr_an_complete : out std_logic; + mr_page_rx : out std_logic; + mr_lp_adv_ability : out std_logic_vector(15 downto 0); + mr_main_reset : in std_logic; + mr_an_enable : in std_logic; + mr_restart_an : in std_logic; + mr_adv_ability : in std_logic_vector(15 downto 0) + ); +end component; + +component reset_controller_pcs port ( + rst_n : in std_logic; + clk : in std_logic; + tx_plol : in std_logic; + rx_cdr_lol : in std_logic; + quad_rst_out : out std_logic; + tx_pcs_rst_out : out std_logic; + rx_pcs_rst_out : out std_logic + ); +end component; + +component register_interface_hb port ( + rst_n : in std_logic; + hclk : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + hcs_n : in std_logic; + hwrite_n : in std_logic; + haddr : in std_logic_vector(3 downto 0); + hdatain : in std_logic_vector(7 downto 0); + hdataout : out std_logic_vector(7 downto 0); + hready_n : out std_logic; + mr_an_complete : in std_logic; + mr_page_rx : in std_logic; + mr_lp_adv_ability : in std_logic_vector(15 downto 0); + mr_main_reset : out std_logic; + mr_an_enable : out std_logic; + mr_restart_an : out std_logic; + mr_adv_ability : out std_logic_vector(15 downto 0) + ); +end component; + +component tsmac35 --tsmac36 --tsmac35 +port( + --------------- clock and reset port declarations ------------------ + hclk : in std_logic; + txmac_clk : in std_logic; + rxmac_clk : in std_logic; + reset_n : in std_logic; + txmac_clk_en : in std_logic; + rxmac_clk_en : in std_logic; + ------------------- Input signals to the GMII ---------------- + rxd : in std_logic_vector(7 downto 0); + rx_dv : in std_logic; + rx_er : in std_logic; + col : in std_logic; + crs : in std_logic; + -------------------- Input signals to the CPU I/F ------------------- + haddr : in std_logic_vector(7 downto 0); + hdatain : in std_logic_vector(7 downto 0); + hcs_n : in std_logic; + hwrite_n : in std_logic; + hread_n : in std_logic; + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata : in std_logic_vector(7 downto 0); + tx_fifoavail : in std_logic; + tx_fifoeof : in std_logic; + tx_fifoempty : in std_logic; + tx_sndpaustim : in std_logic_vector(15 downto 0); + tx_sndpausreq : in std_logic; + tx_fifoctrl : in std_logic; + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full : in std_logic; + ignore_pkt : in std_logic; + -------------------- Output signals from the GMII ----------------------- + txd : out std_logic_vector(7 downto 0); + tx_en : out std_logic; + tx_er : out std_logic; + -------------------- Output signals from the CPU I/F ------------------- + hdataout : out std_logic_vector(7 downto 0); + hdataout_en_n : out std_logic; + hready_n : out std_logic; + cpu_if_gbit_en : out std_logic; + ---------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread : out std_logic; + tx_discfrm : out std_logic; + tx_staten : out std_logic; + tx_done : out std_logic; + tx_statvec : out std_logic_vector(30 downto 0); + ---------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error : out std_logic; + rx_stat_vector : out std_logic_vector(31 downto 0); + rx_dbout : out std_logic_vector(7 downto 0); + rx_write : out std_logic; + rx_stat_en : out std_logic; + rx_eof : out std_logic; + rx_error : out std_logic +); +end component; + + signal sd_rx_clk : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_kcntl_q, sd_tx_kcntl : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_data_q, sd_tx_data : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal xmit : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_tx_correct_disp_q, sd_tx_correct_disp : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_data, sd_rx_data_q : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal sd_rx_kcntl, sd_rx_kcntl_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_disp_error, sd_rx_disp_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal sd_rx_cv_error, sd_rx_cv_error_q : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_power, rx_power : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal los, signal_detected : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rx_cdr_lol: std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_pll_lol, quad_rst : std_logic; + signal tx_pcs_rst, rx_pcs_rst, rx_serdes_rst : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + --signal rst_n : std_logic; + signal rx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tx_clk_en : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal operational_rate : std_logic_vector(NUMBER_OF_GBE_LINKS * 2 - 1 downto 0); + signal an_complete : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_page_rx : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_lp_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_main_reset : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_restart_an : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal mr_adv_ability : std_logic_vector(NUMBER_OF_GBE_LINKS * 16 - 1 downto 0); + signal mr_an_enable : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rxd, pcs_rxd_q, pcs_rxd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_rx_en, pcs_rx_en_q, pcs_rx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_rx_er, pcs_rx_er_q, pcs_rx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_col, pcs_crs : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_txd, pcs_txd_q, pcs_txd_qq : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal pcs_tx_en, pcs_tx_en_q, pcs_tx_en_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal pcs_tx_er, pcs_tx_er_q, pcs_tx_er_qq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdataout_en_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hready_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hread_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hwrite_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hcs_n : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal tsm_hdata : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal tsm_haddr : std_logic_vector(NUMBER_OF_GBE_LINKS * 8 - 1 downto 0); + signal rx_compensation_err, an_link_ok : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + + signal synced_rst, ff : std_logic; + + signal fifo_eof_q, fifo_eof_qq, fifo_eof_qqq, fifo_eof_qqqq : std_logic_vector(NUMBER_OF_GBE_LINKS - 1 downto 0); + signal rsl_rx_rdy,rsl_tx_rdy : std_logic; + + signal sci_data_in_i : std_logic_vector(7 downto 0); + signal sci_addr_i : std_logic_vector(5 downto 0); + signal sci_data_out_i : std_logic_vector(7 downto 0); + signal reset_n, sci_read_i, sci_write_i : std_logic; + signal sci_ch_i : std_logic_vector(4 downto 0); + signal wa_position : std_logic_vector(15 downto 0) := x"FFFF"; + signal wa_position_sel : std_logic_vector(3 downto 0); + + signal stat_fsm_reset_i, stat_tx_control_i, stat_rx_control_i : std_logic_vector(31 downto 0); + signal cnt_125_dbg : unsigned(30 downto 0) := (others => '0'); + +begin + + rx_power <= "1111"; + tx_power <= "1111"; + + --rst_n <= not RESET; + + reset_sync : process(GSR_N, CLK_SYS_IN) + begin + if (GSR_N = '0') then + ff <= '0'; + synced_rst <= '0'; + elsif rising_edge(CLK_SYS_IN) then + ff <= '1'; + synced_rst <= ff; + end if; + end process reset_sync; + + SD_TXDIS_OUT <= "0000"; + + CLK_125_OUT <= CLK_125_IN & CLK_125_IN & CLK_125_IN & CLK_125_IN; + CLK_125_RX_OUT <= sd_rx_clk; + + impl_gen : if DO_SIMULATION = 0 generate + + serdes_ch4_gen : if FPGA_TYPE /= 5 generate + gbe_serdes : entity work.serdes_gbe_4ch + port map( + ------------------ + -- CH0 -- + hdinp_ch0 => SD_RXD_P_IN(0), + hdinn_ch0 => SD_RXD_N_IN(0), + hdoutp_ch0 => SD_TXD_P_OUT(0), + hdoutn_ch0 => SD_TXD_N_OUT(0), + rxiclk_ch0 => sd_rx_clk(0), + txiclk_ch0 => CLK_125_IN, + rx_full_clk_ch0 => sd_rx_clk(0), + rx_half_clk_ch0 => open, + tx_full_clk_ch0 => open, + tx_half_clk_ch0 => open, + fpga_rxrefclk_ch0 => CLK_125_IN, + txdata_ch0 => sd_tx_data_q(7 downto 0), + tx_k_ch0 => sd_tx_kcntl_q(0), + xmit_ch0 => xmit(0), + tx_disp_correct_ch0 => sd_tx_correct_disp_q(0), + rxdata_ch0 => sd_rx_data(7 downto 0), + rx_k_ch0 => sd_rx_kcntl(0), + rx_disp_err_ch0 => sd_rx_disp_error(0), + rx_cv_err_ch0 => sd_rx_cv_error(0), + rx_serdes_rst_ch0_c => rx_serdes_rst(0), + sb_felb_ch0_c => '0', + sb_felb_rst_ch0_c => '0', + tx_pwrup_ch0_c => tx_power(0), + rx_pwrup_ch0_c => rx_power(0), + rx_los_low_ch0_s => los(0), + lsm_status_ch0_s => signal_detected(0), + rx_cdr_lol_ch0_s => rx_cdr_lol(0), + tx_pcs_rst_ch0_c => tx_pcs_rst(0), + rx_pcs_rst_ch0_c => rx_pcs_rst(0), + -- CH1 -- + hdinp_ch1 => SD_RXD_P_IN(1), + hdinn_ch1 => SD_RXD_N_IN(1), + hdoutp_ch1 => SD_TXD_P_OUT(1), + hdoutn_ch1 => SD_TXD_N_OUT(1), + rxiclk_ch1 => sd_rx_clk(1), + txiclk_ch1 => CLK_125_IN, + rx_full_clk_ch1 => sd_rx_clk(1), + rx_half_clk_ch1 => open, + tx_full_clk_ch1 => open, + tx_half_clk_ch1 => open, + fpga_rxrefclk_ch1 => CLK_125_IN, + txdata_ch1 => sd_tx_data_q(15 downto 8), + tx_k_ch1 => sd_tx_kcntl_q(1), + xmit_ch1 => xmit(1), + tx_disp_correct_ch1 => sd_tx_correct_disp_q(1), + rxdata_ch1 => sd_rx_data(15 downto 8), + rx_k_ch1 => sd_rx_kcntl(1), + rx_disp_err_ch1 => sd_rx_disp_error(1), + rx_cv_err_ch1 => sd_rx_cv_error(1), + rx_serdes_rst_ch1_c => rx_serdes_rst(1), + sb_felb_ch1_c => '0', + sb_felb_rst_ch1_c => '0', + tx_pwrup_ch1_c => tx_power(1), + rx_pwrup_ch1_c => rx_power(1), + rx_los_low_ch1_s => los(1), + lsm_status_ch1_s => signal_detected(1), + rx_cdr_lol_ch1_s => rx_cdr_lol(1), + tx_pcs_rst_ch1_c => tx_pcs_rst(1), + rx_pcs_rst_ch1_c => rx_pcs_rst(1), + -- CH2 -- + hdinp_ch2 => SD_RXD_P_IN(2), + hdinn_ch2 => SD_RXD_N_IN(2), + hdoutp_ch2 => SD_TXD_P_OUT(2), + hdoutn_ch2 => SD_TXD_N_OUT(2), + rxiclk_ch2 => sd_rx_clk(2), + txiclk_ch2 => CLK_125_IN, + rx_full_clk_ch2 => sd_rx_clk(2), + rx_half_clk_ch2 => open, + tx_full_clk_ch2 => open, + tx_half_clk_ch2 => open, + fpga_rxrefclk_ch2 => CLK_125_IN, + txdata_ch2 => sd_tx_data_q(23 downto 16), + tx_k_ch2 => sd_tx_kcntl_q(2), + xmit_ch2 => xmit(2), + tx_disp_correct_ch2 => sd_tx_correct_disp_q(2), + rxdata_ch2 => sd_rx_data(23 downto 16), + rx_k_ch2 => sd_rx_kcntl(2), + rx_disp_err_ch2 => sd_rx_disp_error(2), + rx_cv_err_ch2 => sd_rx_cv_error(2), + rx_serdes_rst_ch2_c => rx_serdes_rst(2), + sb_felb_ch2_c => '0', + sb_felb_rst_ch2_c => '0', + tx_pwrup_ch2_c => tx_power(2), + rx_pwrup_ch2_c => rx_power(2), + rx_los_low_ch2_s => los(2), + lsm_status_ch2_s => signal_detected(2), + rx_cdr_lol_ch2_s => rx_cdr_lol(2), + tx_pcs_rst_ch2_c => tx_pcs_rst(2), + rx_pcs_rst_ch2_c => rx_pcs_rst(2), + -- CH3 -- + hdinp_ch3 => SD_RXD_P_IN(3), + hdinn_ch3 => SD_RXD_N_IN(3), + hdoutp_ch3 => SD_TXD_P_OUT(3), + hdoutn_ch3 => SD_TXD_N_OUT(3), + rxiclk_ch3 => sd_rx_clk(3), + txiclk_ch3 => CLK_125_IN, + rx_full_clk_ch3 => sd_rx_clk(3), + rx_half_clk_ch3 => open, + tx_full_clk_ch3 => open, + tx_half_clk_ch3 => open, + fpga_rxrefclk_ch3 => CLK_125_IN, + txdata_ch3 => sd_tx_data_q(31 downto 24), + tx_k_ch3 => sd_tx_kcntl_q(3), + xmit_ch3 => xmit(3), + tx_disp_correct_ch3 => sd_tx_correct_disp_q(3), + rxdata_ch3 => sd_rx_data(31 downto 24), + rx_k_ch3 => sd_rx_kcntl(3), + rx_disp_err_ch3 => sd_rx_disp_error(3), + rx_cv_err_ch3 => sd_rx_cv_error(3), + rx_serdes_rst_ch3_c => rx_serdes_rst(3), + sb_felb_ch3_c => '0', + sb_felb_rst_ch3_c => '0', + tx_pwrup_ch3_c => tx_power(3), + rx_pwrup_ch3_c => rx_power(3), + rx_los_low_ch3_s => los(3), + lsm_status_ch3_s => signal_detected(3), + rx_cdr_lol_ch3_s => rx_cdr_lol(3), + tx_pcs_rst_ch3_c => tx_pcs_rst(3), + rx_pcs_rst_ch3_c => rx_pcs_rst(3), + ---- Miscillaneous ports + fpga_txrefclk => CLK_125_IN, + tx_serdes_rst_c => '0', + tx_pll_lol_qd_s => tx_pll_lol, + tx_sync_qd_c => '0', + rst_qd_c => quad_rst, + serdes_rst_qd_c => '0' + ); + end generate serdes_ch4_gen; + + reset_n <= not RESET; + + serdes_ch1_gen : if FPGA_TYPE = 5 generate + gbe_serdes : entity work.serdes_sync_1--sgmii_ecp5 + port map( +-- hdoutp => SD_TXD_P_OUT(0),-- +-- hdoutn => SD_TXD_N_OUT(0),-- +-- hdinp => SD_RXD_P_IN(0),-- +-- hdinn => SD_RXD_N_IN(0),-- +-- rxrefclk => CLK_125_IN,-- +-- tx_pclk => sd_rx_clk(0),--open, +-- txi_clk => sd_rx_clk(0),-- +-- txdata => sd_tx_data_q(7 downto 0),-- +-- tx_k => sd_tx_kcntl_q(0 downto 0),-- +-- xmit => xmit(0 downto 0),-- +-- tx_disp_correct => sd_tx_correct_disp_q(0 downto 0),-- +-- rxdata => sd_rx_data(7 downto 0),-- +-- rx_k => sd_rx_kcntl(0 downto 0),-- +-- rx_disp_err => sd_rx_disp_error(0 downto 0),-- +-- rx_cv_err => sd_rx_cv_error(0 downto 0),-- +-- signal_detect_c => '0',--signal_detected(0),-- +-- rx_los_low_s => los(0),-- +-- lsm_status_s => signal_detected(0), +-- ctc_urun_s => open, +-- ctc_orun_s => open, +-- rx_cdr_lol_s => rx_cdr_lol(0), +-- ctc_ins_s => open, +-- ctc_del_s => open, +-- sli_rst => '0', +-- tx_pwrup_c => tx_power(0),-- +-- rx_pwrup_c => rx_power(0),-- +-- sci_wrdata => sci_data_in_i, +-- sci_addr => sci_addr_i, +-- sci_rddata => sci_data_out_i, +-- sci_en_dual => reset_n, +-- sci_sel_dual => sci_ch_i(4), +-- sci_en => reset_n, +-- sci_sel => sci_ch_i(0), +-- sci_rd => sci_read_i, +-- sci_wrn => sci_write_i, +-- sci_int => open, +-- cyawstn => '0', +-- serdes_pdb => '1', --powerdown control register +-- pll_refclki => CLK_125_IN,-- +-- rsl_disable => '0',--changed 2019.05.08;16:42 +-- rsl_rst => '0', +-- serdes_rst_dual_c => '0',-- +-- rst_dual_c => quad_rst,-- +-- tx_serdes_rst_c => '0',-- +-- tx_pcs_rst_c => '0',--tx_pcs_rst(0),-- +-- pll_lol => tx_pll_lol,-- +-- rsl_tx_rdy => rsl_tx_rdy, +-- rx_serdes_rst_c => rx_serdes_rst(0),-- +-- rx_pcs_rst_c => rx_pcs_rst(0),-- +-- rsl_rx_rdy => rsl_rx_rdy + + hdoutp => SD_TXD_P_OUT(0), + hdoutn => SD_TXD_N_OUT(0),-- + hdinp => SD_RXD_P_IN(0),--: in std_logic; + hdinn => SD_RXD_N_IN(0),--: in std_logic; + rxrefclk=> CLK_125_IN, + rx_pclk => sd_rx_clk(0),--open, + tx_pclk => open, + txdata => x"00", + tx_k => "0", + tx_force_disp => "0", + tx_disp_sel => "0", + rxdata => open, + rx_k=> open, + rx_disp_err=> open, + rx_cv_err=> open, + tx_idle_c => '1', + signal_detect_c => '0', + rx_los_low_s=> los(0),-- + lsm_status_s=> signal_detected(0), + rx_cdr_lol_s=> rx_cdr_lol(0), + sli_rst => '0', + tx_pwrup_c => '1', + rx_pwrup_c => '1', + sci_wrdata => sci_data_in_i, + sci_addr => sci_addr_i, + sci_rddata => sci_data_out_i, + sci_en_dual => reset_n, + sci_sel_dual => sci_ch_i(4), + sci_en => reset_n, + sci_sel => sci_ch_i(0), + sci_rd => sci_read_i, + sci_wrn => sci_write_i, + sci_int => open, + cyawstn => '0', + serdes_pdb => '0', + pll_refclki => CLK_125_IN, + rsl_disable => '0', + rsl_rst => '0', + serdes_rst_dual_c => '0', + rst_dual_c => quad_rst, + tx_serdes_rst_c => '0', + tx_pcs_rst_c => '0', + pll_lol => tx_pll_lol, + rsl_tx_rdy => rsl_tx_rdy, + rx_serdes_rst_c => rx_serdes_rst(0),-- + rx_pcs_rst_c => rx_pcs_rst(0),-- + rsl_rx_rdy => rsl_rx_rdy + ); + end generate serdes_ch1_gen; + + wa_position_sel <= x"0"; +--TO DO + THE_PCS_RESET : entity work.pcs_sync_reset + generic map( + IS_SYNC_SLAVE => 1,--????ß + IS_TX_RESET => 1 + ) + port map( + CLK_SYS => CLK_SYS_IN, + CLK_RXI => sd_rx_clk(0), --??correct?? + CLK_REF => CLK_125_IN, + RESET => RESET, + CLEAR => '0', + + SFP_LOS => SD_LOS_IN(0), + TX_LOL => tx_pll_lol, + RX_CDR_LOL => rx_cdr_lol(0), + RX_LOS => los(0), + WA_POSITION => wa_position_sel, + + RX_SERDES_RST => rx_serdes_rst(0), + RX_PCS_RST => rx_pcs_rst(0), + QUAD_RST => quad_rst, + TX_PCS_RST => tx_pcs_rst(0), + + SERDES_RX_READY_IN => rsl_rx_rdy, + SERDES_TX_READY_IN => rsl_tx_rdy, + + STAT_TX_CONTROL => stat_tx_control_i, + STAT_RX_CONTROL => stat_rx_control_i, + DEBUG_TX_CONTROL => open,--debug_tx_control_i, + DEBUG_RX_CONTROL => open,--debug_rx_control_i, + STAT_RESET => stat_fsm_reset_i, + DEBUG_OUT => open--debug_med_sync_control_i + ); + + + + THE_SCI_READER : entity work.sci_reader + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + --SCI + SCI_WRDATA => sci_data_in_i, + SCI_RDDATA => sci_data_out_i, + SCI_ADDR => sci_addr_i, + SCI_SEL => sci_ch_i, + SCI_RD => sci_read_i, + SCI_WR => sci_write_i, + + WA_POS_OUT => wa_position, + + --Slowcontrol + BUS_RX => BUS_SCI_RX, + BUS_TX => BUS_SCI_TX, + + MEDIA_STATUS_REG_IN(31 downto 0) => stat_rx_control_i, + MEDIA_STATUS_REG_IN(63 downto 32) => stat_tx_control_i, + MEDIA_STATUS_REG_IN(95 downto 64) => stat_fsm_reset_i, + --MEDIA_STATUS_REG_IN(127 downto 96) => stat_med, + MEDIA_STATUS_REG_IN(255 downto 96) => (others => '0'), + DEBUG_OUT => open + ); + + DEBUG_CLK : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + cnt_125_dbg <= cnt_125_dbg + 1; + end if; + end process DEBUG_CLK; + + DEBUG : process(CLK_SYS_IN) + begin + if rising_edge(CLK_SYS_IN) then + DEBUG_OUT(0) <= xmit(0); + DEBUG_OUT(1) <= los(0); + DEBUG_OUT(2) <= signal_detected(0); + DEBUG_OUT(3) <= tx_pll_lol; + DEBUG_OUT(4) <= rx_cdr_lol(0); + DEBUG_OUT(5) <= sd_rx_cv_error(0); + DEBUG_OUT(6) <= sd_rx_disp_error(0); + DEBUG_OUT(8 downto 7) <= operational_rate(1 downto 0); + DEBUG_OUT(9) <= rx_compensation_err(0); + DEBUG_OUT(10)<= an_link_ok(0); + DEBUG_OUT(11)<= MAC_READY_CONF_OUT(0); + DEBUG_OUT(12)<= an_complete(0); + DEBUG_OUT(13)<= rsl_rx_rdy; + DEBUG_OUT(14)<= rsl_tx_rdy; + DEBUG_OUT(15)<= cnt_125_dbg(30); + end if; + end process DEBUG; + + + SYNC_TX_PROC : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + sd_tx_data_q <= sd_tx_data; + sd_tx_kcntl_q <= sd_tx_kcntl; + sd_tx_correct_disp_q <= sd_tx_correct_disp; + end if; + end process SYNC_TX_PROC; + + + pcs_gen : for i in 0 to NUMBER_OF_GBE_LINKS - 1 generate + + pcs_active_gen : if LINKS_ACTIVE(i) = '1' generate + + SYNC_RX_PROC : process(sd_rx_clk) + begin + if rising_edge(sd_rx_clk(i)) then + sd_rx_data_q( (i + 1) * 8 - 1 downto i * 8) <= sd_rx_data( (i + 1) * 8 - 1 downto i * 8); + sd_rx_kcntl_q(i) <= sd_rx_kcntl(i); + sd_rx_disp_error_q(i) <= sd_rx_disp_error(i); + sd_rx_cv_error_q(i) <= sd_rx_cv_error(i); + end if; + end process SYNC_RX_PROC; + + SGMII_GBE_PCS : sgmii_gbe_pcs35_core + port map( + rst_n => synced_rst, --rst_n, + signal_detect => signal_detected(i), + gbe_mode => '1', + sgmii_mode => '0', + operational_rate => operational_rate( (i + 1) * 2 - 1 downto (i * 2)), + debug_link_timer_short => '0', + + force_isolate => '0', + force_loopback => '0', + force_unidir => '0', + + rx_compensation_err => rx_compensation_err(i), + + ctc_drop_flag => open, + ctc_add_flag => open, + an_link_ok => an_link_ok(i), + + -- MAC interface + tx_clk_125 => CLK_125_IN, --refclkcore, -- original clock from SerDes + tx_clock_enable_source => tx_clk_en(i), + tx_clock_enable_sink => tx_clk_en(i), + tx_d => pcs_txd( (i + 1) * 8 - 1 downto i * 8), -- TX data from MAC + tx_en => pcs_tx_en(i), -- TX data enable from MAC + tx_er => pcs_tx_er(i), -- TX error from MAC + rx_clk_125 => sd_rx_clk(i), + rx_clock_enable_source => rx_clk_en(i), + rx_clock_enable_sink => rx_clk_en(i), + rx_d => pcs_rxd( (i + 1) * 8 - 1 downto i * 8), -- RX data to MAC + rx_dv => pcs_rx_en(i), -- RX data enable to MAC + rx_er => pcs_rx_er(i), -- RX error to MAC + col => pcs_col(i), + crs => pcs_crs(i), + + -- SerDes interface + tx_data => sd_tx_data( (i + 1) * 8 - 1 downto i * 8), -- TX data to SerDes + tx_kcntl => sd_tx_kcntl(i), -- TX komma control to SerDes + tx_disparity_cntl => sd_tx_correct_disp(i), -- idle parity state control in IPG (to SerDes) + + xmit_autoneg => xmit(i), + + serdes_recovered_clk => sd_rx_clk(i), -- 125MHz recovered from receive bit stream + rx_data => sd_rx_data_q( (i + 1) * 8 - 1 downto i * 8), -- RX data from SerDes + rx_kcntl => sd_rx_kcntl_q(i), -- RX komma control from SerDes + rx_err_decode_mode => '0', -- receive error control mode fixed to normal + rx_even => '0', -- unused (receive error control mode = normal, tie to GND) + rx_disp_err => sd_rx_disp_error_q(i), -- RX disparity error from SerDes + rx_cv_err => sd_rx_cv_error_q(i), -- RX code violation error from SerDes + -- Autonegotiation stuff + mr_an_complete => an_complete(i), + mr_page_rx => mr_page_rx(i), + mr_lp_adv_ability => mr_lp_adv_ability( (i + 1) * 16 - 1 downto i * 16), + mr_main_reset => mr_main_reset(i), + mr_an_enable => '1', + mr_restart_an => '0',--mr_restart_an(i), + mr_adv_ability => mr_adv_ability( (i + 1) * 16 - 1 downto i * 16) + ); + + MAC_AN_READY_OUT(i) <= an_complete(i); + +-- u0_reset_controller_pcs : reset_controller_pcs port map( +-- rst_n => synced_rst, --rst_n, +-- clk => CLK_125_IN, +-- tx_plol => tx_pll_lol, +-- rx_cdr_lol => rx_cdr_lol(i), +-- quad_rst_out => open, --quad_rst, +-- tx_pcs_rst_out => tx_pcs_rst(i), +-- rx_pcs_rst_out => rx_pcs_rst(i) +-- ); +-- +-- u0_reset_controller_cdr : reset_controller_cdr port map( +-- rst_n => synced_rst, --rst_n, +-- clk => CLK_125_IN, +-- cdr_lol => rx_cdr_lol(i), +-- cdr_rst_out => rx_serdes_rst(i) +-- ); + +-- u0_rate_resolution : rate_resolution port map( +-- gbe_mode => '1', +-- sgmii_mode => '0', +-- an_enable => '1', +-- advertised_rate => mr_adv_ability(i * 16 + 11 downto i * 16 + 10), +-- link_partner_rate => mr_lp_adv_ability(i * 16 + 11 downto i * 16 + 10), +-- non_an_rate => "10", -- 1Gbps is rate when auto-negotiation disabled +-- +-- operational_rate => operational_rate( (i + 1) * 2 - 1 downto i * 2) +-- ); + + u0_ri : register_interface_hb port map( + -- Control Signals + rst_n => synced_rst, --rst_n, + hclk => CLK_125_IN, + gbe_mode => '1', + sgmii_mode => '0', + + -- Host Bus + hcs_n => '1', + hwrite_n => '1', + haddr => (others => '0'), + hdatain => (others => '0'), + + hdataout => open, + hready_n => open, + + -- Register Outputs + mr_an_enable => mr_an_enable(i), + mr_restart_an => mr_restart_an(i), + mr_main_reset => mr_main_reset(i), + mr_adv_ability => mr_adv_ability( (i + 1 ) * 16 - 1 downto i * 16), + + -- Register Inputs + mr_an_complete => an_complete(i), + mr_page_rx => mr_page_rx(i), + mr_lp_adv_ability => mr_lp_adv_ability( (i + 1 ) * 16 - 1 downto i * 16) + ); + + MAC: tsmac35 + port map( + ----------------- clock and reset port declarations ------------------ + hclk => CLK_SYS_IN, + txmac_clk => CLK_125_IN, + rxmac_clk => sd_rx_clk(i), + reset_n => GSR_N, + txmac_clk_en => '1', + rxmac_clk_en => '1', + ------------------- Input signals to the GMII ---------------- + rxd => pcs_rxd_qq( (i + 1) * 8 - 1 downto i * 8), + rx_dv => pcs_rx_en_qq(i), + rx_er => pcs_rx_er_qq(i), + col => pcs_col(i), + crs => pcs_crs(i), + -------------------- Input signals to the CPU I/F ------------------- + haddr => tsm_haddr( (i + 1) * 8 - 1 downto i * 8), + hdatain => tsm_hdata( (i + 1) * 8 - 1 downto i * 8), + hcs_n => tsm_hcs_n(i), + hwrite_n => tsm_hwrite_n(i), + hread_n => tsm_hread_n(i), + ---------------- Input signals to the Tx MAC FIFO I/F --------------- + tx_fifodata => MAC_TX_DATA_IN( (i + 1) * 8 - 1 downto i * 8), + tx_fifoavail => MAC_FIFOAVAIL_IN(i), + tx_fifoeof => MAC_FIFOEOF_IN(i), + tx_fifoempty => MAC_FIFOEMPTY_IN(i), + tx_sndpaustim => x"0000", + tx_sndpausreq => '0', + tx_fifoctrl => '0', -- always data frame + ---------------- Input signals to the Rx MAC FIFO I/F --------------- + rx_fifo_full => MAC_RX_FIFOFULL_IN(i), --'0', + ignore_pkt => '0', + ---------------- Output signals from the GMII ----------------------- + txd => pcs_txd( (i + 1) * 8 - 1 downto i * 8), + tx_en => pcs_tx_en(i), + tx_er => pcs_tx_er(i), + ----------------- Output signals from the CPU I/F ------------------- + hdataout => open, + hdataout_en_n => tsm_hdataout_en_n(i), + hready_n => tsm_hready_n(i), + cpu_if_gbit_en => open, + ------------- Output signals from the Tx MAC FIFO I/F --------------- + tx_macread => MAC_TX_READ_OUT(i), + tx_discfrm => MAC_TX_DISCRFRM_OUT(i), + tx_staten => MAC_TX_STAT_EN_OUT(i), + tx_statvec => MAC_TX_STATS_OUT( (i + 1) * 31 - 1 downto i * 31), + tx_done => MAC_TX_DONE_OUT(i), + ------------- Output signals from the Rx MAC FIFO I/F --------------- + rx_fifo_error => MAC_RX_FIFO_ERR_OUT(i), + rx_stat_vector => MAC_RX_STATS_OUT( (i + 1) * 32 - 1 downto i * 32), + rx_dbout => MAC_RX_DATA_OUT( (i + 1) * 8 - 1 downto i * 8), + rx_write => MAC_RX_WRITE_OUT(i), + rx_stat_en => MAC_RX_STAT_EN_OUT(i), + rx_eof => MAC_RX_EOF_OUT(i), + rx_error => MAC_RX_ERROR_OUT(i) + ); + + TSMAC_CONTROLLER : trb_net16_gbe_mac_control + port map( + CLK => CLK_SYS_IN, + RESET => RESET, + + -- signals to/from main controller + MC_TSMAC_READY_OUT => MAC_READY_CONF_OUT(i), + MC_RECONF_IN => MAC_RECONF_IN(i), + MC_GBE_EN_IN => '1', + MC_RX_DISCARD_FCS => '0', + MC_PROMISC_IN => '1', + MC_MAC_ADDR_IN => (others => '0'), + + -- signal to/from Host interface of TriSpeed MAC + TSM_HADDR_OUT => tsm_haddr( (i + 1) * 8 - 1 downto i * 8), + TSM_HDATA_OUT => tsm_hdata( (i + 1) * 8 - 1 downto i * 8), + TSM_HCS_N_OUT => tsm_hcs_n(i), + TSM_HWRITE_N_OUT => tsm_hwrite_n(i), + TSM_HREAD_N_OUT => tsm_hread_n(i), + TSM_HREADY_N_IN => tsm_hready_n(i), + TSM_HDATA_EN_N_IN => tsm_hdataout_en_n(i), + + DEBUG_OUT => open + ); + + SYNC_GMII_RX_PROC : process(sd_rx_clk) + begin + if rising_edge(sd_rx_clk(i)) then + pcs_rxd_q( (i + 1) * 8 - 1 downto i * 8) <= pcs_rxd( (i + 1) * 8 - 1 downto i * 8); + pcs_rx_en_q(i) <= pcs_rx_en(i); + pcs_rx_er_q(i) <= pcs_rx_er(i); + + pcs_rxd_qq( (i + 1) * 8 - 1 downto i * 8) <= pcs_rxd_q( (i + 1) * 8 - 1 downto i * 8); + pcs_rx_en_qq(i) <= pcs_rx_en_q(i); + pcs_rx_er_qq(i) <= pcs_rx_er_q(i); + end if; + end process SYNC_GMII_RX_PROC; + + SYNC_GMII_TX_PROC : process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + pcs_txd_q( (i + 1) * 8 - 1 downto i * 8) <= pcs_txd( (i + 1) * 8 - 1 downto i * 8); + pcs_tx_en_q <= pcs_tx_en; + pcs_tx_er_q <= pcs_tx_er; + + pcs_txd_qq( (i + 1) * 8 - 1 downto i * 8) <= pcs_txd_q( (i + 1) * 8 - 1 downto i * 8); + pcs_tx_en_qq <= pcs_tx_en_q; + pcs_tx_er_qq <= pcs_tx_er_q; + end if; + end process SYNC_GMII_TX_PROC; + + end generate pcs_active_gen; + + end generate pcs_gen; + + end generate impl_gen; + + sim_gen : if DO_SIMULATION = 1 generate + + process + begin + + MAC_AN_READY_OUT <= (others => '0'); + wait for 2 us; + MAC_AN_READY_OUT <= (others => '1'); + + wait; + end process; + + process(CLK_125_IN) + begin + if rising_edge(CLK_125_IN) then + MAC_TX_READ_OUT <= MAC_FIFOAVAIL_IN; + + fifo_eof_q <= MAC_FIFOEOF_IN; + fifo_eof_qq <= fifo_eof_q; + fifo_eof_qqq <= fifo_eof_qq; + fifo_eof_qqqq <= fifo_eof_qqq; + + MAC_TX_DONE_OUT <= fifo_eof_qqqq; -- MAC_FIFOEOF_IN; + end if; + end process; + + + end generate sim_gen; + + +end architecture RTL; diff --git a/gbe_trb/ipcores/ecp5/_math_real.vhd b/gbe_trb/ipcores/ecp5/_math_real.vhd new file mode 100644 index 0000000..ad185b2 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/_math_real.vhd @@ -0,0 +1,2574 @@ + + +------------------------------------------------------------------------ +-- +-- Copyright 1996 by IEEE. All rights reserved. +-- +-- This source file is an essential part of IEEE Std 1076.2-1996, IEEE Standard +-- VHDL Mathematical Packages. This source file may not be copied, sold, or +-- included with software that is sold without written permission from the IEEE +-- Standards Department. This source file may be used to implement this standard +-- and may be distributed in compiled form in any manner so long as the +-- compiled form does not allow direct decompilation of the original source file. +-- This source file may be copied for individual use between licensed users. +-- This source file is provided on an AS IS basis. The IEEE disclaims ANY +-- WARRANTY EXPRESS OR IMPLIED INCLUDING ANY WARRANTY OF MERCHANTABILITY +-- AND FITNESS FOR USE FOR A PARTICULAR PURPOSE. The user of the source +-- file shall indemnify and hold IEEE harmless from any damages or liability +-- arising out of the use thereof. +-- +-- Title: Standard VHDL Mathematical Packages (IEEE Std 1076.2-1996, +-- MATH_REAL) +-- +-- Library: This package shall be compiled into a library +-- symbolically named IEEE. +-- +-- Developers: IEEE DASC VHDL Mathematical Packages Working Group +-- +-- Purpose: This package defines a standard for designers to use in +-- describing VHDL models that make use of common REAL constants +-- and common REAL elementary mathematical functions. +-- +-- Limitation: The values generated by the functions in this package may +-- vary from platform to platform, and the precision of results +-- is only guaranteed to be the minimum required by IEEE Std 1076- +-- 1993. +-- +-- Notes: +-- No declarations or definitions shall be included in, or +-- excluded from, this package. +-- The "package declaration" defines the types, subtypes, and +-- declarations of MATH_REAL. +-- The standard mathematical definition and conventional meaning +-- of the mathematical functions that are part of this standard +-- represent the formal semantics of the implementation of the +-- MATH_REAL package declaration. The purpose of the MATH_REAL +-- package body is to provide a guideline for implementations to +-- verify their implementation of MATH_REAL. Tool developers may +-- choose to implement the package body in the most efficient +-- manner available to them. +-- +-- ----------------------------------------------------------------------------- +-- Version : 1.5 +-- Date : 24 July 1996 +-- ----------------------------------------------------------------------------- + +package MATH_REAL is + constant CopyRightNotice: STRING + := "Copyright 1996 IEEE. All rights reserved."; + + -- + -- Constant Definitions + -- + constant MATH_E : REAL := 2.71828_18284_59045_23536; + -- Value of e + constant MATH_1_OVER_E : REAL := 0.36787_94411_71442_32160; + -- Value of 1/e + constant MATH_PI : REAL := 3.14159_26535_89793_23846; + -- Value of pi + constant MATH_2_PI : REAL := 6.28318_53071_79586_47693; + -- Value of 2*pi + constant MATH_1_OVER_PI : REAL := 0.31830_98861_83790_67154; + -- Value of 1/pi + constant MATH_PI_OVER_2 : REAL := 1.57079_63267_94896_61923; + -- Value of pi/2 + constant MATH_PI_OVER_3 : REAL := 1.04719_75511_96597_74615; + -- Value of pi/3 + constant MATH_PI_OVER_4 : REAL := 0.78539_81633_97448_30962; + -- Value of pi/4 + constant MATH_3_PI_OVER_2 : REAL := 4.71238_89803_84689_85769; + -- Value 3*pi/2 + constant MATH_LOG_OF_2 : REAL := 0.69314_71805_59945_30942; + -- Natural log of 2 + constant MATH_LOG_OF_10 : REAL := 2.30258_50929_94045_68402; + -- Natural log of 10 + constant MATH_LOG2_OF_E : REAL := 1.44269_50408_88963_4074; + -- Log base 2 of e + constant MATH_LOG10_OF_E: REAL := 0.43429_44819_03251_82765; + -- Log base 10 of e + constant MATH_SQRT_2: REAL := 1.41421_35623_73095_04880; + -- square root of 2 + constant MATH_1_OVER_SQRT_2: REAL := 0.70710_67811_86547_52440; + -- square root of 1/2 + constant MATH_SQRT_PI: REAL := 1.77245_38509_05516_02730; + -- square root of pi + constant MATH_DEG_TO_RAD: REAL := 0.01745_32925_19943_29577; + -- Conversion factor from degree to radian + constant MATH_RAD_TO_DEG: REAL := 57.29577_95130_82320_87680; + -- Conversion factor from radian to degree + + -- + -- Function Declarations + -- + function SIGN (X: in REAL ) return REAL; + -- Purpose: + -- Returns 1.0 if X > 0.0; 0.0 if X = 0.0; -1.0 if X < 0.0 + -- Special values: + -- None + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ABS(SIGN(X)) <= 1.0 + -- Notes: + -- None + + function CEIL (X : in REAL ) return REAL; + -- Purpose: + -- Returns smallest INTEGER value (as REAL) not less than X + -- Special values: + -- None + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- CEIL(X) is mathematically unbounded + -- Notes: + -- a) Implementations have to support at least the domain + -- ABS(X) < REAL(INTEGER'HIGH) + + function FLOOR (X : in REAL ) return REAL; + -- Purpose: + -- Returns largest INTEGER value (as REAL) not greater than X + -- Special values: + -- FLOOR(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- FLOOR(X) is mathematically unbounded + -- Notes: + -- a) Implementations have to support at least the domain + -- ABS(X) < REAL(INTEGER'HIGH) + + function ROUND (X : in REAL ) return REAL; + -- Purpose: + -- Rounds X to the nearest integer value (as real). If X is + -- halfway between two integers, rounding is away from 0.0 + -- Special values: + -- ROUND(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ROUND(X) is mathematically unbounded + -- Notes: + -- a) Implementations have to support at least the domain + -- ABS(X) < REAL(INTEGER'HIGH) + + function TRUNC (X : in REAL ) return REAL; + -- Purpose: + -- Truncates X towards 0.0 and returns truncated value + -- Special values: + -- TRUNC(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- TRUNC(X) is mathematically unbounded + -- Notes: + -- a) Implementations have to support at least the domain + -- ABS(X) < REAL(INTEGER'HIGH) + + function "MOD" (X, Y: in REAL ) return REAL; + -- Purpose: + -- Returns floating point modulus of X/Y, with the same sign as + -- Y, and absolute value less than the absolute value of Y, and + -- for some INTEGER value N the result satisfies the relation + -- X = Y*N + MOD(X,Y) + -- Special values: + -- None + -- Domain: + -- X in REAL; Y in REAL and Y /= 0.0 + -- Error conditions: + -- Error if Y = 0.0 + -- Range: + -- ABS(MOD(X,Y)) < ABS(Y) + -- Notes: + -- None + + function REALMAX (X, Y : in REAL ) return REAL; + -- Purpose: + -- Returns the algebraically larger of X and Y + -- Special values: + -- REALMAX(X,Y) = X when X = Y + -- Domain: + -- X in REAL; Y in REAL + -- Error conditions: + -- None + -- Range: + -- REALMAX(X,Y) is mathematically unbounded + -- Notes: + -- None + + function REALMIN (X, Y : in REAL ) return REAL; + -- Purpose: + -- Returns the algebraically smaller of X and Y + -- Special values: + -- REALMIN(X,Y) = X when X = Y + -- Domain: + -- X in REAL; Y in REAL + -- Error conditions: + -- None + -- Range: + -- REALMIN(X,Y) is mathematically unbounded + -- Notes: + -- None + + procedure UNIFORM(variable SEED1,SEED2:inout POSITIVE; variable X:out REAL); + -- Purpose: + -- Returns, in X, a pseudo-random number with uniform + -- distribution in the open interval (0.0, 1.0). + -- Special values: + -- None + -- Domain: + -- 1 <= SEED1 <= 2147483562; 1 <= SEED2 <= 2147483398 + -- Error conditions: + -- Error if SEED1 or SEED2 outside of valid domain + -- Range: + -- 0.0 < X < 1.0 + -- Notes: + -- a) The semantics for this function are described by the + -- algorithm published by Pierre L'Ecuyer in "Communications + -- of the ACM," vol. 31, no. 6, June 1988, pp. 742-774. + -- The algorithm is based on the combination of two + -- multiplicative linear congruential generators for 32-bit + -- platforms. + -- + -- b) Before the first call to UNIFORM, the seed values + -- (SEED1, SEED2) have to be initialized to values in the range + -- [1, 2147483562] and [1, 2147483398] respectively. The + -- seed values are modified after each call to UNIFORM. + -- + -- c) This random number generator is portable for 32-bit + -- computers, and it has a period of ~2.30584*(10**18) for each + -- set of seed values. + -- + -- d) For information on spectral tests for the algorithm, refer + -- to the L'Ecuyer article. + + function SQRT (X : in REAL ) return REAL; + -- Purpose: + -- Returns square root of X + -- Special values: + -- SQRT(0.0) = 0.0 + -- SQRT(1.0) = 1.0 + -- Domain: + -- X >= 0.0 + -- Error conditions: + -- Error if X < 0.0 + -- Range: + -- SQRT(X) >= 0.0 + -- Notes: + -- a) The upper bound of the reachable range of SQRT is + -- approximately given by: + -- SQRT(X) <= SQRT(REAL'HIGH) + + function CBRT (X : in REAL ) return REAL; + -- Purpose: + -- Returns cube root of X + -- Special values: + -- CBRT(0.0) = 0.0 + -- CBRT(1.0) = 1.0 + -- CBRT(-1.0) = -1.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- CBRT(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of CBRT is approximately given by: + -- ABS(CBRT(X)) <= CBRT(REAL'HIGH) + + function "**" (X : in INTEGER; Y : in REAL) return REAL; + -- Purpose: + -- Returns Y power of X ==> X**Y + -- Special values: + -- X**0.0 = 1.0; X /= 0 + -- 0**Y = 0.0; Y > 0.0 + -- X**1.0 = REAL(X); X >= 0 + -- 1**Y = 1.0 + -- Domain: + -- X > 0 + -- X = 0 for Y > 0.0 + -- X < 0 for Y = 0.0 + -- Error conditions: + -- Error if X < 0 and Y /= 0.0 + -- Error if X = 0 and Y <= 0.0 + -- Range: + -- X**Y >= 0.0 + -- Notes: + -- a) The upper bound of the reachable range for "**" is + -- approximately given by: + -- X**Y <= REAL'HIGH + + function "**" (X : in REAL; Y : in REAL) return REAL; + -- Purpose: + -- Returns Y power of X ==> X**Y + -- Special values: + -- X**0.0 = 1.0; X /= 0.0 + -- 0.0**Y = 0.0; Y > 0.0 + -- X**1.0 = X; X >= 0.0 + -- 1.0**Y = 1.0 + -- Domain: + -- X > 0.0 + -- X = 0.0 for Y > 0.0 + -- X < 0.0 for Y = 0.0 + -- Error conditions: + -- Error if X < 0.0 and Y /= 0.0 + -- Error if X = 0.0 and Y <= 0.0 + -- Range: + -- X**Y >= 0.0 + -- Notes: + -- a) The upper bound of the reachable range for "**" is + -- approximately given by: + -- X**Y <= REAL'HIGH + + function EXP (X : in REAL ) return REAL; + -- Purpose: + -- Returns e**X; where e = MATH_E + -- Special values: + -- EXP(0.0) = 1.0 + -- EXP(1.0) = MATH_E + -- EXP(-1.0) = MATH_1_OVER_E + -- EXP(X) = 0.0 for X <= -LOG(REAL'HIGH) + -- Domain: + -- X in REAL such that EXP(X) <= REAL'HIGH + -- Error conditions: + -- Error if X > LOG(REAL'HIGH) + -- Range: + -- EXP(X) >= 0.0 + -- Notes: + -- a) The usable domain of EXP is approximately given by: + -- X <= LOG(REAL'HIGH) + + function LOG (X : in REAL ) return REAL; + -- Purpose: + -- Returns natural logarithm of X + -- Special values: + -- LOG(1.0) = 0.0 + -- LOG(MATH_E) = 1.0 + -- Domain: + -- X > 0.0 + -- Error conditions: + -- Error if X <= 0.0 + -- Range: + -- LOG(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of LOG is approximately given by: + -- LOG(0+) <= LOG(X) <= LOG(REAL'HIGH) + + function LOG2 (X : in REAL ) return REAL; + -- Purpose: + -- Returns logarithm base 2 of X + -- Special values: + -- LOG2(1.0) = 0.0 + -- LOG2(2.0) = 1.0 + -- Domain: + -- X > 0.0 + -- Error conditions: + -- Error if X <= 0.0 + -- Range: + -- LOG2(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of LOG2 is approximately given by: + -- LOG2(0+) <= LOG2(X) <= LOG2(REAL'HIGH) + + function LOG10 (X : in REAL ) return REAL; + -- Purpose: + -- Returns logarithm base 10 of X + -- Special values: + -- LOG10(1.0) = 0.0 + -- LOG10(10.0) = 1.0 + -- Domain: + -- X > 0.0 + -- Error conditions: + -- Error if X <= 0.0 + -- Range: + -- LOG10(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of LOG10 is approximately given by: + -- LOG10(0+) <= LOG10(X) <= LOG10(REAL'HIGH) + + function LOG (X: in REAL; BASE: in REAL) return REAL; + -- Purpose: + -- Returns logarithm base BASE of X + -- Special values: + -- LOG(1.0, BASE) = 0.0 + -- LOG(BASE, BASE) = 1.0 + -- Domain: + -- X > 0.0 + -- BASE > 0.0 + -- BASE /= 1.0 + -- Error conditions: + -- Error if X <= 0.0 + -- Error if BASE <= 0.0 + -- Error if BASE = 1.0 + -- Range: + -- LOG(X, BASE) is mathematically unbounded + -- Notes: + -- a) When BASE > 1.0, the reachable range of LOG is + -- approximately given by: + -- LOG(0+, BASE) <= LOG(X, BASE) <= LOG(REAL'HIGH, BASE) + -- b) When 0.0 < BASE < 1.0, the reachable range of LOG is + -- approximately given by: + -- LOG(REAL'HIGH, BASE) <= LOG(X, BASE) <= LOG(0+, BASE) + + function SIN (X : in REAL ) return REAL; + -- Purpose: + -- Returns sine of X; X in radians + -- Special values: + -- SIN(X) = 0.0 for X = k*MATH_PI, where k is an INTEGER + -- SIN(X) = 1.0 for X = (4*k+1)*MATH_PI_OVER_2, where k is an + -- INTEGER + -- SIN(X) = -1.0 for X = (4*k+3)*MATH_PI_OVER_2, where k is an + -- INTEGER + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ABS(SIN(X)) <= 1.0 + -- Notes: + -- a) For larger values of ABS(X), degraded accuracy is allowed. + + function COS ( X : in REAL ) return REAL; + -- Purpose: + -- Returns cosine of X; X in radians + -- Special values: + -- COS(X) = 0.0 for X = (2*k+1)*MATH_PI_OVER_2, where k is an + -- INTEGER + -- COS(X) = 1.0 for X = (2*k)*MATH_PI, where k is an INTEGER + -- COS(X) = -1.0 for X = (2*k+1)*MATH_PI, where k is an INTEGER + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ABS(COS(X)) <= 1.0 + -- Notes: + -- a) For larger values of ABS(X), degraded accuracy is allowed. + + function TAN (X : in REAL ) return REAL; + -- Purpose: + -- Returns tangent of X; X in radians + -- Special values: + -- TAN(X) = 0.0 for X = k*MATH_PI, where k is an INTEGER + -- Domain: + -- X in REAL and + -- X /= (2*k+1)*MATH_PI_OVER_2, where k is an INTEGER + -- Error conditions: + -- Error if X = ((2*k+1) * MATH_PI_OVER_2), where k is an + -- INTEGER + -- Range: + -- TAN(X) is mathematically unbounded + -- Notes: + -- a) For larger values of ABS(X), degraded accuracy is allowed. + + function ARCSIN (X : in REAL ) return REAL; + -- Purpose: + -- Returns inverse sine of X + -- Special values: + -- ARCSIN(0.0) = 0.0 + -- ARCSIN(1.0) = MATH_PI_OVER_2 + -- ARCSIN(-1.0) = -MATH_PI_OVER_2 + -- Domain: + -- ABS(X) <= 1.0 + -- Error conditions: + -- Error if ABS(X) > 1.0 + -- Range: + -- ABS(ARCSIN(X) <= MATH_PI_OVER_2 + -- Notes: + -- None + + function ARCCOS (X : in REAL ) return REAL; + -- Purpose: + -- Returns inverse cosine of X + -- Special values: + -- ARCCOS(1.0) = 0.0 + -- ARCCOS(0.0) = MATH_PI_OVER_2 + -- ARCCOS(-1.0) = MATH_PI + -- Domain: + -- ABS(X) <= 1.0 + -- Error conditions: + -- Error if ABS(X) > 1.0 + -- Range: + -- 0.0 <= ARCCOS(X) <= MATH_PI + -- Notes: + -- None + + function ARCTAN (Y : in REAL) return REAL; + -- Purpose: + -- Returns the value of the angle in radians of the point + -- (1.0, Y), which is in rectangular coordinates + -- Special values: + -- ARCTAN(0.0) = 0.0 + -- Domain: + -- Y in REAL + -- Error conditions: + -- None + -- Range: + -- ABS(ARCTAN(Y)) <= MATH_PI_OVER_2 + -- Notes: + -- None + + function ARCTAN (Y : in REAL; X : in REAL) return REAL; + -- Purpose: + -- Returns the principal value of the angle in radians of + -- the point (X, Y), which is in rectangular coordinates + -- Special values: + -- ARCTAN(0.0, X) = 0.0 if X > 0.0 + -- ARCTAN(0.0, X) = MATH_PI if X < 0.0 + -- ARCTAN(Y, 0.0) = MATH_PI_OVER_2 if Y > 0.0 + -- ARCTAN(Y, 0.0) = -MATH_PI_OVER_2 if Y < 0.0 + -- Domain: + -- Y in REAL + -- X in REAL, X /= 0.0 when Y = 0.0 + -- Error conditions: + -- Error if X = 0.0 and Y = 0.0 + -- Range: + -- -MATH_PI < ARCTAN(Y,X) <= MATH_PI + -- Notes: + -- None + + function SINH (X : in REAL) return REAL; + -- Purpose: + -- Returns hyperbolic sine of X + -- Special values: + -- SINH(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- SINH(X) is mathematically unbounded + -- Notes: + -- a) The usable domain of SINH is approximately given by: + -- ABS(X) <= LOG(REAL'HIGH) + + + function COSH (X : in REAL) return REAL; + -- Purpose: + -- Returns hyperbolic cosine of X + -- Special values: + -- COSH(0.0) = 1.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- COSH(X) >= 1.0 + -- Notes: + -- a) The usable domain of COSH is approximately given by: + -- ABS(X) <= LOG(REAL'HIGH) + + function TANH (X : in REAL) return REAL; + -- Purpose: + -- Returns hyperbolic tangent of X + -- Special values: + -- TANH(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ABS(TANH(X)) <= 1.0 + -- Notes: + -- None + + function ARCSINH (X : in REAL) return REAL; + -- Purpose: + -- Returns inverse hyperbolic sine of X + -- Special values: + -- ARCSINH(0.0) = 0.0 + -- Domain: + -- X in REAL + -- Error conditions: + -- None + -- Range: + -- ARCSINH(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of ARCSINH is approximately given by: + -- ABS(ARCSINH(X)) <= LOG(REAL'HIGH) + + function ARCCOSH (X : in REAL) return REAL; + -- Purpose: + -- Returns inverse hyperbolic cosine of X + -- Special values: + -- ARCCOSH(1.0) = 0.0 + -- Domain: + -- X >= 1.0 + -- Error conditions: + -- Error if X < 1.0 + -- Range: + -- ARCCOSH(X) >= 0.0 + -- Notes: + -- a) The upper bound of the reachable range of ARCCOSH is + -- approximately given by: ARCCOSH(X) <= LOG(REAL'HIGH) + + function ARCTANH (X : in REAL) return REAL; + -- Purpose: + -- Returns inverse hyperbolic tangent of X + -- Special values: + -- ARCTANH(0.0) = 0.0 + -- Domain: + -- ABS(X) < 1.0 + -- Error conditions: + -- Error if ABS(X) >= 1.0 + -- Range: + -- ARCTANH(X) is mathematically unbounded + -- Notes: + -- a) The reachable range of ARCTANH is approximately given by: + -- ABS(ARCTANH(X)) < LOG(REAL'HIGH) + +end MATH_REAL; + + + +------------------------------------------------------------------------ +-- +-- Copyright 1996 by IEEE. All rights reserved. + +-- This source file is an informative part of IEEE Std 1076.2-1996, IEEE Standard +-- VHDL Mathematical Packages. This source file may not be copied, sold, or +-- included with software that is sold without written permission from the IEEE +-- Standards Department. This source file may be used to implement this standard +-- and may be distributed in compiled form in any manner so long as the +-- compiled form does not allow direct decompilation of the original source file. +-- This source file may be copied for individual use between licensed users. +-- This source file is provided on an AS IS basis. The IEEE disclaims ANY +-- WARRANTY EXPRESS OR IMPLIED INCLUDING ANY WARRANTY OF MERCHANTABILITY +-- AND FITNESS FOR USE FOR A PARTICULAR PURPOSE. The user of the source +-- file shall indemnify and hold IEEE harmless from any damages or liability +-- arising out of the use thereof. + +-- +-- Title: Standard VHDL Mathematical Packages (IEEE Std 1076.2-1996, +-- MATH_REAL) +-- +-- Library: This package shall be compiled into a library +-- symbolically named IEEE. +-- +-- Developers: IEEE DASC VHDL Mathematical Packages Working Group +-- +-- Purpose: This package body is a nonnormative implementation of the +-- functionality defined in the MATH_REAL package declaration. +-- +-- Limitation: The values generated by the functions in this package may +-- vary from platform to platform, and the precision of results +-- is only guaranteed to be the minimum required by IEEE Std 1076 +-- -1993. +-- +-- Notes: +-- The "package declaration" defines the types, subtypes, and +-- declarations of MATH_REAL. +-- The standard mathematical definition and conventional meaning +-- of the mathematical functions that are part of this standard +-- represent the formal semantics of the implementation of the +-- MATH_REAL package declaration. The purpose of the MATH_REAL +-- package body is to clarify such semantics and provide a +-- guideline for implementations to verify their implementation +-- of MATH_REAL. Tool developers may choose to implement +-- the package body in the most efficient manner available to them. +-- +-- ----------------------------------------------------------------------------- +-- Version : 1.5 +-- Date : 24 July 1996 +-- ----------------------------------------------------------------------------- + +package body MATH_REAL is + + -- + -- Local Constants for Use in the Package Body Only + -- + constant MATH_E_P2 : REAL := 7.38905_60989_30650; -- e**2 + constant MATH_E_P10 : REAL := 22026.46579_48067_17; -- e**10 + constant MATH_EIGHT_PI : REAL := 25.13274_12287_18345_90770_115; --8*pi + constant MAX_ITER: INTEGER := 27; -- Maximum precision factor for cordic + constant MAX_COUNT: INTEGER := 150; -- Maximum count for number of tries + constant BASE_EPS: REAL := 0.00001; -- Factor for convergence criteria + constant KC : REAL := 6.0725293500888142e-01; -- Constant for cordic + + -- + -- Local Type Declarations for Cordic Operations + -- + type REAL_VECTOR is array (NATURAL range <>) of REAL; + type NATURAL_VECTOR is array (NATURAL range <>) of NATURAL; + subtype REAL_VECTOR_N is REAL_VECTOR (0 to MAX_ITER); + subtype REAL_ARR_2 is REAL_VECTOR (0 to 1); + subtype REAL_ARR_3 is REAL_VECTOR (0 to 2); + subtype QUADRANT is INTEGER range 0 to 3; + type CORDIC_MODE_TYPE is (ROTATION, VECTORING); + + -- + -- Auxiliary Functions for Cordic Algorithms + -- + function POWER_OF_2_SERIES (D : in NATURAL_VECTOR; INITIAL_VALUE : in REAL; + NUMBER_OF_VALUES : in NATURAL) return REAL_VECTOR is + -- Description: + -- Returns power of two for a vector of values + -- Notes: + -- None + -- + variable V : REAL_VECTOR (0 to NUMBER_OF_VALUES); + variable TEMP : REAL := INITIAL_VALUE; + variable FLAG : BOOLEAN := TRUE; + begin + for I in 0 to NUMBER_OF_VALUES loop + V(I) := TEMP; + for P in D'RANGE loop + if I = D(P) then + FLAG := FALSE; + exit; + end if; + end loop; + if FLAG then + TEMP := TEMP/2.0; + end if; + FLAG := TRUE; + end loop; + return V; + end POWER_OF_2_SERIES; + + + constant TWO_AT_MINUS : REAL_VECTOR := POWER_OF_2_SERIES( + NATURAL_VECTOR'(100, 90),1.0, + MAX_ITER); + + constant EPSILON : REAL_VECTOR_N := ( + 7.8539816339744827e-01, + 4.6364760900080606e-01, + 2.4497866312686413e-01, + 1.2435499454676144e-01, + 6.2418809995957351e-02, + 3.1239833430268277e-02, + 1.5623728620476830e-02, + 7.8123410601011116e-03, + 3.9062301319669717e-03, + 1.9531225164788189e-03, + 9.7656218955931937e-04, + 4.8828121119489829e-04, + 2.4414062014936175e-04, + 1.2207031189367021e-04, + 6.1035156174208768e-05, + 3.0517578115526093e-05, + 1.5258789061315760e-05, + 7.6293945311019699e-06, + 3.8146972656064960e-06, + 1.9073486328101870e-06, + 9.5367431640596080e-07, + 4.7683715820308876e-07, + 2.3841857910155801e-07, + 1.1920928955078067e-07, + 5.9604644775390553e-08, + 2.9802322387695303e-08, + 1.4901161193847654e-08, + 7.4505805969238281e-09 + ); + + function CORDIC ( X0 : in REAL; + Y0 : in REAL; + Z0 : in REAL; + N : in NATURAL; -- Precision factor + CORDIC_MODE : in CORDIC_MODE_TYPE -- Rotation (Z -> 0) + -- or vectoring (Y -> 0) + ) return REAL_ARR_3 is + -- Description: + -- Compute cordic values + -- Notes: + -- None + variable X : REAL := X0; + variable Y : REAL := Y0; + variable Z : REAL := Z0; + variable X_TEMP : REAL; + begin + if CORDIC_MODE = ROTATION then + for K in 0 to N loop + X_TEMP := X; + if ( Z >= 0.0) then + X := X - Y * TWO_AT_MINUS(K); + Y := Y + X_TEMP * TWO_AT_MINUS(K); + Z := Z - EPSILON(K); + else + X := X + Y * TWO_AT_MINUS(K); + Y := Y - X_TEMP * TWO_AT_MINUS(K); + Z := Z + EPSILON(K); + end if; + end loop; + else + for K in 0 to N loop + X_TEMP := X; + if ( Y < 0.0) then + X := X - Y * TWO_AT_MINUS(K); + Y := Y + X_TEMP * TWO_AT_MINUS(K); + Z := Z - EPSILON(K); + else + X := X + Y * TWO_AT_MINUS(K); + Y := Y - X_TEMP * TWO_AT_MINUS(K); + Z := Z + EPSILON(K); + end if; + end loop; + end if; + return REAL_ARR_3'(X, Y, Z); + end CORDIC; + + -- + -- Bodies for Global Mathematical Functions Start Here + -- + function SIGN (X: in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- None + begin + if ( X > 0.0 ) then + return 1.0; + elsif ( X < 0.0 ) then + return -1.0; + else + return 0.0; + end if; + end SIGN; + + function CEIL (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) No conversion to an INTEGER type is expected, so truncate + -- cannot overflow for large arguments + -- b) The domain supported by this function is X <= LARGE + -- c) Returns X if ABS(X) >= LARGE + + constant LARGE: REAL := REAL(INTEGER'HIGH); + variable RD: REAL; + + begin + if ABS(X) >= LARGE then + return X; + end if; + + RD := REAL ( INTEGER(X)); + if RD = X then + return X; + end if; + + if X > 0.0 then + if RD >= X then + return RD; + else + return RD + 1.0; + end if; + elsif X = 0.0 then + return 0.0; + else + if RD <= X then + return RD + 1.0; + else + return RD; + end if; + end if; + end CEIL; + + function FLOOR (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) No conversion to an INTEGER type is expected, so truncate + -- cannot overflow for large arguments + -- b) The domain supported by this function is ABS(X) <= LARGE + -- c) Returns X if ABS(X) >= LARGE + + constant LARGE: REAL := REAL(INTEGER'HIGH); + variable RD: REAL; + + begin + if ABS( X ) >= LARGE then + return X; + end if; + + RD := REAL ( INTEGER(X)); + if RD = X then + return X; + end if; + + if X > 0.0 then + if RD <= X then + return RD; + else + return RD - 1.0; + end if; + elsif X = 0.0 then + return 0.0; + else + if RD >= X then + return RD - 1.0; + else + return RD; + end if; + end if; + end FLOOR; + + function ROUND (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 if X = 0.0 + -- b) Returns FLOOR(X + 0.5) if X > 0 + -- c) Returns CEIL(X - 0.5) if X < 0 + + begin + if X > 0.0 then + return FLOOR(X + 0.5); + elsif X < 0.0 then + return CEIL( X - 0.5); + else + return 0.0; + end if; + end ROUND; + + function TRUNC (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 if X = 0.0 + -- b) Returns FLOOR(X) if X > 0 + -- c) Returns CEIL(X) if X < 0 + + begin + if X > 0.0 then + return FLOOR(X); + elsif X < 0.0 then + return CEIL( X); + else + return 0.0; + end if; + end TRUNC; + + + + + function "MOD" (X, Y: in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 on error + + variable XNEGATIVE : BOOLEAN := X < 0.0; + variable YNEGATIVE : BOOLEAN := Y < 0.0; + variable VALUE : REAL; + begin + -- Check validity of input arguments + if (Y = 0.0) then + assert FALSE + report "MOD(X, 0.0) is undefined" + severity ERROR; + return 0.0; + end if; + + -- Compute value + if ( XNEGATIVE ) then + if ( YNEGATIVE ) then + VALUE := X + (FLOOR(ABS(X)/ABS(Y)))*ABS(Y); + else + VALUE := X + (CEIL(ABS(X)/ABS(Y)))*ABS(Y); + end if; + else + if ( YNEGATIVE ) then + VALUE := X - (CEIL(ABS(X)/ABS(Y)))*ABS(Y); + else + VALUE := X - (FLOOR(ABS(X)/ABS(Y)))*ABS(Y); + end if; + end if; + + return VALUE; + end "MOD"; + + + function REALMAX (X, Y : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) REALMAX(X,Y) = X when X = Y + -- + begin + if X >= Y then + return X; + else + return Y; + end if; + end REALMAX; + + function REALMIN (X, Y : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) REALMIN(X,Y) = X when X = Y + -- + begin + if X <= Y then + return X; + else + return Y; + end if; + end REALMIN; + + + procedure UNIFORM(variable SEED1,SEED2:inout POSITIVE;variable X:out REAL) + is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 on error + -- + variable Z, K: INTEGER; + variable TSEED1 : INTEGER := INTEGER'(SEED1); + variable TSEED2 : INTEGER := INTEGER'(SEED2); + begin + -- Check validity of arguments + if SEED1 > 2147483562 then + assert FALSE + report "SEED1 > 2147483562 in UNIFORM" + severity ERROR; + X := 0.0; + return; + end if; + + if SEED2 > 2147483398 then + assert FALSE + report "SEED2 > 2147483398 in UNIFORM" + severity ERROR; + X := 0.0; + return; + end if; + + -- Compute new seed values and pseudo-random number + K := TSEED1/53668; + TSEED1 := 40014 * (TSEED1 - K * 53668) - K * 12211; + + if TSEED1 < 0 then + TSEED1 := TSEED1 + 2147483563; + end if; + + K := TSEED2/52774; + TSEED2 := 40692 * (TSEED2 - K * 52774) - K * 3791; + + if TSEED2 < 0 then + TSEED2 := TSEED2 + 2147483399; + end if; + + Z := TSEED1 - TSEED2; + if Z < 1 then + Z := Z + 2147483562; + end if; + + -- Get output values + SEED1 := POSITIVE'(TSEED1); + SEED2 := POSITIVE'(TSEED2); + X := REAL(Z)*4.656613e-10; + end UNIFORM; + + + + function SQRT (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Uses the Newton-Raphson approximation: + -- F(n+1) = 0.5*[F(n) + x/F(n)] + -- b) Returns 0.0 on error + -- + + constant EPS : REAL := BASE_EPS*BASE_EPS; -- Convergence factor + + variable INIVAL: REAL; + variable OLDVAL : REAL ; + variable NEWVAL : REAL ; + variable COUNT : INTEGER := 1; + + begin + -- Check validity of argument + if ( X < 0.0 ) then + assert FALSE + report "X < 0.0 in SQRT(X)" + severity ERROR; + return 0.0; + end if; + + -- Get the square root for special cases + if X = 0.0 then + return 0.0; + else + if ( X = 1.0 ) then + return 1.0; + end if; + end if; + + -- Get the square root for general cases + INIVAL := EXP(LOG(X)*(0.5)); -- Mathematically correct but imprecise + OLDVAL := INIVAL; + NEWVAL := (X/OLDVAL + OLDVAL)*0.5; + + -- Check for relative and absolute error and max count + while ( ( (ABS((NEWVAL -OLDVAL)/NEWVAL) > EPS) OR + (ABS(NEWVAL - OLDVAL) > EPS) ) AND + (COUNT < MAX_COUNT) ) loop + OLDVAL := NEWVAL; + NEWVAL := (X/OLDVAL + OLDVAL)*0.5; + COUNT := COUNT + 1; + end loop; + return NEWVAL; + end SQRT; + + function CBRT (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Uses the Newton-Raphson approximation: + -- F(n+1) = (1/3)*[2*F(n) + x/F(n)**2]; + -- + constant EPS : REAL := BASE_EPS*BASE_EPS; + + variable INIVAL: REAL; + variable XLOCAL : REAL := X; + variable NEGATIVE : BOOLEAN := X < 0.0; + variable OLDVAL : REAL ; + variable NEWVAL : REAL ; + variable COUNT : INTEGER := 1; + + begin + + -- Compute root for special cases + if X = 0.0 then + return 0.0; + elsif ( X = 1.0 ) then + return 1.0; + else + if X = -1.0 then + return -1.0; + end if; + end if; + + -- Compute root for general cases + if NEGATIVE then + XLOCAL := -X; + end if; + + INIVAL := EXP(LOG(XLOCAL)/(3.0)); -- Mathematically correct but + -- imprecise + OLDVAL := INIVAL; + NEWVAL := (XLOCAL/(OLDVAL*OLDVAL) + 2.0*OLDVAL)/3.0; + + -- Check for relative and absolute errors and max count + while ( ( (ABS((NEWVAL -OLDVAL)/NEWVAL) > EPS ) OR + (ABS(NEWVAL - OLDVAL) > EPS ) ) AND + ( COUNT < MAX_COUNT ) ) loop + OLDVAL := NEWVAL; + NEWVAL :=(XLOCAL/(OLDVAL*OLDVAL) + 2.0*OLDVAL)/3.0; + COUNT := COUNT + 1; + end loop; + + if NEGATIVE then + NEWVAL := -NEWVAL; + end if; + + return NEWVAL; + end CBRT; + + function "**" (X : in INTEGER; Y : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 on error condition + + begin + -- Check validity of argument + if ( ( X < 0 ) and ( Y /= 0.0 ) ) then + assert FALSE + report "X < 0 and Y /= 0.0 in X**Y" + severity ERROR; + return 0.0; + end if; + + if ( ( X = 0 ) and ( Y <= 0.0 ) ) then + assert FALSE + report "X = 0 and Y <= 0.0 in X**Y" + severity ERROR; + return 0.0; + end if; + + -- Get value for special cases + if ( X = 0 and Y > 0.0 ) then + return 0.0; + end if; + + if ( X = 1 ) then + return 1.0; + end if; + + if ( Y = 0.0 and X /= 0 ) then + return 1.0; + end if; + + if ( Y = 1.0) then + return (REAL(X)); + end if; + + -- Get value for general case + return EXP (Y * LOG (REAL(X))); + end "**"; + + function "**" (X : in REAL; Y : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 on error condition + + begin + -- Check validity of argument + if ( ( X < 0.0 ) and ( Y /= 0.0 ) ) then + assert FALSE + report "X < 0.0 and Y /= 0.0 in X**Y" + severity ERROR; + return 0.0; + end if; + + if ( ( X = 0.0 ) and ( Y <= 0.0 ) ) then + assert FALSE + report "X = 0.0 and Y <= 0.0 in X**Y" + severity ERROR; + return 0.0; + end if; + + -- Get value for special cases + if ( X = 0.0 and Y > 0.0 ) then + return 0.0; + end if; + + if ( X = 1.0 ) then + return 1.0; + end if; + + if ( Y = 0.0 and X /= 0.0 ) then + return 1.0; + end if; + + if ( Y = 1.0) then + return (X); + end if; + + -- Get value for general case + return EXP (Y * LOG (X)); + end "**"; + + function EXP (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) This function computes the exponential using the following + -- series: + -- exp(x) = 1 + x + x**2/2! + x**3/3! + ... ; |x| < 1.0 + -- and reduces argument X to take advantage of exp(x+y) = + -- exp(x)*exp(y) + -- + -- b) This implementation limits X to be less than LOG(REAL'HIGH) + -- to avoid overflow. Returns REAL'HIGH when X reaches that + -- limit + -- + constant EPS : REAL := BASE_EPS*BASE_EPS*BASE_EPS;-- Precision criteria + + variable RECIPROCAL: BOOLEAN := X < 0.0;-- Check sign of argument + variable XLOCAL : REAL := ABS(X); -- Use positive value + variable OLDVAL: REAL ; + variable COUNT: INTEGER ; + variable NEWVAL: REAL ; + variable LAST_TERM: REAL ; + variable FACTOR : REAL := 1.0; + + begin + -- Compute value for special cases + if X = 0.0 then + return 1.0; + end if; + + if XLOCAL = 1.0 then + if RECIPROCAL then + return MATH_1_OVER_E; + else + return MATH_E; + end if; + end if; + + if XLOCAL = 2.0 then + if RECIPROCAL then + return 1.0/MATH_E_P2; + else + return MATH_E_P2; + end if; + end if; + + if XLOCAL = 10.0 then + if RECIPROCAL then + return 1.0/MATH_E_P10; + else + return MATH_E_P10; + end if; + end if; + + if XLOCAL > LOG(REAL'HIGH) then + if RECIPROCAL then + return 0.0; + else + assert FALSE + report "X > LOG(REAL'HIGH) in EXP(X)" + severity NOTE; + return REAL'HIGH; + end if; + end if; + + -- Reduce argument to ABS(X) < 1.0 + while XLOCAL > 10.0 loop + XLOCAL := XLOCAL - 10.0; + FACTOR := FACTOR*MATH_E_P10; + end loop; + + while XLOCAL > 1.0 loop + XLOCAL := XLOCAL - 1.0; + FACTOR := FACTOR*MATH_E; + end loop; + + -- Compute value for case 0 < XLOCAL < 1 + OLDVAL := 1.0; + LAST_TERM := XLOCAL; + NEWVAL:= OLDVAL + LAST_TERM; + COUNT := 2; + + -- Check for relative and absolute errors and max count + while ( ( (ABS((NEWVAL - OLDVAL)/NEWVAL) > EPS) OR + (ABS(NEWVAL - OLDVAL) > EPS) ) AND + (COUNT < MAX_COUNT ) ) loop + OLDVAL := NEWVAL; + LAST_TERM := LAST_TERM*(XLOCAL / (REAL(COUNT))); + NEWVAL := OLDVAL + LAST_TERM; + COUNT := COUNT + 1; + end loop; + + -- Compute final value using exp(x+y) = exp(x)*exp(y) + NEWVAL := NEWVAL*FACTOR; + + if RECIPROCAL then + NEWVAL := 1.0/NEWVAL; + end if; + + return NEWVAL; + end EXP; + + + -- + -- Auxiliary Functions to Compute LOG + -- + function ILOGB(X: in REAL) return INTEGER IS + -- Description: + -- Returns n such that -1 <= ABS(X)/2^n < 2 + -- Notes: + -- None + + variable N: INTEGER := 0; + variable Y: REAL := ABS(X); + + begin + if(Y = 1.0 or Y = 0.0) then + return 0; + end if; + + if( Y > 1.0) then + while Y >= 2.0 loop + Y := Y/2.0; + N := N+1; + end loop; + return N; + end if; + + -- O < Y < 1 + while Y < 1.0 loop + Y := Y*2.0; + N := N -1; + end loop; + return N; + end ILOGB; + + function LDEXP(X: in REAL; N: in INTEGER) RETURN REAL IS + -- Description: + -- Returns X*2^n + -- Notes: + -- None + begin + return X*(2.0 ** N); + end LDEXP; + + function LOG (X : in REAL ) return REAL IS + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- + -- Notes: + -- a) Returns REAL'LOW on error + -- + -- Copyright (c) 1992 Regents of the University of California. + -- All rights reserved. + -- + -- Redistribution and use in source and binary forms, with or without + -- modification, are permitted provided that the following conditions + -- are met: + -- 1. Redistributions of source code must retain the above copyright + -- notice, this list of conditions and the following disclaimer. + -- 2. Redistributions in binary form must reproduce the above copyright + -- notice, this list of conditions and the following disclaimer in the + -- documentation and/or other materials provided with the distribution. + -- 3. All advertising materials mentioning features or use of this + -- software must display the following acknowledgement: + -- This product includes software developed by the University of + -- California, Berkeley and its contributors. + -- 4. Neither the name of the University nor the names of its + -- contributors may be used to endorse or promote products derived + -- from this software without specific prior written permission. + -- + -- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' + -- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + -- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + -- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR + -- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + -- OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + -- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + -- DAMAGE. + -- + -- NOTE: This VHDL version was generated using the C version of the + -- original function by the IEEE VHDL Mathematical Package + -- Working Group (CS/JT) + + constant N: INTEGER := 128; + + -- Table of log(Fj) = logF_head[j] + logF_tail[j], for Fj = 1+j/128. + -- Used for generation of extend precision logarithms. + -- The constant 35184372088832 is 2^45, so the divide is exact. + -- It ensures correct reading of logF_head, even for inaccurate + -- decimal-to-binary conversion routines. (Everybody gets the + -- right answer for INTEGERs less than 2^53.) + -- Values for LOG(F) were generated using error < 10^-57 absolute + -- with the bc -l package. + + type REAL_VECTOR is array (NATURAL range <>) of REAL; + + constant A1:REAL := 0.08333333333333178827; + constant A2:REAL := 0.01250000000377174923; + constant A3:REAL := 0.002232139987919447809; + constant A4:REAL := 0.0004348877777076145742; + + constant LOGF_HEAD: REAL_VECTOR(0 TO N) := ( + 0.0, + 0.007782140442060381246, + 0.015504186535963526694, + 0.023167059281547608406, + 0.030771658666765233647, + 0.038318864302141264488, + 0.045809536031242714670, + 0.053244514518837604555, + 0.060624621816486978786, + 0.067950661908525944454, + 0.075223421237524235039, + 0.082443669210988446138, + 0.089612158689760690322, + 0.096729626458454731618, + 0.103796793681567578460, + 0.110814366340264314203, + 0.117783035656430001836, + 0.124703478501032805070, + 0.131576357788617315236, + 0.138402322859292326029, + 0.145182009844575077295, + 0.151916042025732167530, + 0.158605030176659056451, + 0.165249572895390883786, + 0.171850256926518341060, + 0.178407657472689606947, + 0.184922338493834104156, + 0.191394852999565046047, + 0.197825743329758552135, + 0.204215541428766300668, + 0.210564769107350002741, + 0.216873938300523150246, + 0.223143551314024080056, + 0.229374101064877322642, + 0.235566071312860003672, + 0.241719936886966024758, + 0.247836163904594286577, + 0.253915209980732470285, + 0.259957524436686071567, + 0.265963548496984003577, + 0.271933715484010463114, + 0.277868451003087102435, + 0.283768173130738432519, + 0.289633292582948342896, + 0.295464212893421063199, + 0.301261330578199704177, + 0.307025035294827830512, + 0.312755710004239517729, + 0.318453731118097493890, + 0.324119468654316733591, + 0.329753286372579168528, + 0.335355541920762334484, + 0.340926586970454081892, + 0.346466767346100823488, + 0.351976423156884266063, + 0.357455888922231679316, + 0.362905493689140712376, + 0.368325561158599157352, + 0.373716409793814818840, + 0.379078352934811846353, + 0.384411698910298582632, + 0.389716751140440464951, + 0.394993808240542421117, + 0.400243164127459749579, + 0.405465108107819105498, + 0.410659924985338875558, + 0.415827895143593195825, + 0.420969294644237379543, + 0.426084395310681429691, + 0.431173464818130014464, + 0.436236766774527495726, + 0.441274560805140936281, + 0.446287102628048160113, + 0.451274644139630254358, + 0.456237433481874177232, + 0.461175715122408291790, + 0.466089729924533457960, + 0.470979715219073113985, + 0.475845904869856894947, + 0.480688529345570714212, + 0.485507815781602403149, + 0.490303988045525329653, + 0.495077266798034543171, + 0.499827869556611403822, + 0.504556010751912253908, + 0.509261901790523552335, + 0.513945751101346104405, + 0.518607764208354637958, + 0.523248143765158602036, + 0.527867089620485785417, + 0.532464798869114019908, + 0.537041465897345915436, + 0.541597282432121573947, + 0.546132437597407260909, + 0.550647117952394182793, + 0.555141507540611200965, + 0.559615787935399566777, + 0.564070138285387656651, + 0.568504735352689749561, + 0.572919753562018740922, + 0.577315365035246941260, + 0.581691739635061821900, + 0.586049045003164792433, + 0.590387446602107957005, + 0.594707107746216934174, + 0.599008189645246602594, + 0.603290851438941899687, + 0.607555250224322662688, + 0.611801541106615331955, + 0.616029877215623855590, + 0.620240409751204424537, + 0.624433288012369303032, + 0.628608659422752680256, + 0.632766669570628437213, + 0.636907462236194987781, + 0.641031179420679109171, + 0.645137961373620782978, + 0.649227946625615004450, + 0.653301272011958644725, + 0.657358072709030238911, + 0.661398482245203922502, + 0.665422632544505177065, + 0.669430653942981734871, + 0.673422675212350441142, + 0.677398823590920073911, + 0.681359224807238206267, + 0.685304003098281100392, + 0.689233281238557538017, + 0.693147180560117703862); + + constant LOGF_TAIL: REAL_VECTOR(0 TO N) := ( + 0.0, + -0.00000000000000543229938420049, + 0.00000000000000172745674997061, + -0.00000000000001323017818229233, + -0.00000000000001154527628289872, + -0.00000000000000466529469958300, + 0.00000000000005148849572685810, + -0.00000000000002532168943117445, + -0.00000000000005213620639136504, + -0.00000000000001819506003016881, + 0.00000000000006329065958724544, + 0.00000000000008614512936087814, + -0.00000000000007355770219435028, + 0.00000000000009638067658552277, + 0.00000000000007598636597194141, + 0.00000000000002579999128306990, + -0.00000000000004654729747598444, + -0.00000000000007556920687451336, + 0.00000000000010195735223708472, + -0.00000000000017319034406422306, + -0.00000000000007718001336828098, + 0.00000000000010980754099855238, + -0.00000000000002047235780046195, + -0.00000000000008372091099235912, + 0.00000000000014088127937111135, + 0.00000000000012869017157588257, + 0.00000000000017788850778198106, + 0.00000000000006440856150696891, + 0.00000000000016132822667240822, + -0.00000000000007540916511956188, + -0.00000000000000036507188831790, + 0.00000000000009120937249914984, + 0.00000000000018567570959796010, + -0.00000000000003149265065191483, + -0.00000000000009309459495196889, + 0.00000000000017914338601329117, + -0.00000000000001302979717330866, + 0.00000000000023097385217586939, + 0.00000000000023999540484211737, + 0.00000000000015393776174455408, + -0.00000000000036870428315837678, + 0.00000000000036920375082080089, + -0.00000000000009383417223663699, + 0.00000000000009433398189512690, + 0.00000000000041481318704258568, + -0.00000000000003792316480209314, + 0.00000000000008403156304792424, + -0.00000000000034262934348285429, + 0.00000000000043712191957429145, + -0.00000000000010475750058776541, + -0.00000000000011118671389559323, + 0.00000000000037549577257259853, + 0.00000000000013912841212197565, + 0.00000000000010775743037572640, + 0.00000000000029391859187648000, + -0.00000000000042790509060060774, + 0.00000000000022774076114039555, + 0.00000000000010849569622967912, + -0.00000000000023073801945705758, + 0.00000000000015761203773969435, + 0.00000000000003345710269544082, + -0.00000000000041525158063436123, + 0.00000000000032655698896907146, + -0.00000000000044704265010452446, + 0.00000000000034527647952039772, + -0.00000000000007048962392109746, + 0.00000000000011776978751369214, + -0.00000000000010774341461609578, + 0.00000000000021863343293215910, + 0.00000000000024132639491333131, + 0.00000000000039057462209830700, + -0.00000000000026570679203560751, + 0.00000000000037135141919592021, + -0.00000000000017166921336082431, + -0.00000000000028658285157914353, + -0.00000000000023812542263446809, + 0.00000000000006576659768580062, + -0.00000000000028210143846181267, + 0.00000000000010701931762114254, + 0.00000000000018119346366441110, + 0.00000000000009840465278232627, + -0.00000000000033149150282752542, + -0.00000000000018302857356041668, + -0.00000000000016207400156744949, + 0.00000000000048303314949553201, + -0.00000000000071560553172382115, + 0.00000000000088821239518571855, + -0.00000000000030900580513238244, + -0.00000000000061076551972851496, + 0.00000000000035659969663347830, + 0.00000000000035782396591276383, + -0.00000000000046226087001544578, + 0.00000000000062279762917225156, + 0.00000000000072838947272065741, + 0.00000000000026809646615211673, + -0.00000000000010960825046059278, + 0.00000000000002311949383800537, + -0.00000000000058469058005299247, + -0.00000000000002103748251144494, + -0.00000000000023323182945587408, + -0.00000000000042333694288141916, + -0.00000000000043933937969737844, + 0.00000000000041341647073835565, + 0.00000000000006841763641591466, + 0.00000000000047585534004430641, + 0.00000000000083679678674757695, + -0.00000000000085763734646658640, + 0.00000000000021913281229340092, + -0.00000000000062242842536431148, + -0.00000000000010983594325438430, + 0.00000000000065310431377633651, + -0.00000000000047580199021710769, + -0.00000000000037854251265457040, + 0.00000000000040939233218678664, + 0.00000000000087424383914858291, + 0.00000000000025218188456842882, + -0.00000000000003608131360422557, + -0.00000000000050518555924280902, + 0.00000000000078699403323355317, + -0.00000000000067020876961949060, + 0.00000000000016108575753932458, + 0.00000000000058527188436251509, + -0.00000000000035246757297904791, + -0.00000000000018372084495629058, + 0.00000000000088606689813494916, + 0.00000000000066486268071468700, + 0.00000000000063831615170646519, + 0.00000000000025144230728376072, + -0.00000000000017239444525614834); + + variable M, J:INTEGER; + variable F1, F2, G, Q, U, U2, V: REAL; + variable ZERO: REAL := 0.0;--Made variable so no constant folding occurs + variable ONE: REAL := 1.0; --Made variable so no constant folding occurs + + -- double logb(), ldexp(); + + variable U1:REAL; + + begin + + -- Check validity of argument + if ( X <= 0.0 ) then + assert FALSE + report "X <= 0.0 in LOG(X)" + severity ERROR; + return(REAL'LOW); + end if; + + -- Compute value for special cases + if ( X = 1.0 ) then + return 0.0; + end if; + + if ( X = MATH_E ) then + return 1.0; + end if; + + -- Argument reduction: 1 <= g < 2; x/2^m = g; + -- y = F*(1 + f/F) for |f| <= 2^-8 + + M := ILOGB(X); + G := LDEXP(X, -M); + J := INTEGER(REAL(N)*(G-1.0)); -- C code adds 0.5 for rounding + F1 := (1.0/REAL(N)) * REAL(J) + 1.0; --F1*128 is an INTEGER in [128,512] + F2 := G - F1; + + -- Approximate expansion for log(1+f2/F1) ~= u + q + G := 1.0/(2.0*F1+F2); + U := 2.0*F2*G; + V := U*U; + Q := U*V*(A1 + V*(A2 + V*(A3 + V*A4))); + + -- Case 1: u1 = u rounded to 2^-43 absolute. Since u < 2^-8, + -- u1 has at most 35 bits, and F1*u1 is exact, as F1 has < 8 bits. + -- It also adds exactly to |m*log2_hi + log_F_head[j] | < 750. + -- + if ( J /= 0 or M /= 0) then + U1 := U + 513.0; + U1 := U1 - 513.0; + + -- Case 2: |1-x| < 1/256. The m- and j- dependent terms are zero + -- u1 = u to 24 bits. + -- + else + U1 := U; + --TRUNC(U1); --In c this is u1 = (double) (float) (u1) + end if; + + U2 := (2.0*(F2 - F1*U1) - U1*F2) * G; + -- u1 + u2 = 2f/(2F+f) to extra precision. + + -- log(x) = log(2^m*F1*(1+f2/F1)) = + -- (m*log2_hi+LOGF_HEAD(j)+u1) + (m*log2_lo+LOGF_TAIL(j)+q); + -- (exact) + (tiny) + + U1 := U1 + REAL(M)*LOGF_HEAD(N) + LOGF_HEAD(J); -- Exact + U2 := (U2 + LOGF_TAIL(J)) + Q; -- Tiny + U2 := U2 + LOGF_TAIL(N)*REAL(M); + return (U1 + U2); + end LOG; + + + function LOG2 (X: in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns REAL'LOW on error + begin + -- Check validity of arguments + if ( X <= 0.0 ) then + assert FALSE + report "X <= 0.0 in LOG2(X)" + severity ERROR; + return(REAL'LOW); + end if; + + -- Compute value for special cases + if ( X = 1.0 ) then + return 0.0; + end if; + + if ( X = 2.0 ) then + return 1.0; + end if; + + -- Compute value for general case + return ( MATH_LOG2_OF_E*LOG(X) ); + end LOG2; + + + function LOG10 (X: in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns REAL'LOW on error + begin + -- Check validity of arguments + if ( X <= 0.0 ) then + assert FALSE + report "X <= 0.0 in LOG10(X)" + severity ERROR; + return(REAL'LOW); + end if; + + -- Compute value for special cases + if ( X = 1.0 ) then + return 0.0; + end if; + + if ( X = 10.0 ) then + return 1.0; + end if; + + -- Compute value for general case + return ( MATH_LOG10_OF_E*LOG(X) ); + end LOG10; + + + function LOG (X: in REAL; BASE: in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns REAL'LOW on error + begin + -- Check validity of arguments + if ( X <= 0.0 ) then + assert FALSE + report "X <= 0.0 in LOG(X, BASE)" + severity ERROR; + return(REAL'LOW); + end if; + + if ( BASE <= 0.0 or BASE = 1.0 ) then + assert FALSE + report "BASE <= 0.0 or BASE = 1.0 in LOG(X, BASE)" + severity ERROR; + return(REAL'LOW); + end if; + + -- Compute value for special cases + if ( X = 1.0 ) then + return 0.0; + end if; + + if ( X = BASE ) then + return 1.0; + end if; + + -- Compute value for general case + return ( LOG(X)/LOG(BASE)); + end LOG; + + + function SIN (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) SIN(-X) = -SIN(X) + -- b) SIN(X) = X if ABS(X) < EPS + -- c) SIN(X) = X - X**3/3! if EPS < ABS(X) < BASE_EPS + -- d) SIN(MATH_PI_OVER_2 - X) = COS(X) + -- e) COS(X) = 1.0 - 0.5*X**2 if ABS(X) < EPS + -- f) COS(X) = 1.0 - 0.5*X**2 + (X**4)/4! if + -- EPS< ABS(X) MATH_2_PI then + TEMP := FLOOR(XLOCAL/MATH_2_PI); + XLOCAL := XLOCAL - TEMP*MATH_2_PI; + end if; + + if XLOCAL < 0.0 then + assert FALSE + report "XLOCAL <= 0.0 after reduction in SIN(X)" + severity ERROR; + XLOCAL := -XLOCAL; + end if; + + -- Compute value for special cases + if XLOCAL = 0.0 or XLOCAL = MATH_2_PI or XLOCAL = MATH_PI then + return 0.0; + end if; + + if XLOCAL = MATH_PI_OVER_2 then + if NEGATIVE then + return -1.0; + else + return 1.0; + end if; + end if; + + if XLOCAL = MATH_3_PI_OVER_2 then + if NEGATIVE then + return 1.0; + else + return -1.0; + end if; + end if; + + if XLOCAL < EPS then + if NEGATIVE then + return -XLOCAL; + else + return XLOCAL; + end if; + else + if XLOCAL < BASE_EPS then + TEMP := XLOCAL - (XLOCAL*XLOCAL*XLOCAL)/6.0; + if NEGATIVE then + return -TEMP; + else + return TEMP; + end if; + end if; + end if; + + TEMP := MATH_PI - XLOCAL; + if ABS(TEMP) < EPS then + if NEGATIVE then + return -TEMP; + else + return TEMP; + end if; + else + if ABS(TEMP) < BASE_EPS then + TEMP := TEMP - (TEMP*TEMP*TEMP)/6.0; + if NEGATIVE then + return -TEMP; + else + return TEMP; + end if; + end if; + end if; + + TEMP := MATH_2_PI - XLOCAL; + if ABS(TEMP) < EPS then + if NEGATIVE then + return TEMP; + else + return -TEMP; + end if; + else + if ABS(TEMP) < BASE_EPS then + TEMP := TEMP - (TEMP*TEMP*TEMP)/6.0; + if NEGATIVE then + return TEMP; + else + return -TEMP; + end if; + end if; + end if; + + TEMP := ABS(MATH_PI_OVER_2 - XLOCAL); + if TEMP < EPS then + TEMP := 1.0 - TEMP*TEMP*0.5; + if NEGATIVE then + return -TEMP; + else + return TEMP; + end if; + else + if TEMP < BASE_EPS then + TEMP := 1.0 -TEMP*TEMP*0.5 + TEMP*TEMP*TEMP*TEMP/24.0; + if NEGATIVE then + return -TEMP; + else + return TEMP; + end if; + end if; + end if; + + TEMP := ABS(MATH_3_PI_OVER_2 - XLOCAL); + if TEMP < EPS then + TEMP := 1.0 - TEMP*TEMP*0.5; + if NEGATIVE then + return TEMP; + else + return -TEMP; + end if; + else + if TEMP < BASE_EPS then + TEMP := 1.0 -TEMP*TEMP*0.5 + TEMP*TEMP*TEMP*TEMP/24.0; + if NEGATIVE then + return TEMP; + else + return -TEMP; + end if; + end if; + end if; + + -- Compute value for general cases + if ((XLOCAL < MATH_PI_OVER_2 ) and (XLOCAL > 0.0)) then + VALUE:= CORDIC( KC, 0.0, x, 27, ROTATION)(1); + end if; + + N := INTEGER ( FLOOR(XLOCAL/MATH_PI_OVER_2)); + case QUADRANT( N mod 4) is + when 0 => + VALUE := CORDIC( KC, 0.0, XLOCAL, 27, ROTATION)(1); + when 1 => + VALUE := CORDIC( KC, 0.0, XLOCAL - MATH_PI_OVER_2, 27, + ROTATION)(0); + when 2 => + VALUE := -CORDIC( KC, 0.0, XLOCAL - MATH_PI, 27, ROTATION)(1); + when 3 => + VALUE := -CORDIC( KC, 0.0, XLOCAL - MATH_3_PI_OVER_2, 27, + ROTATION)(0); + end case; + + if NEGATIVE then + return -VALUE; + else + return VALUE; + end if; + end SIN; + + + function COS (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) COS(-X) = COS(X) + -- b) COS(X) = SIN(MATH_PI_OVER_2 - X) + -- c) COS(MATH_PI + X) = -COS(X) + -- d) COS(X) = 1.0 - X*X/2.0 if ABS(X) < EPS + -- e) COS(X) = 1.0 - 0.5*X**2 + (X**4)/4! if + -- EPS< ABS(X) MATH_2_PI then + TEMP := FLOOR(XLOCAL/MATH_2_PI); + XLOCAL := XLOCAL - TEMP*MATH_2_PI; + end if; + + if XLOCAL < 0.0 then + assert FALSE + report "XLOCAL <= 0.0 after reduction in COS(X)" + severity ERROR; + XLOCAL := -XLOCAL; + end if; + + -- Compute value for special cases + if XLOCAL = 0.0 or XLOCAL = MATH_2_PI then + return 1.0; + end if; + + if XLOCAL = MATH_PI then + return -1.0; + end if; + + if XLOCAL = MATH_PI_OVER_2 or XLOCAL = MATH_3_PI_OVER_2 then + return 0.0; + end if; + + TEMP := ABS(XLOCAL); + if ( TEMP < EPS) then + return (1.0 - 0.5*TEMP*TEMP); + else + if (TEMP < BASE_EPS) then + return (1.0 -0.5*TEMP*TEMP + TEMP*TEMP*TEMP*TEMP/24.0); + end if; + end if; + + TEMP := ABS(XLOCAL -MATH_2_PI); + if ( TEMP < EPS) then + return (1.0 - 0.5*TEMP*TEMP); + else + if (TEMP < BASE_EPS) then + return (1.0 -0.5*TEMP*TEMP + TEMP*TEMP*TEMP*TEMP/24.0); + end if; + end if; + + TEMP := ABS (XLOCAL - MATH_PI); + if TEMP < EPS then + return (-1.0 + 0.5*TEMP*TEMP); + else + if (TEMP < BASE_EPS) then + return (-1.0 +0.5*TEMP*TEMP - TEMP*TEMP*TEMP*TEMP/24.0); + end if; + end if; + + -- Compute value for general cases + return SIN(MATH_PI_OVER_2 - XLOCAL); + end COS; + + function TAN (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) TAN(0.0) = 0.0 + -- b) TAN(-X) = -TAN(X) + -- c) Returns REAL'LOW on error if X < 0.0 + -- d) Returns REAL'HIGH on error if X > 0.0 + + variable NEGATIVE : BOOLEAN := X < 0.0; + variable XLOCAL : REAL := ABS(X) ; + variable VALUE: REAL; + variable TEMP : REAL; + + begin + -- Make 0.0 <= XLOCAL <= MATH_2_PI + if XLOCAL > MATH_2_PI then + TEMP := FLOOR(XLOCAL/MATH_2_PI); + XLOCAL := XLOCAL - TEMP*MATH_2_PI; + end if; + + if XLOCAL < 0.0 then + assert FALSE + report "XLOCAL <= 0.0 after reduction in TAN(X)" + severity ERROR; + XLOCAL := -XLOCAL; + end if; + + -- Check validity of argument + if XLOCAL = MATH_PI_OVER_2 then + assert FALSE + report "X is a multiple of MATH_PI_OVER_2 in TAN(X)" + severity ERROR; + if NEGATIVE then + return(REAL'LOW); + else + return(REAL'HIGH); + end if; + end if; + + if XLOCAL = MATH_3_PI_OVER_2 then + assert FALSE + report "X is a multiple of MATH_3_PI_OVER_2 in TAN(X)" + severity ERROR; + if NEGATIVE then + return(REAL'HIGH); + else + return(REAL'LOW); + end if; + end if; + + -- Compute value for special cases + if XLOCAL = 0.0 or XLOCAL = MATH_PI then + return 0.0; + end if; + + -- Compute value for general cases + VALUE := SIN(XLOCAL)/COS(XLOCAL); + if NEGATIVE then + return -VALUE; + else + return VALUE; + end if; + end TAN; + + function ARCSIN (X : in REAL ) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) ARCSIN(-X) = -ARCSIN(X) + -- b) Returns X on error + + variable NEGATIVE : BOOLEAN := X < 0.0; + variable XLOCAL : REAL := ABS(X); + variable VALUE : REAL; + + begin + -- Check validity of arguments + if XLOCAL > 1.0 then + assert FALSE + report "ABS(X) > 1.0 in ARCSIN(X)" + severity ERROR; + return X; + end if; + + -- Compute value for special cases + if XLOCAL = 0.0 then + return 0.0; + elsif XLOCAL = 1.0 then + if NEGATIVE then + return -MATH_PI_OVER_2; + else + return MATH_PI_OVER_2; + end if; + end if; + + -- Compute value for general cases + if XLOCAL < 0.9 then + VALUE := ARCTAN(XLOCAL/(SQRT(1.0 - XLOCAL*XLOCAL))); + else + VALUE := MATH_PI_OVER_2 - ARCTAN(SQRT(1.0 - XLOCAL*XLOCAL)/XLOCAL); + end if; + + if NEGATIVE then + VALUE := -VALUE; + end if; + + return VALUE; + end ARCSIN; + + function ARCCOS (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) ARCCOS(-X) = MATH_PI - ARCCOS(X) + -- b) Returns X on error + + variable NEGATIVE : BOOLEAN := X < 0.0; + variable XLOCAL : REAL := ABS(X); + variable VALUE : REAL; + + begin + -- Check validity of argument + if XLOCAL > 1.0 then + assert FALSE + report "ABS(X) > 1.0 in ARCCOS(X)" + severity ERROR; + return X; + end if; + + -- Compute value for special cases + if X = 1.0 then + return 0.0; + elsif X = 0.0 then + return MATH_PI_OVER_2; + elsif X = -1.0 then + return MATH_PI; + end if; + + -- Compute value for general cases + if XLOCAL > 0.9 then + VALUE := ARCTAN(SQRT(1.0 - XLOCAL*XLOCAL)/XLOCAL); + else + VALUE := MATH_PI_OVER_2 - ARCTAN(XLOCAL/SQRT(1.0 - XLOCAL*XLOCAL)); + end if; + + + if NEGATIVE then + VALUE := MATH_PI - VALUE; + end if; + + return VALUE; + end ARCCOS; + + + function ARCTAN (Y : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) ARCTAN(-Y) = -ARCTAN(Y) + -- b) ARCTAN(Y) = -ARCTAN(1.0/Y) + MATH_PI_OVER_2 for |Y| > 1.0 + -- c) ARCTAN(Y) = Y for |Y| < EPS + + constant EPS : REAL := BASE_EPS*BASE_EPS*BASE_EPS; + + variable NEGATIVE : BOOLEAN := Y < 0.0; + variable RECIPROCAL : BOOLEAN; + variable YLOCAL : REAL := ABS(Y); + variable VALUE : REAL; + + begin + -- Make argument |Y| <=1.0 + if YLOCAL > 1.0 then + YLOCAL := 1.0/YLOCAL; + RECIPROCAL := TRUE; + else + RECIPROCAL := FALSE; + end if; + + -- Compute value for special cases + if YLOCAL = 0.0 then + if RECIPROCAL then + if NEGATIVE then + return (-MATH_PI_OVER_2); + else + return (MATH_PI_OVER_2); + end if; + else + return 0.0; + end if; + end if; + + if YLOCAL < EPS then + if NEGATIVE then + if RECIPROCAL then + return (-MATH_PI_OVER_2 + YLOCAL); + else + return -YLOCAL; + end if; + else + if RECIPROCAL then + return (MATH_PI_OVER_2 - YLOCAL); + else + return YLOCAL; + end if; + end if; + end if; + + -- Compute value for general cases + VALUE := CORDIC( 1.0, YLOCAL, 0.0, 27, VECTORING )(2); + + if RECIPROCAL then + VALUE := MATH_PI_OVER_2 - VALUE; + end if; + + if NEGATIVE then + VALUE := -VALUE; + end if; + + return VALUE; + end ARCTAN; + + + function ARCTAN (Y : in REAL; X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns 0.0 on error + + variable YLOCAL : REAL; + variable VALUE : REAL; + begin + + -- Check validity of arguments + if (Y = 0.0 and X = 0.0 ) then + assert FALSE report + "ARCTAN(0.0, 0.0) is undetermined" + severity ERROR; + return 0.0; + end if; + + -- Compute value for special cases + if Y = 0.0 then + if X > 0.0 then + return 0.0; + else + return MATH_PI; + end if; + end if; + + if X = 0.0 then + if Y > 0.0 then + return MATH_PI_OVER_2; + else + return -MATH_PI_OVER_2; + end if; + end if; + + + -- Compute value for general cases + YLOCAL := ABS(Y/X); + + VALUE := ARCTAN(YLOCAL); + + if X < 0.0 then + VALUE := MATH_PI - VALUE; + end if; + + if Y < 0.0 then + VALUE := -VALUE; + end if; + + return VALUE; + end ARCTAN; + + + function SINH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns (EXP(X) - EXP(-X))/2.0 + -- b) SINH(-X) = SINH(X) + + variable NEGATIVE : BOOLEAN := X < 0.0; + variable XLOCAL : REAL := ABS(X); + variable TEMP : REAL; + variable VALUE : REAL; + + begin + -- Compute value for special cases + if XLOCAL = 0.0 then + return 0.0; + end if; + + -- Compute value for general cases + TEMP := EXP(XLOCAL); + VALUE := (TEMP - 1.0/TEMP)*0.5; + + if NEGATIVE then + VALUE := -VALUE; + end if; + + return VALUE; + end SINH; + + function COSH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns (EXP(X) + EXP(-X))/2.0 + -- b) COSH(-X) = COSH(X) + + variable XLOCAL : REAL := ABS(X); + variable TEMP : REAL; + variable VALUE : REAL; + begin + -- Compute value for special cases + if XLOCAL = 0.0 then + return 1.0; + end if; + + + -- Compute value for general cases + TEMP := EXP(XLOCAL); + VALUE := (TEMP + 1.0/TEMP)*0.5; + + return VALUE; + end COSH; + + function TANH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns (EXP(X) - EXP(-X))/(EXP(X) + EXP(-X)) + -- b) TANH(-X) = -TANH(X) + + variable NEGATIVE : BOOLEAN := X < 0.0; + variable XLOCAL : REAL := ABS(X); + variable TEMP : REAL; + variable VALUE : REAL; + + begin + -- Compute value for special cases + if XLOCAL = 0.0 then + return 0.0; + end if; + + -- Compute value for general cases + TEMP := EXP(XLOCAL); + VALUE := (TEMP - 1.0/TEMP)/(TEMP + 1.0/TEMP); + + if NEGATIVE then + return -VALUE; + else + return VALUE; + end if; + end TANH; + + function ARCSINH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns LOG( X + SQRT( X*X + 1.0)) + + begin + -- Compute value for special cases + if X = 0.0 then + return 0.0; + end if; + + -- Compute value for general cases + return ( LOG( X + SQRT( X*X + 1.0)) ); + end ARCSINH; + + + + function ARCCOSH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns LOG( X + SQRT( X*X - 1.0)); X >= 1.0 + -- b) Returns X on error + + begin + -- Check validity of arguments + if X < 1.0 then + assert FALSE + report "X < 1.0 in ARCCOSH(X)" + severity ERROR; + return X; + end if; + + -- Compute value for special cases + if X = 1.0 then + return 0.0; + end if; + + -- Compute value for general cases + return ( LOG( X + SQRT( X*X - 1.0))); + end ARCCOSH; + + function ARCTANH (X : in REAL) return REAL is + -- Description: + -- See function declaration in IEEE Std 1076.2-1996 + -- Notes: + -- a) Returns (LOG( (1.0 + X)/(1.0 - X)))/2.0 ; | X | < 1.0 + -- b) Returns X on error + begin + -- Check validity of arguments + if ABS(X) >= 1.0 then + assert FALSE + report "ABS(X) >= 1.0 in ARCTANH(X)" + severity ERROR; + return X; + end if; + + -- Compute value for special cases + if X = 0.0 then + return 0.0; + end if; + + -- Compute value for general cases + return( 0.5*LOG( (1.0+X)/(1.0-X) ) ); + end ARCTANH; + +end MATH_REAL; diff --git a/gbe_trb/ipcores/ecp5/fifo_2048x8x16.lpc b/gbe_trb/ipcores/ecp5/fifo_2048x8x16.lpc new file mode 100644 index 0000000..85b1d34 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_2048x8x16.lpc @@ -0,0 +1,53 @@ +[Device] +Family=ecp5um +PartType=LFE5UM-85F +PartName=LFE5UM-85F-8BG756C +SpeedGrade=8 +Package=CABGA756 +OperatingCondition=COM +Status=P + +[IP] +VendorName=Lattice Semiconductor Corporation +CoreType=LPM +CoreStatus=Demo +CoreName=FIFO_DC +CoreRevision=5.8 +ModuleName=fifo_2048x8x16 +SourceFormat=vhdl +ParameterFileVersion=1.0 +Date=04/24/2019 +Time=10:55:11 + +[Parameters] +Verilog=0 +VHDL=1 +EDIF=1 +Destination=Synplicity +Expression=BusA(0 to 7) +Order=Big Endian [MSB:LSB] +IO=0 +FIFOImp=EBR Based +Depth=2048 +Width=9 +RDepth=1024 +RWidth=18 +regout=0 +ClockEn=0 +CtrlByRdEn=0 +EmpFlg=0 +PeMode=Static - Dual Threshold +PeAssert=10 +PeDeassert=12 +FullFlg=0 +PfMode=Static - Dual Threshold +PfAssert=508 +PfDeassert=506 +Reset=Async +Reset1=Sync +RDataCount=0 +WDataCount=0 +EnECC=0 + +[Command] +cmd_line= -w -n fifo_2048x8x16 -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 2048 -width 9 -rwidth 18 -reset_rel SYNC -pe -1 -pf -1 diff --git a/gbe_trb/ipcores/ecp5/fifo_2048x8x16.vhd b/gbe_trb/ipcores/ecp5/fifo_2048x8x16.vhd new file mode 100644 index 0000000..2d2455f --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_2048x8x16.vhd @@ -0,0 +1,1330 @@ +-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.10.3.144 +-- Module Version: 5.8 +--/home/soft/lattice/diamond/3.10_x64/ispfpga/bin/lin64/scuba -w -n fifo_2048x8x16 -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 2048 -width 9 -rwidth 18 -reset_rel SYNC -pe -1 -pf -1 -fdc /home/adrian/git/trb5sc/template/project/mediFifo/fifo_2048x8x16/fifo_2048x8x16.fdc + +-- Wed Apr 24 10:55:14 2019 + +library IEEE; +use IEEE.std_logic_1164.all; +library ecp5um; +use ecp5um.components.all; + +entity fifo_2048x8x16 is + port ( + Data: in std_logic_vector(8 downto 0); + WrClock: in std_logic; + RdClock: in std_logic; + WrEn: in std_logic; + RdEn: in std_logic; + Reset: in std_logic; + RPReset: in std_logic; + Q: out std_logic_vector(17 downto 0); + Empty: out std_logic; + Full: out std_logic); +end fifo_2048x8x16; + +architecture Structure of fifo_2048x8x16 is + + -- internal signal declarations + signal invout_1: std_logic; + signal invout_0: std_logic; + signal w_g2b_xor_cluster_2_1: std_logic; + signal wcount_r0: std_logic; + signal w_g2b_xor_cluster_2: std_logic; + signal w_g2b_xor_cluster_1: std_logic; + signal r_g2b_xor_cluster_2: std_logic; + signal r_g2b_xor_cluster_1: std_logic; + signal w_gdata_0: std_logic; + signal w_gdata_1: std_logic; + signal w_gdata_2: std_logic; + signal w_gdata_3: std_logic; + signal w_gdata_4: std_logic; + signal w_gdata_5: std_logic; + signal w_gdata_6: std_logic; + signal w_gdata_7: std_logic; + signal w_gdata_8: std_logic; + signal w_gdata_9: std_logic; + signal w_gdata_10: std_logic; + signal wptr_0: std_logic; + signal wptr_1: std_logic; + signal wptr_2: std_logic; + signal wptr_3: std_logic; + signal wptr_4: std_logic; + signal wptr_5: std_logic; + signal wptr_6: std_logic; + signal wptr_7: std_logic; + signal wptr_8: std_logic; + signal wptr_9: std_logic; + signal wptr_10: std_logic; + signal wptr_11: std_logic; + signal r_gdata_0: std_logic; + signal r_gdata_1: std_logic; + signal r_gdata_2: std_logic; + signal r_gdata_3: std_logic; + signal r_gdata_4: std_logic; + signal r_gdata_5: std_logic; + signal r_gdata_6: std_logic; + signal r_gdata_7: std_logic; + signal r_gdata_8: std_logic; + signal r_gdata_9: std_logic; + signal rptr_0: std_logic; + signal rptr_1: std_logic; + signal rptr_2: std_logic; + signal rptr_3: std_logic; + signal rptr_4: std_logic; + signal rptr_5: std_logic; + signal rptr_6: std_logic; + signal rptr_7: std_logic; + signal rptr_8: std_logic; + signal rptr_9: std_logic; + signal rptr_10: std_logic; + signal w_gcount_0: std_logic; + signal w_gcount_1: std_logic; + signal w_gcount_2: std_logic; + signal w_gcount_3: std_logic; + signal w_gcount_4: std_logic; + signal w_gcount_5: std_logic; + signal w_gcount_6: std_logic; + signal w_gcount_7: std_logic; + signal w_gcount_8: std_logic; + signal w_gcount_9: std_logic; + signal w_gcount_10: std_logic; + signal w_gcount_11: std_logic; + signal r_gcount_0: std_logic; + signal r_gcount_1: std_logic; + signal r_gcount_2: std_logic; + signal r_gcount_3: std_logic; + signal r_gcount_4: std_logic; + signal r_gcount_5: std_logic; + signal r_gcount_6: std_logic; + signal r_gcount_7: std_logic; + signal r_gcount_8: std_logic; + signal r_gcount_9: std_logic; + signal r_gcount_10: std_logic; + signal w_gcount_r20: std_logic; + signal w_gcount_r0: std_logic; + signal w_gcount_r21: std_logic; + signal w_gcount_r1: std_logic; + signal w_gcount_r22: std_logic; + signal w_gcount_r2: std_logic; + signal w_gcount_r23: std_logic; + signal w_gcount_r3: std_logic; + signal w_gcount_r24: std_logic; + signal w_gcount_r4: std_logic; + signal w_gcount_r25: std_logic; + signal w_gcount_r5: std_logic; + signal w_gcount_r26: std_logic; + signal w_gcount_r6: std_logic; + signal w_gcount_r27: std_logic; + signal w_gcount_r7: std_logic; + signal w_gcount_r28: std_logic; + signal w_gcount_r8: std_logic; + signal w_gcount_r29: std_logic; + signal w_gcount_r9: std_logic; + signal w_gcount_r210: std_logic; + signal w_gcount_r10: std_logic; + signal w_gcount_r211: std_logic; + signal w_gcount_r11: std_logic; + signal r_gcount_w20: std_logic; + signal r_gcount_w0: std_logic; + signal r_gcount_w21: std_logic; + signal r_gcount_w1: std_logic; + signal r_gcount_w22: std_logic; + signal r_gcount_w2: std_logic; + signal r_gcount_w23: std_logic; + signal r_gcount_w3: std_logic; + signal r_gcount_w24: std_logic; + signal r_gcount_w4: std_logic; + signal r_gcount_w25: std_logic; + signal r_gcount_w5: std_logic; + signal r_gcount_w26: std_logic; + signal r_gcount_w6: std_logic; + signal r_gcount_w27: std_logic; + signal r_gcount_w7: std_logic; + signal r_gcount_w28: std_logic; + signal r_gcount_w8: std_logic; + signal r_gcount_w29: std_logic; + signal r_gcount_w9: std_logic; + signal r_gcount_w210: std_logic; + signal r_gcount_w10: std_logic; + signal empty_i: std_logic; + signal rRst: std_logic; + signal full_i: std_logic; + signal iwcount_0: std_logic; + signal iwcount_1: std_logic; + signal w_gctr_ci: std_logic; + signal iwcount_2: std_logic; + signal iwcount_3: std_logic; + signal co0: std_logic; + signal iwcount_4: std_logic; + signal iwcount_5: std_logic; + signal co1: std_logic; + signal iwcount_6: std_logic; + signal iwcount_7: std_logic; + signal co2: std_logic; + signal iwcount_8: std_logic; + signal iwcount_9: std_logic; + signal co3: std_logic; + signal iwcount_10: std_logic; + signal iwcount_11: std_logic; + signal co5: std_logic; + signal co4: std_logic; + signal wcount_11: std_logic; + signal ircount_0: std_logic; + signal ircount_1: std_logic; + signal r_gctr_ci: std_logic; + signal ircount_2: std_logic; + signal ircount_3: std_logic; + signal co0_1: std_logic; + signal ircount_4: std_logic; + signal ircount_5: std_logic; + signal co1_1: std_logic; + signal ircount_6: std_logic; + signal ircount_7: std_logic; + signal co2_1: std_logic; + signal ircount_8: std_logic; + signal ircount_9: std_logic; + signal co3_1: std_logic; + signal ircount_10: std_logic; + signal co5_1: std_logic; + signal co4_1: std_logic; + signal rcount_10: std_logic; + signal rden_i: std_logic; + signal cmp_ci: std_logic; + signal wcount_r1: std_logic; + signal wcount_r2: std_logic; + signal rcount_0: std_logic; + signal rcount_1: std_logic; + signal co0_2: std_logic; + signal wcount_r3: std_logic; + signal wcount_r4: std_logic; + signal rcount_2: std_logic; + signal rcount_3: std_logic; + signal co1_2: std_logic; + signal wcount_r5: std_logic; + signal wcount_r6: std_logic; + signal rcount_4: std_logic; + signal rcount_5: std_logic; + signal co2_2: std_logic; + signal wcount_r7: std_logic; + signal w_g2b_xor_cluster_0: std_logic; + signal rcount_6: std_logic; + signal rcount_7: std_logic; + signal co3_2: std_logic; + signal wcount_r9: std_logic; + signal wcount_r10: std_logic; + signal rcount_8: std_logic; + signal rcount_9: std_logic; + signal co4_2: std_logic; + signal empty_cmp_clr: std_logic; + signal empty_cmp_set: std_logic; + signal empty_d: std_logic; + signal empty_d_c: std_logic; + signal wren_i: std_logic; + signal cmp_ci_1: std_logic; + signal rcount_w0: std_logic; + signal wcount_0: std_logic; + signal wcount_1: std_logic; + signal co0_3: std_logic; + signal rcount_w1: std_logic; + signal rcount_w2: std_logic; + signal wcount_2: std_logic; + signal wcount_3: std_logic; + signal co1_3: std_logic; + signal rcount_w3: std_logic; + signal rcount_w4: std_logic; + signal wcount_4: std_logic; + signal wcount_5: std_logic; + signal co2_3: std_logic; + signal rcount_w5: std_logic; + signal rcount_w6: std_logic; + signal wcount_6: std_logic; + signal wcount_7: std_logic; + signal co3_3: std_logic; + signal r_g2b_xor_cluster_0: std_logic; + signal rcount_w8: std_logic; + signal wcount_8: std_logic; + signal wcount_9: std_logic; + signal co4_3: std_logic; + signal rcount_w9: std_logic; + signal full_cmp_clr: std_logic; + signal wcount_10: std_logic; + signal full_cmp_set: std_logic; + signal full_d: std_logic; + signal scuba_vhi: std_logic; + signal scuba_vlo: std_logic; + signal full_d_c: std_logic; + + attribute MEM_LPC_FILE : string; + attribute MEM_INIT_FILE : string; + attribute GSR : string; + attribute MEM_LPC_FILE of pdp_ram_0_0_0 : label is "fifo_2048x8x16.lpc"; + attribute MEM_INIT_FILE of pdp_ram_0_0_0 : label is ""; + attribute GSR of FF_116 : label is "ENABLED"; + attribute GSR of FF_115 : label is "ENABLED"; + attribute GSR of FF_114 : label is "ENABLED"; + attribute GSR of FF_113 : label is "ENABLED"; + attribute GSR of FF_112 : label is "ENABLED"; + attribute GSR of FF_111 : label is "ENABLED"; + attribute GSR of FF_110 : label is "ENABLED"; + attribute GSR of FF_109 : label is "ENABLED"; + attribute GSR of FF_108 : label is "ENABLED"; + attribute GSR of FF_107 : label is "ENABLED"; + attribute GSR of FF_106 : label is "ENABLED"; + attribute GSR of FF_105 : label is "ENABLED"; + attribute GSR of FF_104 : label is "ENABLED"; + attribute GSR of FF_103 : label is "ENABLED"; + attribute GSR of FF_102 : label is "ENABLED"; + attribute GSR of FF_101 : label is "ENABLED"; + attribute GSR of FF_100 : label is "ENABLED"; + attribute GSR of FF_99 : label is "ENABLED"; + attribute GSR of FF_98 : label is "ENABLED"; + attribute GSR of FF_97 : label is "ENABLED"; + attribute GSR of FF_96 : label is "ENABLED"; + attribute GSR of FF_95 : label is "ENABLED"; + attribute GSR of FF_94 : label is "ENABLED"; + attribute GSR of FF_93 : label is "ENABLED"; + attribute GSR of FF_92 : label is "ENABLED"; + attribute GSR of FF_91 : label is "ENABLED"; + attribute GSR of FF_90 : label is "ENABLED"; + attribute GSR of FF_89 : label is "ENABLED"; + attribute GSR of FF_88 : label is "ENABLED"; + attribute GSR of FF_87 : label is "ENABLED"; + attribute GSR of FF_86 : label is "ENABLED"; + attribute GSR of FF_85 : label is "ENABLED"; + attribute GSR of FF_84 : label is "ENABLED"; + attribute GSR of FF_83 : label is "ENABLED"; + attribute GSR of FF_82 : label is "ENABLED"; + attribute GSR of FF_81 : label is "ENABLED"; + attribute GSR of FF_80 : label is "ENABLED"; + attribute GSR of FF_79 : label is "ENABLED"; + attribute GSR of FF_78 : label is "ENABLED"; + attribute GSR of FF_77 : label is "ENABLED"; + attribute GSR of FF_76 : label is "ENABLED"; + attribute GSR of FF_75 : label is "ENABLED"; + attribute GSR of FF_74 : label is "ENABLED"; + attribute GSR of FF_73 : label is "ENABLED"; + attribute GSR of FF_72 : label is "ENABLED"; + attribute GSR of FF_71 : label is "ENABLED"; + attribute GSR of FF_70 : label is "ENABLED"; + attribute GSR of FF_69 : label is "ENABLED"; + attribute GSR of FF_68 : label is "ENABLED"; + attribute GSR of FF_67 : label is "ENABLED"; + attribute GSR of FF_66 : label is "ENABLED"; + attribute GSR of FF_65 : label is "ENABLED"; + attribute GSR of FF_64 : label is "ENABLED"; + attribute GSR of FF_63 : label is "ENABLED"; + attribute GSR of FF_62 : label is "ENABLED"; + attribute GSR of FF_61 : label is "ENABLED"; + attribute GSR of FF_60 : label is "ENABLED"; + attribute GSR of FF_59 : label is "ENABLED"; + attribute GSR of FF_58 : label is "ENABLED"; + attribute GSR of FF_57 : label is "ENABLED"; + attribute GSR of FF_56 : label is "ENABLED"; + attribute GSR of FF_55 : label is "ENABLED"; + attribute GSR of FF_54 : label is "ENABLED"; + attribute GSR of FF_53 : label is "ENABLED"; + attribute GSR of FF_52 : label is "ENABLED"; + attribute GSR of FF_51 : label is "ENABLED"; + attribute GSR of FF_50 : label is "ENABLED"; + attribute GSR of FF_49 : label is "ENABLED"; + attribute GSR of FF_48 : label is "ENABLED"; + attribute GSR of FF_47 : label is "ENABLED"; + attribute GSR of FF_46 : label is "ENABLED"; + attribute GSR of FF_45 : label is "ENABLED"; + attribute GSR of FF_44 : label is "ENABLED"; + attribute GSR of FF_43 : label is "ENABLED"; + attribute GSR of FF_42 : label is "ENABLED"; + attribute GSR of FF_41 : label is "ENABLED"; + attribute GSR of FF_40 : label is "ENABLED"; + attribute GSR of FF_39 : label is "ENABLED"; + attribute GSR of FF_38 : label is "ENABLED"; + attribute GSR of FF_37 : label is "ENABLED"; + attribute GSR of FF_36 : label is "ENABLED"; + attribute GSR of FF_35 : label is "ENABLED"; + attribute GSR of FF_34 : label is "ENABLED"; + attribute GSR of FF_33 : label is "ENABLED"; + attribute GSR of FF_32 : label is "ENABLED"; + attribute GSR of FF_31 : label is "ENABLED"; + attribute GSR of FF_30 : label is "ENABLED"; + attribute GSR of FF_29 : label is "ENABLED"; + attribute GSR of FF_28 : label is "ENABLED"; + attribute GSR of FF_27 : label is "ENABLED"; + attribute GSR of FF_26 : label is "ENABLED"; + attribute GSR of FF_25 : label is "ENABLED"; + attribute GSR of FF_24 : label is "ENABLED"; + attribute GSR of FF_23 : label is "ENABLED"; + attribute GSR of FF_22 : label is "ENABLED"; + attribute GSR of FF_21 : label is "ENABLED"; + attribute GSR of FF_20 : label is "ENABLED"; + attribute GSR of FF_19 : label is "ENABLED"; + attribute GSR of FF_18 : label is "ENABLED"; + attribute GSR of FF_17 : label is "ENABLED"; + attribute GSR of FF_16 : label is "ENABLED"; + attribute GSR of FF_15 : label is "ENABLED"; + attribute GSR of FF_14 : label is "ENABLED"; + attribute GSR of FF_13 : label is "ENABLED"; + attribute GSR of FF_12 : label is "ENABLED"; + attribute GSR of FF_11 : label is "ENABLED"; + attribute GSR of FF_10 : label is "ENABLED"; + attribute GSR of FF_9 : label is "ENABLED"; + attribute GSR of FF_8 : label is "ENABLED"; + attribute GSR of FF_7 : label is "ENABLED"; + attribute GSR of FF_6 : label is "ENABLED"; + attribute GSR of FF_5 : label is "ENABLED"; + attribute GSR of FF_4 : label is "ENABLED"; + attribute GSR of FF_3 : label is "ENABLED"; + attribute GSR of FF_2 : label is "ENABLED"; + attribute GSR of FF_1 : label is "ENABLED"; + attribute GSR of FF_0 : label is "ENABLED"; + attribute syn_keep : boolean; + attribute NGD_DRC_MASK : integer; + attribute NGD_DRC_MASK of Structure : architecture is 1; + +begin + -- component instantiation statements + AND2_t23: AND2 + port map (A=>WrEn, B=>invout_1, Z=>wren_i); + + INV_1: INV + port map (A=>full_i, Z=>invout_1); + + AND2_t22: AND2 + port map (A=>RdEn, B=>invout_0, Z=>rden_i); + + INV_0: INV + port map (A=>empty_i, Z=>invout_0); + + OR2_t21: OR2 + port map (A=>Reset, B=>RPReset, Z=>rRst); + + XOR2_t20: XOR2 + port map (A=>wcount_0, B=>wcount_1, Z=>w_gdata_0); + + XOR2_t19: XOR2 + port map (A=>wcount_1, B=>wcount_2, Z=>w_gdata_1); + + XOR2_t18: XOR2 + port map (A=>wcount_2, B=>wcount_3, Z=>w_gdata_2); + + XOR2_t17: XOR2 + port map (A=>wcount_3, B=>wcount_4, Z=>w_gdata_3); + + XOR2_t16: XOR2 + port map (A=>wcount_4, B=>wcount_5, Z=>w_gdata_4); + + XOR2_t15: XOR2 + port map (A=>wcount_5, B=>wcount_6, Z=>w_gdata_5); + + XOR2_t14: XOR2 + port map (A=>wcount_6, B=>wcount_7, Z=>w_gdata_6); + + XOR2_t13: XOR2 + port map (A=>wcount_7, B=>wcount_8, Z=>w_gdata_7); + + XOR2_t12: XOR2 + port map (A=>wcount_8, B=>wcount_9, Z=>w_gdata_8); + + XOR2_t11: XOR2 + port map (A=>wcount_9, B=>wcount_10, Z=>w_gdata_9); + + XOR2_t10: XOR2 + port map (A=>wcount_10, B=>wcount_11, Z=>w_gdata_10); + + XOR2_t9: XOR2 + port map (A=>rcount_0, B=>rcount_1, Z=>r_gdata_0); + + XOR2_t8: XOR2 + port map (A=>rcount_1, B=>rcount_2, Z=>r_gdata_1); + + XOR2_t7: XOR2 + port map (A=>rcount_2, B=>rcount_3, Z=>r_gdata_2); + + XOR2_t6: XOR2 + port map (A=>rcount_3, B=>rcount_4, Z=>r_gdata_3); + + XOR2_t5: XOR2 + port map (A=>rcount_4, B=>rcount_5, Z=>r_gdata_4); + + XOR2_t4: XOR2 + port map (A=>rcount_5, B=>rcount_6, Z=>r_gdata_5); + + XOR2_t3: XOR2 + port map (A=>rcount_6, B=>rcount_7, Z=>r_gdata_6); + + XOR2_t2: XOR2 + port map (A=>rcount_7, B=>rcount_8, Z=>r_gdata_7); + + XOR2_t1: XOR2 + port map (A=>rcount_8, B=>rcount_9, Z=>r_gdata_8); + + XOR2_t0: XOR2 + port map (A=>rcount_9, B=>rcount_10, Z=>r_gdata_9); + + LUT4_29: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r28, AD2=>w_gcount_r29, + AD1=>w_gcount_r210, AD0=>w_gcount_r211, + DO0=>w_g2b_xor_cluster_0); + + LUT4_28: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r24, AD2=>w_gcount_r25, + AD1=>w_gcount_r26, AD0=>w_gcount_r27, + DO0=>w_g2b_xor_cluster_1); + + LUT4_27: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r20, AD2=>w_gcount_r21, + AD1=>w_gcount_r22, AD0=>w_gcount_r23, + DO0=>w_g2b_xor_cluster_2); + + LUT4_26: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r210, AD2=>w_gcount_r211, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>wcount_r10); + + LUT4_25: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r29, AD2=>w_gcount_r210, + AD1=>w_gcount_r211, AD0=>scuba_vlo, DO0=>wcount_r9); + + LUT4_24: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r27, AD2=>w_gcount_r28, + AD1=>w_gcount_r29, AD0=>wcount_r10, DO0=>wcount_r7); + + LUT4_23: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r26, AD2=>w_gcount_r27, + AD1=>w_gcount_r28, AD0=>wcount_r9, DO0=>wcount_r6); + + LUT4_22: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r25, AD2=>w_gcount_r26, + AD1=>w_gcount_r27, AD0=>w_g2b_xor_cluster_0, DO0=>wcount_r5); + + LUT4_21: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>wcount_r4); + + LUT4_20: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r23, AD0=>scuba_vlo, DO0=>wcount_r3); + + LUT4_19: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r22, AD0=>w_gcount_r23, DO0=>wcount_r2); + + LUT4_18: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r21, AD2=>w_gcount_r22, + AD1=>w_gcount_r23, AD0=>scuba_vlo, + DO0=>w_g2b_xor_cluster_2_1); + + LUT4_17: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2_1, AD0=>scuba_vlo, DO0=>wcount_r1); + + LUT4_16: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>wcount_r0); + + LUT4_15: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w27, AD2=>r_gcount_w28, + AD1=>r_gcount_w29, AD0=>r_gcount_w210, + DO0=>r_g2b_xor_cluster_0); + + LUT4_14: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w23, AD2=>r_gcount_w24, + AD1=>r_gcount_w25, AD0=>r_gcount_w26, + DO0=>r_g2b_xor_cluster_1); + + LUT4_13: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w29, AD2=>r_gcount_w210, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>rcount_w9); + + LUT4_12: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w28, AD2=>r_gcount_w29, + AD1=>r_gcount_w210, AD0=>scuba_vlo, DO0=>rcount_w8); + + LUT4_11: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w26, AD2=>r_gcount_w27, + AD1=>r_gcount_w28, AD0=>rcount_w9, DO0=>rcount_w6); + + LUT4_10: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w25, AD2=>r_gcount_w26, + AD1=>r_gcount_w27, AD0=>rcount_w8, DO0=>rcount_w5); + + LUT4_9: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w24, AD2=>r_gcount_w25, + AD1=>r_gcount_w26, AD0=>r_g2b_xor_cluster_0, DO0=>rcount_w4); + + LUT4_8: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>rcount_w3); + + LUT4_7: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w22, AD0=>scuba_vlo, DO0=>rcount_w2); + + LUT4_6: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w21, AD0=>r_gcount_w22, DO0=>rcount_w1); + + LUT4_5: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w20, AD2=>r_gcount_w21, + AD1=>r_gcount_w22, AD0=>scuba_vlo, DO0=>r_g2b_xor_cluster_2); + + LUT4_4: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>rcount_w0); + + LUT4_3: ROM16X1A + generic map (initval=> X"0410") + port map (AD3=>rptr_10, AD2=>rcount_10, AD1=>w_gcount_r211, + AD0=>scuba_vlo, DO0=>empty_cmp_set); + + LUT4_2: ROM16X1A + generic map (initval=> X"1004") + port map (AD3=>rptr_10, AD2=>rcount_10, AD1=>w_gcount_r211, + AD0=>scuba_vlo, DO0=>empty_cmp_clr); + + LUT4_1: ROM16X1A + generic map (initval=> X"0140") + port map (AD3=>wptr_11, AD2=>wcount_11, AD1=>r_gcount_w210, + AD0=>scuba_vlo, DO0=>full_cmp_set); + + LUT4_0: ROM16X1A + generic map (initval=> X"4001") + port map (AD3=>wptr_11, AD2=>wcount_11, AD1=>r_gcount_w210, + AD0=>scuba_vlo, DO0=>full_cmp_clr); + + pdp_ram_0_0_0: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b000", CSDECODE_A=> "0b000", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 18, + DATA_WIDTH_A=> 9) + port map (DIA17=>scuba_vlo, DIA16=>scuba_vlo, DIA15=>scuba_vlo, + DIA14=>scuba_vlo, DIA13=>scuba_vlo, DIA12=>scuba_vlo, + DIA11=>scuba_vlo, DIA10=>scuba_vlo, DIA9=>scuba_vlo, + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_10, ADA12=>wptr_9, ADA11=>wptr_8, + ADA10=>wptr_7, ADA9=>wptr_6, ADA8=>wptr_5, ADA7=>wptr_4, + ADA6=>wptr_3, ADA5=>wptr_2, ADA4=>wptr_1, ADA3=>wptr_0, + ADA2=>scuba_vlo, ADA1=>scuba_vlo, ADA0=>scuba_vlo, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>scuba_vlo, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_9, ADB12=>rptr_8, ADB11=>rptr_7, + ADB10=>rptr_6, ADB9=>rptr_5, ADB8=>rptr_4, ADB7=>rptr_3, + ADB6=>rptr_2, ADB5=>rptr_1, ADB4=>rptr_0, ADB3=>scuba_vlo, + ADB2=>scuba_vlo, ADB1=>scuba_vlo, ADB0=>scuba_vlo, + CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, WEB=>scuba_vlo, + CSB2=>scuba_vlo, CSB1=>scuba_vlo, CSB0=>scuba_vlo, + RSTB=>Reset, DOA17=>open, DOA16=>open, DOA15=>open, + DOA14=>open, DOA13=>open, DOA12=>open, DOA11=>open, + DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, DOA6=>open, + DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, DOA1=>open, + DOA0=>open, DOB17=>Q(17), DOB16=>Q(16), DOB15=>Q(15), + DOB14=>Q(14), DOB13=>Q(13), DOB12=>Q(12), DOB11=>Q(11), + DOB10=>Q(10), DOB9=>Q(9), DOB8=>Q(8), DOB7=>Q(7), DOB6=>Q(6), + DOB5=>Q(5), DOB4=>Q(4), DOB3=>Q(3), DOB2=>Q(2), DOB1=>Q(1), + DOB0=>Q(0)); + + FF_116: FD1P3BX + port map (D=>iwcount_0, SP=>wren_i, CK=>WrClock, PD=>Reset, + Q=>wcount_0); + + FF_115: FD1P3DX + port map (D=>iwcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_1); + + FF_114: FD1P3DX + port map (D=>iwcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_2); + + FF_113: FD1P3DX + port map (D=>iwcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_3); + + FF_112: FD1P3DX + port map (D=>iwcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_4); + + FF_111: FD1P3DX + port map (D=>iwcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_5); + + FF_110: FD1P3DX + port map (D=>iwcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_6); + + FF_109: FD1P3DX + port map (D=>iwcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_7); + + FF_108: FD1P3DX + port map (D=>iwcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_8); + + FF_107: FD1P3DX + port map (D=>iwcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_9); + + FF_106: FD1P3DX + port map (D=>iwcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_10); + + FF_105: FD1P3DX + port map (D=>iwcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_11); + + FF_104: FD1P3DX + port map (D=>w_gdata_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_0); + + FF_103: FD1P3DX + port map (D=>w_gdata_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_1); + + FF_102: FD1P3DX + port map (D=>w_gdata_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_2); + + FF_101: FD1P3DX + port map (D=>w_gdata_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_3); + + FF_100: FD1P3DX + port map (D=>w_gdata_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_4); + + FF_99: FD1P3DX + port map (D=>w_gdata_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_5); + + FF_98: FD1P3DX + port map (D=>w_gdata_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_6); + + FF_97: FD1P3DX + port map (D=>w_gdata_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_7); + + FF_96: FD1P3DX + port map (D=>w_gdata_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_8); + + FF_95: FD1P3DX + port map (D=>w_gdata_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_9); + + FF_94: FD1P3DX + port map (D=>w_gdata_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_10); + + FF_93: FD1P3DX + port map (D=>wcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_11); + + FF_92: FD1P3DX + port map (D=>wcount_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_0); + + FF_91: FD1P3DX + port map (D=>wcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_1); + + FF_90: FD1P3DX + port map (D=>wcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_2); + + FF_89: FD1P3DX + port map (D=>wcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_3); + + FF_88: FD1P3DX + port map (D=>wcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_4); + + FF_87: FD1P3DX + port map (D=>wcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_5); + + FF_86: FD1P3DX + port map (D=>wcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_6); + + FF_85: FD1P3DX + port map (D=>wcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_7); + + FF_84: FD1P3DX + port map (D=>wcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_8); + + FF_83: FD1P3DX + port map (D=>wcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_9); + + FF_82: FD1P3DX + port map (D=>wcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_10); + + FF_81: FD1P3DX + port map (D=>wcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_11); + + FF_80: FD1P3BX + port map (D=>ircount_0, SP=>rden_i, CK=>RdClock, PD=>rRst, + Q=>rcount_0); + + FF_79: FD1P3DX + port map (D=>ircount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_1); + + FF_78: FD1P3DX + port map (D=>ircount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_2); + + FF_77: FD1P3DX + port map (D=>ircount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_3); + + FF_76: FD1P3DX + port map (D=>ircount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_4); + + FF_75: FD1P3DX + port map (D=>ircount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_5); + + FF_74: FD1P3DX + port map (D=>ircount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_6); + + FF_73: FD1P3DX + port map (D=>ircount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_7); + + FF_72: FD1P3DX + port map (D=>ircount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_8); + + FF_71: FD1P3DX + port map (D=>ircount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_9); + + FF_70: FD1P3DX + port map (D=>ircount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_10); + + FF_69: FD1P3DX + port map (D=>r_gdata_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_0); + + FF_68: FD1P3DX + port map (D=>r_gdata_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_1); + + FF_67: FD1P3DX + port map (D=>r_gdata_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_2); + + FF_66: FD1P3DX + port map (D=>r_gdata_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_3); + + FF_65: FD1P3DX + port map (D=>r_gdata_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_4); + + FF_64: FD1P3DX + port map (D=>r_gdata_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_5); + + FF_63: FD1P3DX + port map (D=>r_gdata_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_6); + + FF_62: FD1P3DX + port map (D=>r_gdata_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_7); + + FF_61: FD1P3DX + port map (D=>r_gdata_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_8); + + FF_60: FD1P3DX + port map (D=>r_gdata_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_9); + + FF_59: FD1P3DX + port map (D=>rcount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_10); + + FF_58: FD1P3DX + port map (D=>rcount_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_0); + + FF_57: FD1P3DX + port map (D=>rcount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_1); + + FF_56: FD1P3DX + port map (D=>rcount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_2); + + FF_55: FD1P3DX + port map (D=>rcount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_3); + + FF_54: FD1P3DX + port map (D=>rcount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_4); + + FF_53: FD1P3DX + port map (D=>rcount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_5); + + FF_52: FD1P3DX + port map (D=>rcount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_6); + + FF_51: FD1P3DX + port map (D=>rcount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_7); + + FF_50: FD1P3DX + port map (D=>rcount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_8); + + FF_49: FD1P3DX + port map (D=>rcount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_9); + + FF_48: FD1P3DX + port map (D=>rcount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_10); + + FF_47: FD1S3DX + port map (D=>w_gcount_0, CK=>RdClock, CD=>Reset, Q=>w_gcount_r0); + + FF_46: FD1S3DX + port map (D=>w_gcount_1, CK=>RdClock, CD=>Reset, Q=>w_gcount_r1); + + FF_45: FD1S3DX + port map (D=>w_gcount_2, CK=>RdClock, CD=>Reset, Q=>w_gcount_r2); + + FF_44: FD1S3DX + port map (D=>w_gcount_3, CK=>RdClock, CD=>Reset, Q=>w_gcount_r3); + + FF_43: FD1S3DX + port map (D=>w_gcount_4, CK=>RdClock, CD=>Reset, Q=>w_gcount_r4); + + FF_42: FD1S3DX + port map (D=>w_gcount_5, CK=>RdClock, CD=>Reset, Q=>w_gcount_r5); + + FF_41: FD1S3DX + port map (D=>w_gcount_6, CK=>RdClock, CD=>Reset, Q=>w_gcount_r6); + + FF_40: FD1S3DX + port map (D=>w_gcount_7, CK=>RdClock, CD=>Reset, Q=>w_gcount_r7); + + FF_39: FD1S3DX + port map (D=>w_gcount_8, CK=>RdClock, CD=>Reset, Q=>w_gcount_r8); + + FF_38: FD1S3DX + port map (D=>w_gcount_9, CK=>RdClock, CD=>Reset, Q=>w_gcount_r9); + + FF_37: FD1S3DX + port map (D=>w_gcount_10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r10); + + FF_36: FD1S3DX + port map (D=>w_gcount_11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r11); + + FF_35: FD1S3DX + port map (D=>r_gcount_0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w0); + + FF_34: FD1S3DX + port map (D=>r_gcount_1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w1); + + FF_33: FD1S3DX + port map (D=>r_gcount_2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w2); + + FF_32: FD1S3DX + port map (D=>r_gcount_3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w3); + + FF_31: FD1S3DX + port map (D=>r_gcount_4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w4); + + FF_30: FD1S3DX + port map (D=>r_gcount_5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w5); + + FF_29: FD1S3DX + port map (D=>r_gcount_6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w6); + + FF_28: FD1S3DX + port map (D=>r_gcount_7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w7); + + FF_27: FD1S3DX + port map (D=>r_gcount_8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w8); + + FF_26: FD1S3DX + port map (D=>r_gcount_9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w9); + + FF_25: FD1S3DX + port map (D=>r_gcount_10, CK=>WrClock, CD=>rRst, Q=>r_gcount_w10); + + FF_24: FD1S3DX + port map (D=>w_gcount_r0, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r20); + + FF_23: FD1S3DX + port map (D=>w_gcount_r1, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r21); + + FF_22: FD1S3DX + port map (D=>w_gcount_r2, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r22); + + FF_21: FD1S3DX + port map (D=>w_gcount_r3, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r23); + + FF_20: FD1S3DX + port map (D=>w_gcount_r4, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r24); + + FF_19: FD1S3DX + port map (D=>w_gcount_r5, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r25); + + FF_18: FD1S3DX + port map (D=>w_gcount_r6, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r26); + + FF_17: FD1S3DX + port map (D=>w_gcount_r7, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r27); + + FF_16: FD1S3DX + port map (D=>w_gcount_r8, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r28); + + FF_15: FD1S3DX + port map (D=>w_gcount_r9, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r29); + + FF_14: FD1S3DX + port map (D=>w_gcount_r10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r210); + + FF_13: FD1S3DX + port map (D=>w_gcount_r11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r211); + + FF_12: FD1S3DX + port map (D=>r_gcount_w0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w20); + + FF_11: FD1S3DX + port map (D=>r_gcount_w1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w21); + + FF_10: FD1S3DX + port map (D=>r_gcount_w2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w22); + + FF_9: FD1S3DX + port map (D=>r_gcount_w3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w23); + + FF_8: FD1S3DX + port map (D=>r_gcount_w4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w24); + + FF_7: FD1S3DX + port map (D=>r_gcount_w5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w25); + + FF_6: FD1S3DX + port map (D=>r_gcount_w6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w26); + + FF_5: FD1S3DX + port map (D=>r_gcount_w7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w27); + + FF_4: FD1S3DX + port map (D=>r_gcount_w8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w28); + + FF_3: FD1S3DX + port map (D=>r_gcount_w9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w29); + + FF_2: FD1S3DX + port map (D=>r_gcount_w10, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w210); + + FF_1: FD1S3BX + port map (D=>empty_d, CK=>RdClock, PD=>rRst, Q=>empty_i); + + FF_0: FD1S3DX + port map (D=>full_d, CK=>WrClock, CD=>Reset, Q=>full_i); + + w_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>w_gctr_ci); + + w_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>w_gctr_ci, S0=>iwcount_0, S1=>iwcount_1, + COUT=>co0); + + w_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0, S0=>iwcount_2, S1=>iwcount_3, + COUT=>co1); + + w_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1, S0=>iwcount_4, S1=>iwcount_5, + COUT=>co2); + + w_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2, S0=>iwcount_6, S1=>iwcount_7, + COUT=>co3); + + w_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3, S0=>iwcount_8, S1=>iwcount_9, + COUT=>co4); + + w_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_10, A1=>wcount_11, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4, S0=>iwcount_10, S1=>iwcount_11, + COUT=>co5); + + r_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>r_gctr_ci); + + r_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>r_gctr_ci, S0=>ircount_0, S1=>ircount_1, + COUT=>co0_1); + + r_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_1, S0=>ircount_2, S1=>ircount_3, + COUT=>co1_1); + + r_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_1, S0=>ircount_4, S1=>ircount_5, + COUT=>co2_1); + + r_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_1, S0=>ircount_6, S1=>ircount_7, + COUT=>co3_1); + + r_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_1, S0=>ircount_8, S1=>ircount_9, + COUT=>co4_1); + + r_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_10, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_1, S0=>ircount_10, S1=>open, + COUT=>co5_1); + + empty_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>rden_i, B0=>scuba_vlo, B1=>rden_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci); + + empty_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>wcount_r1, + B1=>wcount_r2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci, S0=>open, S1=>open, COUT=>co0_2); + + empty_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>wcount_r3, + B1=>wcount_r4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_2, S0=>open, S1=>open, COUT=>co1_2); + + empty_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>wcount_r5, + B1=>wcount_r6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_2, S0=>open, S1=>open, COUT=>co2_2); + + empty_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>wcount_r7, + B1=>w_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co2_2, S0=>open, S1=>open, + COUT=>co3_2); + + empty_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>wcount_r9, + B1=>wcount_r10, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_2, S0=>open, S1=>open, COUT=>co4_2); + + empty_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>empty_cmp_set, A1=>scuba_vlo, B0=>empty_cmp_clr, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_2, S0=>open, S1=>open, + COUT=>empty_d_c); + + a0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>empty_d_c, S0=>empty_d, S1=>open, + COUT=>open); + + full_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>wren_i, B0=>scuba_vlo, B1=>wren_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci_1); + + full_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>scuba_vlo, + B1=>rcount_w0, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci_1, S0=>open, S1=>open, + COUT=>co0_3); + + full_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>rcount_w1, + B1=>rcount_w2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_3, S0=>open, S1=>open, COUT=>co1_3); + + full_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>rcount_w3, + B1=>rcount_w4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_3, S0=>open, S1=>open, COUT=>co2_3); + + full_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>rcount_w5, + B1=>rcount_w6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_3, S0=>open, S1=>open, COUT=>co3_3); + + full_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>r_g2b_xor_cluster_0, + B1=>rcount_w8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_3, S0=>open, S1=>open, COUT=>co4_3); + + full_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_10, A1=>full_cmp_set, B0=>rcount_w9, + B1=>full_cmp_clr, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_3, S0=>open, S1=>open, + COUT=>full_d_c); + + scuba_vhi_inst: VHI + port map (Z=>scuba_vhi); + + scuba_vlo_inst: VLO + port map (Z=>scuba_vlo); + + a1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>full_d_c, S0=>full_d, S1=>open, + COUT=>open); + + Empty <= empty_i; + Full <= full_i; +end Structure; diff --git a/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.ipx b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.ipx new file mode 100644 index 0000000..2651bf5 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.ipx @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.lpc b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.lpc new file mode 100644 index 0000000..df0f1b7 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.lpc @@ -0,0 +1,53 @@ +[Device] +Family=ecp5um +PartType=LFE5UM-85F +PartName=LFE5UM-85F-8BG756C +SpeedGrade=8 +Package=CABGA756 +OperatingCondition=COM +Status=P + +[IP] +VendorName=Lattice Semiconductor Corporation +CoreType=LPM +CoreStatus=Demo +CoreName=FIFO_DC +CoreRevision=5.8 +ModuleName=fifo_64kx18x9_wcnt +SourceFormat=VHDL +ParameterFileVersion=1.0 +Date=11/15/2021 +Time=10:18:42 + +[Parameters] +Verilog=0 +VHDL=1 +EDIF=1 +Destination=Synplicity +Expression=BusA(0 to 7) +Order=Big Endian [MSB:LSB] +IO=0 +FIFOImp=EBR Based +Depth=32768 +Width=18 +RDepth=65536 +RWidth=9 +regout=0 +ClockEn=0 +CtrlByRdEn=0 +EmpFlg=0 +PeMode=Static - Dual Threshold +PeAssert=10 +PeDeassert=12 +FullFlg=0 +PfMode=Static - Dual Threshold +PfAssert=508 +PfDeassert=506 +Reset=Async +Reset1=Sync +RDataCount=0 +WDataCount=1 +EnECC=0 + +[Command] +cmd_line= -w -n fifo_64kx18x9_wcnt -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 32768 -width 18 -rwidth 9 -reset_rel SYNC -pe -1 -pf -1 -fill diff --git a/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.vhd b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.vhd new file mode 100644 index 0000000..2d58bd2 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_64kx18x9_wcnt.vhd @@ -0,0 +1,4644 @@ +-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.12.1.454 +-- Module Version: 5.8 +--/home/soft/lattice/diamond/3.12/ispfpga/bin/lin64/scuba -w -n fifo_64kx18x9_wcnt -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 32768 -width 18 -rwidth 9 -reset_rel SYNC -pe -1 -pf -1 -fill + +-- Mon Nov 15 10:18:42 2021 + +library IEEE; +use IEEE.std_logic_1164.all; +library ecp5um; +use ecp5um.components.all; + +entity fifo_64kx18x9_wcnt is + port ( + Data: in std_logic_vector(17 downto 0); + WrClock: in std_logic; + RdClock: in std_logic; + WrEn: in std_logic; + RdEn: in std_logic; + Reset: in std_logic; + RPReset: in std_logic; + Q: out std_logic_vector(8 downto 0); + WCNT: out std_logic_vector(15 downto 0); + Empty: out std_logic; + Full: out std_logic); +end fifo_64kx18x9_wcnt; + +architecture Structure of fifo_64kx18x9_wcnt is + + -- internal signal declarations + signal invout_1: std_logic; + signal invout_0: std_logic; + signal func_and_inet: std_logic; + signal func_and_inet_1: std_logic; + signal func_and_inet_2: std_logic; + signal func_and_inet_3: std_logic; + signal func_and_inet_4: std_logic; + signal func_and_inet_5: std_logic; + signal func_and_inet_6: std_logic; + signal func_and_inet_7: std_logic; + signal func_and_inet_8: std_logic; + signal func_and_inet_9: std_logic; + signal func_and_inet_10: std_logic; + signal func_and_inet_11: std_logic; + signal func_and_inet_12: std_logic; + signal func_and_inet_13: std_logic; + signal func_and_inet_14: std_logic; + signal func_and_inet_15: std_logic; + signal func_and_inet_16: std_logic; + signal func_and_inet_17: std_logic; + signal func_and_inet_18: std_logic; + signal func_and_inet_19: std_logic; + signal func_and_inet_20: std_logic; + signal func_and_inet_21: std_logic; + signal func_and_inet_22: std_logic; + signal func_and_inet_23: std_logic; + signal func_and_inet_24: std_logic; + signal func_and_inet_25: std_logic; + signal func_and_inet_26: std_logic; + signal func_and_inet_27: std_logic; + signal func_and_inet_28: std_logic; + signal func_and_inet_29: std_logic; + signal wptr_14_inv: std_logic; + signal func_and_inet_30: std_logic; + signal rptr_15_inv: std_logic; + signal func_and_inet_31: std_logic; + signal func_and_inet_32: std_logic; + signal func_and_inet_33: std_logic; + signal func_and_inet_34: std_logic; + signal func_and_inet_35: std_logic; + signal func_and_inet_36: std_logic; + signal func_and_inet_37: std_logic; + signal func_and_inet_38: std_logic; + signal func_and_inet_39: std_logic; + signal func_and_inet_40: std_logic; + signal func_and_inet_41: std_logic; + signal func_and_inet_42: std_logic; + signal func_and_inet_43: std_logic; + signal func_and_inet_44: std_logic; + signal func_and_inet_45: std_logic; + signal wptr_13_inv: std_logic; + signal func_and_inet_46: std_logic; + signal rptr_14_inv: std_logic; + signal func_and_inet_47: std_logic; + signal func_and_inet_48: std_logic; + signal func_and_inet_49: std_logic; + signal func_and_inet_50: std_logic; + signal func_and_inet_51: std_logic; + signal func_and_inet_52: std_logic; + signal func_and_inet_53: std_logic; + signal wptr_12_inv: std_logic; + signal func_and_inet_54: std_logic; + signal rptr_13_inv: std_logic; + signal func_and_inet_55: std_logic; + signal func_and_inet_56: std_logic; + signal func_and_inet_57: std_logic; + signal wptr_11_inv: std_logic; + signal func_and_inet_58: std_logic; + signal rptr_12_inv: std_logic; + signal func_and_inet_59: std_logic; + signal wptr_10_inv: std_logic; + signal func_and_inet_60: std_logic; + signal rptr_11_inv: std_logic; + signal func_and_inet_61: std_logic; + signal func_and_inet_62: std_logic; + signal func_and_inet_63: std_logic; + signal w_g2b_xor_cluster_2_1: std_logic; + signal w_g2b_xor_cluster_3_1: std_logic; + signal w_g2b_xor_cluster_3_2: std_logic; + signal w_g2b_xor_cluster_3: std_logic; + signal w_g2b_xor_cluster_2: std_logic; + signal w_g2b_xor_cluster_1: std_logic; + signal r_g2b_xor_cluster_2_1: std_logic; + signal r_g2b_xor_cluster_3_1: std_logic; + signal r_g2b_xor_cluster_3_2: std_logic; + signal r_g2b_xor_cluster_3: std_logic; + signal r_g2b_xor_cluster_2: std_logic; + signal r_g2b_xor_cluster_1: std_logic; + signal func_xor_inet_3: std_logic; + signal func_xor_inet_2: std_logic; + signal func_xor_inet_1: std_logic; + signal func_xor_inet: std_logic; + signal rcount_w0: std_logic; + signal func_xor_inet_4: std_logic; + signal func_xor_inet_5: std_logic; + signal dec1_r10: std_logic; + signal dec0_p00: std_logic; + signal dec3_r11: std_logic; + signal dec2_p01: std_logic; + signal dec5_r12: std_logic; + signal dec4_p02: std_logic; + signal dec7_r13: std_logic; + signal dec6_p03: std_logic; + signal dec9_r14: std_logic; + signal dec8_p04: std_logic; + signal dec11_r15: std_logic; + signal dec10_p05: std_logic; + signal dec13_r16: std_logic; + signal dec12_p06: std_logic; + signal dec15_r17: std_logic; + signal dec14_p07: std_logic; + signal dec17_r18: std_logic; + signal dec16_p08: std_logic; + signal dec19_r19: std_logic; + signal dec18_p09: std_logic; + signal dec21_r110: std_logic; + signal dec20_p010: std_logic; + signal dec23_r111: std_logic; + signal dec22_p011: std_logic; + signal dec25_r112: std_logic; + signal dec24_p012: std_logic; + signal dec27_r113: std_logic; + signal dec26_p013: std_logic; + signal dec29_r114: std_logic; + signal dec28_p014: std_logic; + signal dec31_r115: std_logic; + signal dec30_p015: std_logic; + signal dec33_r116: std_logic; + signal dec32_p016: std_logic; + signal dec35_r117: std_logic; + signal dec34_p017: std_logic; + signal dec37_r118: std_logic; + signal dec36_p018: std_logic; + signal dec39_r119: std_logic; + signal dec38_p019: std_logic; + signal dec41_r120: std_logic; + signal dec40_p020: std_logic; + signal dec43_r121: std_logic; + signal dec42_p021: std_logic; + signal dec45_r122: std_logic; + signal dec44_p022: std_logic; + signal dec47_r123: std_logic; + signal dec46_p023: std_logic; + signal dec49_r124: std_logic; + signal dec48_p024: std_logic; + signal dec51_r125: std_logic; + signal dec50_p025: std_logic; + signal dec53_r126: std_logic; + signal dec52_p026: std_logic; + signal dec55_r127: std_logic; + signal dec54_p027: std_logic; + signal dec57_r128: std_logic; + signal dec56_p028: std_logic; + signal dec59_r129: std_logic; + signal dec58_p029: std_logic; + signal dec61_r130: std_logic; + signal dec60_p030: std_logic; + signal dec63_r131: std_logic; + signal dec62_p031: std_logic; + signal w_gdata_0: std_logic; + signal w_gdata_1: std_logic; + signal w_gdata_2: std_logic; + signal w_gdata_3: std_logic; + signal w_gdata_4: std_logic; + signal w_gdata_5: std_logic; + signal w_gdata_6: std_logic; + signal w_gdata_7: std_logic; + signal w_gdata_8: std_logic; + signal w_gdata_9: std_logic; + signal w_gdata_10: std_logic; + signal w_gdata_11: std_logic; + signal w_gdata_12: std_logic; + signal w_gdata_13: std_logic; + signal w_gdata_14: std_logic; + signal wptr_15: std_logic; + signal r_gdata_0: std_logic; + signal r_gdata_1: std_logic; + signal r_gdata_2: std_logic; + signal r_gdata_3: std_logic; + signal r_gdata_4: std_logic; + signal r_gdata_5: std_logic; + signal r_gdata_6: std_logic; + signal r_gdata_7: std_logic; + signal r_gdata_8: std_logic; + signal r_gdata_9: std_logic; + signal r_gdata_10: std_logic; + signal r_gdata_11: std_logic; + signal r_gdata_12: std_logic; + signal r_gdata_13: std_logic; + signal r_gdata_14: std_logic; + signal r_gdata_15: std_logic; + signal rptr_0: std_logic; + signal rptr_1: std_logic; + signal rptr_2: std_logic; + signal rptr_3: std_logic; + signal rptr_4: std_logic; + signal rptr_5: std_logic; + signal rptr_6: std_logic; + signal rptr_7: std_logic; + signal rptr_8: std_logic; + signal rptr_9: std_logic; + signal rptr_10: std_logic; + signal rptr_16: std_logic; + signal rptr_11: std_logic; + signal rptr_12: std_logic; + signal rptr_13: std_logic; + signal rptr_14: std_logic; + signal rptr_15: std_logic; + signal w_gcount_0: std_logic; + signal w_gcount_1: std_logic; + signal w_gcount_2: std_logic; + signal w_gcount_3: std_logic; + signal w_gcount_4: std_logic; + signal w_gcount_5: std_logic; + signal w_gcount_6: std_logic; + signal w_gcount_7: std_logic; + signal w_gcount_8: std_logic; + signal w_gcount_9: std_logic; + signal w_gcount_10: std_logic; + signal w_gcount_11: std_logic; + signal w_gcount_12: std_logic; + signal w_gcount_13: std_logic; + signal w_gcount_14: std_logic; + signal w_gcount_15: std_logic; + signal r_gcount_0: std_logic; + signal r_gcount_1: std_logic; + signal r_gcount_2: std_logic; + signal r_gcount_3: std_logic; + signal r_gcount_4: std_logic; + signal r_gcount_5: std_logic; + signal r_gcount_6: std_logic; + signal r_gcount_7: std_logic; + signal r_gcount_8: std_logic; + signal r_gcount_9: std_logic; + signal r_gcount_10: std_logic; + signal r_gcount_11: std_logic; + signal r_gcount_12: std_logic; + signal r_gcount_13: std_logic; + signal r_gcount_14: std_logic; + signal r_gcount_15: std_logic; + signal r_gcount_16: std_logic; + signal w_gcount_r20: std_logic; + signal w_gcount_r0: std_logic; + signal w_gcount_r21: std_logic; + signal w_gcount_r1: std_logic; + signal w_gcount_r22: std_logic; + signal w_gcount_r2: std_logic; + signal w_gcount_r23: std_logic; + signal w_gcount_r3: std_logic; + signal w_gcount_r24: std_logic; + signal w_gcount_r4: std_logic; + signal w_gcount_r25: std_logic; + signal w_gcount_r5: std_logic; + signal w_gcount_r26: std_logic; + signal w_gcount_r6: std_logic; + signal w_gcount_r27: std_logic; + signal w_gcount_r7: std_logic; + signal w_gcount_r28: std_logic; + signal w_gcount_r8: std_logic; + signal w_gcount_r29: std_logic; + signal w_gcount_r9: std_logic; + signal w_gcount_r210: std_logic; + signal w_gcount_r10: std_logic; + signal w_gcount_r211: std_logic; + signal w_gcount_r11: std_logic; + signal w_gcount_r212: std_logic; + signal w_gcount_r12: std_logic; + signal w_gcount_r213: std_logic; + signal w_gcount_r13: std_logic; + signal w_gcount_r214: std_logic; + signal w_gcount_r14: std_logic; + signal w_gcount_r215: std_logic; + signal w_gcount_r15: std_logic; + signal r_gcount_w20: std_logic; + signal r_gcount_w0: std_logic; + signal r_gcount_w21: std_logic; + signal r_gcount_w1: std_logic; + signal r_gcount_w22: std_logic; + signal r_gcount_w2: std_logic; + signal r_gcount_w23: std_logic; + signal r_gcount_w3: std_logic; + signal r_gcount_w24: std_logic; + signal r_gcount_w4: std_logic; + signal r_gcount_w25: std_logic; + signal r_gcount_w5: std_logic; + signal r_gcount_w26: std_logic; + signal r_gcount_w6: std_logic; + signal r_gcount_w27: std_logic; + signal r_gcount_w7: std_logic; + signal r_gcount_w28: std_logic; + signal r_gcount_w8: std_logic; + signal r_gcount_w29: std_logic; + signal r_gcount_w9: std_logic; + signal r_gcount_w210: std_logic; + signal r_gcount_w10: std_logic; + signal r_gcount_w211: std_logic; + signal r_gcount_w11: std_logic; + signal r_gcount_w212: std_logic; + signal r_gcount_w12: std_logic; + signal r_gcount_w213: std_logic; + signal r_gcount_w13: std_logic; + signal r_gcount_w214: std_logic; + signal r_gcount_w14: std_logic; + signal r_gcount_w215: std_logic; + signal r_gcount_w15: std_logic; + signal r_gcount_w216: std_logic; + signal r_gcount_w16: std_logic; + signal empty_i: std_logic; + signal rRst: std_logic; + signal full_i: std_logic; + signal iwcount_0: std_logic; + signal iwcount_1: std_logic; + signal w_gctr_ci: std_logic; + signal iwcount_2: std_logic; + signal iwcount_3: std_logic; + signal co0: std_logic; + signal iwcount_4: std_logic; + signal iwcount_5: std_logic; + signal co1: std_logic; + signal iwcount_6: std_logic; + signal iwcount_7: std_logic; + signal co2: std_logic; + signal iwcount_8: std_logic; + signal iwcount_9: std_logic; + signal co3: std_logic; + signal iwcount_10: std_logic; + signal iwcount_11: std_logic; + signal co4: std_logic; + signal iwcount_12: std_logic; + signal iwcount_13: std_logic; + signal co5: std_logic; + signal iwcount_14: std_logic; + signal iwcount_15: std_logic; + signal co7: std_logic; + signal co6: std_logic; + signal wcount_15: std_logic; + signal ircount_0: std_logic; + signal ircount_1: std_logic; + signal r_gctr_ci: std_logic; + signal ircount_2: std_logic; + signal ircount_3: std_logic; + signal co0_1: std_logic; + signal ircount_4: std_logic; + signal ircount_5: std_logic; + signal co1_1: std_logic; + signal ircount_6: std_logic; + signal ircount_7: std_logic; + signal co2_1: std_logic; + signal ircount_8: std_logic; + signal ircount_9: std_logic; + signal co3_1: std_logic; + signal ircount_10: std_logic; + signal ircount_11: std_logic; + signal co4_1: std_logic; + signal ircount_12: std_logic; + signal ircount_13: std_logic; + signal co5_1: std_logic; + signal ircount_14: std_logic; + signal ircount_15: std_logic; + signal co6_1: std_logic; + signal ircount_16: std_logic; + signal co8: std_logic; + signal co7_1: std_logic; + signal rcount_16: std_logic; + signal mdout1_31_0: std_logic; + signal mdout1_30_0: std_logic; + signal mdout1_29_0: std_logic; + signal mdout1_28_0: std_logic; + signal mdout1_27_0: std_logic; + signal mdout1_26_0: std_logic; + signal mdout1_25_0: std_logic; + signal mdout1_24_0: std_logic; + signal mdout1_23_0: std_logic; + signal mdout1_22_0: std_logic; + signal mdout1_21_0: std_logic; + signal mdout1_20_0: std_logic; + signal mdout1_19_0: std_logic; + signal mdout1_18_0: std_logic; + signal mdout1_17_0: std_logic; + signal mdout1_16_0: std_logic; + signal mdout1_15_0: std_logic; + signal mdout1_14_0: std_logic; + signal mdout1_13_0: std_logic; + signal mdout1_12_0: std_logic; + signal mdout1_11_0: std_logic; + signal mdout1_10_0: std_logic; + signal mdout1_9_0: std_logic; + signal mdout1_8_0: std_logic; + signal mdout1_7_0: std_logic; + signal mdout1_6_0: std_logic; + signal mdout1_5_0: std_logic; + signal mdout1_4_0: std_logic; + signal mdout1_3_0: std_logic; + signal mdout1_2_0: std_logic; + signal mdout1_1_0: std_logic; + signal mdout1_0_0: std_logic; + signal mdout1_31_1: std_logic; + signal mdout1_30_1: std_logic; + signal mdout1_29_1: std_logic; + signal mdout1_28_1: std_logic; + signal mdout1_27_1: std_logic; + signal mdout1_26_1: std_logic; + signal mdout1_25_1: std_logic; + signal mdout1_24_1: std_logic; + signal mdout1_23_1: std_logic; + signal mdout1_22_1: std_logic; + signal mdout1_21_1: std_logic; + signal mdout1_20_1: std_logic; + signal mdout1_19_1: std_logic; + signal mdout1_18_1: std_logic; + signal mdout1_17_1: std_logic; + signal mdout1_16_1: std_logic; + signal mdout1_15_1: std_logic; + signal mdout1_14_1: std_logic; + signal mdout1_13_1: std_logic; + signal mdout1_12_1: std_logic; + signal mdout1_11_1: std_logic; + signal mdout1_10_1: std_logic; + signal mdout1_9_1: std_logic; + signal mdout1_8_1: std_logic; + signal mdout1_7_1: std_logic; + signal mdout1_6_1: std_logic; + signal mdout1_5_1: std_logic; + signal mdout1_4_1: std_logic; + signal mdout1_3_1: std_logic; + signal mdout1_2_1: std_logic; + signal mdout1_1_1: std_logic; + signal mdout1_0_1: std_logic; + signal mdout1_31_2: std_logic; + signal mdout1_30_2: std_logic; + signal mdout1_29_2: std_logic; + signal mdout1_28_2: std_logic; + signal mdout1_27_2: std_logic; + signal mdout1_26_2: std_logic; + signal mdout1_25_2: std_logic; + signal mdout1_24_2: std_logic; + signal mdout1_23_2: std_logic; + signal mdout1_22_2: std_logic; + signal mdout1_21_2: std_logic; + signal mdout1_20_2: std_logic; + signal mdout1_19_2: std_logic; + signal mdout1_18_2: std_logic; + signal mdout1_17_2: std_logic; + signal mdout1_16_2: std_logic; + signal mdout1_15_2: std_logic; + signal mdout1_14_2: std_logic; + signal mdout1_13_2: std_logic; + signal mdout1_12_2: std_logic; + signal mdout1_11_2: std_logic; + signal mdout1_10_2: std_logic; + signal mdout1_9_2: std_logic; + signal mdout1_8_2: std_logic; + signal mdout1_7_2: std_logic; + signal mdout1_6_2: std_logic; + signal mdout1_5_2: std_logic; + signal mdout1_4_2: std_logic; + signal mdout1_3_2: std_logic; + signal mdout1_2_2: std_logic; + signal mdout1_1_2: std_logic; + signal mdout1_0_2: std_logic; + signal mdout1_31_3: std_logic; + signal mdout1_30_3: std_logic; + signal mdout1_29_3: std_logic; + signal mdout1_28_3: std_logic; + signal mdout1_27_3: std_logic; + signal mdout1_26_3: std_logic; + signal mdout1_25_3: std_logic; + signal mdout1_24_3: std_logic; + signal mdout1_23_3: std_logic; + signal mdout1_22_3: std_logic; + signal mdout1_21_3: std_logic; + signal mdout1_20_3: std_logic; + signal mdout1_19_3: std_logic; + signal mdout1_18_3: std_logic; + signal mdout1_17_3: std_logic; + signal mdout1_16_3: std_logic; + signal mdout1_15_3: std_logic; + signal mdout1_14_3: std_logic; + signal mdout1_13_3: std_logic; + signal mdout1_12_3: std_logic; + signal mdout1_11_3: std_logic; + signal mdout1_10_3: std_logic; + signal mdout1_9_3: std_logic; + signal mdout1_8_3: std_logic; + signal mdout1_7_3: std_logic; + signal mdout1_6_3: std_logic; + signal mdout1_5_3: std_logic; + signal mdout1_4_3: std_logic; + signal mdout1_3_3: std_logic; + signal mdout1_2_3: std_logic; + signal mdout1_1_3: std_logic; + signal mdout1_0_3: std_logic; + signal mdout1_31_4: std_logic; + signal mdout1_30_4: std_logic; + signal mdout1_29_4: std_logic; + signal mdout1_28_4: std_logic; + signal mdout1_27_4: std_logic; + signal mdout1_26_4: std_logic; + signal mdout1_25_4: std_logic; + signal mdout1_24_4: std_logic; + signal mdout1_23_4: std_logic; + signal mdout1_22_4: std_logic; + signal mdout1_21_4: std_logic; + signal mdout1_20_4: std_logic; + signal mdout1_19_4: std_logic; + signal mdout1_18_4: std_logic; + signal mdout1_17_4: std_logic; + signal mdout1_16_4: std_logic; + signal mdout1_15_4: std_logic; + signal mdout1_14_4: std_logic; + signal mdout1_13_4: std_logic; + signal mdout1_12_4: std_logic; + signal mdout1_11_4: std_logic; + signal mdout1_10_4: std_logic; + signal mdout1_9_4: std_logic; + signal mdout1_8_4: std_logic; + signal mdout1_7_4: std_logic; + signal mdout1_6_4: std_logic; + signal mdout1_5_4: std_logic; + signal mdout1_4_4: std_logic; + signal mdout1_3_4: std_logic; + signal mdout1_2_4: std_logic; + signal mdout1_1_4: std_logic; + signal mdout1_0_4: std_logic; + signal mdout1_31_5: std_logic; + signal mdout1_30_5: std_logic; + signal mdout1_29_5: std_logic; + signal mdout1_28_5: std_logic; + signal mdout1_27_5: std_logic; + signal mdout1_26_5: std_logic; + signal mdout1_25_5: std_logic; + signal mdout1_24_5: std_logic; + signal mdout1_23_5: std_logic; + signal mdout1_22_5: std_logic; + signal mdout1_21_5: std_logic; + signal mdout1_20_5: std_logic; + signal mdout1_19_5: std_logic; + signal mdout1_18_5: std_logic; + signal mdout1_17_5: std_logic; + signal mdout1_16_5: std_logic; + signal mdout1_15_5: std_logic; + signal mdout1_14_5: std_logic; + signal mdout1_13_5: std_logic; + signal mdout1_12_5: std_logic; + signal mdout1_11_5: std_logic; + signal mdout1_10_5: std_logic; + signal mdout1_9_5: std_logic; + signal mdout1_8_5: std_logic; + signal mdout1_7_5: std_logic; + signal mdout1_6_5: std_logic; + signal mdout1_5_5: std_logic; + signal mdout1_4_5: std_logic; + signal mdout1_3_5: std_logic; + signal mdout1_2_5: std_logic; + signal mdout1_1_5: std_logic; + signal mdout1_0_5: std_logic; + signal mdout1_31_6: std_logic; + signal mdout1_30_6: std_logic; + signal mdout1_29_6: std_logic; + signal mdout1_28_6: std_logic; + signal mdout1_27_6: std_logic; + signal mdout1_26_6: std_logic; + signal mdout1_25_6: std_logic; + signal mdout1_24_6: std_logic; + signal mdout1_23_6: std_logic; + signal mdout1_22_6: std_logic; + signal mdout1_21_6: std_logic; + signal mdout1_20_6: std_logic; + signal mdout1_19_6: std_logic; + signal mdout1_18_6: std_logic; + signal mdout1_17_6: std_logic; + signal mdout1_16_6: std_logic; + signal mdout1_15_6: std_logic; + signal mdout1_14_6: std_logic; + signal mdout1_13_6: std_logic; + signal mdout1_12_6: std_logic; + signal mdout1_11_6: std_logic; + signal mdout1_10_6: std_logic; + signal mdout1_9_6: std_logic; + signal mdout1_8_6: std_logic; + signal mdout1_7_6: std_logic; + signal mdout1_6_6: std_logic; + signal mdout1_5_6: std_logic; + signal mdout1_4_6: std_logic; + signal mdout1_3_6: std_logic; + signal mdout1_2_6: std_logic; + signal mdout1_1_6: std_logic; + signal mdout1_0_6: std_logic; + signal mdout1_31_7: std_logic; + signal mdout1_30_7: std_logic; + signal mdout1_29_7: std_logic; + signal mdout1_28_7: std_logic; + signal mdout1_27_7: std_logic; + signal mdout1_26_7: std_logic; + signal mdout1_25_7: std_logic; + signal mdout1_24_7: std_logic; + signal mdout1_23_7: std_logic; + signal mdout1_22_7: std_logic; + signal mdout1_21_7: std_logic; + signal mdout1_20_7: std_logic; + signal mdout1_19_7: std_logic; + signal mdout1_18_7: std_logic; + signal mdout1_17_7: std_logic; + signal mdout1_16_7: std_logic; + signal mdout1_15_7: std_logic; + signal mdout1_14_7: std_logic; + signal mdout1_13_7: std_logic; + signal mdout1_12_7: std_logic; + signal mdout1_11_7: std_logic; + signal mdout1_10_7: std_logic; + signal mdout1_9_7: std_logic; + signal mdout1_8_7: std_logic; + signal mdout1_7_7: std_logic; + signal mdout1_6_7: std_logic; + signal mdout1_5_7: std_logic; + signal mdout1_4_7: std_logic; + signal mdout1_3_7: std_logic; + signal mdout1_2_7: std_logic; + signal mdout1_1_7: std_logic; + signal mdout1_0_7: std_logic; + signal rptr_15_ff: std_logic; + signal rptr_14_ff: std_logic; + signal rptr_13_ff: std_logic; + signal rptr_12_ff: std_logic; + signal rptr_11_ff: std_logic; + signal mdout1_31_8: std_logic; + signal mdout1_30_8: std_logic; + signal mdout1_29_8: std_logic; + signal mdout1_28_8: std_logic; + signal mdout1_27_8: std_logic; + signal mdout1_26_8: std_logic; + signal mdout1_25_8: std_logic; + signal mdout1_24_8: std_logic; + signal mdout1_23_8: std_logic; + signal mdout1_22_8: std_logic; + signal mdout1_21_8: std_logic; + signal mdout1_20_8: std_logic; + signal mdout1_19_8: std_logic; + signal mdout1_18_8: std_logic; + signal mdout1_17_8: std_logic; + signal mdout1_16_8: std_logic; + signal mdout1_15_8: std_logic; + signal mdout1_14_8: std_logic; + signal mdout1_13_8: std_logic; + signal mdout1_12_8: std_logic; + signal mdout1_11_8: std_logic; + signal mdout1_10_8: std_logic; + signal mdout1_9_8: std_logic; + signal mdout1_8_8: std_logic; + signal mdout1_7_8: std_logic; + signal mdout1_6_8: std_logic; + signal mdout1_5_8: std_logic; + signal mdout1_4_8: std_logic; + signal mdout1_3_8: std_logic; + signal mdout1_2_8: std_logic; + signal mdout1_1_8: std_logic; + signal mdout1_0_8: std_logic; + signal wfill_sub_0: std_logic; + signal wptr_0: std_logic; + signal precin: std_logic; + signal wfill_sub_1: std_logic; + signal wfill_sub_2: std_logic; + signal wptr_2: std_logic; + signal wptr_1: std_logic; + signal co0_2: std_logic; + signal wfill_sub_3: std_logic; + signal wfill_sub_4: std_logic; + signal wptr_4: std_logic; + signal wptr_3: std_logic; + signal co1_2: std_logic; + signal wfill_sub_5: std_logic; + signal wfill_sub_6: std_logic; + signal wptr_6: std_logic; + signal wptr_5: std_logic; + signal co2_2: std_logic; + signal wfill_sub_7: std_logic; + signal wfill_sub_8: std_logic; + signal wptr_8: std_logic; + signal wptr_7: std_logic; + signal co3_2: std_logic; + signal wfill_sub_9: std_logic; + signal wfill_sub_10: std_logic; + signal wptr_10: std_logic; + signal wptr_9: std_logic; + signal co4_2: std_logic; + signal wfill_sub_11: std_logic; + signal wfill_sub_12: std_logic; + signal wptr_12: std_logic; + signal wptr_11: std_logic; + signal co5_2: std_logic; + signal wfill_sub_13: std_logic; + signal wfill_sub_14: std_logic; + signal wptr_14: std_logic; + signal wptr_13: std_logic; + signal co6_2: std_logic; + signal wfill_sub_15: std_logic; + signal wfill_sub_msb: std_logic; + signal co7_2: std_logic; + signal rden_i: std_logic; + signal cmp_ci: std_logic; + signal wcount_r0: std_logic; + signal rcount_0: std_logic; + signal rcount_1: std_logic; + signal co0_3: std_logic; + signal wcount_r1: std_logic; + signal wcount_r2: std_logic; + signal rcount_2: std_logic; + signal rcount_3: std_logic; + signal co1_3: std_logic; + signal wcount_r3: std_logic; + signal wcount_r4: std_logic; + signal rcount_4: std_logic; + signal rcount_5: std_logic; + signal co2_3: std_logic; + signal wcount_r5: std_logic; + signal wcount_r6: std_logic; + signal rcount_6: std_logic; + signal rcount_7: std_logic; + signal co3_3: std_logic; + signal wcount_r7: std_logic; + signal wcount_r8: std_logic; + signal rcount_8: std_logic; + signal rcount_9: std_logic; + signal co4_3: std_logic; + signal wcount_r9: std_logic; + signal wcount_r10: std_logic; + signal rcount_10: std_logic; + signal rcount_11: std_logic; + signal co5_3: std_logic; + signal wcount_r11: std_logic; + signal w_g2b_xor_cluster_0: std_logic; + signal rcount_12: std_logic; + signal rcount_13: std_logic; + signal co6_3: std_logic; + signal wcount_r13: std_logic; + signal wcount_r14: std_logic; + signal rcount_14: std_logic; + signal rcount_15: std_logic; + signal co7_3: std_logic; + signal empty_cmp_clr: std_logic; + signal empty_cmp_set: std_logic; + signal empty_d: std_logic; + signal empty_d_c: std_logic; + signal wren_i: std_logic; + signal cmp_ci_1: std_logic; + signal rcount_w1: std_logic; + signal rcount_w2: std_logic; + signal wcount_0: std_logic; + signal wcount_1: std_logic; + signal co0_4: std_logic; + signal rcount_w3: std_logic; + signal rcount_w4: std_logic; + signal wcount_2: std_logic; + signal wcount_3: std_logic; + signal co1_4: std_logic; + signal rcount_w5: std_logic; + signal rcount_w6: std_logic; + signal wcount_4: std_logic; + signal wcount_5: std_logic; + signal co2_4: std_logic; + signal rcount_w7: std_logic; + signal rcount_w8: std_logic; + signal wcount_6: std_logic; + signal wcount_7: std_logic; + signal co3_4: std_logic; + signal rcount_w9: std_logic; + signal rcount_w10: std_logic; + signal wcount_8: std_logic; + signal wcount_9: std_logic; + signal co4_4: std_logic; + signal rcount_w11: std_logic; + signal rcount_w12: std_logic; + signal wcount_10: std_logic; + signal wcount_11: std_logic; + signal co5_4: std_logic; + signal r_g2b_xor_cluster_0: std_logic; + signal rcount_w14: std_logic; + signal wcount_12: std_logic; + signal wcount_13: std_logic; + signal co6_4: std_logic; + signal rcount_w15: std_logic; + signal full_cmp_clr: std_logic; + signal wcount_14: std_logic; + signal full_cmp_set: std_logic; + signal full_d: std_logic; + signal scuba_vhi: std_logic; + signal scuba_vlo: std_logic; + signal full_d_c: std_logic; + + attribute MEM_LPC_FILE : string; + attribute MEM_INIT_FILE : string; + attribute GSR : string; + attribute MEM_LPC_FILE of pdp_ram_0_0_31 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_0_0_31 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_1_0_30 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_1_0_30 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_2_0_29 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_2_0_29 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_3_0_28 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_3_0_28 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_4_0_27 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_4_0_27 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_5_0_26 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_5_0_26 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_6_0_25 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_6_0_25 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_7_0_24 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_7_0_24 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_8_0_23 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_8_0_23 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_9_0_22 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_9_0_22 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_10_0_21 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_10_0_21 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_11_0_20 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_11_0_20 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_12_0_19 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_12_0_19 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_13_0_18 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_13_0_18 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_14_0_17 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_14_0_17 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_15_0_16 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_15_0_16 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_16_0_15 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_16_0_15 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_17_0_14 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_17_0_14 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_18_0_13 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_18_0_13 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_19_0_12 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_19_0_12 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_20_0_11 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_20_0_11 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_21_0_10 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_21_0_10 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_22_0_9 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_22_0_9 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_23_0_8 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_23_0_8 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_24_0_7 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_24_0_7 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_25_0_6 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_25_0_6 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_26_0_5 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_26_0_5 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_27_0_4 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_27_0_4 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_28_0_3 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_28_0_3 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_29_0_2 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_29_0_2 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_30_0_1 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_30_0_1 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_31_0_0 : label is "fifo_64kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_31_0_0 : label is ""; + attribute GSR of FF_187 : label is "ENABLED"; + attribute GSR of FF_186 : label is "ENABLED"; + attribute GSR of FF_185 : label is "ENABLED"; + attribute GSR of FF_184 : label is "ENABLED"; + attribute GSR of FF_183 : label is "ENABLED"; + attribute GSR of FF_182 : label is "ENABLED"; + attribute GSR of FF_181 : label is "ENABLED"; + attribute GSR of FF_180 : label is "ENABLED"; + attribute GSR of FF_179 : label is "ENABLED"; + attribute GSR of FF_178 : label is "ENABLED"; + attribute GSR of FF_177 : label is "ENABLED"; + attribute GSR of FF_176 : label is "ENABLED"; + attribute GSR of FF_175 : label is "ENABLED"; + attribute GSR of FF_174 : label is "ENABLED"; + attribute GSR of FF_173 : label is "ENABLED"; + attribute GSR of FF_172 : label is "ENABLED"; + attribute GSR of FF_171 : label is "ENABLED"; + attribute GSR of FF_170 : label is "ENABLED"; + attribute GSR of FF_169 : label is "ENABLED"; + attribute GSR of FF_168 : label is "ENABLED"; + attribute GSR of FF_167 : label is "ENABLED"; + attribute GSR of FF_166 : label is "ENABLED"; + attribute GSR of FF_165 : label is "ENABLED"; + attribute GSR of FF_164 : label is "ENABLED"; + attribute GSR of FF_163 : label is "ENABLED"; + attribute GSR of FF_162 : label is "ENABLED"; + attribute GSR of FF_161 : label is "ENABLED"; + attribute GSR of FF_160 : label is "ENABLED"; + attribute GSR of FF_159 : label is "ENABLED"; + attribute GSR of FF_158 : label is "ENABLED"; + attribute GSR of FF_157 : label is "ENABLED"; + attribute GSR of FF_156 : label is "ENABLED"; + attribute GSR of FF_155 : label is "ENABLED"; + attribute GSR of FF_154 : label is "ENABLED"; + attribute GSR of FF_153 : label is "ENABLED"; + attribute GSR of FF_152 : label is "ENABLED"; + attribute GSR of FF_151 : label is "ENABLED"; + attribute GSR of FF_150 : label is "ENABLED"; + attribute GSR of FF_149 : label is "ENABLED"; + attribute GSR of FF_148 : label is "ENABLED"; + attribute GSR of FF_147 : label is "ENABLED"; + attribute GSR of FF_146 : label is "ENABLED"; + attribute GSR of FF_145 : label is "ENABLED"; + attribute GSR of FF_144 : label is "ENABLED"; + attribute GSR of FF_143 : label is "ENABLED"; + attribute GSR of FF_142 : label is "ENABLED"; + attribute GSR of FF_141 : label is "ENABLED"; + attribute GSR of FF_140 : label is "ENABLED"; + attribute GSR of FF_139 : label is "ENABLED"; + attribute GSR of FF_138 : label is "ENABLED"; + attribute GSR of FF_137 : label is "ENABLED"; + attribute GSR of FF_136 : label is "ENABLED"; + attribute GSR of FF_135 : label is "ENABLED"; + attribute GSR of FF_134 : label is "ENABLED"; + attribute GSR of FF_133 : label is "ENABLED"; + attribute GSR of FF_132 : label is "ENABLED"; + attribute GSR of FF_131 : label is "ENABLED"; + attribute GSR of FF_130 : label is "ENABLED"; + attribute GSR of FF_129 : label is "ENABLED"; + attribute GSR of FF_128 : label is "ENABLED"; + attribute GSR of FF_127 : label is "ENABLED"; + attribute GSR of FF_126 : label is "ENABLED"; + attribute GSR of FF_125 : label is "ENABLED"; + attribute GSR of FF_124 : label is "ENABLED"; + attribute GSR of FF_123 : label is "ENABLED"; + attribute GSR of FF_122 : label is "ENABLED"; + attribute GSR of FF_121 : label is "ENABLED"; + attribute GSR of FF_120 : label is "ENABLED"; + attribute GSR of FF_119 : label is "ENABLED"; + attribute GSR of FF_118 : label is "ENABLED"; + attribute GSR of FF_117 : label is "ENABLED"; + attribute GSR of FF_116 : label is "ENABLED"; + attribute GSR of FF_115 : label is "ENABLED"; + attribute GSR of FF_114 : label is "ENABLED"; + attribute GSR of FF_113 : label is "ENABLED"; + attribute GSR of FF_112 : label is "ENABLED"; + attribute GSR of FF_111 : label is "ENABLED"; + attribute GSR of FF_110 : label is "ENABLED"; + attribute GSR of FF_109 : label is "ENABLED"; + attribute GSR of FF_108 : label is "ENABLED"; + attribute GSR of FF_107 : label is "ENABLED"; + attribute GSR of FF_106 : label is "ENABLED"; + attribute GSR of FF_105 : label is "ENABLED"; + attribute GSR of FF_104 : label is "ENABLED"; + attribute GSR of FF_103 : label is "ENABLED"; + attribute GSR of FF_102 : label is "ENABLED"; + attribute GSR of FF_101 : label is "ENABLED"; + attribute GSR of FF_100 : label is "ENABLED"; + attribute GSR of FF_99 : label is "ENABLED"; + attribute GSR of FF_98 : label is "ENABLED"; + attribute GSR of FF_97 : label is "ENABLED"; + attribute GSR of FF_96 : label is "ENABLED"; + attribute GSR of FF_95 : label is "ENABLED"; + attribute GSR of FF_94 : label is "ENABLED"; + attribute GSR of FF_93 : label is "ENABLED"; + attribute GSR of FF_92 : label is "ENABLED"; + attribute GSR of FF_91 : label is "ENABLED"; + attribute GSR of FF_90 : label is "ENABLED"; + attribute GSR of FF_89 : label is "ENABLED"; + attribute GSR of FF_88 : label is "ENABLED"; + attribute GSR of FF_87 : label is "ENABLED"; + attribute GSR of FF_86 : label is "ENABLED"; + attribute GSR of FF_85 : label is "ENABLED"; + attribute GSR of FF_84 : label is "ENABLED"; + attribute GSR of FF_83 : label is "ENABLED"; + attribute GSR of FF_82 : label is "ENABLED"; + attribute GSR of FF_81 : label is "ENABLED"; + attribute GSR of FF_80 : label is "ENABLED"; + attribute GSR of FF_79 : label is "ENABLED"; + attribute GSR of FF_78 : label is "ENABLED"; + attribute GSR of FF_77 : label is "ENABLED"; + attribute GSR of FF_76 : label is "ENABLED"; + attribute GSR of FF_75 : label is "ENABLED"; + attribute GSR of FF_74 : label is "ENABLED"; + attribute GSR of FF_73 : label is "ENABLED"; + attribute GSR of FF_72 : label is "ENABLED"; + attribute GSR of FF_71 : label is "ENABLED"; + attribute GSR of FF_70 : label is "ENABLED"; + attribute GSR of FF_69 : label is "ENABLED"; + attribute GSR of FF_68 : label is "ENABLED"; + attribute GSR of FF_67 : label is "ENABLED"; + attribute GSR of FF_66 : label is "ENABLED"; + attribute GSR of FF_65 : label is "ENABLED"; + attribute GSR of FF_64 : label is "ENABLED"; + attribute GSR of FF_63 : label is "ENABLED"; + attribute GSR of FF_62 : label is "ENABLED"; + attribute GSR of FF_61 : label is "ENABLED"; + attribute GSR of FF_60 : label is "ENABLED"; + attribute GSR of FF_59 : label is "ENABLED"; + attribute GSR of FF_58 : label is "ENABLED"; + attribute GSR of FF_57 : label is "ENABLED"; + attribute GSR of FF_56 : label is "ENABLED"; + attribute GSR of FF_55 : label is "ENABLED"; + attribute GSR of FF_54 : label is "ENABLED"; + attribute GSR of FF_53 : label is "ENABLED"; + attribute GSR of FF_52 : label is "ENABLED"; + attribute GSR of FF_51 : label is "ENABLED"; + attribute GSR of FF_50 : label is "ENABLED"; + attribute GSR of FF_49 : label is "ENABLED"; + attribute GSR of FF_48 : label is "ENABLED"; + attribute GSR of FF_47 : label is "ENABLED"; + attribute GSR of FF_46 : label is "ENABLED"; + attribute GSR of FF_45 : label is "ENABLED"; + attribute GSR of FF_44 : label is "ENABLED"; + attribute GSR of FF_43 : label is "ENABLED"; + attribute GSR of FF_42 : label is "ENABLED"; + attribute GSR of FF_41 : label is "ENABLED"; + attribute GSR of FF_40 : label is "ENABLED"; + attribute GSR of FF_39 : label is "ENABLED"; + attribute GSR of FF_38 : label is "ENABLED"; + attribute GSR of FF_37 : label is "ENABLED"; + attribute GSR of FF_36 : label is "ENABLED"; + attribute GSR of FF_35 : label is "ENABLED"; + attribute GSR of FF_34 : label is "ENABLED"; + attribute GSR of FF_33 : label is "ENABLED"; + attribute GSR of FF_32 : label is "ENABLED"; + attribute GSR of FF_31 : label is "ENABLED"; + attribute GSR of FF_30 : label is "ENABLED"; + attribute GSR of FF_29 : label is "ENABLED"; + attribute GSR of FF_28 : label is "ENABLED"; + attribute GSR of FF_27 : label is "ENABLED"; + attribute GSR of FF_26 : label is "ENABLED"; + attribute GSR of FF_25 : label is "ENABLED"; + attribute GSR of FF_24 : label is "ENABLED"; + attribute GSR of FF_23 : label is "ENABLED"; + attribute GSR of FF_22 : label is "ENABLED"; + attribute GSR of FF_21 : label is "ENABLED"; + attribute GSR of FF_20 : label is "ENABLED"; + attribute GSR of FF_19 : label is "ENABLED"; + attribute GSR of FF_18 : label is "ENABLED"; + attribute GSR of FF_17 : label is "ENABLED"; + attribute GSR of FF_16 : label is "ENABLED"; + attribute GSR of FF_15 : label is "ENABLED"; + attribute GSR of FF_14 : label is "ENABLED"; + attribute GSR of FF_13 : label is "ENABLED"; + attribute GSR of FF_12 : label is "ENABLED"; + attribute GSR of FF_11 : label is "ENABLED"; + attribute GSR of FF_10 : label is "ENABLED"; + attribute GSR of FF_9 : label is "ENABLED"; + attribute GSR of FF_8 : label is "ENABLED"; + attribute GSR of FF_7 : label is "ENABLED"; + attribute GSR of FF_6 : label is "ENABLED"; + attribute GSR of FF_5 : label is "ENABLED"; + attribute GSR of FF_4 : label is "ENABLED"; + attribute GSR of FF_3 : label is "ENABLED"; + attribute GSR of FF_2 : label is "ENABLED"; + attribute GSR of FF_1 : label is "ENABLED"; + attribute GSR of FF_0 : label is "ENABLED"; + attribute syn_keep : boolean; + attribute NGD_DRC_MASK : integer; + attribute NGD_DRC_MASK of Structure : architecture is 1; + +begin + -- component instantiation statements + AND2_t34: AND2 + port map (A=>WrEn, B=>invout_1, Z=>wren_i); + + INV_11: INV + port map (A=>full_i, Z=>invout_1); + + AND2_t33: AND2 + port map (A=>RdEn, B=>invout_0, Z=>rden_i); + + INV_10: INV + port map (A=>empty_i, Z=>invout_0); + + OR2_t32: OR2 + port map (A=>Reset, B=>RPReset, Z=>rRst); + + XOR2_t31: XOR2 + port map (A=>wcount_0, B=>wcount_1, Z=>w_gdata_0); + + XOR2_t30: XOR2 + port map (A=>wcount_1, B=>wcount_2, Z=>w_gdata_1); + + XOR2_t29: XOR2 + port map (A=>wcount_2, B=>wcount_3, Z=>w_gdata_2); + + XOR2_t28: XOR2 + port map (A=>wcount_3, B=>wcount_4, Z=>w_gdata_3); + + XOR2_t27: XOR2 + port map (A=>wcount_4, B=>wcount_5, Z=>w_gdata_4); + + XOR2_t26: XOR2 + port map (A=>wcount_5, B=>wcount_6, Z=>w_gdata_5); + + XOR2_t25: XOR2 + port map (A=>wcount_6, B=>wcount_7, Z=>w_gdata_6); + + XOR2_t24: XOR2 + port map (A=>wcount_7, B=>wcount_8, Z=>w_gdata_7); + + XOR2_t23: XOR2 + port map (A=>wcount_8, B=>wcount_9, Z=>w_gdata_8); + + XOR2_t22: XOR2 + port map (A=>wcount_9, B=>wcount_10, Z=>w_gdata_9); + + XOR2_t21: XOR2 + port map (A=>wcount_10, B=>wcount_11, Z=>w_gdata_10); + + XOR2_t20: XOR2 + port map (A=>wcount_11, B=>wcount_12, Z=>w_gdata_11); + + XOR2_t19: XOR2 + port map (A=>wcount_12, B=>wcount_13, Z=>w_gdata_12); + + XOR2_t18: XOR2 + port map (A=>wcount_13, B=>wcount_14, Z=>w_gdata_13); + + XOR2_t17: XOR2 + port map (A=>wcount_14, B=>wcount_15, Z=>w_gdata_14); + + XOR2_t16: XOR2 + port map (A=>rcount_0, B=>rcount_1, Z=>r_gdata_0); + + XOR2_t15: XOR2 + port map (A=>rcount_1, B=>rcount_2, Z=>r_gdata_1); + + XOR2_t14: XOR2 + port map (A=>rcount_2, B=>rcount_3, Z=>r_gdata_2); + + XOR2_t13: XOR2 + port map (A=>rcount_3, B=>rcount_4, Z=>r_gdata_3); + + XOR2_t12: XOR2 + port map (A=>rcount_4, B=>rcount_5, Z=>r_gdata_4); + + XOR2_t11: XOR2 + port map (A=>rcount_5, B=>rcount_6, Z=>r_gdata_5); + + XOR2_t10: XOR2 + port map (A=>rcount_6, B=>rcount_7, Z=>r_gdata_6); + + XOR2_t9: XOR2 + port map (A=>rcount_7, B=>rcount_8, Z=>r_gdata_7); + + XOR2_t8: XOR2 + port map (A=>rcount_8, B=>rcount_9, Z=>r_gdata_8); + + XOR2_t7: XOR2 + port map (A=>rcount_9, B=>rcount_10, Z=>r_gdata_9); + + XOR2_t6: XOR2 + port map (A=>rcount_10, B=>rcount_11, Z=>r_gdata_10); + + XOR2_t5: XOR2 + port map (A=>rcount_11, B=>rcount_12, Z=>r_gdata_11); + + XOR2_t4: XOR2 + port map (A=>rcount_12, B=>rcount_13, Z=>r_gdata_12); + + XOR2_t3: XOR2 + port map (A=>rcount_13, B=>rcount_14, Z=>r_gdata_13); + + XOR2_t2: XOR2 + port map (A=>rcount_14, B=>rcount_15, Z=>r_gdata_14); + + XOR2_t1: XOR2 + port map (A=>rcount_15, B=>rcount_16, Z=>r_gdata_15); + + INV_9: INV + port map (A=>wptr_10, Z=>wptr_10_inv); + + INV_8: INV + port map (A=>wptr_11, Z=>wptr_11_inv); + + INV_7: INV + port map (A=>wptr_12, Z=>wptr_12_inv); + + INV_6: INV + port map (A=>wptr_13, Z=>wptr_13_inv); + + INV_5: INV + port map (A=>wptr_14, Z=>wptr_14_inv); + + LUT4_180: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet); + + LUT4_179: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet, AD2=>wptr_14_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec0_p00); + + INV_4: INV + port map (A=>rptr_11, Z=>rptr_11_inv); + + INV_3: INV + port map (A=>rptr_12, Z=>rptr_12_inv); + + INV_2: INV + port map (A=>rptr_13, Z=>rptr_13_inv); + + INV_1: INV + port map (A=>rptr_14, Z=>rptr_14_inv); + + INV_0: INV + port map (A=>rptr_15, Z=>rptr_15_inv); + + LUT4_178: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_1); + + LUT4_177: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_1, AD2=>rptr_15_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec1_r10); + + LUT4_176: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_2); + + LUT4_175: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_2, AD2=>wptr_14_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec2_p01); + + LUT4_174: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_3); + + LUT4_173: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_3, AD2=>rptr_15_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec3_r11); + + LUT4_172: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_4); + + LUT4_171: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_4, AD2=>wptr_14_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec4_p02); + + LUT4_170: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_5); + + LUT4_169: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_5, AD2=>rptr_15_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec5_r12); + + LUT4_168: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_6); + + LUT4_167: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_6, AD2=>wptr_14_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec6_p03); + + LUT4_166: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_7); + + LUT4_165: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_7, AD2=>rptr_15_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec7_r13); + + LUT4_164: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_8); + + LUT4_163: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_8, AD2=>wptr_14_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec8_p04); + + LUT4_162: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_9); + + LUT4_161: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_9, AD2=>rptr_15_inv, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec9_r14); + + LUT4_160: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_10); + + LUT4_159: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_10, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec10_p05); + + LUT4_158: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_11); + + LUT4_157: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_11, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec11_r15); + + LUT4_156: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_12); + + LUT4_155: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_12, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec12_p06); + + LUT4_154: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_13); + + LUT4_153: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_13, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec13_r16); + + LUT4_152: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_14); + + LUT4_151: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_14, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec14_p07); + + LUT4_150: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_15); + + LUT4_149: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_15, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec15_r17); + + LUT4_148: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_16); + + LUT4_147: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_16, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec16_p08); + + LUT4_146: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_17); + + LUT4_145: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_17, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec17_r18); + + LUT4_144: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_18); + + LUT4_143: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_18, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec18_p09); + + LUT4_142: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_19); + + LUT4_141: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_19, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec19_r19); + + LUT4_140: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_20); + + LUT4_139: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_20, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec20_p010); + + LUT4_138: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_21); + + LUT4_137: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_21, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec21_r110); + + LUT4_136: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_22); + + LUT4_135: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_22, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec22_p011); + + LUT4_134: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_23); + + LUT4_133: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_23, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec23_r111); + + LUT4_132: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_24); + + LUT4_131: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_24, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec24_p012); + + LUT4_130: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_25); + + LUT4_129: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_25, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec25_r112); + + LUT4_128: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_26); + + LUT4_127: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_26, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec26_p013); + + LUT4_126: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_27); + + LUT4_125: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_27, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec27_r113); + + LUT4_124: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_28); + + LUT4_123: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_28, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec28_p014); + + LUT4_122: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_29); + + LUT4_121: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_29, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec29_r114); + + LUT4_120: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12, AD0=>wptr_13, + DO0=>func_and_inet_30); + + LUT4_119: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_30, AD2=>wptr_14_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec30_p015); + + LUT4_118: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13, AD0=>rptr_14, + DO0=>func_and_inet_31); + + LUT4_117: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_31, AD2=>rptr_15_inv, + AD1=>scuba_vhi, AD0=>scuba_vhi, DO0=>dec31_r115); + + LUT4_116: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_32); + + LUT4_115: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_32, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec32_p016); + + LUT4_114: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_33); + + LUT4_113: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_33, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec33_r116); + + LUT4_112: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_34); + + LUT4_111: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_34, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec34_p017); + + LUT4_110: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_35); + + LUT4_109: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_35, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec35_r117); + + LUT4_108: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_36); + + LUT4_107: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_36, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec36_p018); + + LUT4_106: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_37); + + LUT4_105: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_37, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec37_r118); + + LUT4_104: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13_inv, DO0=>func_and_inet_38); + + LUT4_103: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_38, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec38_p019); + + LUT4_102: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14_inv, DO0=>func_and_inet_39); + + LUT4_101: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_39, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec39_r119); + + LUT4_100: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_40); + + LUT4_99: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_40, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec40_p020); + + LUT4_98: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_41); + + LUT4_97: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_41, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec41_r120); + + LUT4_96: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_42); + + LUT4_95: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_42, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec42_p021); + + LUT4_94: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_43); + + LUT4_93: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_43, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec43_r121); + + LUT4_92: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_44); + + LUT4_91: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_44, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec44_p022); + + LUT4_90: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_45); + + LUT4_89: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_45, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec45_r122); + + LUT4_88: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13_inv, DO0=>func_and_inet_46); + + LUT4_87: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_46, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec46_p023); + + LUT4_86: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14_inv, DO0=>func_and_inet_47); + + LUT4_85: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_47, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec47_r123); + + LUT4_84: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_48); + + LUT4_83: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_48, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec48_p024); + + LUT4_82: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_49); + + LUT4_81: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_49, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec49_r124); + + LUT4_80: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_50); + + LUT4_79: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_50, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec50_p025); + + LUT4_78: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_51); + + LUT4_77: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_51, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec51_r125); + + LUT4_76: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_52); + + LUT4_75: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_52, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec52_p026); + + LUT4_74: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_53); + + LUT4_73: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_53, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec53_r126); + + LUT4_72: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12_inv, + AD0=>wptr_13, DO0=>func_and_inet_54); + + LUT4_71: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_54, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec54_p027); + + LUT4_70: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13_inv, + AD0=>rptr_14, DO0=>func_and_inet_55); + + LUT4_69: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_55, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec55_r127); + + LUT4_68: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_56); + + LUT4_67: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_56, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec56_p028); + + LUT4_66: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_57); + + LUT4_65: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_57, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec57_r128); + + LUT4_64: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11_inv, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_58); + + LUT4_63: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_58, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec58_p029); + + LUT4_62: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12_inv, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_59); + + LUT4_61: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_59, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec59_r129); + + LUT4_60: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10_inv, AD2=>wptr_11, AD1=>wptr_12, + AD0=>wptr_13, DO0=>func_and_inet_60); + + LUT4_59: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_60, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec60_p030); + + LUT4_58: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11_inv, AD2=>rptr_12, AD1=>rptr_13, + AD0=>rptr_14, DO0=>func_and_inet_61); + + LUT4_57: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_61, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec61_r130); + + LUT4_56: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>wptr_10, AD2=>wptr_11, AD1=>wptr_12, AD0=>wptr_13, + DO0=>func_and_inet_62); + + LUT4_55: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_62, AD2=>wptr_14, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec62_p031); + + LUT4_54: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>rptr_11, AD2=>rptr_12, AD1=>rptr_13, AD0=>rptr_14, + DO0=>func_and_inet_63); + + LUT4_53: ROM16X1A + generic map (initval=> X"8000") + port map (AD3=>func_and_inet_63, AD2=>rptr_15, AD1=>scuba_vhi, + AD0=>scuba_vhi, DO0=>dec63_r131); + + LUT4_52: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r212, AD2=>w_gcount_r213, + AD1=>w_gcount_r214, AD0=>w_gcount_r215, + DO0=>w_g2b_xor_cluster_0); + + LUT4_51: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r28, AD2=>w_gcount_r29, + AD1=>w_gcount_r210, AD0=>w_gcount_r211, + DO0=>w_g2b_xor_cluster_1); + + LUT4_50: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r24, AD2=>w_gcount_r25, + AD1=>w_gcount_r26, AD0=>w_gcount_r27, + DO0=>w_g2b_xor_cluster_2); + + LUT4_49: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r20, AD2=>w_gcount_r21, + AD1=>w_gcount_r22, AD0=>w_gcount_r23, + DO0=>w_g2b_xor_cluster_3); + + LUT4_48: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r214, AD2=>w_gcount_r215, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>wcount_r14); + + LUT4_47: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r213, AD2=>w_gcount_r214, + AD1=>w_gcount_r215, AD0=>scuba_vlo, DO0=>wcount_r13); + + LUT4_46: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r211, AD2=>w_gcount_r212, + AD1=>w_gcount_r213, AD0=>wcount_r14, DO0=>wcount_r11); + + LUT4_45: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r210, AD2=>w_gcount_r211, + AD1=>w_gcount_r212, AD0=>wcount_r13, DO0=>wcount_r10); + + LUT4_44: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r29, AD2=>w_gcount_r210, + AD1=>w_gcount_r211, AD0=>w_g2b_xor_cluster_0, DO0=>wcount_r9); + + LUT4_43: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>wcount_r8); + + LUT4_42: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r27, AD0=>scuba_vlo, DO0=>wcount_r7); + + LUT4_41: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r26, AD0=>w_gcount_r27, DO0=>wcount_r6); + + LUT4_40: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r25, AD2=>w_gcount_r26, + AD1=>w_gcount_r27, AD0=>scuba_vlo, + DO0=>w_g2b_xor_cluster_2_1); + + LUT4_39: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2_1, AD0=>scuba_vlo, DO0=>wcount_r5); + + LUT4_38: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>wcount_r4); + + LUT4_37: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_gcount_r23, DO0=>wcount_r3); + + LUT4_36: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r22, AD2=>w_gcount_r23, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>w_g2b_xor_cluster_3_1); + + LUT4_35: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_g2b_xor_cluster_3_1, + DO0=>wcount_r2); + + LUT4_34: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r21, AD2=>w_gcount_r22, + AD1=>w_gcount_r23, AD0=>scuba_vlo, + DO0=>w_g2b_xor_cluster_3_2); + + LUT4_33: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_g2b_xor_cluster_3_2, + DO0=>wcount_r1); + + LUT4_32: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_g2b_xor_cluster_3, + DO0=>wcount_r0); + + LUT4_31: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w213, AD2=>r_gcount_w214, + AD1=>r_gcount_w215, AD0=>r_gcount_w216, + DO0=>r_g2b_xor_cluster_0); + + LUT4_30: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w29, AD2=>r_gcount_w210, + AD1=>r_gcount_w211, AD0=>r_gcount_w212, + DO0=>r_g2b_xor_cluster_1); + + LUT4_29: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w25, AD2=>r_gcount_w26, + AD1=>r_gcount_w27, AD0=>r_gcount_w28, + DO0=>r_g2b_xor_cluster_2); + + LUT4_28: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w21, AD2=>r_gcount_w22, + AD1=>r_gcount_w23, AD0=>r_gcount_w24, + DO0=>r_g2b_xor_cluster_3); + + LUT4_27: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w215, AD2=>r_gcount_w216, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>rcount_w15); + + LUT4_26: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w214, AD2=>r_gcount_w215, + AD1=>r_gcount_w216, AD0=>scuba_vlo, DO0=>rcount_w14); + + LUT4_25: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w212, AD2=>r_gcount_w213, + AD1=>r_gcount_w214, AD0=>rcount_w15, DO0=>rcount_w12); + + LUT4_24: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w211, AD2=>r_gcount_w212, + AD1=>r_gcount_w213, AD0=>rcount_w14, DO0=>rcount_w11); + + LUT4_23: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w210, AD2=>r_gcount_w211, + AD1=>r_gcount_w212, AD0=>r_g2b_xor_cluster_0, + DO0=>rcount_w10); + + LUT4_22: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>rcount_w9); + + LUT4_21: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w28, AD0=>scuba_vlo, DO0=>rcount_w8); + + LUT4_20: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w27, AD0=>r_gcount_w28, DO0=>rcount_w7); + + LUT4_19: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w26, AD2=>r_gcount_w27, + AD1=>r_gcount_w28, AD0=>scuba_vlo, + DO0=>r_g2b_xor_cluster_2_1); + + LUT4_18: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2_1, AD0=>scuba_vlo, DO0=>rcount_w6); + + LUT4_17: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>rcount_w5); + + LUT4_16: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_gcount_w24, DO0=>rcount_w4); + + LUT4_15: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w23, AD2=>r_gcount_w24, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>r_g2b_xor_cluster_3_1); + + LUT4_14: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_g2b_xor_cluster_3_1, + DO0=>rcount_w3); + + LUT4_13: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w22, AD2=>r_gcount_w23, + AD1=>r_gcount_w24, AD0=>scuba_vlo, + DO0=>r_g2b_xor_cluster_3_2); + + LUT4_12: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_g2b_xor_cluster_3_2, + DO0=>rcount_w2); + + LUT4_11: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_g2b_xor_cluster_3, + DO0=>rcount_w1); + + LUT4_10: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w20, AD2=>r_gcount_w21, + AD1=>r_gcount_w22, AD0=>r_gcount_w23, DO0=>func_xor_inet); + + LUT4_9: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w24, AD2=>r_gcount_w25, + AD1=>r_gcount_w26, AD0=>r_gcount_w27, DO0=>func_xor_inet_1); + + LUT4_8: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w28, AD2=>r_gcount_w29, + AD1=>r_gcount_w210, AD0=>r_gcount_w211, DO0=>func_xor_inet_2); + + LUT4_7: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w212, AD2=>r_gcount_w213, + AD1=>r_gcount_w214, AD0=>r_gcount_w215, DO0=>func_xor_inet_3); + + LUT4_6: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w216, AD2=>scuba_vlo, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>func_xor_inet_4); + + LUT4_5: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>func_xor_inet, AD2=>func_xor_inet_1, + AD1=>func_xor_inet_2, AD0=>func_xor_inet_3, + DO0=>func_xor_inet_5); + + LUT4_4: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>func_xor_inet_5, AD2=>func_xor_inet_4, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>rcount_w0); + + XOR2_t0: XOR2 + port map (A=>wptr_15, B=>r_gcount_w216, Z=>wfill_sub_msb); + + LUT4_3: ROM16X1A + generic map (initval=> X"0410") + port map (AD3=>rptr_16, AD2=>rcount_16, AD1=>w_gcount_r215, + AD0=>scuba_vlo, DO0=>empty_cmp_set); + + LUT4_2: ROM16X1A + generic map (initval=> X"1004") + port map (AD3=>rptr_16, AD2=>rcount_16, AD1=>w_gcount_r215, + AD0=>scuba_vlo, DO0=>empty_cmp_clr); + + LUT4_1: ROM16X1A + generic map (initval=> X"0140") + port map (AD3=>wptr_15, AD2=>wcount_15, AD1=>r_gcount_w216, + AD0=>scuba_vlo, DO0=>full_cmp_set); + + LUT4_0: ROM16X1A + generic map (initval=> X"4001") + port map (AD3=>wptr_15, AD2=>wcount_15, AD1=>r_gcount_w216, + AD0=>scuba_vlo, DO0=>full_cmp_clr); + + pdp_ram_0_0_31: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec0_p00, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec1_r10, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_0_8, + DOB7=>mdout1_0_7, DOB6=>mdout1_0_6, DOB5=>mdout1_0_5, + DOB4=>mdout1_0_4, DOB3=>mdout1_0_3, DOB2=>mdout1_0_2, + DOB1=>mdout1_0_1, DOB0=>mdout1_0_0); + + pdp_ram_1_0_30: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec2_p01, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec3_r11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_1_8, + DOB7=>mdout1_1_7, DOB6=>mdout1_1_6, DOB5=>mdout1_1_5, + DOB4=>mdout1_1_4, DOB3=>mdout1_1_3, DOB2=>mdout1_1_2, + DOB1=>mdout1_1_1, DOB0=>mdout1_1_0); + + pdp_ram_2_0_29: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec4_p02, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec5_r12, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_2_8, + DOB7=>mdout1_2_7, DOB6=>mdout1_2_6, DOB5=>mdout1_2_5, + DOB4=>mdout1_2_4, DOB3=>mdout1_2_3, DOB2=>mdout1_2_2, + DOB1=>mdout1_2_1, DOB0=>mdout1_2_0); + + pdp_ram_3_0_28: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec6_p03, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec7_r13, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_3_8, + DOB7=>mdout1_3_7, DOB6=>mdout1_3_6, DOB5=>mdout1_3_5, + DOB4=>mdout1_3_4, DOB3=>mdout1_3_3, DOB2=>mdout1_3_2, + DOB1=>mdout1_3_1, DOB0=>mdout1_3_0); + + pdp_ram_4_0_27: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec8_p04, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec9_r14, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_4_8, + DOB7=>mdout1_4_7, DOB6=>mdout1_4_6, DOB5=>mdout1_4_5, + DOB4=>mdout1_4_4, DOB3=>mdout1_4_3, DOB2=>mdout1_4_2, + DOB1=>mdout1_4_1, DOB0=>mdout1_4_0); + + pdp_ram_5_0_26: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec10_p05, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec11_r15, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_5_8, + DOB7=>mdout1_5_7, DOB6=>mdout1_5_6, DOB5=>mdout1_5_5, + DOB4=>mdout1_5_4, DOB3=>mdout1_5_3, DOB2=>mdout1_5_2, + DOB1=>mdout1_5_1, DOB0=>mdout1_5_0); + + pdp_ram_6_0_25: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec12_p06, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec13_r16, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_6_8, + DOB7=>mdout1_6_7, DOB6=>mdout1_6_6, DOB5=>mdout1_6_5, + DOB4=>mdout1_6_4, DOB3=>mdout1_6_3, DOB2=>mdout1_6_2, + DOB1=>mdout1_6_1, DOB0=>mdout1_6_0); + + pdp_ram_7_0_24: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec14_p07, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec15_r17, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_7_8, + DOB7=>mdout1_7_7, DOB6=>mdout1_7_6, DOB5=>mdout1_7_5, + DOB4=>mdout1_7_4, DOB3=>mdout1_7_3, DOB2=>mdout1_7_2, + DOB1=>mdout1_7_1, DOB0=>mdout1_7_0); + + pdp_ram_8_0_23: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec16_p08, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec17_r18, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_8_8, + DOB7=>mdout1_8_7, DOB6=>mdout1_8_6, DOB5=>mdout1_8_5, + DOB4=>mdout1_8_4, DOB3=>mdout1_8_3, DOB2=>mdout1_8_2, + DOB1=>mdout1_8_1, DOB0=>mdout1_8_0); + + pdp_ram_9_0_22: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec18_p09, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec19_r19, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_9_8, + DOB7=>mdout1_9_7, DOB6=>mdout1_9_6, DOB5=>mdout1_9_5, + DOB4=>mdout1_9_4, DOB3=>mdout1_9_3, DOB2=>mdout1_9_2, + DOB1=>mdout1_9_1, DOB0=>mdout1_9_0); + + pdp_ram_10_0_21: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec20_p010, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec21_r110, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_10_8, + DOB7=>mdout1_10_7, DOB6=>mdout1_10_6, DOB5=>mdout1_10_5, + DOB4=>mdout1_10_4, DOB3=>mdout1_10_3, DOB2=>mdout1_10_2, + DOB1=>mdout1_10_1, DOB0=>mdout1_10_0); + + pdp_ram_11_0_20: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec22_p011, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec23_r111, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_11_8, + DOB7=>mdout1_11_7, DOB6=>mdout1_11_6, DOB5=>mdout1_11_5, + DOB4=>mdout1_11_4, DOB3=>mdout1_11_3, DOB2=>mdout1_11_2, + DOB1=>mdout1_11_1, DOB0=>mdout1_11_0); + + pdp_ram_12_0_19: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec24_p012, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec25_r112, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_12_8, + DOB7=>mdout1_12_7, DOB6=>mdout1_12_6, DOB5=>mdout1_12_5, + DOB4=>mdout1_12_4, DOB3=>mdout1_12_3, DOB2=>mdout1_12_2, + DOB1=>mdout1_12_1, DOB0=>mdout1_12_0); + + pdp_ram_13_0_18: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec26_p013, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec27_r113, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_13_8, + DOB7=>mdout1_13_7, DOB6=>mdout1_13_6, DOB5=>mdout1_13_5, + DOB4=>mdout1_13_4, DOB3=>mdout1_13_3, DOB2=>mdout1_13_2, + DOB1=>mdout1_13_1, DOB0=>mdout1_13_0); + + pdp_ram_14_0_17: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec28_p014, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec29_r114, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_14_8, + DOB7=>mdout1_14_7, DOB6=>mdout1_14_6, DOB5=>mdout1_14_5, + DOB4=>mdout1_14_4, DOB3=>mdout1_14_3, DOB2=>mdout1_14_2, + DOB1=>mdout1_14_1, DOB0=>mdout1_14_0); + + pdp_ram_15_0_16: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec30_p015, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec31_r115, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_15_8, + DOB7=>mdout1_15_7, DOB6=>mdout1_15_6, DOB5=>mdout1_15_5, + DOB4=>mdout1_15_4, DOB3=>mdout1_15_3, DOB2=>mdout1_15_2, + DOB1=>mdout1_15_1, DOB0=>mdout1_15_0); + + pdp_ram_16_0_15: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec32_p016, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec33_r116, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_16_8, + DOB7=>mdout1_16_7, DOB6=>mdout1_16_6, DOB5=>mdout1_16_5, + DOB4=>mdout1_16_4, DOB3=>mdout1_16_3, DOB2=>mdout1_16_2, + DOB1=>mdout1_16_1, DOB0=>mdout1_16_0); + + pdp_ram_17_0_14: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec34_p017, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec35_r117, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_17_8, + DOB7=>mdout1_17_7, DOB6=>mdout1_17_6, DOB5=>mdout1_17_5, + DOB4=>mdout1_17_4, DOB3=>mdout1_17_3, DOB2=>mdout1_17_2, + DOB1=>mdout1_17_1, DOB0=>mdout1_17_0); + + pdp_ram_18_0_13: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec36_p018, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec37_r118, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_18_8, + DOB7=>mdout1_18_7, DOB6=>mdout1_18_6, DOB5=>mdout1_18_5, + DOB4=>mdout1_18_4, DOB3=>mdout1_18_3, DOB2=>mdout1_18_2, + DOB1=>mdout1_18_1, DOB0=>mdout1_18_0); + + pdp_ram_19_0_12: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec38_p019, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec39_r119, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_19_8, + DOB7=>mdout1_19_7, DOB6=>mdout1_19_6, DOB5=>mdout1_19_5, + DOB4=>mdout1_19_4, DOB3=>mdout1_19_3, DOB2=>mdout1_19_2, + DOB1=>mdout1_19_1, DOB0=>mdout1_19_0); + + pdp_ram_20_0_11: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec40_p020, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec41_r120, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_20_8, + DOB7=>mdout1_20_7, DOB6=>mdout1_20_6, DOB5=>mdout1_20_5, + DOB4=>mdout1_20_4, DOB3=>mdout1_20_3, DOB2=>mdout1_20_2, + DOB1=>mdout1_20_1, DOB0=>mdout1_20_0); + + pdp_ram_21_0_10: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec42_p021, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec43_r121, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_21_8, + DOB7=>mdout1_21_7, DOB6=>mdout1_21_6, DOB5=>mdout1_21_5, + DOB4=>mdout1_21_4, DOB3=>mdout1_21_3, DOB2=>mdout1_21_2, + DOB1=>mdout1_21_1, DOB0=>mdout1_21_0); + + pdp_ram_22_0_9: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec44_p022, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec45_r122, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_22_8, + DOB7=>mdout1_22_7, DOB6=>mdout1_22_6, DOB5=>mdout1_22_5, + DOB4=>mdout1_22_4, DOB3=>mdout1_22_3, DOB2=>mdout1_22_2, + DOB1=>mdout1_22_1, DOB0=>mdout1_22_0); + + pdp_ram_23_0_8: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec46_p023, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec47_r123, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_23_8, + DOB7=>mdout1_23_7, DOB6=>mdout1_23_6, DOB5=>mdout1_23_5, + DOB4=>mdout1_23_4, DOB3=>mdout1_23_3, DOB2=>mdout1_23_2, + DOB1=>mdout1_23_1, DOB0=>mdout1_23_0); + + pdp_ram_24_0_7: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec48_p024, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec49_r124, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_24_8, + DOB7=>mdout1_24_7, DOB6=>mdout1_24_6, DOB5=>mdout1_24_5, + DOB4=>mdout1_24_4, DOB3=>mdout1_24_3, DOB2=>mdout1_24_2, + DOB1=>mdout1_24_1, DOB0=>mdout1_24_0); + + pdp_ram_25_0_6: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec50_p025, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec51_r125, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_25_8, + DOB7=>mdout1_25_7, DOB6=>mdout1_25_6, DOB5=>mdout1_25_5, + DOB4=>mdout1_25_4, DOB3=>mdout1_25_3, DOB2=>mdout1_25_2, + DOB1=>mdout1_25_1, DOB0=>mdout1_25_0); + + pdp_ram_26_0_5: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec52_p026, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec53_r126, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_26_8, + DOB7=>mdout1_26_7, DOB6=>mdout1_26_6, DOB5=>mdout1_26_5, + DOB4=>mdout1_26_4, DOB3=>mdout1_26_3, DOB2=>mdout1_26_2, + DOB1=>mdout1_26_1, DOB0=>mdout1_26_0); + + pdp_ram_27_0_4: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec54_p027, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec55_r127, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_27_8, + DOB7=>mdout1_27_7, DOB6=>mdout1_27_6, DOB5=>mdout1_27_5, + DOB4=>mdout1_27_4, DOB3=>mdout1_27_3, DOB2=>mdout1_27_2, + DOB1=>mdout1_27_1, DOB0=>mdout1_27_0); + + pdp_ram_28_0_3: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec56_p028, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec57_r128, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_28_8, + DOB7=>mdout1_28_7, DOB6=>mdout1_28_6, DOB5=>mdout1_28_5, + DOB4=>mdout1_28_4, DOB3=>mdout1_28_3, DOB2=>mdout1_28_2, + DOB1=>mdout1_28_1, DOB0=>mdout1_28_0); + + pdp_ram_29_0_2: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec58_p029, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec59_r129, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_29_8, + DOB7=>mdout1_29_7, DOB6=>mdout1_29_6, DOB5=>mdout1_29_5, + DOB4=>mdout1_29_4, DOB3=>mdout1_29_3, DOB2=>mdout1_29_2, + DOB1=>mdout1_29_1, DOB0=>mdout1_29_0); + + pdp_ram_30_0_1: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec60_p030, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec61_r130, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_30_8, + DOB7=>mdout1_30_7, DOB6=>mdout1_30_6, DOB5=>mdout1_30_5, + DOB4=>mdout1_30_4, DOB3=>mdout1_30_3, DOB2=>mdout1_30_2, + DOB1=>mdout1_30_1, DOB0=>mdout1_30_0); + + pdp_ram_31_0_0: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>dec62_p031, + RSTA=>Reset, DIB17=>scuba_vlo, DIB16=>scuba_vlo, + DIB15=>scuba_vlo, DIB14=>scuba_vlo, DIB13=>scuba_vlo, + DIB12=>scuba_vlo, DIB11=>scuba_vlo, DIB10=>scuba_vlo, + DIB9=>scuba_vlo, DIB8=>scuba_vlo, DIB7=>scuba_vlo, + DIB6=>scuba_vlo, DIB5=>scuba_vlo, DIB4=>scuba_vlo, + DIB3=>scuba_vlo, DIB2=>scuba_vlo, DIB1=>scuba_vlo, + DIB0=>scuba_vlo, ADB13=>rptr_10, ADB12=>rptr_9, + ADB11=>rptr_8, ADB10=>rptr_7, ADB9=>rptr_6, ADB8=>rptr_5, + ADB7=>rptr_4, ADB6=>rptr_3, ADB5=>rptr_2, ADB4=>rptr_1, + ADB3=>rptr_0, ADB2=>scuba_vlo, ADB1=>scuba_vlo, + ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, CLKB=>RdClock, + WEB=>scuba_vlo, CSB2=>scuba_vlo, CSB1=>scuba_vlo, + CSB0=>dec63_r131, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_31_8, + DOB7=>mdout1_31_7, DOB6=>mdout1_31_6, DOB5=>mdout1_31_5, + DOB4=>mdout1_31_4, DOB3=>mdout1_31_3, DOB2=>mdout1_31_2, + DOB1=>mdout1_31_1, DOB0=>mdout1_31_0); + + FF_187: FD1P3BX + port map (D=>iwcount_0, SP=>wren_i, CK=>WrClock, PD=>Reset, + Q=>wcount_0); + + FF_186: FD1P3DX + port map (D=>iwcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_1); + + FF_185: FD1P3DX + port map (D=>iwcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_2); + + FF_184: FD1P3DX + port map (D=>iwcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_3); + + FF_183: FD1P3DX + port map (D=>iwcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_4); + + FF_182: FD1P3DX + port map (D=>iwcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_5); + + FF_181: FD1P3DX + port map (D=>iwcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_6); + + FF_180: FD1P3DX + port map (D=>iwcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_7); + + FF_179: FD1P3DX + port map (D=>iwcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_8); + + FF_178: FD1P3DX + port map (D=>iwcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_9); + + FF_177: FD1P3DX + port map (D=>iwcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_10); + + FF_176: FD1P3DX + port map (D=>iwcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_11); + + FF_175: FD1P3DX + port map (D=>iwcount_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_12); + + FF_174: FD1P3DX + port map (D=>iwcount_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_13); + + FF_173: FD1P3DX + port map (D=>iwcount_14, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_14); + + FF_172: FD1P3DX + port map (D=>iwcount_15, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_15); + + FF_171: FD1P3DX + port map (D=>w_gdata_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_0); + + FF_170: FD1P3DX + port map (D=>w_gdata_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_1); + + FF_169: FD1P3DX + port map (D=>w_gdata_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_2); + + FF_168: FD1P3DX + port map (D=>w_gdata_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_3); + + FF_167: FD1P3DX + port map (D=>w_gdata_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_4); + + FF_166: FD1P3DX + port map (D=>w_gdata_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_5); + + FF_165: FD1P3DX + port map (D=>w_gdata_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_6); + + FF_164: FD1P3DX + port map (D=>w_gdata_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_7); + + FF_163: FD1P3DX + port map (D=>w_gdata_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_8); + + FF_162: FD1P3DX + port map (D=>w_gdata_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_9); + + FF_161: FD1P3DX + port map (D=>w_gdata_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_10); + + FF_160: FD1P3DX + port map (D=>w_gdata_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_11); + + FF_159: FD1P3DX + port map (D=>w_gdata_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_12); + + FF_158: FD1P3DX + port map (D=>w_gdata_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_13); + + FF_157: FD1P3DX + port map (D=>w_gdata_14, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_14); + + FF_156: FD1P3DX + port map (D=>wcount_15, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_15); + + FF_155: FD1P3DX + port map (D=>wcount_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_0); + + FF_154: FD1P3DX + port map (D=>wcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_1); + + FF_153: FD1P3DX + port map (D=>wcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_2); + + FF_152: FD1P3DX + port map (D=>wcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_3); + + FF_151: FD1P3DX + port map (D=>wcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_4); + + FF_150: FD1P3DX + port map (D=>wcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_5); + + FF_149: FD1P3DX + port map (D=>wcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_6); + + FF_148: FD1P3DX + port map (D=>wcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_7); + + FF_147: FD1P3DX + port map (D=>wcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_8); + + FF_146: FD1P3DX + port map (D=>wcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_9); + + FF_145: FD1P3DX + port map (D=>wcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_10); + + FF_144: FD1P3DX + port map (D=>wcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_11); + + FF_143: FD1P3DX + port map (D=>wcount_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_12); + + FF_142: FD1P3DX + port map (D=>wcount_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_13); + + FF_141: FD1P3DX + port map (D=>wcount_14, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_14); + + FF_140: FD1P3DX + port map (D=>wcount_15, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_15); + + FF_139: FD1P3BX + port map (D=>ircount_0, SP=>rden_i, CK=>RdClock, PD=>rRst, + Q=>rcount_0); + + FF_138: FD1P3DX + port map (D=>ircount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_1); + + FF_137: FD1P3DX + port map (D=>ircount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_2); + + FF_136: FD1P3DX + port map (D=>ircount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_3); + + FF_135: FD1P3DX + port map (D=>ircount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_4); + + FF_134: FD1P3DX + port map (D=>ircount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_5); + + FF_133: FD1P3DX + port map (D=>ircount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_6); + + FF_132: FD1P3DX + port map (D=>ircount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_7); + + FF_131: FD1P3DX + port map (D=>ircount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_8); + + FF_130: FD1P3DX + port map (D=>ircount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_9); + + FF_129: FD1P3DX + port map (D=>ircount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_10); + + FF_128: FD1P3DX + port map (D=>ircount_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_11); + + FF_127: FD1P3DX + port map (D=>ircount_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_12); + + FF_126: FD1P3DX + port map (D=>ircount_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_13); + + FF_125: FD1P3DX + port map (D=>ircount_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_14); + + FF_124: FD1P3DX + port map (D=>ircount_15, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_15); + + FF_123: FD1P3DX + port map (D=>ircount_16, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_16); + + FF_122: FD1P3DX + port map (D=>r_gdata_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_0); + + FF_121: FD1P3DX + port map (D=>r_gdata_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_1); + + FF_120: FD1P3DX + port map (D=>r_gdata_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_2); + + FF_119: FD1P3DX + port map (D=>r_gdata_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_3); + + FF_118: FD1P3DX + port map (D=>r_gdata_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_4); + + FF_117: FD1P3DX + port map (D=>r_gdata_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_5); + + FF_116: FD1P3DX + port map (D=>r_gdata_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_6); + + FF_115: FD1P3DX + port map (D=>r_gdata_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_7); + + FF_114: FD1P3DX + port map (D=>r_gdata_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_8); + + FF_113: FD1P3DX + port map (D=>r_gdata_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_9); + + FF_112: FD1P3DX + port map (D=>r_gdata_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_10); + + FF_111: FD1P3DX + port map (D=>r_gdata_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_11); + + FF_110: FD1P3DX + port map (D=>r_gdata_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_12); + + FF_109: FD1P3DX + port map (D=>r_gdata_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_13); + + FF_108: FD1P3DX + port map (D=>r_gdata_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_14); + + FF_107: FD1P3DX + port map (D=>r_gdata_15, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_15); + + FF_106: FD1P3DX + port map (D=>rcount_16, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_16); + + FF_105: FD1P3DX + port map (D=>rcount_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_0); + + FF_104: FD1P3DX + port map (D=>rcount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_1); + + FF_103: FD1P3DX + port map (D=>rcount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_2); + + FF_102: FD1P3DX + port map (D=>rcount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_3); + + FF_101: FD1P3DX + port map (D=>rcount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_4); + + FF_100: FD1P3DX + port map (D=>rcount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_5); + + FF_99: FD1P3DX + port map (D=>rcount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_6); + + FF_98: FD1P3DX + port map (D=>rcount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_7); + + FF_97: FD1P3DX + port map (D=>rcount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_8); + + FF_96: FD1P3DX + port map (D=>rcount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_9); + + FF_95: FD1P3DX + port map (D=>rcount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_10); + + FF_94: FD1P3DX + port map (D=>rcount_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_11); + + FF_93: FD1P3DX + port map (D=>rcount_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_12); + + FF_92: FD1P3DX + port map (D=>rcount_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_13); + + FF_91: FD1P3DX + port map (D=>rcount_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_14); + + FF_90: FD1P3DX + port map (D=>rcount_15, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_15); + + FF_89: FD1P3DX + port map (D=>rcount_16, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_16); + + FF_88: FD1P3DX + port map (D=>rptr_11, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_11_ff); + + FF_87: FD1P3DX + port map (D=>rptr_12, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_12_ff); + + FF_86: FD1P3DX + port map (D=>rptr_13, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_13_ff); + + FF_85: FD1P3DX + port map (D=>rptr_14, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_14_ff); + + FF_84: FD1P3DX + port map (D=>rptr_15, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_15_ff); + + FF_83: FD1S3DX + port map (D=>w_gcount_0, CK=>RdClock, CD=>Reset, Q=>w_gcount_r0); + + FF_82: FD1S3DX + port map (D=>w_gcount_1, CK=>RdClock, CD=>Reset, Q=>w_gcount_r1); + + FF_81: FD1S3DX + port map (D=>w_gcount_2, CK=>RdClock, CD=>Reset, Q=>w_gcount_r2); + + FF_80: FD1S3DX + port map (D=>w_gcount_3, CK=>RdClock, CD=>Reset, Q=>w_gcount_r3); + + FF_79: FD1S3DX + port map (D=>w_gcount_4, CK=>RdClock, CD=>Reset, Q=>w_gcount_r4); + + FF_78: FD1S3DX + port map (D=>w_gcount_5, CK=>RdClock, CD=>Reset, Q=>w_gcount_r5); + + FF_77: FD1S3DX + port map (D=>w_gcount_6, CK=>RdClock, CD=>Reset, Q=>w_gcount_r6); + + FF_76: FD1S3DX + port map (D=>w_gcount_7, CK=>RdClock, CD=>Reset, Q=>w_gcount_r7); + + FF_75: FD1S3DX + port map (D=>w_gcount_8, CK=>RdClock, CD=>Reset, Q=>w_gcount_r8); + + FF_74: FD1S3DX + port map (D=>w_gcount_9, CK=>RdClock, CD=>Reset, Q=>w_gcount_r9); + + FF_73: FD1S3DX + port map (D=>w_gcount_10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r10); + + FF_72: FD1S3DX + port map (D=>w_gcount_11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r11); + + FF_71: FD1S3DX + port map (D=>w_gcount_12, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r12); + + FF_70: FD1S3DX + port map (D=>w_gcount_13, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r13); + + FF_69: FD1S3DX + port map (D=>w_gcount_14, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r14); + + FF_68: FD1S3DX + port map (D=>w_gcount_15, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r15); + + FF_67: FD1S3DX + port map (D=>r_gcount_0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w0); + + FF_66: FD1S3DX + port map (D=>r_gcount_1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w1); + + FF_65: FD1S3DX + port map (D=>r_gcount_2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w2); + + FF_64: FD1S3DX + port map (D=>r_gcount_3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w3); + + FF_63: FD1S3DX + port map (D=>r_gcount_4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w4); + + FF_62: FD1S3DX + port map (D=>r_gcount_5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w5); + + FF_61: FD1S3DX + port map (D=>r_gcount_6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w6); + + FF_60: FD1S3DX + port map (D=>r_gcount_7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w7); + + FF_59: FD1S3DX + port map (D=>r_gcount_8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w8); + + FF_58: FD1S3DX + port map (D=>r_gcount_9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w9); + + FF_57: FD1S3DX + port map (D=>r_gcount_10, CK=>WrClock, CD=>rRst, Q=>r_gcount_w10); + + FF_56: FD1S3DX + port map (D=>r_gcount_11, CK=>WrClock, CD=>rRst, Q=>r_gcount_w11); + + FF_55: FD1S3DX + port map (D=>r_gcount_12, CK=>WrClock, CD=>rRst, Q=>r_gcount_w12); + + FF_54: FD1S3DX + port map (D=>r_gcount_13, CK=>WrClock, CD=>rRst, Q=>r_gcount_w13); + + FF_53: FD1S3DX + port map (D=>r_gcount_14, CK=>WrClock, CD=>rRst, Q=>r_gcount_w14); + + FF_52: FD1S3DX + port map (D=>r_gcount_15, CK=>WrClock, CD=>rRst, Q=>r_gcount_w15); + + FF_51: FD1S3DX + port map (D=>r_gcount_16, CK=>WrClock, CD=>rRst, Q=>r_gcount_w16); + + FF_50: FD1S3DX + port map (D=>w_gcount_r0, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r20); + + FF_49: FD1S3DX + port map (D=>w_gcount_r1, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r21); + + FF_48: FD1S3DX + port map (D=>w_gcount_r2, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r22); + + FF_47: FD1S3DX + port map (D=>w_gcount_r3, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r23); + + FF_46: FD1S3DX + port map (D=>w_gcount_r4, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r24); + + FF_45: FD1S3DX + port map (D=>w_gcount_r5, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r25); + + FF_44: FD1S3DX + port map (D=>w_gcount_r6, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r26); + + FF_43: FD1S3DX + port map (D=>w_gcount_r7, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r27); + + FF_42: FD1S3DX + port map (D=>w_gcount_r8, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r28); + + FF_41: FD1S3DX + port map (D=>w_gcount_r9, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r29); + + FF_40: FD1S3DX + port map (D=>w_gcount_r10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r210); + + FF_39: FD1S3DX + port map (D=>w_gcount_r11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r211); + + FF_38: FD1S3DX + port map (D=>w_gcount_r12, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r212); + + FF_37: FD1S3DX + port map (D=>w_gcount_r13, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r213); + + FF_36: FD1S3DX + port map (D=>w_gcount_r14, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r214); + + FF_35: FD1S3DX + port map (D=>w_gcount_r15, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r215); + + FF_34: FD1S3DX + port map (D=>r_gcount_w0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w20); + + FF_33: FD1S3DX + port map (D=>r_gcount_w1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w21); + + FF_32: FD1S3DX + port map (D=>r_gcount_w2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w22); + + FF_31: FD1S3DX + port map (D=>r_gcount_w3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w23); + + FF_30: FD1S3DX + port map (D=>r_gcount_w4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w24); + + FF_29: FD1S3DX + port map (D=>r_gcount_w5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w25); + + FF_28: FD1S3DX + port map (D=>r_gcount_w6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w26); + + FF_27: FD1S3DX + port map (D=>r_gcount_w7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w27); + + FF_26: FD1S3DX + port map (D=>r_gcount_w8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w28); + + FF_25: FD1S3DX + port map (D=>r_gcount_w9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w29); + + FF_24: FD1S3DX + port map (D=>r_gcount_w10, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w210); + + FF_23: FD1S3DX + port map (D=>r_gcount_w11, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w211); + + FF_22: FD1S3DX + port map (D=>r_gcount_w12, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w212); + + FF_21: FD1S3DX + port map (D=>r_gcount_w13, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w213); + + FF_20: FD1S3DX + port map (D=>r_gcount_w14, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w214); + + FF_19: FD1S3DX + port map (D=>r_gcount_w15, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w215); + + FF_18: FD1S3DX + port map (D=>r_gcount_w16, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w216); + + FF_17: FD1S3DX + port map (D=>wfill_sub_0, CK=>WrClock, CD=>Reset, Q=>WCNT(0)); + + FF_16: FD1S3DX + port map (D=>wfill_sub_1, CK=>WrClock, CD=>Reset, Q=>WCNT(1)); + + FF_15: FD1S3DX + port map (D=>wfill_sub_2, CK=>WrClock, CD=>Reset, Q=>WCNT(2)); + + FF_14: FD1S3DX + port map (D=>wfill_sub_3, CK=>WrClock, CD=>Reset, Q=>WCNT(3)); + + FF_13: FD1S3DX + port map (D=>wfill_sub_4, CK=>WrClock, CD=>Reset, Q=>WCNT(4)); + + FF_12: FD1S3DX + port map (D=>wfill_sub_5, CK=>WrClock, CD=>Reset, Q=>WCNT(5)); + + FF_11: FD1S3DX + port map (D=>wfill_sub_6, CK=>WrClock, CD=>Reset, Q=>WCNT(6)); + + FF_10: FD1S3DX + port map (D=>wfill_sub_7, CK=>WrClock, CD=>Reset, Q=>WCNT(7)); + + FF_9: FD1S3DX + port map (D=>wfill_sub_8, CK=>WrClock, CD=>Reset, Q=>WCNT(8)); + + FF_8: FD1S3DX + port map (D=>wfill_sub_9, CK=>WrClock, CD=>Reset, Q=>WCNT(9)); + + FF_7: FD1S3DX + port map (D=>wfill_sub_10, CK=>WrClock, CD=>Reset, Q=>WCNT(10)); + + FF_6: FD1S3DX + port map (D=>wfill_sub_11, CK=>WrClock, CD=>Reset, Q=>WCNT(11)); + + FF_5: FD1S3DX + port map (D=>wfill_sub_12, CK=>WrClock, CD=>Reset, Q=>WCNT(12)); + + FF_4: FD1S3DX + port map (D=>wfill_sub_13, CK=>WrClock, CD=>Reset, Q=>WCNT(13)); + + FF_3: FD1S3DX + port map (D=>wfill_sub_14, CK=>WrClock, CD=>Reset, Q=>WCNT(14)); + + FF_2: FD1S3DX + port map (D=>wfill_sub_15, CK=>WrClock, CD=>Reset, Q=>WCNT(15)); + + FF_1: FD1S3BX + port map (D=>empty_d, CK=>RdClock, PD=>rRst, Q=>empty_i); + + FF_0: FD1S3DX + port map (D=>full_d, CK=>WrClock, CD=>Reset, Q=>full_i); + + w_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>w_gctr_ci); + + w_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>w_gctr_ci, S0=>iwcount_0, S1=>iwcount_1, + COUT=>co0); + + w_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0, S0=>iwcount_2, S1=>iwcount_3, + COUT=>co1); + + w_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1, S0=>iwcount_4, S1=>iwcount_5, + COUT=>co2); + + w_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2, S0=>iwcount_6, S1=>iwcount_7, + COUT=>co3); + + w_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3, S0=>iwcount_8, S1=>iwcount_9, + COUT=>co4); + + w_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_10, A1=>wcount_11, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4, S0=>iwcount_10, S1=>iwcount_11, + COUT=>co5); + + w_gctr_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_12, A1=>wcount_13, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5, S0=>iwcount_12, S1=>iwcount_13, + COUT=>co6); + + w_gctr_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_14, A1=>wcount_15, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6, S0=>iwcount_14, S1=>iwcount_15, + COUT=>co7); + + r_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>r_gctr_ci); + + r_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>r_gctr_ci, S0=>ircount_0, S1=>ircount_1, + COUT=>co0_1); + + r_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_1, S0=>ircount_2, S1=>ircount_3, + COUT=>co1_1); + + r_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_1, S0=>ircount_4, S1=>ircount_5, + COUT=>co2_1); + + r_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_1, S0=>ircount_6, S1=>ircount_7, + COUT=>co3_1); + + r_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_1, S0=>ircount_8, S1=>ircount_9, + COUT=>co4_1); + + r_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_10, A1=>rcount_11, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_1, S0=>ircount_10, S1=>ircount_11, + COUT=>co5_1); + + r_gctr_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_12, A1=>rcount_13, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_1, S0=>ircount_12, S1=>ircount_13, + COUT=>co6_1); + + r_gctr_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_14, A1=>rcount_15, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_1, S0=>ircount_14, S1=>ircount_15, + COUT=>co7_1); + + r_gctr_8: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_16, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co7_1, S0=>ircount_16, S1=>open, + COUT=>co8); + + mux_8: MUX321 + port map (D0=>mdout1_0_0, D1=>mdout1_1_0, D2=>mdout1_2_0, + D3=>mdout1_3_0, D4=>mdout1_4_0, D5=>mdout1_5_0, + D6=>mdout1_6_0, D7=>mdout1_7_0, D8=>mdout1_8_0, + D9=>mdout1_9_0, D10=>mdout1_10_0, D11=>mdout1_11_0, + D12=>mdout1_12_0, D13=>mdout1_13_0, D14=>mdout1_14_0, + D15=>mdout1_15_0, D16=>mdout1_16_0, D17=>mdout1_17_0, + D18=>mdout1_18_0, D19=>mdout1_19_0, D20=>mdout1_20_0, + D21=>mdout1_21_0, D22=>mdout1_22_0, D23=>mdout1_23_0, + D24=>mdout1_24_0, D25=>mdout1_25_0, D26=>mdout1_26_0, + D27=>mdout1_27_0, D28=>mdout1_28_0, D29=>mdout1_29_0, + D30=>mdout1_30_0, D31=>mdout1_31_0, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(0)); + + mux_7: MUX321 + port map (D0=>mdout1_0_1, D1=>mdout1_1_1, D2=>mdout1_2_1, + D3=>mdout1_3_1, D4=>mdout1_4_1, D5=>mdout1_5_1, + D6=>mdout1_6_1, D7=>mdout1_7_1, D8=>mdout1_8_1, + D9=>mdout1_9_1, D10=>mdout1_10_1, D11=>mdout1_11_1, + D12=>mdout1_12_1, D13=>mdout1_13_1, D14=>mdout1_14_1, + D15=>mdout1_15_1, D16=>mdout1_16_1, D17=>mdout1_17_1, + D18=>mdout1_18_1, D19=>mdout1_19_1, D20=>mdout1_20_1, + D21=>mdout1_21_1, D22=>mdout1_22_1, D23=>mdout1_23_1, + D24=>mdout1_24_1, D25=>mdout1_25_1, D26=>mdout1_26_1, + D27=>mdout1_27_1, D28=>mdout1_28_1, D29=>mdout1_29_1, + D30=>mdout1_30_1, D31=>mdout1_31_1, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(1)); + + mux_6: MUX321 + port map (D0=>mdout1_0_2, D1=>mdout1_1_2, D2=>mdout1_2_2, + D3=>mdout1_3_2, D4=>mdout1_4_2, D5=>mdout1_5_2, + D6=>mdout1_6_2, D7=>mdout1_7_2, D8=>mdout1_8_2, + D9=>mdout1_9_2, D10=>mdout1_10_2, D11=>mdout1_11_2, + D12=>mdout1_12_2, D13=>mdout1_13_2, D14=>mdout1_14_2, + D15=>mdout1_15_2, D16=>mdout1_16_2, D17=>mdout1_17_2, + D18=>mdout1_18_2, D19=>mdout1_19_2, D20=>mdout1_20_2, + D21=>mdout1_21_2, D22=>mdout1_22_2, D23=>mdout1_23_2, + D24=>mdout1_24_2, D25=>mdout1_25_2, D26=>mdout1_26_2, + D27=>mdout1_27_2, D28=>mdout1_28_2, D29=>mdout1_29_2, + D30=>mdout1_30_2, D31=>mdout1_31_2, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(2)); + + mux_5: MUX321 + port map (D0=>mdout1_0_3, D1=>mdout1_1_3, D2=>mdout1_2_3, + D3=>mdout1_3_3, D4=>mdout1_4_3, D5=>mdout1_5_3, + D6=>mdout1_6_3, D7=>mdout1_7_3, D8=>mdout1_8_3, + D9=>mdout1_9_3, D10=>mdout1_10_3, D11=>mdout1_11_3, + D12=>mdout1_12_3, D13=>mdout1_13_3, D14=>mdout1_14_3, + D15=>mdout1_15_3, D16=>mdout1_16_3, D17=>mdout1_17_3, + D18=>mdout1_18_3, D19=>mdout1_19_3, D20=>mdout1_20_3, + D21=>mdout1_21_3, D22=>mdout1_22_3, D23=>mdout1_23_3, + D24=>mdout1_24_3, D25=>mdout1_25_3, D26=>mdout1_26_3, + D27=>mdout1_27_3, D28=>mdout1_28_3, D29=>mdout1_29_3, + D30=>mdout1_30_3, D31=>mdout1_31_3, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(3)); + + mux_4: MUX321 + port map (D0=>mdout1_0_4, D1=>mdout1_1_4, D2=>mdout1_2_4, + D3=>mdout1_3_4, D4=>mdout1_4_4, D5=>mdout1_5_4, + D6=>mdout1_6_4, D7=>mdout1_7_4, D8=>mdout1_8_4, + D9=>mdout1_9_4, D10=>mdout1_10_4, D11=>mdout1_11_4, + D12=>mdout1_12_4, D13=>mdout1_13_4, D14=>mdout1_14_4, + D15=>mdout1_15_4, D16=>mdout1_16_4, D17=>mdout1_17_4, + D18=>mdout1_18_4, D19=>mdout1_19_4, D20=>mdout1_20_4, + D21=>mdout1_21_4, D22=>mdout1_22_4, D23=>mdout1_23_4, + D24=>mdout1_24_4, D25=>mdout1_25_4, D26=>mdout1_26_4, + D27=>mdout1_27_4, D28=>mdout1_28_4, D29=>mdout1_29_4, + D30=>mdout1_30_4, D31=>mdout1_31_4, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(4)); + + mux_3: MUX321 + port map (D0=>mdout1_0_5, D1=>mdout1_1_5, D2=>mdout1_2_5, + D3=>mdout1_3_5, D4=>mdout1_4_5, D5=>mdout1_5_5, + D6=>mdout1_6_5, D7=>mdout1_7_5, D8=>mdout1_8_5, + D9=>mdout1_9_5, D10=>mdout1_10_5, D11=>mdout1_11_5, + D12=>mdout1_12_5, D13=>mdout1_13_5, D14=>mdout1_14_5, + D15=>mdout1_15_5, D16=>mdout1_16_5, D17=>mdout1_17_5, + D18=>mdout1_18_5, D19=>mdout1_19_5, D20=>mdout1_20_5, + D21=>mdout1_21_5, D22=>mdout1_22_5, D23=>mdout1_23_5, + D24=>mdout1_24_5, D25=>mdout1_25_5, D26=>mdout1_26_5, + D27=>mdout1_27_5, D28=>mdout1_28_5, D29=>mdout1_29_5, + D30=>mdout1_30_5, D31=>mdout1_31_5, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(5)); + + mux_2: MUX321 + port map (D0=>mdout1_0_6, D1=>mdout1_1_6, D2=>mdout1_2_6, + D3=>mdout1_3_6, D4=>mdout1_4_6, D5=>mdout1_5_6, + D6=>mdout1_6_6, D7=>mdout1_7_6, D8=>mdout1_8_6, + D9=>mdout1_9_6, D10=>mdout1_10_6, D11=>mdout1_11_6, + D12=>mdout1_12_6, D13=>mdout1_13_6, D14=>mdout1_14_6, + D15=>mdout1_15_6, D16=>mdout1_16_6, D17=>mdout1_17_6, + D18=>mdout1_18_6, D19=>mdout1_19_6, D20=>mdout1_20_6, + D21=>mdout1_21_6, D22=>mdout1_22_6, D23=>mdout1_23_6, + D24=>mdout1_24_6, D25=>mdout1_25_6, D26=>mdout1_26_6, + D27=>mdout1_27_6, D28=>mdout1_28_6, D29=>mdout1_29_6, + D30=>mdout1_30_6, D31=>mdout1_31_6, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(6)); + + mux_1: MUX321 + port map (D0=>mdout1_0_7, D1=>mdout1_1_7, D2=>mdout1_2_7, + D3=>mdout1_3_7, D4=>mdout1_4_7, D5=>mdout1_5_7, + D6=>mdout1_6_7, D7=>mdout1_7_7, D8=>mdout1_8_7, + D9=>mdout1_9_7, D10=>mdout1_10_7, D11=>mdout1_11_7, + D12=>mdout1_12_7, D13=>mdout1_13_7, D14=>mdout1_14_7, + D15=>mdout1_15_7, D16=>mdout1_16_7, D17=>mdout1_17_7, + D18=>mdout1_18_7, D19=>mdout1_19_7, D20=>mdout1_20_7, + D21=>mdout1_21_7, D22=>mdout1_22_7, D23=>mdout1_23_7, + D24=>mdout1_24_7, D25=>mdout1_25_7, D26=>mdout1_26_7, + D27=>mdout1_27_7, D28=>mdout1_28_7, D29=>mdout1_29_7, + D30=>mdout1_30_7, D31=>mdout1_31_7, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(7)); + + mux_0: MUX321 + port map (D0=>mdout1_0_8, D1=>mdout1_1_8, D2=>mdout1_2_8, + D3=>mdout1_3_8, D4=>mdout1_4_8, D5=>mdout1_5_8, + D6=>mdout1_6_8, D7=>mdout1_7_8, D8=>mdout1_8_8, + D9=>mdout1_9_8, D10=>mdout1_10_8, D11=>mdout1_11_8, + D12=>mdout1_12_8, D13=>mdout1_13_8, D14=>mdout1_14_8, + D15=>mdout1_15_8, D16=>mdout1_16_8, D17=>mdout1_17_8, + D18=>mdout1_18_8, D19=>mdout1_19_8, D20=>mdout1_20_8, + D21=>mdout1_21_8, D22=>mdout1_22_8, D23=>mdout1_23_8, + D24=>mdout1_24_8, D25=>mdout1_25_8, D26=>mdout1_26_8, + D27=>mdout1_27_8, D28=>mdout1_28_8, D29=>mdout1_29_8, + D30=>mdout1_30_8, D31=>mdout1_31_8, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, SD4=>rptr_14_ff, + SD5=>rptr_15_ff, Z=>Q(8)); + + precin_inst812: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"0000", + INIT0=> X"0000") + port map (A0=>scuba_vhi, A1=>scuba_vhi, B0=>scuba_vhi, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>precin); + + wfill_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>scuba_vhi, A1=>wptr_0, B0=>scuba_vlo, + B1=>rcount_w1, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>precin, S0=>open, S1=>wfill_sub_0, + COUT=>co0_2); + + wfill_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_1, A1=>wptr_2, B0=>rcount_w2, B1=>rcount_w3, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co0_2, S0=>wfill_sub_1, S1=>wfill_sub_2, COUT=>co1_2); + + wfill_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_3, A1=>wptr_4, B0=>rcount_w4, B1=>rcount_w5, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co1_2, S0=>wfill_sub_3, S1=>wfill_sub_4, COUT=>co2_2); + + wfill_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_5, A1=>wptr_6, B0=>rcount_w6, B1=>rcount_w7, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co2_2, S0=>wfill_sub_5, S1=>wfill_sub_6, COUT=>co3_2); + + wfill_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_7, A1=>wptr_8, B0=>rcount_w8, B1=>rcount_w9, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co3_2, S0=>wfill_sub_7, S1=>wfill_sub_8, COUT=>co4_2); + + wfill_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_9, A1=>wptr_10, B0=>rcount_w10, + B1=>rcount_w11, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_2, S0=>wfill_sub_9, S1=>wfill_sub_10, + COUT=>co5_2); + + wfill_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_11, A1=>wptr_12, B0=>rcount_w12, + B1=>r_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co5_2, S0=>wfill_sub_11, + S1=>wfill_sub_12, COUT=>co6_2); + + wfill_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_13, A1=>wptr_14, B0=>rcount_w14, + B1=>rcount_w15, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_2, S0=>wfill_sub_13, + S1=>wfill_sub_14, COUT=>co7_2); + + wfill_8: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wfill_sub_msb, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co7_2, S0=>wfill_sub_15, S1=>open, + COUT=>open); + + empty_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>rden_i, B0=>scuba_vlo, B1=>rden_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci); + + empty_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>scuba_vlo, + B1=>wcount_r0, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci, S0=>open, S1=>open, COUT=>co0_3); + + empty_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>wcount_r1, + B1=>wcount_r2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_3, S0=>open, S1=>open, COUT=>co1_3); + + empty_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>wcount_r3, + B1=>wcount_r4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_3, S0=>open, S1=>open, COUT=>co2_3); + + empty_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>wcount_r5, + B1=>wcount_r6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_3, S0=>open, S1=>open, COUT=>co3_3); + + empty_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>wcount_r7, + B1=>wcount_r8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_3, S0=>open, S1=>open, COUT=>co4_3); + + empty_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_10, A1=>rcount_11, B0=>wcount_r9, + B1=>wcount_r10, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_3, S0=>open, S1=>open, COUT=>co5_3); + + empty_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_12, A1=>rcount_13, B0=>wcount_r11, + B1=>w_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co5_3, S0=>open, S1=>open, + COUT=>co6_3); + + empty_cmp_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_14, A1=>rcount_15, B0=>wcount_r13, + B1=>wcount_r14, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_3, S0=>open, S1=>open, COUT=>co7_3); + + empty_cmp_8: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>empty_cmp_set, A1=>scuba_vlo, B0=>empty_cmp_clr, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co7_3, S0=>open, S1=>open, + COUT=>empty_d_c); + + a0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>empty_d_c, S0=>empty_d, S1=>open, + COUT=>open); + + full_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>wren_i, B0=>scuba_vlo, B1=>wren_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci_1); + + full_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>rcount_w1, + B1=>rcount_w2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci_1, S0=>open, S1=>open, + COUT=>co0_4); + + full_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>rcount_w3, + B1=>rcount_w4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_4, S0=>open, S1=>open, COUT=>co1_4); + + full_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>rcount_w5, + B1=>rcount_w6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_4, S0=>open, S1=>open, COUT=>co2_4); + + full_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>rcount_w7, + B1=>rcount_w8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_4, S0=>open, S1=>open, COUT=>co3_4); + + full_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>rcount_w9, + B1=>rcount_w10, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_4, S0=>open, S1=>open, COUT=>co4_4); + + full_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_10, A1=>wcount_11, B0=>rcount_w11, + B1=>rcount_w12, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_4, S0=>open, S1=>open, COUT=>co5_4); + + full_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_12, A1=>wcount_13, B0=>r_g2b_xor_cluster_0, + B1=>rcount_w14, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_4, S0=>open, S1=>open, COUT=>co6_4); + + full_cmp_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_14, A1=>full_cmp_set, B0=>rcount_w15, + B1=>full_cmp_clr, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co6_4, S0=>open, S1=>open, + COUT=>full_d_c); + + scuba_vhi_inst: VHI + port map (Z=>scuba_vhi); + + scuba_vlo_inst: VLO + port map (Z=>scuba_vlo); + + a1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>full_d_c, S0=>full_d, S1=>open, + COUT=>open); + + Empty <= empty_i; + Full <= full_i; +end Structure; diff --git a/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.lpc b/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.lpc new file mode 100644 index 0000000..aef78ed --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.lpc @@ -0,0 +1,53 @@ +[Device] +Family=ecp5um +PartType=LFE5UM-85F +PartName=LFE5UM-85F-8BG756C +SpeedGrade=8 +Package=CABGA756 +OperatingCondition=COM +Status=P + +[IP] +VendorName=Lattice Semiconductor Corporation +CoreType=LPM +CoreStatus=Demo +CoreName=FIFO_DC +CoreRevision=5.8 +ModuleName=fifo_8kx18x9_wcnt +SourceFormat=vhdl +ParameterFileVersion=1.0 +Date=04/30/2019 +Time=10:17:20 + +[Parameters] +Verilog=0 +VHDL=1 +EDIF=1 +Destination=Synplicity +Expression=BusA(0 to 7) +Order=Big Endian [MSB:LSB] +IO=0 +FIFOImp=EBR Based +Depth=8192 +Width=18 +RDepth=16384 +RWidth=9 +regout=0 +ClockEn=0 +CtrlByRdEn=0 +EmpFlg=1 +PeMode=Dynamic - Single Threshold +PeAssert=10 +PeDeassert=12 +FullFlg=1 +PfMode=Dynamic - Single Threshold +PfAssert=508 +PfDeassert=506 +Reset=Async +Reset1=Sync +RDataCount=0 +WDataCount=1 +EnECC=0 + +[Command] +cmd_line= -w -n fifo_8kx18x9_wcnt -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 8192 -width 18 -rwidth 9 -reset_rel SYNC -pe 0 -pf 0 -fill diff --git a/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.vhd b/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.vhd new file mode 100644 index 0000000..4dd9372 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/fifo_8kx18x9_wcnt.vhd @@ -0,0 +1,2772 @@ +-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.10.3.144 +-- Module Version: 5.8 +--/home/soft/lattice/diamond/3.10_x64/ispfpga/bin/lin64/scuba -w -n fifo_8kx18x9_wcnt -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ebfifo -depth 8192 -width 18 -rwidth 9 -reset_rel SYNC -pe 0 -pf 0 -fill -fdc /home/adrian/git/trb5sc/template/project/mediFifo/fifo_8kx18x9_wcnt/fifo_8kx18x9_wcnt.fdc + +-- Tue Apr 30 10:17:22 2019 + +library IEEE; +use IEEE.std_logic_1164.all; +library ecp5um; +use ecp5um.components.all; + +entity fifo_8kx18x9_wcnt is + port ( + Data: in std_logic_vector(17 downto 0); + WrClock: in std_logic; + RdClock: in std_logic; + WrEn: in std_logic; + RdEn: in std_logic; + Reset: in std_logic; + RPReset: in std_logic; + AmEmptyThresh: in std_logic_vector(13 downto 0); + AmFullThresh: in std_logic_vector(12 downto 0); + Q: out std_logic_vector(8 downto 0); + WCNT: out std_logic_vector(13 downto 0); + Empty: out std_logic; + Full: out std_logic; + AlmostEmpty: out std_logic; + AlmostFull: out std_logic); +end fifo_8kx18x9_wcnt; + +architecture Structure of fifo_8kx18x9_wcnt is + + -- internal signal declarations + signal invout_1: std_logic; + signal invout_0: std_logic; + signal w_g2b_xor_cluster_2_1: std_logic; + signal w_g2b_xor_cluster_3: std_logic; + signal w_g2b_xor_cluster_2: std_logic; + signal w_g2b_xor_cluster_1: std_logic; + signal r_g2b_xor_cluster_2_1: std_logic; + signal r_g2b_xor_cluster_3: std_logic; + signal rcount_w0: std_logic; + signal r_g2b_xor_cluster_3_1: std_logic; + signal r_g2b_xor_cluster_2: std_logic; + signal r_g2b_xor_cluster_1: std_logic; + signal rcnt_reg_13_inv: std_logic; + signal w_gdata_0: std_logic; + signal w_gdata_1: std_logic; + signal w_gdata_2: std_logic; + signal w_gdata_3: std_logic; + signal w_gdata_4: std_logic; + signal w_gdata_5: std_logic; + signal w_gdata_6: std_logic; + signal w_gdata_7: std_logic; + signal w_gdata_8: std_logic; + signal w_gdata_9: std_logic; + signal w_gdata_10: std_logic; + signal w_gdata_11: std_logic; + signal w_gdata_12: std_logic; + signal wptr_13: std_logic; + signal r_gdata_0: std_logic; + signal r_gdata_1: std_logic; + signal r_gdata_2: std_logic; + signal r_gdata_3: std_logic; + signal r_gdata_4: std_logic; + signal r_gdata_5: std_logic; + signal r_gdata_6: std_logic; + signal r_gdata_7: std_logic; + signal r_gdata_8: std_logic; + signal r_gdata_9: std_logic; + signal r_gdata_10: std_logic; + signal r_gdata_11: std_logic; + signal r_gdata_12: std_logic; + signal r_gdata_13: std_logic; + signal rptr_0: std_logic; + signal rptr_1: std_logic; + signal rptr_2: std_logic; + signal rptr_3: std_logic; + signal rptr_4: std_logic; + signal rptr_5: std_logic; + signal rptr_6: std_logic; + signal rptr_7: std_logic; + signal rptr_8: std_logic; + signal rptr_9: std_logic; + signal rptr_10: std_logic; + signal rptr_14: std_logic; + signal rptr_11: std_logic; + signal rptr_12: std_logic; + signal rptr_13: std_logic; + signal w_gcount_0: std_logic; + signal w_gcount_1: std_logic; + signal w_gcount_2: std_logic; + signal w_gcount_3: std_logic; + signal w_gcount_4: std_logic; + signal w_gcount_5: std_logic; + signal w_gcount_6: std_logic; + signal w_gcount_7: std_logic; + signal w_gcount_8: std_logic; + signal w_gcount_9: std_logic; + signal w_gcount_10: std_logic; + signal w_gcount_11: std_logic; + signal w_gcount_12: std_logic; + signal w_gcount_13: std_logic; + signal r_gcount_0: std_logic; + signal r_gcount_1: std_logic; + signal r_gcount_2: std_logic; + signal r_gcount_3: std_logic; + signal r_gcount_4: std_logic; + signal r_gcount_5: std_logic; + signal r_gcount_6: std_logic; + signal r_gcount_7: std_logic; + signal r_gcount_8: std_logic; + signal r_gcount_9: std_logic; + signal r_gcount_10: std_logic; + signal r_gcount_11: std_logic; + signal r_gcount_12: std_logic; + signal r_gcount_13: std_logic; + signal r_gcount_14: std_logic; + signal w_gcount_r20: std_logic; + signal w_gcount_r0: std_logic; + signal w_gcount_r21: std_logic; + signal w_gcount_r1: std_logic; + signal w_gcount_r22: std_logic; + signal w_gcount_r2: std_logic; + signal w_gcount_r23: std_logic; + signal w_gcount_r3: std_logic; + signal w_gcount_r24: std_logic; + signal w_gcount_r4: std_logic; + signal w_gcount_r25: std_logic; + signal w_gcount_r5: std_logic; + signal w_gcount_r26: std_logic; + signal w_gcount_r6: std_logic; + signal w_gcount_r27: std_logic; + signal w_gcount_r7: std_logic; + signal w_gcount_r28: std_logic; + signal w_gcount_r8: std_logic; + signal w_gcount_r29: std_logic; + signal w_gcount_r9: std_logic; + signal w_gcount_r210: std_logic; + signal w_gcount_r10: std_logic; + signal w_gcount_r211: std_logic; + signal w_gcount_r11: std_logic; + signal w_gcount_r212: std_logic; + signal w_gcount_r12: std_logic; + signal w_gcount_r213: std_logic; + signal w_gcount_r13: std_logic; + signal r_gcount_w20: std_logic; + signal r_gcount_w0: std_logic; + signal r_gcount_w21: std_logic; + signal r_gcount_w1: std_logic; + signal r_gcount_w22: std_logic; + signal r_gcount_w2: std_logic; + signal r_gcount_w23: std_logic; + signal r_gcount_w3: std_logic; + signal r_gcount_w24: std_logic; + signal r_gcount_w4: std_logic; + signal r_gcount_w25: std_logic; + signal r_gcount_w5: std_logic; + signal r_gcount_w26: std_logic; + signal r_gcount_w6: std_logic; + signal r_gcount_w27: std_logic; + signal r_gcount_w7: std_logic; + signal r_gcount_w28: std_logic; + signal r_gcount_w8: std_logic; + signal r_gcount_w29: std_logic; + signal r_gcount_w9: std_logic; + signal r_gcount_w210: std_logic; + signal r_gcount_w10: std_logic; + signal r_gcount_w211: std_logic; + signal r_gcount_w11: std_logic; + signal r_gcount_w212: std_logic; + signal r_gcount_w12: std_logic; + signal r_gcount_w213: std_logic; + signal r_gcount_w13: std_logic; + signal r_gcount_w214: std_logic; + signal r_gcount_w14: std_logic; + signal rcnt_reg_14: std_logic; + signal empty_i: std_logic; + signal full_i: std_logic; + signal rRst: std_logic; + signal iwcount_0: std_logic; + signal iwcount_1: std_logic; + signal w_gctr_ci: std_logic; + signal iwcount_2: std_logic; + signal iwcount_3: std_logic; + signal co0: std_logic; + signal iwcount_4: std_logic; + signal iwcount_5: std_logic; + signal co1: std_logic; + signal iwcount_6: std_logic; + signal iwcount_7: std_logic; + signal co2: std_logic; + signal iwcount_8: std_logic; + signal iwcount_9: std_logic; + signal co3: std_logic; + signal iwcount_10: std_logic; + signal iwcount_11: std_logic; + signal co4: std_logic; + signal iwcount_12: std_logic; + signal iwcount_13: std_logic; + signal co6: std_logic; + signal co5: std_logic; + signal wcount_13: std_logic; + signal ircount_0: std_logic; + signal ircount_1: std_logic; + signal r_gctr_ci: std_logic; + signal ircount_2: std_logic; + signal ircount_3: std_logic; + signal co0_1: std_logic; + signal ircount_4: std_logic; + signal ircount_5: std_logic; + signal co1_1: std_logic; + signal ircount_6: std_logic; + signal ircount_7: std_logic; + signal co2_1: std_logic; + signal ircount_8: std_logic; + signal ircount_9: std_logic; + signal co3_1: std_logic; + signal ircount_10: std_logic; + signal ircount_11: std_logic; + signal co4_1: std_logic; + signal ircount_12: std_logic; + signal ircount_13: std_logic; + signal co5_1: std_logic; + signal ircount_14: std_logic; + signal co7: std_logic; + signal co6_1: std_logic; + signal rcount_14: std_logic; + signal mdout1_7_0: std_logic; + signal mdout1_6_0: std_logic; + signal mdout1_5_0: std_logic; + signal mdout1_4_0: std_logic; + signal mdout1_3_0: std_logic; + signal mdout1_2_0: std_logic; + signal mdout1_1_0: std_logic; + signal mdout1_0_0: std_logic; + signal mdout1_7_1: std_logic; + signal mdout1_6_1: std_logic; + signal mdout1_5_1: std_logic; + signal mdout1_4_1: std_logic; + signal mdout1_3_1: std_logic; + signal mdout1_2_1: std_logic; + signal mdout1_1_1: std_logic; + signal mdout1_0_1: std_logic; + signal mdout1_7_2: std_logic; + signal mdout1_6_2: std_logic; + signal mdout1_5_2: std_logic; + signal mdout1_4_2: std_logic; + signal mdout1_3_2: std_logic; + signal mdout1_2_2: std_logic; + signal mdout1_1_2: std_logic; + signal mdout1_0_2: std_logic; + signal mdout1_7_3: std_logic; + signal mdout1_6_3: std_logic; + signal mdout1_5_3: std_logic; + signal mdout1_4_3: std_logic; + signal mdout1_3_3: std_logic; + signal mdout1_2_3: std_logic; + signal mdout1_1_3: std_logic; + signal mdout1_0_3: std_logic; + signal mdout1_7_4: std_logic; + signal mdout1_6_4: std_logic; + signal mdout1_5_4: std_logic; + signal mdout1_4_4: std_logic; + signal mdout1_3_4: std_logic; + signal mdout1_2_4: std_logic; + signal mdout1_1_4: std_logic; + signal mdout1_0_4: std_logic; + signal mdout1_7_5: std_logic; + signal mdout1_6_5: std_logic; + signal mdout1_5_5: std_logic; + signal mdout1_4_5: std_logic; + signal mdout1_3_5: std_logic; + signal mdout1_2_5: std_logic; + signal mdout1_1_5: std_logic; + signal mdout1_0_5: std_logic; + signal mdout1_7_6: std_logic; + signal mdout1_6_6: std_logic; + signal mdout1_5_6: std_logic; + signal mdout1_4_6: std_logic; + signal mdout1_3_6: std_logic; + signal mdout1_2_6: std_logic; + signal mdout1_1_6: std_logic; + signal mdout1_0_6: std_logic; + signal mdout1_7_7: std_logic; + signal mdout1_6_7: std_logic; + signal mdout1_5_7: std_logic; + signal mdout1_4_7: std_logic; + signal mdout1_3_7: std_logic; + signal mdout1_2_7: std_logic; + signal mdout1_1_7: std_logic; + signal mdout1_0_7: std_logic; + signal rptr_13_ff: std_logic; + signal rptr_12_ff: std_logic; + signal rptr_11_ff: std_logic; + signal mdout1_7_8: std_logic; + signal mdout1_6_8: std_logic; + signal mdout1_5_8: std_logic; + signal mdout1_4_8: std_logic; + signal mdout1_3_8: std_logic; + signal mdout1_2_8: std_logic; + signal mdout1_1_8: std_logic; + signal mdout1_0_8: std_logic; + signal wcnt_sub_0: std_logic; + signal precin: std_logic; + signal wcnt_sub_1: std_logic; + signal wcnt_sub_2: std_logic; + signal co0_2: std_logic; + signal wcnt_sub_3: std_logic; + signal wcnt_sub_4: std_logic; + signal co1_2: std_logic; + signal wcnt_sub_5: std_logic; + signal wcnt_sub_6: std_logic; + signal co2_2: std_logic; + signal wcnt_sub_7: std_logic; + signal wcnt_sub_8: std_logic; + signal co3_2: std_logic; + signal wcnt_sub_9: std_logic; + signal wcnt_sub_10: std_logic; + signal co4_2: std_logic; + signal wcnt_sub_11: std_logic; + signal wcnt_sub_12: std_logic; + signal co5_2: std_logic; + signal wcnt_sub_13: std_logic; + signal wcnt_sub_msb: std_logic; + signal co6_2: std_logic; + signal rcnt_sub_0: std_logic; + signal precin_1: std_logic; + signal rcnt_sub_1: std_logic; + signal rcnt_sub_2: std_logic; + signal co0_3: std_logic; + signal rcnt_sub_3: std_logic; + signal rcnt_sub_4: std_logic; + signal co1_3: std_logic; + signal rcnt_sub_5: std_logic; + signal rcnt_sub_6: std_logic; + signal co2_3: std_logic; + signal rcnt_sub_7: std_logic; + signal rcnt_sub_8: std_logic; + signal co3_3: std_logic; + signal rcnt_sub_9: std_logic; + signal rcnt_sub_10: std_logic; + signal co4_3: std_logic; + signal rcnt_sub_11: std_logic; + signal rcnt_sub_12: std_logic; + signal co5_3: std_logic; + signal rcnt_sub_13: std_logic; + signal rcnt_sub_14: std_logic; + signal rcnt_sub_msb: std_logic; + signal co6_3: std_logic; + signal co7_1d: std_logic; + signal co7_1: std_logic; + signal wfill_sub_0: std_logic; + signal wptr_0: std_logic; + signal precin_2: std_logic; + signal wfill_sub_1: std_logic; + signal wfill_sub_2: std_logic; + signal wptr_2: std_logic; + signal wptr_1: std_logic; + signal co0_4: std_logic; + signal wfill_sub_3: std_logic; + signal wfill_sub_4: std_logic; + signal wptr_4: std_logic; + signal wptr_3: std_logic; + signal co1_4: std_logic; + signal wfill_sub_5: std_logic; + signal wfill_sub_6: std_logic; + signal wptr_6: std_logic; + signal wptr_5: std_logic; + signal co2_4: std_logic; + signal wfill_sub_7: std_logic; + signal wfill_sub_8: std_logic; + signal wptr_8: std_logic; + signal wptr_7: std_logic; + signal co3_4: std_logic; + signal wfill_sub_9: std_logic; + signal wfill_sub_10: std_logic; + signal wptr_10: std_logic; + signal wptr_9: std_logic; + signal co4_4: std_logic; + signal wfill_sub_11: std_logic; + signal wfill_sub_12: std_logic; + signal wptr_12: std_logic; + signal wptr_11: std_logic; + signal co5_4: std_logic; + signal wfill_sub_13: std_logic; + signal wfill_sub_msb: std_logic; + signal co6_4: std_logic; + signal cmp_ci: std_logic; + signal wcount_r0: std_logic; + signal rcount_0: std_logic; + signal rcount_1: std_logic; + signal co0_5: std_logic; + signal wcount_r1: std_logic; + signal wcount_r2: std_logic; + signal rcount_2: std_logic; + signal rcount_3: std_logic; + signal co1_5: std_logic; + signal wcount_r3: std_logic; + signal wcount_r4: std_logic; + signal rcount_4: std_logic; + signal rcount_5: std_logic; + signal co2_5: std_logic; + signal wcount_r5: std_logic; + signal wcount_r6: std_logic; + signal rcount_6: std_logic; + signal rcount_7: std_logic; + signal co3_5: std_logic; + signal wcount_r7: std_logic; + signal wcount_r8: std_logic; + signal rcount_8: std_logic; + signal rcount_9: std_logic; + signal co4_5: std_logic; + signal wcount_r9: std_logic; + signal w_g2b_xor_cluster_0: std_logic; + signal rcount_10: std_logic; + signal rcount_11: std_logic; + signal co5_5: std_logic; + signal wcount_r11: std_logic; + signal wcount_r12: std_logic; + signal rcount_12: std_logic; + signal rcount_13: std_logic; + signal co6_5: std_logic; + signal empty_cmp_clr: std_logic; + signal empty_cmp_set: std_logic; + signal empty_d: std_logic; + signal empty_d_c: std_logic; + signal cmp_ci_1: std_logic; + signal rcount_w1: std_logic; + signal rcount_w2: std_logic; + signal wcount_0: std_logic; + signal wcount_1: std_logic; + signal co0_6: std_logic; + signal rcount_w3: std_logic; + signal rcount_w4: std_logic; + signal wcount_2: std_logic; + signal wcount_3: std_logic; + signal co1_6: std_logic; + signal rcount_w5: std_logic; + signal rcount_w6: std_logic; + signal wcount_4: std_logic; + signal wcount_5: std_logic; + signal co2_6: std_logic; + signal rcount_w7: std_logic; + signal rcount_w8: std_logic; + signal wcount_6: std_logic; + signal wcount_7: std_logic; + signal co3_6: std_logic; + signal rcount_w9: std_logic; + signal rcount_w10: std_logic; + signal wcount_8: std_logic; + signal wcount_9: std_logic; + signal co4_6: std_logic; + signal r_g2b_xor_cluster_0: std_logic; + signal rcount_w12: std_logic; + signal wcount_10: std_logic; + signal wcount_11: std_logic; + signal co5_6: std_logic; + signal rcount_w13: std_logic; + signal full_cmp_clr: std_logic; + signal wcount_12: std_logic; + signal full_cmp_set: std_logic; + signal full_d: std_logic; + signal full_d_c: std_logic; + signal rden_i: std_logic; + signal cmp_ci_2: std_logic; + signal rcnt_reg_0: std_logic; + signal rcnt_reg_1: std_logic; + signal co0_7: std_logic; + signal rcnt_reg_2: std_logic; + signal rcnt_reg_3: std_logic; + signal co1_7: std_logic; + signal rcnt_reg_4: std_logic; + signal rcnt_reg_5: std_logic; + signal co2_7: std_logic; + signal rcnt_reg_6: std_logic; + signal rcnt_reg_7: std_logic; + signal co3_7: std_logic; + signal rcnt_reg_8: std_logic; + signal rcnt_reg_9: std_logic; + signal co4_7: std_logic; + signal rcnt_reg_10: std_logic; + signal rcnt_reg_11: std_logic; + signal co5_7: std_logic; + signal rcnt_reg_12: std_logic; + signal rcnt_reg_13: std_logic; + signal co6_6: std_logic; + signal ae_clrsig: std_logic; + signal ae_setsig: std_logic; + signal ae_d: std_logic; + signal ae_d_c: std_logic; + signal wren_i: std_logic; + signal cmp_ci_3: std_logic; + signal wcnt_reg_0: std_logic; + signal wcnt_reg_1: std_logic; + signal co0_8: std_logic; + signal wcnt_reg_2: std_logic; + signal wcnt_reg_3: std_logic; + signal co1_8: std_logic; + signal wcnt_reg_4: std_logic; + signal wcnt_reg_5: std_logic; + signal co2_8: std_logic; + signal wcnt_reg_6: std_logic; + signal wcnt_reg_7: std_logic; + signal co3_8: std_logic; + signal wcnt_reg_8: std_logic; + signal wcnt_reg_9: std_logic; + signal co4_8: std_logic; + signal wcnt_reg_10: std_logic; + signal wcnt_reg_11: std_logic; + signal co5_8: std_logic; + signal wcnt_reg_12: std_logic; + signal wcnt_reg_13: std_logic; + signal af_d: std_logic; + signal scuba_vhi: std_logic; + signal scuba_vlo: std_logic; + signal af_d_c: std_logic; + + attribute MEM_LPC_FILE : string; + attribute MEM_INIT_FILE : string; + attribute GSR : string; + attribute MEM_LPC_FILE of pdp_ram_0_0_7 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_0_0_7 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_1_0_6 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_1_0_6 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_2_0_5 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_2_0_5 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_3_0_4 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_3_0_4 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_4_0_3 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_4_0_3 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_5_0_2 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_5_0_2 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_6_0_1 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_6_0_1 : label is ""; + attribute MEM_LPC_FILE of pdp_ram_7_0_0 : label is "fifo_8kx18x9_wcnt.lpc"; + attribute MEM_INIT_FILE of pdp_ram_7_0_0 : label is ""; + attribute GSR of FF_194 : label is "ENABLED"; + attribute GSR of FF_193 : label is "ENABLED"; + attribute GSR of FF_192 : label is "ENABLED"; + attribute GSR of FF_191 : label is "ENABLED"; + attribute GSR of FF_190 : label is "ENABLED"; + attribute GSR of FF_189 : label is "ENABLED"; + attribute GSR of FF_188 : label is "ENABLED"; + attribute GSR of FF_187 : label is "ENABLED"; + attribute GSR of FF_186 : label is "ENABLED"; + attribute GSR of FF_185 : label is "ENABLED"; + attribute GSR of FF_184 : label is "ENABLED"; + attribute GSR of FF_183 : label is "ENABLED"; + attribute GSR of FF_182 : label is "ENABLED"; + attribute GSR of FF_181 : label is "ENABLED"; + attribute GSR of FF_180 : label is "ENABLED"; + attribute GSR of FF_179 : label is "ENABLED"; + attribute GSR of FF_178 : label is "ENABLED"; + attribute GSR of FF_177 : label is "ENABLED"; + attribute GSR of FF_176 : label is "ENABLED"; + attribute GSR of FF_175 : label is "ENABLED"; + attribute GSR of FF_174 : label is "ENABLED"; + attribute GSR of FF_173 : label is "ENABLED"; + attribute GSR of FF_172 : label is "ENABLED"; + attribute GSR of FF_171 : label is "ENABLED"; + attribute GSR of FF_170 : label is "ENABLED"; + attribute GSR of FF_169 : label is "ENABLED"; + attribute GSR of FF_168 : label is "ENABLED"; + attribute GSR of FF_167 : label is "ENABLED"; + attribute GSR of FF_166 : label is "ENABLED"; + attribute GSR of FF_165 : label is "ENABLED"; + attribute GSR of FF_164 : label is "ENABLED"; + attribute GSR of FF_163 : label is "ENABLED"; + attribute GSR of FF_162 : label is "ENABLED"; + attribute GSR of FF_161 : label is "ENABLED"; + attribute GSR of FF_160 : label is "ENABLED"; + attribute GSR of FF_159 : label is "ENABLED"; + attribute GSR of FF_158 : label is "ENABLED"; + attribute GSR of FF_157 : label is "ENABLED"; + attribute GSR of FF_156 : label is "ENABLED"; + attribute GSR of FF_155 : label is "ENABLED"; + attribute GSR of FF_154 : label is "ENABLED"; + attribute GSR of FF_153 : label is "ENABLED"; + attribute GSR of FF_152 : label is "ENABLED"; + attribute GSR of FF_151 : label is "ENABLED"; + attribute GSR of FF_150 : label is "ENABLED"; + attribute GSR of FF_149 : label is "ENABLED"; + attribute GSR of FF_148 : label is "ENABLED"; + attribute GSR of FF_147 : label is "ENABLED"; + attribute GSR of FF_146 : label is "ENABLED"; + attribute GSR of FF_145 : label is "ENABLED"; + attribute GSR of FF_144 : label is "ENABLED"; + attribute GSR of FF_143 : label is "ENABLED"; + attribute GSR of FF_142 : label is "ENABLED"; + attribute GSR of FF_141 : label is "ENABLED"; + attribute GSR of FF_140 : label is "ENABLED"; + attribute GSR of FF_139 : label is "ENABLED"; + attribute GSR of FF_138 : label is "ENABLED"; + attribute GSR of FF_137 : label is "ENABLED"; + attribute GSR of FF_136 : label is "ENABLED"; + attribute GSR of FF_135 : label is "ENABLED"; + attribute GSR of FF_134 : label is "ENABLED"; + attribute GSR of FF_133 : label is "ENABLED"; + attribute GSR of FF_132 : label is "ENABLED"; + attribute GSR of FF_131 : label is "ENABLED"; + attribute GSR of FF_130 : label is "ENABLED"; + attribute GSR of FF_129 : label is "ENABLED"; + attribute GSR of FF_128 : label is "ENABLED"; + attribute GSR of FF_127 : label is "ENABLED"; + attribute GSR of FF_126 : label is "ENABLED"; + attribute GSR of FF_125 : label is "ENABLED"; + attribute GSR of FF_124 : label is "ENABLED"; + attribute GSR of FF_123 : label is "ENABLED"; + attribute GSR of FF_122 : label is "ENABLED"; + attribute GSR of FF_121 : label is "ENABLED"; + attribute GSR of FF_120 : label is "ENABLED"; + attribute GSR of FF_119 : label is "ENABLED"; + attribute GSR of FF_118 : label is "ENABLED"; + attribute GSR of FF_117 : label is "ENABLED"; + attribute GSR of FF_116 : label is "ENABLED"; + attribute GSR of FF_115 : label is "ENABLED"; + attribute GSR of FF_114 : label is "ENABLED"; + attribute GSR of FF_113 : label is "ENABLED"; + attribute GSR of FF_112 : label is "ENABLED"; + attribute GSR of FF_111 : label is "ENABLED"; + attribute GSR of FF_110 : label is "ENABLED"; + attribute GSR of FF_109 : label is "ENABLED"; + attribute GSR of FF_108 : label is "ENABLED"; + attribute GSR of FF_107 : label is "ENABLED"; + attribute GSR of FF_106 : label is "ENABLED"; + attribute GSR of FF_105 : label is "ENABLED"; + attribute GSR of FF_104 : label is "ENABLED"; + attribute GSR of FF_103 : label is "ENABLED"; + attribute GSR of FF_102 : label is "ENABLED"; + attribute GSR of FF_101 : label is "ENABLED"; + attribute GSR of FF_100 : label is "ENABLED"; + attribute GSR of FF_99 : label is "ENABLED"; + attribute GSR of FF_98 : label is "ENABLED"; + attribute GSR of FF_97 : label is "ENABLED"; + attribute GSR of FF_96 : label is "ENABLED"; + attribute GSR of FF_95 : label is "ENABLED"; + attribute GSR of FF_94 : label is "ENABLED"; + attribute GSR of FF_93 : label is "ENABLED"; + attribute GSR of FF_92 : label is "ENABLED"; + attribute GSR of FF_91 : label is "ENABLED"; + attribute GSR of FF_90 : label is "ENABLED"; + attribute GSR of FF_89 : label is "ENABLED"; + attribute GSR of FF_88 : label is "ENABLED"; + attribute GSR of FF_87 : label is "ENABLED"; + attribute GSR of FF_86 : label is "ENABLED"; + attribute GSR of FF_85 : label is "ENABLED"; + attribute GSR of FF_84 : label is "ENABLED"; + attribute GSR of FF_83 : label is "ENABLED"; + attribute GSR of FF_82 : label is "ENABLED"; + attribute GSR of FF_81 : label is "ENABLED"; + attribute GSR of FF_80 : label is "ENABLED"; + attribute GSR of FF_79 : label is "ENABLED"; + attribute GSR of FF_78 : label is "ENABLED"; + attribute GSR of FF_77 : label is "ENABLED"; + attribute GSR of FF_76 : label is "ENABLED"; + attribute GSR of FF_75 : label is "ENABLED"; + attribute GSR of FF_74 : label is "ENABLED"; + attribute GSR of FF_73 : label is "ENABLED"; + attribute GSR of FF_72 : label is "ENABLED"; + attribute GSR of FF_71 : label is "ENABLED"; + attribute GSR of FF_70 : label is "ENABLED"; + attribute GSR of FF_69 : label is "ENABLED"; + attribute GSR of FF_68 : label is "ENABLED"; + attribute GSR of FF_67 : label is "ENABLED"; + attribute GSR of FF_66 : label is "ENABLED"; + attribute GSR of FF_65 : label is "ENABLED"; + attribute GSR of FF_64 : label is "ENABLED"; + attribute GSR of FF_63 : label is "ENABLED"; + attribute GSR of FF_62 : label is "ENABLED"; + attribute GSR of FF_61 : label is "ENABLED"; + attribute GSR of FF_60 : label is "ENABLED"; + attribute GSR of FF_59 : label is "ENABLED"; + attribute GSR of FF_58 : label is "ENABLED"; + attribute GSR of FF_57 : label is "ENABLED"; + attribute GSR of FF_56 : label is "ENABLED"; + attribute GSR of FF_55 : label is "ENABLED"; + attribute GSR of FF_54 : label is "ENABLED"; + attribute GSR of FF_53 : label is "ENABLED"; + attribute GSR of FF_52 : label is "ENABLED"; + attribute GSR of FF_51 : label is "ENABLED"; + attribute GSR of FF_50 : label is "ENABLED"; + attribute GSR of FF_49 : label is "ENABLED"; + attribute GSR of FF_48 : label is "ENABLED"; + attribute GSR of FF_47 : label is "ENABLED"; + attribute GSR of FF_46 : label is "ENABLED"; + attribute GSR of FF_45 : label is "ENABLED"; + attribute GSR of FF_44 : label is "ENABLED"; + attribute GSR of FF_43 : label is "ENABLED"; + attribute GSR of FF_42 : label is "ENABLED"; + attribute GSR of FF_41 : label is "ENABLED"; + attribute GSR of FF_40 : label is "ENABLED"; + attribute GSR of FF_39 : label is "ENABLED"; + attribute GSR of FF_38 : label is "ENABLED"; + attribute GSR of FF_37 : label is "ENABLED"; + attribute GSR of FF_36 : label is "ENABLED"; + attribute GSR of FF_35 : label is "ENABLED"; + attribute GSR of FF_34 : label is "ENABLED"; + attribute GSR of FF_33 : label is "ENABLED"; + attribute GSR of FF_32 : label is "ENABLED"; + attribute GSR of FF_31 : label is "ENABLED"; + attribute GSR of FF_30 : label is "ENABLED"; + attribute GSR of FF_29 : label is "ENABLED"; + attribute GSR of FF_28 : label is "ENABLED"; + attribute GSR of FF_27 : label is "ENABLED"; + attribute GSR of FF_26 : label is "ENABLED"; + attribute GSR of FF_25 : label is "ENABLED"; + attribute GSR of FF_24 : label is "ENABLED"; + attribute GSR of FF_23 : label is "ENABLED"; + attribute GSR of FF_22 : label is "ENABLED"; + attribute GSR of FF_21 : label is "ENABLED"; + attribute GSR of FF_20 : label is "ENABLED"; + attribute GSR of FF_19 : label is "ENABLED"; + attribute GSR of FF_18 : label is "ENABLED"; + attribute GSR of FF_17 : label is "ENABLED"; + attribute GSR of FF_16 : label is "ENABLED"; + attribute GSR of FF_15 : label is "ENABLED"; + attribute GSR of FF_14 : label is "ENABLED"; + attribute GSR of FF_13 : label is "ENABLED"; + attribute GSR of FF_12 : label is "ENABLED"; + attribute GSR of FF_11 : label is "ENABLED"; + attribute GSR of FF_10 : label is "ENABLED"; + attribute GSR of FF_9 : label is "ENABLED"; + attribute GSR of FF_8 : label is "ENABLED"; + attribute GSR of FF_7 : label is "ENABLED"; + attribute GSR of FF_6 : label is "ENABLED"; + attribute GSR of FF_5 : label is "ENABLED"; + attribute GSR of FF_4 : label is "ENABLED"; + attribute GSR of FF_3 : label is "ENABLED"; + attribute GSR of FF_2 : label is "ENABLED"; + attribute GSR of FF_1 : label is "ENABLED"; + attribute GSR of FF_0 : label is "ENABLED"; + attribute syn_keep : boolean; + attribute NGD_DRC_MASK : integer; + attribute NGD_DRC_MASK of Structure : architecture is 1; + +begin + -- component instantiation statements + AND2_t34: AND2 + port map (A=>WrEn, B=>invout_1, Z=>wren_i); + + INV_2: INV + port map (A=>full_i, Z=>invout_1); + + AND2_t33: AND2 + port map (A=>RdEn, B=>invout_0, Z=>rden_i); + + INV_1: INV + port map (A=>empty_i, Z=>invout_0); + + OR2_t32: OR2 + port map (A=>Reset, B=>RPReset, Z=>rRst); + + XOR2_t31: XOR2 + port map (A=>wcount_0, B=>wcount_1, Z=>w_gdata_0); + + XOR2_t30: XOR2 + port map (A=>wcount_1, B=>wcount_2, Z=>w_gdata_1); + + XOR2_t29: XOR2 + port map (A=>wcount_2, B=>wcount_3, Z=>w_gdata_2); + + XOR2_t28: XOR2 + port map (A=>wcount_3, B=>wcount_4, Z=>w_gdata_3); + + XOR2_t27: XOR2 + port map (A=>wcount_4, B=>wcount_5, Z=>w_gdata_4); + + XOR2_t26: XOR2 + port map (A=>wcount_5, B=>wcount_6, Z=>w_gdata_5); + + XOR2_t25: XOR2 + port map (A=>wcount_6, B=>wcount_7, Z=>w_gdata_6); + + XOR2_t24: XOR2 + port map (A=>wcount_7, B=>wcount_8, Z=>w_gdata_7); + + XOR2_t23: XOR2 + port map (A=>wcount_8, B=>wcount_9, Z=>w_gdata_8); + + XOR2_t22: XOR2 + port map (A=>wcount_9, B=>wcount_10, Z=>w_gdata_9); + + XOR2_t21: XOR2 + port map (A=>wcount_10, B=>wcount_11, Z=>w_gdata_10); + + XOR2_t20: XOR2 + port map (A=>wcount_11, B=>wcount_12, Z=>w_gdata_11); + + XOR2_t19: XOR2 + port map (A=>wcount_12, B=>wcount_13, Z=>w_gdata_12); + + XOR2_t18: XOR2 + port map (A=>rcount_0, B=>rcount_1, Z=>r_gdata_0); + + XOR2_t17: XOR2 + port map (A=>rcount_1, B=>rcount_2, Z=>r_gdata_1); + + XOR2_t16: XOR2 + port map (A=>rcount_2, B=>rcount_3, Z=>r_gdata_2); + + XOR2_t15: XOR2 + port map (A=>rcount_3, B=>rcount_4, Z=>r_gdata_3); + + XOR2_t14: XOR2 + port map (A=>rcount_4, B=>rcount_5, Z=>r_gdata_4); + + XOR2_t13: XOR2 + port map (A=>rcount_5, B=>rcount_6, Z=>r_gdata_5); + + XOR2_t12: XOR2 + port map (A=>rcount_6, B=>rcount_7, Z=>r_gdata_6); + + XOR2_t11: XOR2 + port map (A=>rcount_7, B=>rcount_8, Z=>r_gdata_7); + + XOR2_t10: XOR2 + port map (A=>rcount_8, B=>rcount_9, Z=>r_gdata_8); + + XOR2_t9: XOR2 + port map (A=>rcount_9, B=>rcount_10, Z=>r_gdata_9); + + XOR2_t8: XOR2 + port map (A=>rcount_10, B=>rcount_11, Z=>r_gdata_10); + + XOR2_t7: XOR2 + port map (A=>rcount_11, B=>rcount_12, Z=>r_gdata_11); + + XOR2_t6: XOR2 + port map (A=>rcount_12, B=>rcount_13, Z=>r_gdata_12); + + XOR2_t5: XOR2 + port map (A=>rcount_13, B=>rcount_14, Z=>r_gdata_13); + + LUT4_39: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r210, AD2=>w_gcount_r211, + AD1=>w_gcount_r212, AD0=>w_gcount_r213, + DO0=>w_g2b_xor_cluster_0); + + LUT4_38: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r26, AD2=>w_gcount_r27, + AD1=>w_gcount_r28, AD0=>w_gcount_r29, + DO0=>w_g2b_xor_cluster_1); + + LUT4_37: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r22, AD2=>w_gcount_r23, + AD1=>w_gcount_r24, AD0=>w_gcount_r25, + DO0=>w_g2b_xor_cluster_2); + + LUT4_36: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r212, AD2=>w_gcount_r213, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>wcount_r12); + + LUT4_35: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r211, AD2=>w_gcount_r212, + AD1=>w_gcount_r213, AD0=>scuba_vlo, DO0=>wcount_r11); + + LUT4_34: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r29, AD2=>w_gcount_r210, + AD1=>w_gcount_r211, AD0=>wcount_r12, DO0=>wcount_r9); + + LUT4_33: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r28, AD2=>w_gcount_r29, + AD1=>w_gcount_r210, AD0=>wcount_r11, DO0=>wcount_r8); + + LUT4_32: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r27, AD2=>w_gcount_r28, + AD1=>w_gcount_r29, AD0=>w_g2b_xor_cluster_0, DO0=>wcount_r7); + + LUT4_31: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>wcount_r6); + + LUT4_30: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r25, AD0=>scuba_vlo, DO0=>wcount_r5); + + LUT4_29: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_gcount_r24, AD0=>w_gcount_r25, DO0=>wcount_r4); + + LUT4_28: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r23, AD2=>w_gcount_r24, + AD1=>w_gcount_r25, AD0=>scuba_vlo, + DO0=>w_g2b_xor_cluster_2_1); + + LUT4_27: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2_1, AD0=>scuba_vlo, DO0=>wcount_r3); + + LUT4_26: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>wcount_r2); + + LUT4_25: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_gcount_r21, DO0=>wcount_r1); + + LUT4_24: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_gcount_r20, AD2=>w_gcount_r21, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>w_g2b_xor_cluster_3); + + LUT4_23: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>w_g2b_xor_cluster_0, AD2=>w_g2b_xor_cluster_1, + AD1=>w_g2b_xor_cluster_2, AD0=>w_g2b_xor_cluster_3, + DO0=>wcount_r0); + + LUT4_22: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w211, AD2=>r_gcount_w212, + AD1=>r_gcount_w213, AD0=>r_gcount_w214, + DO0=>r_g2b_xor_cluster_0); + + LUT4_21: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w27, AD2=>r_gcount_w28, + AD1=>r_gcount_w29, AD0=>r_gcount_w210, + DO0=>r_g2b_xor_cluster_1); + + LUT4_20: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w23, AD2=>r_gcount_w24, + AD1=>r_gcount_w25, AD0=>r_gcount_w26, + DO0=>r_g2b_xor_cluster_2); + + LUT4_19: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w213, AD2=>r_gcount_w214, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>rcount_w13); + + LUT4_18: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w212, AD2=>r_gcount_w213, + AD1=>r_gcount_w214, AD0=>scuba_vlo, DO0=>rcount_w12); + + LUT4_17: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w210, AD2=>r_gcount_w211, + AD1=>r_gcount_w212, AD0=>rcount_w13, DO0=>rcount_w10); + + LUT4_16: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w29, AD2=>r_gcount_w210, + AD1=>r_gcount_w211, AD0=>rcount_w12, DO0=>rcount_w9); + + LUT4_15: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w28, AD2=>r_gcount_w29, + AD1=>r_gcount_w210, AD0=>r_g2b_xor_cluster_0, DO0=>rcount_w8); + + LUT4_14: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>scuba_vlo, AD0=>scuba_vlo, DO0=>rcount_w7); + + LUT4_13: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w26, AD0=>scuba_vlo, DO0=>rcount_w6); + + LUT4_12: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_gcount_w25, AD0=>r_gcount_w26, DO0=>rcount_w5); + + LUT4_11: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w24, AD2=>r_gcount_w25, + AD1=>r_gcount_w26, AD0=>scuba_vlo, + DO0=>r_g2b_xor_cluster_2_1); + + LUT4_10: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2_1, AD0=>scuba_vlo, DO0=>rcount_w4); + + LUT4_9: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>scuba_vlo, DO0=>rcount_w3); + + LUT4_8: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_gcount_w22, DO0=>rcount_w2); + + LUT4_7: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w21, AD2=>r_gcount_w22, AD1=>scuba_vlo, + AD0=>scuba_vlo, DO0=>r_g2b_xor_cluster_3); + + LUT4_6: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_g2b_xor_cluster_3, + DO0=>rcount_w1); + + LUT4_5: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_gcount_w20, AD2=>r_gcount_w21, + AD1=>r_gcount_w22, AD0=>scuba_vlo, + DO0=>r_g2b_xor_cluster_3_1); + + LUT4_4: ROM16X1A + generic map (initval=> X"6996") + port map (AD3=>r_g2b_xor_cluster_0, AD2=>r_g2b_xor_cluster_1, + AD1=>r_g2b_xor_cluster_2, AD0=>r_g2b_xor_cluster_3_1, + DO0=>rcount_w0); + + XOR2_t4: XOR2 + port map (A=>wcount_13, B=>r_gcount_w214, Z=>wcnt_sub_msb); + + XOR2_t3: XOR2 + port map (A=>w_gcount_r213, B=>rcount_14, Z=>rcnt_sub_msb); + + XOR2_t2: XOR2 + port map (A=>wptr_13, B=>r_gcount_w214, Z=>wfill_sub_msb); + + LUT4_3: ROM16X1A + generic map (initval=> X"0410") + port map (AD3=>rptr_14, AD2=>rcount_14, AD1=>w_gcount_r213, + AD0=>scuba_vlo, DO0=>empty_cmp_set); + + LUT4_2: ROM16X1A + generic map (initval=> X"1004") + port map (AD3=>rptr_14, AD2=>rcount_14, AD1=>w_gcount_r213, + AD0=>scuba_vlo, DO0=>empty_cmp_clr); + + LUT4_1: ROM16X1A + generic map (initval=> X"0140") + port map (AD3=>wptr_13, AD2=>wcount_13, AD1=>r_gcount_w214, + AD0=>scuba_vlo, DO0=>full_cmp_set); + + LUT4_0: ROM16X1A + generic map (initval=> X"4001") + port map (AD3=>wptr_13, AD2=>wcount_13, AD1=>r_gcount_w214, + AD0=>scuba_vlo, DO0=>full_cmp_clr); + + INV_0: INV + port map (A=>rcnt_reg_13, Z=>rcnt_reg_13_inv); + + AND2_t1: AND2 + port map (A=>rcnt_reg_14, B=>rcnt_reg_13_inv, Z=>ae_clrsig); + + AND2_t0: AND2 + port map (A=>rcnt_reg_14, B=>rcnt_reg_13, Z=>ae_setsig); + + pdp_ram_0_0_7: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b000", CSDECODE_A=> "0b000", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_0_8, + DOB7=>mdout1_0_7, DOB6=>mdout1_0_6, DOB5=>mdout1_0_5, + DOB4=>mdout1_0_4, DOB3=>mdout1_0_3, DOB2=>mdout1_0_2, + DOB1=>mdout1_0_1, DOB0=>mdout1_0_0); + + pdp_ram_1_0_6: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b001", CSDECODE_A=> "0b001", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_1_8, + DOB7=>mdout1_1_7, DOB6=>mdout1_1_6, DOB5=>mdout1_1_5, + DOB4=>mdout1_1_4, DOB3=>mdout1_1_3, DOB2=>mdout1_1_2, + DOB1=>mdout1_1_1, DOB0=>mdout1_1_0); + + pdp_ram_2_0_5: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b010", CSDECODE_A=> "0b010", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_2_8, + DOB7=>mdout1_2_7, DOB6=>mdout1_2_6, DOB5=>mdout1_2_5, + DOB4=>mdout1_2_4, DOB3=>mdout1_2_3, DOB2=>mdout1_2_2, + DOB1=>mdout1_2_1, DOB0=>mdout1_2_0); + + pdp_ram_3_0_4: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b011", CSDECODE_A=> "0b011", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_3_8, + DOB7=>mdout1_3_7, DOB6=>mdout1_3_6, DOB5=>mdout1_3_5, + DOB4=>mdout1_3_4, DOB3=>mdout1_3_3, DOB2=>mdout1_3_2, + DOB1=>mdout1_3_1, DOB0=>mdout1_3_0); + + pdp_ram_4_0_3: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b100", CSDECODE_A=> "0b100", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_4_8, + DOB7=>mdout1_4_7, DOB6=>mdout1_4_6, DOB5=>mdout1_4_5, + DOB4=>mdout1_4_4, DOB3=>mdout1_4_3, DOB2=>mdout1_4_2, + DOB1=>mdout1_4_1, DOB0=>mdout1_4_0); + + pdp_ram_5_0_2: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b101", CSDECODE_A=> "0b101", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_5_8, + DOB7=>mdout1_5_7, DOB6=>mdout1_5_6, DOB5=>mdout1_5_5, + DOB4=>mdout1_5_4, DOB3=>mdout1_5_3, DOB2=>mdout1_5_2, + DOB1=>mdout1_5_1, DOB0=>mdout1_5_0); + + pdp_ram_6_0_1: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b110", CSDECODE_A=> "0b110", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_6_8, + DOB7=>mdout1_6_7, DOB6=>mdout1_6_6, DOB5=>mdout1_6_5, + DOB4=>mdout1_6_4, DOB3=>mdout1_6_3, DOB2=>mdout1_6_2, + DOB1=>mdout1_6_1, DOB0=>mdout1_6_0); + + pdp_ram_7_0_0: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + CSDECODE_B=> "0b111", CSDECODE_A=> "0b111", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "ASYNC", + REGMODE_B=> "NOREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 9, + DATA_WIDTH_A=> 18) + port map (DIA17=>Data(17), DIA16=>Data(16), DIA15=>Data(15), + DIA14=>Data(14), DIA13=>Data(13), DIA12=>Data(12), + DIA11=>Data(11), DIA10=>Data(10), DIA9=>Data(9), + DIA8=>Data(8), DIA7=>Data(7), DIA6=>Data(6), DIA5=>Data(5), + DIA4=>Data(4), DIA3=>Data(3), DIA2=>Data(2), DIA1=>Data(1), + DIA0=>Data(0), ADA13=>wptr_9, ADA12=>wptr_8, ADA11=>wptr_7, + ADA10=>wptr_6, ADA9=>wptr_5, ADA8=>wptr_4, ADA7=>wptr_3, + ADA6=>wptr_2, ADA5=>wptr_1, ADA4=>wptr_0, ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>wren_i, OCEA=>wren_i, CLKA=>WrClock, WEA=>scuba_vhi, + CSA2=>wptr_12, CSA1=>wptr_11, CSA0=>wptr_10, RSTA=>Reset, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>scuba_vlo, DIB12=>scuba_vlo, + DIB11=>scuba_vlo, DIB10=>scuba_vlo, DIB9=>scuba_vlo, + DIB8=>scuba_vlo, DIB7=>scuba_vlo, DIB6=>scuba_vlo, + DIB5=>scuba_vlo, DIB4=>scuba_vlo, DIB3=>scuba_vlo, + DIB2=>scuba_vlo, DIB1=>scuba_vlo, DIB0=>scuba_vlo, + ADB13=>rptr_10, ADB12=>rptr_9, ADB11=>rptr_8, ADB10=>rptr_7, + ADB9=>rptr_6, ADB8=>rptr_5, ADB7=>rptr_4, ADB6=>rptr_3, + ADB5=>rptr_2, ADB4=>rptr_1, ADB3=>rptr_0, ADB2=>scuba_vlo, + ADB1=>scuba_vlo, ADB0=>scuba_vlo, CEB=>rden_i, OCEB=>rden_i, + CLKB=>RdClock, WEB=>scuba_vlo, CSB2=>rptr_13, CSB1=>rptr_12, + CSB0=>rptr_11, RSTB=>Reset, DOA17=>open, DOA16=>open, + DOA15=>open, DOA14=>open, DOA13=>open, DOA12=>open, + DOA11=>open, DOA10=>open, DOA9=>open, DOA8=>open, DOA7=>open, + DOA6=>open, DOA5=>open, DOA4=>open, DOA3=>open, DOA2=>open, + DOA1=>open, DOA0=>open, DOB17=>open, DOB16=>open, + DOB15=>open, DOB14=>open, DOB13=>open, DOB12=>open, + DOB11=>open, DOB10=>open, DOB9=>open, DOB8=>mdout1_7_8, + DOB7=>mdout1_7_7, DOB6=>mdout1_7_6, DOB5=>mdout1_7_5, + DOB4=>mdout1_7_4, DOB3=>mdout1_7_3, DOB2=>mdout1_7_2, + DOB1=>mdout1_7_1, DOB0=>mdout1_7_0); + + FF_194: FD1P3BX + port map (D=>iwcount_0, SP=>wren_i, CK=>WrClock, PD=>Reset, + Q=>wcount_0); + + FF_193: FD1P3DX + port map (D=>iwcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_1); + + FF_192: FD1P3DX + port map (D=>iwcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_2); + + FF_191: FD1P3DX + port map (D=>iwcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_3); + + FF_190: FD1P3DX + port map (D=>iwcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_4); + + FF_189: FD1P3DX + port map (D=>iwcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_5); + + FF_188: FD1P3DX + port map (D=>iwcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_6); + + FF_187: FD1P3DX + port map (D=>iwcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_7); + + FF_186: FD1P3DX + port map (D=>iwcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_8); + + FF_185: FD1P3DX + port map (D=>iwcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_9); + + FF_184: FD1P3DX + port map (D=>iwcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_10); + + FF_183: FD1P3DX + port map (D=>iwcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_11); + + FF_182: FD1P3DX + port map (D=>iwcount_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_12); + + FF_181: FD1P3DX + port map (D=>iwcount_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wcount_13); + + FF_180: FD1P3DX + port map (D=>w_gdata_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_0); + + FF_179: FD1P3DX + port map (D=>w_gdata_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_1); + + FF_178: FD1P3DX + port map (D=>w_gdata_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_2); + + FF_177: FD1P3DX + port map (D=>w_gdata_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_3); + + FF_176: FD1P3DX + port map (D=>w_gdata_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_4); + + FF_175: FD1P3DX + port map (D=>w_gdata_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_5); + + FF_174: FD1P3DX + port map (D=>w_gdata_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_6); + + FF_173: FD1P3DX + port map (D=>w_gdata_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_7); + + FF_172: FD1P3DX + port map (D=>w_gdata_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_8); + + FF_171: FD1P3DX + port map (D=>w_gdata_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_9); + + FF_170: FD1P3DX + port map (D=>w_gdata_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_10); + + FF_169: FD1P3DX + port map (D=>w_gdata_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_11); + + FF_168: FD1P3DX + port map (D=>w_gdata_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_12); + + FF_167: FD1P3DX + port map (D=>wcount_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>w_gcount_13); + + FF_166: FD1P3DX + port map (D=>wcount_0, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_0); + + FF_165: FD1P3DX + port map (D=>wcount_1, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_1); + + FF_164: FD1P3DX + port map (D=>wcount_2, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_2); + + FF_163: FD1P3DX + port map (D=>wcount_3, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_3); + + FF_162: FD1P3DX + port map (D=>wcount_4, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_4); + + FF_161: FD1P3DX + port map (D=>wcount_5, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_5); + + FF_160: FD1P3DX + port map (D=>wcount_6, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_6); + + FF_159: FD1P3DX + port map (D=>wcount_7, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_7); + + FF_158: FD1P3DX + port map (D=>wcount_8, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_8); + + FF_157: FD1P3DX + port map (D=>wcount_9, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_9); + + FF_156: FD1P3DX + port map (D=>wcount_10, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_10); + + FF_155: FD1P3DX + port map (D=>wcount_11, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_11); + + FF_154: FD1P3DX + port map (D=>wcount_12, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_12); + + FF_153: FD1P3DX + port map (D=>wcount_13, SP=>wren_i, CK=>WrClock, CD=>Reset, + Q=>wptr_13); + + FF_152: FD1P3BX + port map (D=>ircount_0, SP=>rden_i, CK=>RdClock, PD=>rRst, + Q=>rcount_0); + + FF_151: FD1P3DX + port map (D=>ircount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_1); + + FF_150: FD1P3DX + port map (D=>ircount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_2); + + FF_149: FD1P3DX + port map (D=>ircount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_3); + + FF_148: FD1P3DX + port map (D=>ircount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_4); + + FF_147: FD1P3DX + port map (D=>ircount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_5); + + FF_146: FD1P3DX + port map (D=>ircount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_6); + + FF_145: FD1P3DX + port map (D=>ircount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_7); + + FF_144: FD1P3DX + port map (D=>ircount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_8); + + FF_143: FD1P3DX + port map (D=>ircount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_9); + + FF_142: FD1P3DX + port map (D=>ircount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_10); + + FF_141: FD1P3DX + port map (D=>ircount_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_11); + + FF_140: FD1P3DX + port map (D=>ircount_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_12); + + FF_139: FD1P3DX + port map (D=>ircount_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_13); + + FF_138: FD1P3DX + port map (D=>ircount_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rcount_14); + + FF_137: FD1P3DX + port map (D=>r_gdata_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_0); + + FF_136: FD1P3DX + port map (D=>r_gdata_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_1); + + FF_135: FD1P3DX + port map (D=>r_gdata_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_2); + + FF_134: FD1P3DX + port map (D=>r_gdata_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_3); + + FF_133: FD1P3DX + port map (D=>r_gdata_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_4); + + FF_132: FD1P3DX + port map (D=>r_gdata_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_5); + + FF_131: FD1P3DX + port map (D=>r_gdata_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_6); + + FF_130: FD1P3DX + port map (D=>r_gdata_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_7); + + FF_129: FD1P3DX + port map (D=>r_gdata_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_8); + + FF_128: FD1P3DX + port map (D=>r_gdata_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_9); + + FF_127: FD1P3DX + port map (D=>r_gdata_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_10); + + FF_126: FD1P3DX + port map (D=>r_gdata_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_11); + + FF_125: FD1P3DX + port map (D=>r_gdata_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_12); + + FF_124: FD1P3DX + port map (D=>r_gdata_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_13); + + FF_123: FD1P3DX + port map (D=>rcount_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>r_gcount_14); + + FF_122: FD1P3DX + port map (D=>rcount_0, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_0); + + FF_121: FD1P3DX + port map (D=>rcount_1, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_1); + + FF_120: FD1P3DX + port map (D=>rcount_2, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_2); + + FF_119: FD1P3DX + port map (D=>rcount_3, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_3); + + FF_118: FD1P3DX + port map (D=>rcount_4, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_4); + + FF_117: FD1P3DX + port map (D=>rcount_5, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_5); + + FF_116: FD1P3DX + port map (D=>rcount_6, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_6); + + FF_115: FD1P3DX + port map (D=>rcount_7, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_7); + + FF_114: FD1P3DX + port map (D=>rcount_8, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_8); + + FF_113: FD1P3DX + port map (D=>rcount_9, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_9); + + FF_112: FD1P3DX + port map (D=>rcount_10, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_10); + + FF_111: FD1P3DX + port map (D=>rcount_11, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_11); + + FF_110: FD1P3DX + port map (D=>rcount_12, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_12); + + FF_109: FD1P3DX + port map (D=>rcount_13, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_13); + + FF_108: FD1P3DX + port map (D=>rcount_14, SP=>rden_i, CK=>RdClock, CD=>rRst, + Q=>rptr_14); + + FF_107: FD1P3DX + port map (D=>rptr_11, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_11_ff); + + FF_106: FD1P3DX + port map (D=>rptr_12, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_12_ff); + + FF_105: FD1P3DX + port map (D=>rptr_13, SP=>rden_i, CK=>RdClock, CD=>scuba_vlo, + Q=>rptr_13_ff); + + FF_104: FD1S3DX + port map (D=>w_gcount_0, CK=>RdClock, CD=>Reset, Q=>w_gcount_r0); + + FF_103: FD1S3DX + port map (D=>w_gcount_1, CK=>RdClock, CD=>Reset, Q=>w_gcount_r1); + + FF_102: FD1S3DX + port map (D=>w_gcount_2, CK=>RdClock, CD=>Reset, Q=>w_gcount_r2); + + FF_101: FD1S3DX + port map (D=>w_gcount_3, CK=>RdClock, CD=>Reset, Q=>w_gcount_r3); + + FF_100: FD1S3DX + port map (D=>w_gcount_4, CK=>RdClock, CD=>Reset, Q=>w_gcount_r4); + + FF_99: FD1S3DX + port map (D=>w_gcount_5, CK=>RdClock, CD=>Reset, Q=>w_gcount_r5); + + FF_98: FD1S3DX + port map (D=>w_gcount_6, CK=>RdClock, CD=>Reset, Q=>w_gcount_r6); + + FF_97: FD1S3DX + port map (D=>w_gcount_7, CK=>RdClock, CD=>Reset, Q=>w_gcount_r7); + + FF_96: FD1S3DX + port map (D=>w_gcount_8, CK=>RdClock, CD=>Reset, Q=>w_gcount_r8); + + FF_95: FD1S3DX + port map (D=>w_gcount_9, CK=>RdClock, CD=>Reset, Q=>w_gcount_r9); + + FF_94: FD1S3DX + port map (D=>w_gcount_10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r10); + + FF_93: FD1S3DX + port map (D=>w_gcount_11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r11); + + FF_92: FD1S3DX + port map (D=>w_gcount_12, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r12); + + FF_91: FD1S3DX + port map (D=>w_gcount_13, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r13); + + FF_90: FD1S3DX + port map (D=>r_gcount_0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w0); + + FF_89: FD1S3DX + port map (D=>r_gcount_1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w1); + + FF_88: FD1S3DX + port map (D=>r_gcount_2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w2); + + FF_87: FD1S3DX + port map (D=>r_gcount_3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w3); + + FF_86: FD1S3DX + port map (D=>r_gcount_4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w4); + + FF_85: FD1S3DX + port map (D=>r_gcount_5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w5); + + FF_84: FD1S3DX + port map (D=>r_gcount_6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w6); + + FF_83: FD1S3DX + port map (D=>r_gcount_7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w7); + + FF_82: FD1S3DX + port map (D=>r_gcount_8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w8); + + FF_81: FD1S3DX + port map (D=>r_gcount_9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w9); + + FF_80: FD1S3DX + port map (D=>r_gcount_10, CK=>WrClock, CD=>rRst, Q=>r_gcount_w10); + + FF_79: FD1S3DX + port map (D=>r_gcount_11, CK=>WrClock, CD=>rRst, Q=>r_gcount_w11); + + FF_78: FD1S3DX + port map (D=>r_gcount_12, CK=>WrClock, CD=>rRst, Q=>r_gcount_w12); + + FF_77: FD1S3DX + port map (D=>r_gcount_13, CK=>WrClock, CD=>rRst, Q=>r_gcount_w13); + + FF_76: FD1S3DX + port map (D=>r_gcount_14, CK=>WrClock, CD=>rRst, Q=>r_gcount_w14); + + FF_75: FD1S3DX + port map (D=>w_gcount_r0, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r20); + + FF_74: FD1S3DX + port map (D=>w_gcount_r1, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r21); + + FF_73: FD1S3DX + port map (D=>w_gcount_r2, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r22); + + FF_72: FD1S3DX + port map (D=>w_gcount_r3, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r23); + + FF_71: FD1S3DX + port map (D=>w_gcount_r4, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r24); + + FF_70: FD1S3DX + port map (D=>w_gcount_r5, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r25); + + FF_69: FD1S3DX + port map (D=>w_gcount_r6, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r26); + + FF_68: FD1S3DX + port map (D=>w_gcount_r7, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r27); + + FF_67: FD1S3DX + port map (D=>w_gcount_r8, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r28); + + FF_66: FD1S3DX + port map (D=>w_gcount_r9, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r29); + + FF_65: FD1S3DX + port map (D=>w_gcount_r10, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r210); + + FF_64: FD1S3DX + port map (D=>w_gcount_r11, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r211); + + FF_63: FD1S3DX + port map (D=>w_gcount_r12, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r212); + + FF_62: FD1S3DX + port map (D=>w_gcount_r13, CK=>RdClock, CD=>Reset, + Q=>w_gcount_r213); + + FF_61: FD1S3DX + port map (D=>r_gcount_w0, CK=>WrClock, CD=>rRst, Q=>r_gcount_w20); + + FF_60: FD1S3DX + port map (D=>r_gcount_w1, CK=>WrClock, CD=>rRst, Q=>r_gcount_w21); + + FF_59: FD1S3DX + port map (D=>r_gcount_w2, CK=>WrClock, CD=>rRst, Q=>r_gcount_w22); + + FF_58: FD1S3DX + port map (D=>r_gcount_w3, CK=>WrClock, CD=>rRst, Q=>r_gcount_w23); + + FF_57: FD1S3DX + port map (D=>r_gcount_w4, CK=>WrClock, CD=>rRst, Q=>r_gcount_w24); + + FF_56: FD1S3DX + port map (D=>r_gcount_w5, CK=>WrClock, CD=>rRst, Q=>r_gcount_w25); + + FF_55: FD1S3DX + port map (D=>r_gcount_w6, CK=>WrClock, CD=>rRst, Q=>r_gcount_w26); + + FF_54: FD1S3DX + port map (D=>r_gcount_w7, CK=>WrClock, CD=>rRst, Q=>r_gcount_w27); + + FF_53: FD1S3DX + port map (D=>r_gcount_w8, CK=>WrClock, CD=>rRst, Q=>r_gcount_w28); + + FF_52: FD1S3DX + port map (D=>r_gcount_w9, CK=>WrClock, CD=>rRst, Q=>r_gcount_w29); + + FF_51: FD1S3DX + port map (D=>r_gcount_w10, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w210); + + FF_50: FD1S3DX + port map (D=>r_gcount_w11, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w211); + + FF_49: FD1S3DX + port map (D=>r_gcount_w12, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w212); + + FF_48: FD1S3DX + port map (D=>r_gcount_w13, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w213); + + FF_47: FD1S3DX + port map (D=>r_gcount_w14, CK=>WrClock, CD=>rRst, + Q=>r_gcount_w214); + + FF_46: FD1S3DX + port map (D=>wcnt_sub_0, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_0); + + FF_45: FD1S3DX + port map (D=>wcnt_sub_1, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_1); + + FF_44: FD1S3DX + port map (D=>wcnt_sub_2, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_2); + + FF_43: FD1S3DX + port map (D=>wcnt_sub_3, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_3); + + FF_42: FD1S3DX + port map (D=>wcnt_sub_4, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_4); + + FF_41: FD1S3DX + port map (D=>wcnt_sub_5, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_5); + + FF_40: FD1S3DX + port map (D=>wcnt_sub_6, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_6); + + FF_39: FD1S3DX + port map (D=>wcnt_sub_7, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_7); + + FF_38: FD1S3DX + port map (D=>wcnt_sub_8, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_8); + + FF_37: FD1S3DX + port map (D=>wcnt_sub_9, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_9); + + FF_36: FD1S3DX + port map (D=>wcnt_sub_10, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_10); + + FF_35: FD1S3DX + port map (D=>wcnt_sub_11, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_11); + + FF_34: FD1S3DX + port map (D=>wcnt_sub_12, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_12); + + FF_33: FD1S3DX + port map (D=>wcnt_sub_13, CK=>WrClock, CD=>Reset, Q=>wcnt_reg_13); + + FF_32: FD1S3DX + port map (D=>rcnt_sub_0, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_0); + + FF_31: FD1S3DX + port map (D=>rcnt_sub_1, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_1); + + FF_30: FD1S3DX + port map (D=>rcnt_sub_2, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_2); + + FF_29: FD1S3DX + port map (D=>rcnt_sub_3, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_3); + + FF_28: FD1S3DX + port map (D=>rcnt_sub_4, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_4); + + FF_27: FD1S3DX + port map (D=>rcnt_sub_5, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_5); + + FF_26: FD1S3DX + port map (D=>rcnt_sub_6, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_6); + + FF_25: FD1S3DX + port map (D=>rcnt_sub_7, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_7); + + FF_24: FD1S3DX + port map (D=>rcnt_sub_8, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_8); + + FF_23: FD1S3DX + port map (D=>rcnt_sub_9, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_9); + + FF_22: FD1S3DX + port map (D=>rcnt_sub_10, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_10); + + FF_21: FD1S3DX + port map (D=>rcnt_sub_11, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_11); + + FF_20: FD1S3DX + port map (D=>rcnt_sub_12, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_12); + + FF_19: FD1S3DX + port map (D=>rcnt_sub_13, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_13); + + FF_18: FD1S3DX + port map (D=>rcnt_sub_14, CK=>RdClock, CD=>rRst, Q=>rcnt_reg_14); + + FF_17: FD1S3DX + port map (D=>wfill_sub_0, CK=>WrClock, CD=>Reset, Q=>WCNT(0)); + + FF_16: FD1S3DX + port map (D=>wfill_sub_1, CK=>WrClock, CD=>Reset, Q=>WCNT(1)); + + FF_15: FD1S3DX + port map (D=>wfill_sub_2, CK=>WrClock, CD=>Reset, Q=>WCNT(2)); + + FF_14: FD1S3DX + port map (D=>wfill_sub_3, CK=>WrClock, CD=>Reset, Q=>WCNT(3)); + + FF_13: FD1S3DX + port map (D=>wfill_sub_4, CK=>WrClock, CD=>Reset, Q=>WCNT(4)); + + FF_12: FD1S3DX + port map (D=>wfill_sub_5, CK=>WrClock, CD=>Reset, Q=>WCNT(5)); + + FF_11: FD1S3DX + port map (D=>wfill_sub_6, CK=>WrClock, CD=>Reset, Q=>WCNT(6)); + + FF_10: FD1S3DX + port map (D=>wfill_sub_7, CK=>WrClock, CD=>Reset, Q=>WCNT(7)); + + FF_9: FD1S3DX + port map (D=>wfill_sub_8, CK=>WrClock, CD=>Reset, Q=>WCNT(8)); + + FF_8: FD1S3DX + port map (D=>wfill_sub_9, CK=>WrClock, CD=>Reset, Q=>WCNT(9)); + + FF_7: FD1S3DX + port map (D=>wfill_sub_10, CK=>WrClock, CD=>Reset, Q=>WCNT(10)); + + FF_6: FD1S3DX + port map (D=>wfill_sub_11, CK=>WrClock, CD=>Reset, Q=>WCNT(11)); + + FF_5: FD1S3DX + port map (D=>wfill_sub_12, CK=>WrClock, CD=>Reset, Q=>WCNT(12)); + + FF_4: FD1S3DX + port map (D=>wfill_sub_13, CK=>WrClock, CD=>Reset, Q=>WCNT(13)); + + FF_3: FD1S3BX + port map (D=>empty_d, CK=>RdClock, PD=>rRst, Q=>empty_i); + + FF_2: FD1S3DX + port map (D=>full_d, CK=>WrClock, CD=>Reset, Q=>full_i); + + FF_1: FD1S3BX + port map (D=>ae_d, CK=>RdClock, PD=>rRst, Q=>AlmostEmpty); + + FF_0: FD1S3DX + port map (D=>af_d, CK=>WrClock, CD=>Reset, Q=>AlmostFull); + + w_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>w_gctr_ci); + + w_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>w_gctr_ci, S0=>iwcount_0, S1=>iwcount_1, + COUT=>co0); + + w_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0, S0=>iwcount_2, S1=>iwcount_3, + COUT=>co1); + + w_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1, S0=>iwcount_4, S1=>iwcount_5, + COUT=>co2); + + w_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2, S0=>iwcount_6, S1=>iwcount_7, + COUT=>co3); + + w_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3, S0=>iwcount_8, S1=>iwcount_9, + COUT=>co4); + + w_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_10, A1=>wcount_11, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4, S0=>iwcount_10, S1=>iwcount_11, + COUT=>co5); + + w_gctr_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>wcount_12, A1=>wcount_13, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5, S0=>iwcount_12, S1=>iwcount_13, + COUT=>co6); + + r_gctr_cia: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vhi, B0=>scuba_vlo, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>r_gctr_ci); + + r_gctr_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>r_gctr_ci, S0=>ircount_0, S1=>ircount_1, + COUT=>co0_1); + + r_gctr_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_1, S0=>ircount_2, S1=>ircount_3, + COUT=>co1_1); + + r_gctr_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_1, S0=>ircount_4, S1=>ircount_5, + COUT=>co2_1); + + r_gctr_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_1, S0=>ircount_6, S1=>ircount_7, + COUT=>co3_1); + + r_gctr_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_1, S0=>ircount_8, S1=>ircount_9, + COUT=>co4_1); + + r_gctr_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_10, A1=>rcount_11, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_1, S0=>ircount_10, S1=>ircount_11, + COUT=>co5_1); + + r_gctr_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_12, A1=>rcount_13, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_1, S0=>ircount_12, S1=>ircount_13, + COUT=>co6_1); + + r_gctr_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>rcount_14, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_1, S0=>ircount_14, S1=>open, + COUT=>co7); + + mux_8: MUX81 + port map (D0=>mdout1_0_0, D1=>mdout1_1_0, D2=>mdout1_2_0, + D3=>mdout1_3_0, D4=>mdout1_4_0, D5=>mdout1_5_0, + D6=>mdout1_6_0, D7=>mdout1_7_0, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(0)); + + mux_7: MUX81 + port map (D0=>mdout1_0_1, D1=>mdout1_1_1, D2=>mdout1_2_1, + D3=>mdout1_3_1, D4=>mdout1_4_1, D5=>mdout1_5_1, + D6=>mdout1_6_1, D7=>mdout1_7_1, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(1)); + + mux_6: MUX81 + port map (D0=>mdout1_0_2, D1=>mdout1_1_2, D2=>mdout1_2_2, + D3=>mdout1_3_2, D4=>mdout1_4_2, D5=>mdout1_5_2, + D6=>mdout1_6_2, D7=>mdout1_7_2, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(2)); + + mux_5: MUX81 + port map (D0=>mdout1_0_3, D1=>mdout1_1_3, D2=>mdout1_2_3, + D3=>mdout1_3_3, D4=>mdout1_4_3, D5=>mdout1_5_3, + D6=>mdout1_6_3, D7=>mdout1_7_3, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(3)); + + mux_4: MUX81 + port map (D0=>mdout1_0_4, D1=>mdout1_1_4, D2=>mdout1_2_4, + D3=>mdout1_3_4, D4=>mdout1_4_4, D5=>mdout1_5_4, + D6=>mdout1_6_4, D7=>mdout1_7_4, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(4)); + + mux_3: MUX81 + port map (D0=>mdout1_0_5, D1=>mdout1_1_5, D2=>mdout1_2_5, + D3=>mdout1_3_5, D4=>mdout1_4_5, D5=>mdout1_5_5, + D6=>mdout1_6_5, D7=>mdout1_7_5, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(5)); + + mux_2: MUX81 + port map (D0=>mdout1_0_6, D1=>mdout1_1_6, D2=>mdout1_2_6, + D3=>mdout1_3_6, D4=>mdout1_4_6, D5=>mdout1_5_6, + D6=>mdout1_6_6, D7=>mdout1_7_6, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(6)); + + mux_1: MUX81 + port map (D0=>mdout1_0_7, D1=>mdout1_1_7, D2=>mdout1_2_7, + D3=>mdout1_3_7, D4=>mdout1_4_7, D5=>mdout1_5_7, + D6=>mdout1_6_7, D7=>mdout1_7_7, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(7)); + + mux_0: MUX81 + port map (D0=>mdout1_0_8, D1=>mdout1_1_8, D2=>mdout1_2_8, + D3=>mdout1_3_8, D4=>mdout1_4_8, D5=>mdout1_5_8, + D6=>mdout1_6_8, D7=>mdout1_7_8, SD1=>rptr_11_ff, + SD2=>rptr_12_ff, SD3=>rptr_13_ff, Z=>Q(8)); + + precin_inst436: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"0000", + INIT0=> X"0000") + port map (A0=>scuba_vhi, A1=>scuba_vhi, B0=>scuba_vhi, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>precin); + + wcnt_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>scuba_vhi, A1=>wcount_0, B0=>scuba_vlo, + B1=>rcount_w1, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>precin, S0=>open, S1=>wcnt_sub_0, + COUT=>co0_2); + + wcnt_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_1, A1=>wcount_2, B0=>rcount_w2, + B1=>rcount_w3, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_2, S0=>wcnt_sub_1, S1=>wcnt_sub_2, + COUT=>co1_2); + + wcnt_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_3, A1=>wcount_4, B0=>rcount_w4, + B1=>rcount_w5, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_2, S0=>wcnt_sub_3, S1=>wcnt_sub_4, + COUT=>co2_2); + + wcnt_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_5, A1=>wcount_6, B0=>rcount_w6, + B1=>rcount_w7, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_2, S0=>wcnt_sub_5, S1=>wcnt_sub_6, + COUT=>co3_2); + + wcnt_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_7, A1=>wcount_8, B0=>rcount_w8, + B1=>rcount_w9, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_2, S0=>wcnt_sub_7, S1=>wcnt_sub_8, + COUT=>co4_2); + + wcnt_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_9, A1=>wcount_10, B0=>rcount_w10, + B1=>r_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_2, S0=>wcnt_sub_9, + S1=>wcnt_sub_10, COUT=>co5_2); + + wcnt_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_11, A1=>wcount_12, B0=>rcount_w12, + B1=>rcount_w13, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_2, S0=>wcnt_sub_11, S1=>wcnt_sub_12, + COUT=>co6_2); + + wcnt_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_sub_msb, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_2, S0=>wcnt_sub_13, S1=>open, + COUT=>open); + + precin_inst474: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"0000", + INIT0=> X"0000") + port map (A0=>scuba_vhi, A1=>scuba_vhi, B0=>scuba_vhi, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>precin_1); + + rcnt_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>scuba_vhi, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>rcount_0, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>precin_1, S0=>open, S1=>rcnt_sub_0, + COUT=>co0_3); + + rcnt_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r0, A1=>wcount_r1, B0=>rcount_1, + B1=>rcount_2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_3, S0=>rcnt_sub_1, S1=>rcnt_sub_2, + COUT=>co1_3); + + rcnt_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r2, A1=>wcount_r3, B0=>rcount_3, + B1=>rcount_4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_3, S0=>rcnt_sub_3, S1=>rcnt_sub_4, + COUT=>co2_3); + + rcnt_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r4, A1=>wcount_r5, B0=>rcount_5, + B1=>rcount_6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_3, S0=>rcnt_sub_5, S1=>rcnt_sub_6, + COUT=>co3_3); + + rcnt_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r6, A1=>wcount_r7, B0=>rcount_7, + B1=>rcount_8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_3, S0=>rcnt_sub_7, S1=>rcnt_sub_8, + COUT=>co4_3); + + rcnt_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r8, A1=>wcount_r9, B0=>rcount_9, + B1=>rcount_10, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_3, S0=>rcnt_sub_9, S1=>rcnt_sub_10, + COUT=>co5_3); + + rcnt_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>w_g2b_xor_cluster_0, A1=>wcount_r11, B0=>rcount_11, + B1=>rcount_12, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_3, S0=>rcnt_sub_11, S1=>rcnt_sub_12, + COUT=>co6_3); + + rcnt_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_r12, A1=>rcnt_sub_msb, B0=>rcount_13, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_3, S0=>rcnt_sub_13, S1=>rcnt_sub_14, + COUT=>co7_1); + + rcntd: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co7_1, S0=>co7_1d, S1=>open, COUT=>open); + + precin_inst514: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"0000", + INIT0=> X"0000") + port map (A0=>scuba_vhi, A1=>scuba_vhi, B0=>scuba_vhi, + B1=>scuba_vhi, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>'X', S0=>open, S1=>open, COUT=>precin_2); + + wfill_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>scuba_vhi, A1=>wptr_0, B0=>scuba_vlo, + B1=>rcount_w1, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>precin_2, S0=>open, S1=>wfill_sub_0, + COUT=>co0_4); + + wfill_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_1, A1=>wptr_2, B0=>rcount_w2, B1=>rcount_w3, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co0_4, S0=>wfill_sub_1, S1=>wfill_sub_2, COUT=>co1_4); + + wfill_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_3, A1=>wptr_4, B0=>rcount_w4, B1=>rcount_w5, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co1_4, S0=>wfill_sub_3, S1=>wfill_sub_4, COUT=>co2_4); + + wfill_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_5, A1=>wptr_6, B0=>rcount_w6, B1=>rcount_w7, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co2_4, S0=>wfill_sub_5, S1=>wfill_sub_6, COUT=>co3_4); + + wfill_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_7, A1=>wptr_8, B0=>rcount_w8, B1=>rcount_w9, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>co3_4, S0=>wfill_sub_7, S1=>wfill_sub_8, COUT=>co4_4); + + wfill_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_9, A1=>wptr_10, B0=>rcount_w10, + B1=>r_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_4, S0=>wfill_sub_9, + S1=>wfill_sub_10, COUT=>co5_4); + + wfill_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wptr_11, A1=>wptr_12, B0=>rcount_w12, + B1=>rcount_w13, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_4, S0=>wfill_sub_11, + S1=>wfill_sub_12, COUT=>co6_4); + + wfill_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wfill_sub_msb, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_4, S0=>wfill_sub_13, S1=>open, + COUT=>open); + + empty_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>rden_i, B0=>scuba_vlo, B1=>rden_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci); + + empty_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_0, A1=>rcount_1, B0=>scuba_vlo, + B1=>wcount_r0, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci, S0=>open, S1=>open, COUT=>co0_5); + + empty_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_2, A1=>rcount_3, B0=>wcount_r1, + B1=>wcount_r2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_5, S0=>open, S1=>open, COUT=>co1_5); + + empty_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_4, A1=>rcount_5, B0=>wcount_r3, + B1=>wcount_r4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_5, S0=>open, S1=>open, COUT=>co2_5); + + empty_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_6, A1=>rcount_7, B0=>wcount_r5, + B1=>wcount_r6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_5, S0=>open, S1=>open, COUT=>co3_5); + + empty_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_8, A1=>rcount_9, B0=>wcount_r7, + B1=>wcount_r8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_5, S0=>open, S1=>open, COUT=>co4_5); + + empty_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_10, A1=>rcount_11, B0=>wcount_r9, + B1=>w_g2b_xor_cluster_0, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_5, S0=>open, S1=>open, + COUT=>co5_5); + + empty_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>rcount_12, A1=>rcount_13, B0=>wcount_r11, + B1=>wcount_r12, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_5, S0=>open, S1=>open, COUT=>co6_5); + + empty_cmp_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>empty_cmp_set, A1=>scuba_vlo, B0=>empty_cmp_clr, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_5, S0=>open, S1=>open, + COUT=>empty_d_c); + + a0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>empty_d_c, S0=>empty_d, S1=>open, + COUT=>open); + + full_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>wren_i, B0=>scuba_vlo, B1=>wren_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci_1); + + full_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_0, A1=>wcount_1, B0=>rcount_w1, + B1=>rcount_w2, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>cmp_ci_1, S0=>open, S1=>open, + COUT=>co0_6); + + full_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_2, A1=>wcount_3, B0=>rcount_w3, + B1=>rcount_w4, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co0_6, S0=>open, S1=>open, COUT=>co1_6); + + full_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_4, A1=>wcount_5, B0=>rcount_w5, + B1=>rcount_w6, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co1_6, S0=>open, S1=>open, COUT=>co2_6); + + full_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_6, A1=>wcount_7, B0=>rcount_w7, + B1=>rcount_w8, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co2_6, S0=>open, S1=>open, COUT=>co3_6); + + full_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_8, A1=>wcount_9, B0=>rcount_w9, + B1=>rcount_w10, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co3_6, S0=>open, S1=>open, COUT=>co4_6); + + full_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_10, A1=>wcount_11, B0=>r_g2b_xor_cluster_0, + B1=>rcount_w12, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co4_6, S0=>open, S1=>open, COUT=>co5_6); + + full_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcount_12, A1=>full_cmp_set, B0=>rcount_w13, + B1=>full_cmp_clr, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co5_6, S0=>open, S1=>open, + COUT=>full_d_c); + + a1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>full_d_c, S0=>full_d, S1=>open, + COUT=>open); + + ae_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>rden_i, B0=>scuba_vlo, B1=>rden_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci_2); + + ae_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(0), A1=>AmEmptyThresh(1), + B0=>rcnt_reg_0, B1=>rcnt_reg_1, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>cmp_ci_2, S0=>open, + S1=>open, COUT=>co0_7); + + ae_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(2), A1=>AmEmptyThresh(3), + B0=>rcnt_reg_2, B1=>rcnt_reg_3, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co0_7, S0=>open, S1=>open, + COUT=>co1_7); + + ae_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(4), A1=>AmEmptyThresh(5), + B0=>rcnt_reg_4, B1=>rcnt_reg_5, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co1_7, S0=>open, S1=>open, + COUT=>co2_7); + + ae_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(6), A1=>AmEmptyThresh(7), + B0=>rcnt_reg_6, B1=>rcnt_reg_7, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co2_7, S0=>open, S1=>open, + COUT=>co3_7); + + ae_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(8), A1=>AmEmptyThresh(9), + B0=>rcnt_reg_8, B1=>rcnt_reg_9, C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co3_7, S0=>open, S1=>open, + COUT=>co4_7); + + ae_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(10), A1=>AmEmptyThresh(11), + B0=>rcnt_reg_10, B1=>rcnt_reg_11, C0=>scuba_vhi, + C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_7, + S0=>open, S1=>open, COUT=>co5_7); + + ae_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>AmEmptyThresh(12), A1=>AmEmptyThresh(13), + B0=>rcnt_reg_12, B1=>rcnt_reg_13, C0=>scuba_vhi, + C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co5_7, + S0=>open, S1=>open, COUT=>co6_6); + + ae_cmp_7: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>ae_setsig, A1=>scuba_vlo, B0=>ae_clrsig, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co6_6, S0=>open, S1=>open, COUT=>ae_d_c); + + a2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>ae_d_c, S0=>ae_d, S1=>open, COUT=>open); + + af_d_cmp_ci_a: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>wren_i, B0=>scuba_vlo, B1=>wren_i, + C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, D1=>scuba_vhi, + CIN=>'X', S0=>open, S1=>open, COUT=>cmp_ci_3); + + af_d_cmp_0: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_0, A1=>wcnt_reg_1, B0=>AmFullThresh(0), + B1=>AmFullThresh(1), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>cmp_ci_3, S0=>open, + S1=>open, COUT=>co0_8); + + af_d_cmp_1: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_2, A1=>wcnt_reg_3, B0=>AmFullThresh(2), + B1=>AmFullThresh(3), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co0_8, S0=>open, S1=>open, + COUT=>co1_8); + + af_d_cmp_2: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_4, A1=>wcnt_reg_5, B0=>AmFullThresh(4), + B1=>AmFullThresh(5), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co1_8, S0=>open, S1=>open, + COUT=>co2_8); + + af_d_cmp_3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_6, A1=>wcnt_reg_7, B0=>AmFullThresh(6), + B1=>AmFullThresh(7), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co2_8, S0=>open, S1=>open, + COUT=>co3_8); + + af_d_cmp_4: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_8, A1=>wcnt_reg_9, B0=>AmFullThresh(8), + B1=>AmFullThresh(9), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co3_8, S0=>open, S1=>open, + COUT=>co4_8); + + af_d_cmp_5: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_10, A1=>wcnt_reg_11, B0=>AmFullThresh(10), + B1=>AmFullThresh(11), C0=>scuba_vhi, C1=>scuba_vhi, + D0=>scuba_vhi, D1=>scuba_vhi, CIN=>co4_8, S0=>open, S1=>open, + COUT=>co5_8); + + af_d_cmp_6: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"99AA", + INIT0=> X"99AA") + port map (A0=>wcnt_reg_12, A1=>wcnt_reg_13, B0=>AmFullThresh(12), + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>co5_8, S0=>open, S1=>open, COUT=>af_d_c); + + scuba_vhi_inst: VHI + port map (Z=>scuba_vhi); + + scuba_vlo_inst: VLO + port map (Z=>scuba_vlo); + + a3: CCU2C + generic map (INJECT1_1=> "NO", INJECT1_0=> "NO", INIT1=> X"66AA", + INIT0=> X"66AA") + port map (A0=>scuba_vlo, A1=>scuba_vlo, B0=>scuba_vlo, + B1=>scuba_vlo, C0=>scuba_vhi, C1=>scuba_vhi, D0=>scuba_vhi, + D1=>scuba_vhi, CIN=>af_d_c, S0=>af_d, S1=>open, COUT=>open); + + Empty <= empty_i; + Full <= full_i; +end Structure; diff --git a/gbe_trb/ipcores/ecp5/ip_mem.lpc b/gbe_trb/ipcores/ecp5/ip_mem.lpc new file mode 100644 index 0000000..dabe2e3 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/ip_mem.lpc @@ -0,0 +1,56 @@ +[Device] +Family=ecp5um +PartType=LFE5UM-85F +PartName=LFE5UM-85F-8BG756C +SpeedGrade=8 +Package=CABGA756 +OperatingCondition=COM +Status=P + +[IP] +VendorName=Lattice Semiconductor Corporation +CoreType=LPM +CoreStatus=Demo +CoreName=RAM_DP_TRUE +CoreRevision=7.5 +ModuleName=ip_mem +SourceFormat=vhdl +ParameterFileVersion=1.0 +Date=04/24/2019 +Time=11:30:09 + +[Parameters] +Verilog=0 +VHDL=1 +EDIF=1 +Destination=Synplicity +Expression=BusA(0 to 7) +Order=Big Endian [MSB:LSB] +IO=0 +RAddress=256 +RData=32 +WAddress=256 +WData=32 +ROutputEn=0 +RClockEn=0 +WOutputEn=1 +WClockEn=0 +enByte=0 +ByteSize=9 +Optimization=Speed +Reset=Sync +Reset1=Sync +Init=mem +MemFile=/home/adrian/git/trbnet/gbe2_ecp3/ipcores/ip_mem.mem +MemFormat=orca +EnECC=0 +Pipeline=0 +WriteA=Normal +WriteB=Normal +init_data=0 + +[FilesGenerated] +/home/adrian/git/trbnet/gbe2_ecp3/ipcores/ip_mem.mem=mem + +[Command] +cmd_line= -w -n ip_mem -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type ramdp -device LFE5UM-85F -aaddr_width 8 -widtha 32 -baddr_width 8 -widthb 32 -anum_words 256 -bnum_words 256 -outdataB REGISTERED -cascade -1 -resetmode SYNC -sync_reset -memfile /home/adrian/git/trbnet/gbe2_ecp3/ipcores/ip_mem.mem -memformat orca -writemodeA NORMAL -writemodeB NORMAL diff --git a/gbe_trb/ipcores/ecp5/ip_mem.vhd b/gbe_trb/ipcores/ecp5/ip_mem.vhd new file mode 100644 index 0000000..3daf007 --- /dev/null +++ b/gbe_trb/ipcores/ecp5/ip_mem.vhd @@ -0,0 +1,266 @@ +-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.10.3.144 +-- Module Version: 7.5 +--/home/soft/lattice/diamond/3.10_x64/ispfpga/bin/lin64/scuba -w -n ip_mem -lang vhdl -synth synplify -bus_exp 7 -bb -arch sa5p00m -type bram -wp 11 -rp 1010 -data_width 32 -rdata_width 32 -num_rows 256 -outdataB REGISTERED -cascade -1 -resetmode SYNC -sync_reset -memfile /home/adrian/git/trbnet/gbe2_ecp3/ipcores/ip_mem.mem -memformat orca -writemodeA NORMAL -writemodeB NORMAL -fdc /home/adrian/git/trb5sc/template/project/mediFifo/ip_mem/ip_mem.fdc + +-- Wed Apr 24 11:30:11 2019 + +library IEEE; +use IEEE.std_logic_1164.all; +library ecp5um; +use ecp5um.components.all; + +entity ip_mem is + port ( + DataInA: in std_logic_vector(31 downto 0); + DataInB: in std_logic_vector(31 downto 0); + AddressA: in std_logic_vector(7 downto 0); + AddressB: in std_logic_vector(7 downto 0); + ClockA: in std_logic; + ClockB: in std_logic; + ClockEnA: in std_logic; + ClockEnB: in std_logic; + WrA: in std_logic; + WrB: in std_logic; + ResetA: in std_logic; + ResetB: in std_logic; + QA: out std_logic_vector(31 downto 0); + QB: out std_logic_vector(31 downto 0)); +end ip_mem; + +architecture Structure of ip_mem is + + -- internal signal declarations + signal scuba_vhi: std_logic; + signal scuba_vlo: std_logic; + + attribute MEM_LPC_FILE : string; + attribute MEM_INIT_FILE : string; + attribute MEM_LPC_FILE of ip_mem_0_0_1 : label is "ip_mem.lpc"; + attribute MEM_INIT_FILE of ip_mem_0_0_1 : label is "ip_mem.mem"; + attribute MEM_LPC_FILE of ip_mem_0_1_0 : label is "ip_mem.lpc"; + attribute MEM_INIT_FILE of ip_mem_0_1_0 : label is "ip_mem.mem"; + attribute NGD_DRC_MASK : integer; + attribute NGD_DRC_MASK of Structure : architecture is 1; + +begin + -- component instantiation statements + ip_mem_0_0_1: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + INITVAL_3F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_39=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_38=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_37=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_36=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_35=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_34=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_33=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_32=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_31=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_30=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_29=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_28=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_27=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_26=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_25=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_24=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_23=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_22=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_21=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_20=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_19=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_18=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_17=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_16=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_15=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_14=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_13=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_12=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_11=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_10=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0F=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_0E=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_0D=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_0C=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_0B=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_0A=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_09=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_08=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_07=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_06=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_05=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_04=> "0x00000000000000000000000000000000000005780000000000000000000000000000000000000000", + INITVAL_03=> "0x00000000000000000000000000000000000005780C35000008000133DC030C353000020001B397E9", + INITVAL_02=> "0x00000000000000000000000000000000000005780C35000007000133DC020C352000020001B397E9", + INITVAL_01=> "0x00000000000000000000000000000000000005780C35000006000133DC010C351000020001B397E9", + INITVAL_00=> "0x00000000000000000000000000000000000005780C35000005000133DC000C350000020001B397E9", + CSDECODE_B=> "0b000", CSDECODE_A=> "0b000", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "SYNC", + REGMODE_B=> "OUTREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 18, + DATA_WIDTH_A=> 18) + port map (DIA17=>DataInA(17), DIA16=>DataInA(16), + DIA15=>DataInA(15), DIA14=>DataInA(14), DIA13=>DataInA(13), + DIA12=>DataInA(12), DIA11=>DataInA(11), DIA10=>DataInA(10), + DIA9=>DataInA(9), DIA8=>DataInA(8), DIA7=>DataInA(7), + DIA6=>DataInA(6), DIA5=>DataInA(5), DIA4=>DataInA(4), + DIA3=>DataInA(3), DIA2=>DataInA(2), DIA1=>DataInA(1), + DIA0=>DataInA(0), ADA13=>scuba_vlo, ADA12=>scuba_vlo, + ADA11=>AddressA(7), ADA10=>AddressA(6), ADA9=>AddressA(5), + ADA8=>AddressA(4), ADA7=>AddressA(3), ADA6=>AddressA(2), + ADA5=>AddressA(1), ADA4=>AddressA(0), ADA3=>scuba_vlo, + ADA2=>scuba_vlo, ADA1=>scuba_vhi, ADA0=>scuba_vhi, + CEA=>ClockEnA, OCEA=>ClockEnA, CLKA=>ClockA, WEA=>WrA, + CSA2=>scuba_vlo, CSA1=>scuba_vlo, CSA0=>scuba_vlo, + RSTA=>ResetA, DIB17=>DataInB(17), DIB16=>DataInB(16), + DIB15=>DataInB(15), DIB14=>DataInB(14), DIB13=>DataInB(13), + DIB12=>DataInB(12), DIB11=>DataInB(11), DIB10=>DataInB(10), + DIB9=>DataInB(9), DIB8=>DataInB(8), DIB7=>DataInB(7), + DIB6=>DataInB(6), DIB5=>DataInB(5), DIB4=>DataInB(4), + DIB3=>DataInB(3), DIB2=>DataInB(2), DIB1=>DataInB(1), + DIB0=>DataInB(0), ADB13=>scuba_vlo, ADB12=>scuba_vlo, + ADB11=>AddressB(7), ADB10=>AddressB(6), ADB9=>AddressB(5), + ADB8=>AddressB(4), ADB7=>AddressB(3), ADB6=>AddressB(2), + ADB5=>AddressB(1), ADB4=>AddressB(0), ADB3=>scuba_vlo, + ADB2=>scuba_vlo, ADB1=>scuba_vhi, ADB0=>scuba_vhi, + CEB=>ClockEnB, OCEB=>ClockEnB, CLKB=>ClockB, WEB=>WrB, + CSB2=>scuba_vlo, CSB1=>scuba_vlo, CSB0=>scuba_vlo, + RSTB=>ResetB, DOA17=>QA(17), DOA16=>QA(16), DOA15=>QA(15), + DOA14=>QA(14), DOA13=>QA(13), DOA12=>QA(12), DOA11=>QA(11), + DOA10=>QA(10), DOA9=>QA(9), DOA8=>QA(8), DOA7=>QA(7), + DOA6=>QA(6), DOA5=>QA(5), DOA4=>QA(4), DOA3=>QA(3), + DOA2=>QA(2), DOA1=>QA(1), DOA0=>QA(0), DOB17=>QB(17), + DOB16=>QB(16), DOB15=>QB(15), DOB14=>QB(14), DOB13=>QB(13), + DOB12=>QB(12), DOB11=>QB(11), DOB10=>QB(10), DOB9=>QB(9), + DOB8=>QB(8), DOB7=>QB(7), DOB6=>QB(6), DOB5=>QB(5), + DOB4=>QB(4), DOB3=>QB(3), DOB2=>QB(2), DOB1=>QB(1), + DOB0=>QB(0)); + + scuba_vhi_inst: VHI + port map (Z=>scuba_vhi); + + scuba_vlo_inst: VLO + port map (Z=>scuba_vlo); + + ip_mem_0_1_0: DP16KD + generic map (INIT_DATA=> "STATIC", ASYNC_RESET_RELEASE=> "SYNC", + INITVAL_3F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_3A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_39=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_38=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_37=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_36=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_35=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_34=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_33=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_32=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_31=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_30=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_2A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_29=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_28=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_27=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_26=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_25=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_24=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_23=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_22=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_21=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_20=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_1A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_19=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_18=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_17=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_16=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_15=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_14=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_13=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_12=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_11=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_10=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0F=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0E=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0D=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0C=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0B=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_0A=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_09=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_08=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_07=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_06=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_05=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_04=> "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000", + INITVAL_03=> "0x0000000000000000000000000000000000000000000000302A000000008E000000302A0000000850", + INITVAL_02=> "0x0000000000000000000000000000000000000000000000302A000000008E000000302A0000000850", + INITVAL_01=> "0x0000000000000000000000000000000000000000000000302A000000008E000000302A0000000850", + INITVAL_00=> "0x0000000000000000000000000000000000000000000000302A000000008E000000302A0000000850", + CSDECODE_B=> "0b000", CSDECODE_A=> "0b000", WRITEMODE_B=> "NORMAL", + WRITEMODE_A=> "NORMAL", GSR=> "ENABLED", RESETMODE=> "SYNC", + REGMODE_B=> "OUTREG", REGMODE_A=> "NOREG", DATA_WIDTH_B=> 18, + DATA_WIDTH_A=> 18) + port map (DIA17=>scuba_vlo, DIA16=>scuba_vlo, DIA15=>scuba_vlo, + DIA14=>scuba_vlo, DIA13=>DataInA(31), DIA12=>DataInA(30), + DIA11=>DataInA(29), DIA10=>DataInA(28), DIA9=>DataInA(27), + DIA8=>DataInA(26), DIA7=>DataInA(25), DIA6=>DataInA(24), + DIA5=>DataInA(23), DIA4=>DataInA(22), DIA3=>DataInA(21), + DIA2=>DataInA(20), DIA1=>DataInA(19), DIA0=>DataInA(18), + ADA13=>scuba_vlo, ADA12=>scuba_vlo, ADA11=>AddressA(7), + ADA10=>AddressA(6), ADA9=>AddressA(5), ADA8=>AddressA(4), + ADA7=>AddressA(3), ADA6=>AddressA(2), ADA5=>AddressA(1), + ADA4=>AddressA(0), ADA3=>scuba_vlo, ADA2=>scuba_vlo, + ADA1=>scuba_vhi, ADA0=>scuba_vhi, CEA=>ClockEnA, + OCEA=>ClockEnA, CLKA=>ClockA, WEA=>WrA, CSA2=>scuba_vlo, + CSA1=>scuba_vlo, CSA0=>scuba_vlo, RSTA=>ResetA, + DIB17=>scuba_vlo, DIB16=>scuba_vlo, DIB15=>scuba_vlo, + DIB14=>scuba_vlo, DIB13=>DataInB(31), DIB12=>DataInB(30), + DIB11=>DataInB(29), DIB10=>DataInB(28), DIB9=>DataInB(27), + DIB8=>DataInB(26), DIB7=>DataInB(25), DIB6=>DataInB(24), + DIB5=>DataInB(23), DIB4=>DataInB(22), DIB3=>DataInB(21), + DIB2=>DataInB(20), DIB1=>DataInB(19), DIB0=>DataInB(18), + ADB13=>scuba_vlo, ADB12=>scuba_vlo, ADB11=>AddressB(7), + ADB10=>AddressB(6), ADB9=>AddressB(5), ADB8=>AddressB(4), + ADB7=>AddressB(3), ADB6=>AddressB(2), ADB5=>AddressB(1), + ADB4=>AddressB(0), ADB3=>scuba_vlo, ADB2=>scuba_vlo, + ADB1=>scuba_vhi, ADB0=>scuba_vhi, CEB=>ClockEnB, + OCEB=>ClockEnB, CLKB=>ClockB, WEB=>WrB, CSB2=>scuba_vlo, + CSB1=>scuba_vlo, CSB0=>scuba_vlo, RSTB=>ResetB, DOA17=>open, + DOA16=>open, DOA15=>open, DOA14=>open, DOA13=>QA(31), + DOA12=>QA(30), DOA11=>QA(29), DOA10=>QA(28), DOA9=>QA(27), + DOA8=>QA(26), DOA7=>QA(25), DOA6=>QA(24), DOA5=>QA(23), + DOA4=>QA(22), DOA3=>QA(21), DOA2=>QA(20), DOA1=>QA(19), + DOA0=>QA(18), DOB17=>open, DOB16=>open, DOB15=>open, + DOB14=>open, DOB13=>QB(31), DOB12=>QB(30), DOB11=>QB(29), + DOB10=>QB(28), DOB9=>QB(27), DOB8=>QB(26), DOB7=>QB(25), + DOB6=>QB(24), DOB5=>QB(23), DOB4=>QB(22), DOB3=>QB(21), + DOB2=>QB(20), DOB1=>QB(19), DOB0=>QB(18)); + +end Structure; diff --git a/gbe_trb/media/ecp5/pcs_sync_reset.vhd b/gbe_trb/media/ecp5/pcs_sync_reset.vhd new file mode 100644 index 0000000..b0df8f3 --- /dev/null +++ b/gbe_trb/media/ecp5/pcs_sync_reset.vhd @@ -0,0 +1,211 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE IEEE.numeric_std.all; + +library work; +use work.trb_net_std.all; +use work.trb_net_components.all; +use work.med_sync_define.all; + +entity pcs_sync_reset is + generic( + IS_SYNC_SLAVE : integer := 1; + IS_TX_RESET : integer := 1 + ); + port( + CLK_SYS : in std_logic; + CLK_RXI : in std_logic; + CLK_REF : in std_logic; + RESET : in std_logic; + CLEAR : in std_logic; + + SFP_LOS : in std_logic; + TX_LOL : in std_logic; + RX_CDR_LOL : in std_logic; + RX_LOS : in std_logic; + WA_POSITION : in std_logic_vector(3 downto 0); + + RX_SERDES_RST : out std_logic; + RX_PCS_RST : out std_logic; + QUAD_RST : out std_logic; + TX_PCS_RST : out std_logic; + + SERDES_RX_READY_IN : in std_logic := '1'; + SERDES_TX_READY_IN : in std_logic := '1'; + + STAT_TX_CONTROL : out std_logic_vector(31 downto 0); + STAT_RX_CONTROL : out std_logic_vector(31 downto 0); + DEBUG_TX_CONTROL : out std_logic_vector(31 downto 0); + DEBUG_RX_CONTROL : out std_logic_vector(31 downto 0); + STAT_RESET : out std_logic_vector(31 downto 0); + DEBUG_OUT : out std_logic_vector(31 downto 0) + ); +end entity; + + +architecture pcs_sync_reset_arch of pcs_sync_reset is + +signal rx_fsm_state : std_logic_vector(3 downto 0); +signal tx_fsm_state : std_logic_vector(3 downto 0); +signal wa_position_rx : std_logic_vector(3 downto 0); +signal start_timer : unsigned(21 downto 0) := (others => '0'); + +signal request_retr_i : std_logic; +signal start_retr_i : std_logic; +signal request_retr_position_i : std_logic_vector(7 downto 0); +signal start_retr_position_i : std_logic_vector(7 downto 0); +signal rx_dlm_i : std_logic; + +signal timer : unsigned(20 downto 0); +signal sd_los_i : std_logic; + +signal rx_allow : std_logic; +signal tx_allow : std_logic; +signal got_link_ready_i : std_logic; +signal make_link_reset_i : std_logic; +signal send_link_reset_i : std_logic; +signal make_link_reset_real_i : std_logic := '0'; +signal make_link_reset_sys_i : std_logic := '0'; +signal send_link_reset_real_i : std_logic := '0'; +signal send_link_reset_sys_i : std_logic := '0'; + +signal reset_i, rst_n, rst_n_tx : std_logic; +signal finished_reset_rx, finished_reset_rx_q : std_logic; +signal finished_reset_tx, finished_reset_tx_q : std_logic; + +begin + +rst_n_tx <= not (CLEAR or sd_los_i or make_link_reset_real_i or RESET) when (IS_SYNC_SLAVE = 1 and IS_TX_RESET = 1) + else not (CLEAR or make_link_reset_real_i or RESET); + + + +rst_n <= not (CLEAR or sd_los_i or make_link_reset_real_i or RESET); +reset_i <= (RESET or sd_los_i or make_link_reset_real_i); + + + + +------------------------------------------------- +-- Reset FSM & Link states +------------------------------------------------- +THE_RX_FSM : rx_reset_fsm + port map( + RST_N => rst_n, + RX_REFCLK => CLK_REF, + TX_PLL_LOL_QD_S => TX_LOL, + RX_SERDES_RST_CH_C => RX_SERDES_RST, + RX_CDR_LOL_CH_S => RX_CDR_LOL, + RX_LOS_LOW_CH_S => RX_LOS, + RX_PCS_RST_CH_C => RX_PCS_RST, + WA_POSITION => wa_position_rx, + NORMAL_OPERATION_OUT => finished_reset_rx, + STATE_OUT => rx_fsm_state + ); + +THE_TX_FSM : tx_reset_fsm + port map( + RST_N => rst_n_tx, + TX_REFCLK => CLK_REF, + TX_PLL_LOL_QD_S => TX_LOL, + RST_QD_C => QUAD_RST, + TX_PCS_RST_CH_C => TX_PCS_RST, + NORMAL_OPERATION_OUT => finished_reset_tx, + STATE_OUT => tx_fsm_state + ); + + +SYNC_WA_POSITION : process begin + wait until rising_edge(CLK_REF); + if IS_SYNC_SLAVE = 1 then + wa_position_rx <= WA_POSITION; + else + wa_position_rx <= x"0"; + end if; +end process; + +------------------------------------------------- +-- RX & TX allow +------------------------------------------------- +--Slave enables RX/TX when sync is done, Master waits additional time to make sure link is stable +PROC_ALLOW : process begin + wait until rising_edge(CLK_SYS); + if finished_reset_rx_q = '1' --SERDES_RX_READY_IN= '1' --and + and (IS_SYNC_SLAVE = 1 or start_timer(start_timer'left) = '1') then + rx_allow <= '1'; + else + rx_allow <= '0'; + end if; + if --SERDES_RX_READY_IN = '1' and SERDES_TX_READY_IN = '1' + finished_reset_tx_q = '1' and finished_reset_rx_q = '1' + and (IS_SYNC_SLAVE = 1 or start_timer(start_timer'left) = '1') then + tx_allow <= '1'; + else + tx_allow <= '0'; + end if; +end process; + + + link_reset_fin_tx : signal_sync port map(RESET => '0',CLK0 => CLK_SYS, CLK1 => CLK_SYS, + D_IN(0) => finished_reset_tx, + D_OUT(0) => finished_reset_tx_q); + link_reset_fin_rx : signal_sync port map(RESET => '0',CLK0 => CLK_SYS, CLK1 => CLK_SYS, + D_IN(0) => finished_reset_rx, + D_OUT(0) => finished_reset_rx_q); + + +PROC_START_TIMER : process begin + wait until rising_edge(CLK_SYS); + -- if got_link_ready_i = '1' then + if finished_reset_tx_q = '1' and finished_reset_rx_q = '1' then + if start_timer(start_timer'left) = '0' then + start_timer <= start_timer + 1; + end if; + else + start_timer <= (others => '0'); + end if; +end process; + +------------------------------------------------- +-- Status signals +------------------------------------------------- + +STAT_RESET(3 downto 0) <= rx_fsm_state; +STAT_RESET(7 downto 4) <= tx_fsm_state; +STAT_RESET(8) <= tx_allow; +STAT_RESET(9) <= rx_allow; +STAT_RESET(15 downto 10) <= (others => '0'); +STAT_RESET(16) <= RX_CDR_LOL; +STAT_RESET(17) <= RX_LOS; +STAT_RESET(18) <= '0';--QUAD_RST; --RX_PCS_RST; +STAT_RESET(19) <= '0';--TX_PCS_RST; +STAT_RESET(20) <= TX_LOL; +STAT_RESET(21) <= rst_n; +STAT_RESET(22) <= rst_n_tx; +STAT_RESET(30 downto 23) <= (others => '0'); +STAT_RESET(31) <= start_timer(start_timer'left); + + +gen_link_reset : if IS_SYNC_SLAVE = 1 generate + link_reset_pulse : pulse_sync port map( CLK_A_IN => CLK_RXI, CLK_B_IN => CLK_SYS, + PULSE_A_IN => make_link_reset_i, + PULSE_B_OUT => make_link_reset_sys_i); + link_reset_send : signal_sync port map(RESET => '0',CLK0 => CLK_RXI,CLK1 => CLK_SYS, + D_IN(0) => send_link_reset_i, + D_OUT(0) => send_link_reset_sys_i); +end generate; + +make_link_reset_real_i <= make_link_reset_sys_i or sd_los_i when IS_SYNC_SLAVE = 1 + else '0'; +send_link_reset_real_i <= send_link_reset_sys_i when IS_SYNC_SLAVE = 1 + else '0'; + +sd_los_i <= SFP_LOS when rising_edge(CLK_SYS); + + +DEBUG_OUT(0) <= tx_allow; +DEBUG_OUT(1) <= rx_allow; +DEBUG_OUT(2) <= sd_los_i; +DEBUG_OUT(3) <= '0'; --DEBUG_RX_CONTROL(4); + +end architecture; diff --git a/gbe_trb/media/ecp5/pcstest/sgmii_ecp5.lpc b/gbe_trb/media/ecp5/pcstest/sgmii_ecp5.lpc new file mode 100644 index 0000000..7b1f021 --- /dev/null +++ b/gbe_trb/media/ecp5/pcstest/sgmii_ecp5.lpc @@ -0,0 +1,97 @@ +[Device] +Family=ecp5um +OperatingCondition=COM +Package=CABGA756 +PartName=LFE5UM-85F-8BG756C +PartType=LFE5UM-85F +SpeedGrade=8 +Status=P +[IP] +CoreName=PCS +CoreRevision=8.2 +CoreStatus=Demo +CoreType=LPM +Date=05/09/2019 +ModuleName=sgmii_ecp5 +ParameterFileVersion=1.0 +SourceFormat=vhdl +Time=16:52:08 +VendorName=Lattice Semiconductor Corporation +[Parameters] +;ACHARA=0 00H +;ACHARB=0 00H +;ACHARM=0 00H +;RXMCAENABLE=Disabled +CDRLOLACTION=Full Recalibration +CDRLOLRANGE=3 +CDR_MAX_RATE=1.25 +CDR_MULT=10X +CDR_REF_RATE=125.0000 +CH_MODE=Rx and Tx +Destination=Synplicity +EDIF=1 +Expression=BusA(0 to 7) +IO=0 +IO_TYPE=GbE +LEQ=0 +LOOPBACK=Disabled +LOSPORT=Enabled +NUM_CHS=1 +Order=Big Endian [MSB:LSB] +PPORT_RX_RDY=Enabled +PPORT_TX_RDY=Enabled +PROTOCOL=GbE +PWAIT_RX_RDY=3000 +PWAIT_TX_RDY=3000 +RCSRC=Disabled +REFCLK_RATE=125.0000 +RSTSEQSEL=Enabled +RX8B10B=Enabled +RXCOMMAA=1010000011 +RXCOMMAB=0101111100 +RXCOMMAM=1111111111 +RXCOUPLING=AC +RXCTC=Enabled +RXCTCBYTEN=0 00H +RXCTCBYTEN1=0 00H +RXCTCBYTEN2=1 BCH +RXCTCBYTEN3=0 50H +RXCTCMATCHPATTERN=M2-S2 +RXDIFFTERM=50 ohms +RXFIFO_ENABLE=Enabled +RXINVPOL=Non-invert +RXLDR=Off +RXLOSTHRESHOLD=4 +RXLSM=Enabled +RXSC=K28P5 +RXWA=Barrel Shift +RX_DATA_WIDTH=8/10-Bit +RX_FICLK_RATE=125.0000 +RX_LINE_RATE=1.2500 +RX_RATE_DIV=Full Rate +SCIPORT=Enabled +SOFTLOL=Enabled +TX8B10B=Enabled +TXAMPLITUDE=1100 +TXDEPOST=Disabled +TXDEPRE=Disabled +TXDIFFTERM=50 ohms +TXFIFO_ENABLE=Enabled +TXINVPOL=Non-invert +TXLDR=Off +TXPLLLOLTHRESHOLD=1 +TXPLLMULT=10X +TX_DATA_WIDTH=8/10-Bit +TX_FICLK_RATE=125.0000 +TX_LINE_RATE=1.2500 +TX_MAX_RATE=1.25 +TX_RATE_DIV=Full Rate +VHDL=1 +Verilog=0 +[FilesGenerated] +sgmii_ecp5.pp=pp +sgmii_ecp5.sym=sym +sgmii_ecp5.tft=tft +sgmii_ecp5.txt=pcs_module +[SYSTEMPNR] +LN0=DCU1_CH1 diff --git a/gbe_trb/media/ecp5/pcstest/sgmii_ecp5.ngd b/gbe_trb/media/ecp5/pcstest/sgmii_ecp5.ngd new file mode 100644 index 0000000000000000000000000000000000000000..154048fbb196d926fe39dbe310c105d0ac6f7078 GIT binary patch literal 391330 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

ro#E4MaUUN>#OahS+!7h8Dft5oDaWv)TyIxg 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"0b1",D_IB_PWDNB=>"0b1", + D_XGE_MODE=>"0b0",D_LOW_MARK=>"0d4",D_HIGH_MARK=>"0d12",D_BUS8BIT_SEL=>"0b0", + D_CDR_LOL_SET=>"0b11",D_TXPLL_PWDNB=>"0b1",D_BITCLK_LOCAL_EN=>"0b1", + D_BITCLK_ND_EN=>"0b0",D_BITCLK_FROM_ND_EN=>"0b0",D_SYNC_LOCAL_EN=>"0b1", + D_SYNC_ND_EN=>"0b0",CH1_UC_MODE=>"0b0",CH1_PCIE_MODE=>"0b0",CH1_RIO_MODE=>"0b0", + CH1_WA_MODE=>"0b0",CH1_INVERT_RX=>"0b0",CH1_INVERT_TX=>"0b0",CH1_PRBS_SELECTION=>"0b0", + CH1_GE_AN_ENABLE=>"0b0",CH1_PRBS_LOCK=>"0b0",CH1_PRBS_ENABLE=>"0b0", + CH1_ENABLE_CG_ALIGN=>"0b1",CH1_TX_GEAR_MODE=>"0b0",CH1_RX_GEAR_MODE=>"0b0", + CH1_PCS_DET_TIME_SEL=>"0b00",CH1_PCIE_EI_EN=>"0b0",CH1_TX_GEAR_BYPASS=>"0b0", + CH1_ENC_BYPASS=>"0b0",CH1_SB_BYPASS=>"0b0",CH1_RX_SB_BYPASS=>"0b0", + CH1_WA_BYPASS=>"0b0",CH1_DEC_BYPASS=>"0b0",CH1_CTC_BYPASS=>"0b0", + CH1_RX_GEAR_BYPASS=>"0b0",CH1_LSM_DISABLE=>"0b0",CH1_MATCH_2_ENABLE=>"0b1", + CH1_MATCH_4_ENABLE=>"0b0",CH1_MIN_IPG_CNT=>"0b11",CH1_CC_MATCH_1=>"0x000", + CH1_CC_MATCH_2=>"0x000",CH1_CC_MATCH_3=>"0x1BC",CH1_CC_MATCH_4=>"0x050", + CH1_UDF_COMMA_MASK=>"0x3ff",CH1_UDF_COMMA_A=>"0x283",CH1_UDF_COMMA_B=>"0x17C", + CH1_RX_DCO_CK_DIV=>"0b010",CH1_RCV_DCC_EN=>"0b0",CH1_TPWDNB=>"0b1", + CH1_RATE_MODE_TX=>"0b0",CH1_RTERM_TX=>"0d19",CH1_TX_CM_SEL=>"0b00", + CH1_TDRV_PRE_EN=>"0b0",CH1_TDRV_SLICE0_SEL=>"0b01",CH1_TDRV_SLICE1_SEL=>"0b00", + CH1_TDRV_SLICE2_SEL=>"0b01",CH1_TDRV_SLICE3_SEL=>"0b01",CH1_TDRV_SLICE4_SEL=>"0b01", + CH1_TDRV_SLICE5_SEL=>"0b01",CH1_TDRV_SLICE0_CUR=>"0b101",CH1_TDRV_SLICE1_CUR=>"0b000", + CH1_TDRV_SLICE2_CUR=>"0b11",CH1_TDRV_SLICE3_CUR=>"0b11",CH1_TDRV_SLICE4_CUR=>"0b11", + CH1_TDRV_SLICE5_CUR=>"0b00",CH1_TDRV_DAT_SEL=>"0b00",CH1_TX_DIV11_SEL=>"0b0", + CH1_RPWDNB=>"0b1",CH1_RATE_MODE_RX=>"0b0",CH1_RX_DIV11_SEL=>"0b0", + CH1_SEL_SD_RX_CLK=>"0b0",CH1_FF_RX_H_CLK_EN=>"0b0",CH1_FF_RX_F_CLK_DIS=>"0b0", + CH1_FF_TX_H_CLK_EN=>"0b0",CH1_FF_TX_F_CLK_DIS=>"0b0",CH1_TDRV_POST_EN=>"0b0", + CH1_TX_POST_SIGN=>"0b0",CH1_TX_PRE_SIGN=>"0b0",CH1_REQ_LVL_SET=>"0b00", + CH1_REQ_EN=>"0b1",CH1_RTERM_RX=>"0d22",CH1_RXTERM_CM=>"0b11",CH1_PDEN_SEL=>"0b1", + CH1_RXIN_CM=>"0b11",CH1_LEQ_OFFSET_SEL=>"0b0",CH1_LEQ_OFFSET_TRIM=>"0b000", + CH1_RLOS_SEL=>"0b1",CH1_RX_LOS_LVL=>"0b100",CH1_RX_LOS_CEQ=>"0b11", + CH1_RX_LOS_HYST_EN=>"0b0",CH1_RX_LOS_EN=>"0b1",CH1_LDR_RX2CORE_SEL=>"0b0", + CH1_LDR_CORE2TX_SEL=>"0b0",D_TX_MAX_RATE=>"1.25",CH1_CDR_MAX_RATE=>"1.25", + CH1_TXAMPLITUDE=>"0d1100",CH1_TXDEPRE=>"DISABLED",CH1_TXDEPOST=>"DISABLED", + CH1_PROTOCOL=>"GBE",D_ISETLOS=>"0d0",D_SETIRPOLY_AUX=>"0b00",D_SETICONST_AUX=>"0b00", + D_SETIRPOLY_CH=>"0b00",D_SETICONST_CH=>"0b00",D_REQ_ISET=>"0b000", + D_PD_ISET=>"0b00",D_DCO_CALIB_TIME_SEL=>"0b00",CH1_CDR_CNT4SEL=>"0b00", + CH1_CDR_CNT8SEL=>"0b00",CH1_DCOATDCFG=>"0b00",CH1_DCOATDDLY=>"0b00", + CH1_DCOBYPSATD=>"0b1",CH1_DCOCALDIV=>"0b001",CH1_DCOCTLGI=>"0b010", + CH1_DCODISBDAVOID=>"0b0",CH1_DCOFLTDAC=>"0b01",CH1_DCOFTNRG=>"0b110", + CH1_DCOIOSTUNE=>"0b000",CH1_DCOITUNE=>"0b00",CH1_DCOITUNE4LSB=>"0b111", + CH1_DCOIUPDNX2=>"0b1",CH1_DCONUOFLSB=>"0b101",CH1_DCOSCALEI=>"0b00", + CH1_DCOSTARTVAL=>"0b000",CH1_DCOSTEP=>"0b00",CH1_BAND_THRESHOLD=>"0d0", + CH1_AUTO_FACQ_EN=>"0b1",CH1_AUTO_CALIB_EN=>"0b1",CH1_CALIB_CK_MODE=>"0b0", + CH1_REG_BAND_OFFSET=>"0d0",CH1_REG_BAND_SEL=>"0d0",CH1_REG_IDAC_SEL=>"0d0", + CH1_REG_IDAC_EN=>"0b0",D_CMUSETISCL4VCO=>"0b000",D_CMUSETI4VCO=>"0b00", + D_CMUSETINITVCT=>"0b00",D_CMUSETZGM=>"0b000",D_CMUSETP2AGM=>"0b000", + D_CMUSETP1GM=>"0b000",D_CMUSETI4CPZ=>"0d3",D_CMUSETI4CPP=>"0d3",D_CMUSETICP4Z=>"0b101", + D_CMUSETICP4P=>"0b01",D_CMUSETBIASI=>"0b00",D_SETPLLRC=>"0d1",CH1_RX_RATE_SEL=>"0d8", + D_REFCK_MODE=>"0b001",D_TX_VCO_CK_DIV=>"0b010",D_PLL_LOL_SET=>"0b01", + D_RG_EN=>"0b0",D_RG_SET=>"0b00") + port map (CH0_HDINP=>n103,CH1_HDINP=>hdinp,CH0_HDINN=>n103,CH1_HDINN=>hdinn, + D_TXBIT_CLKP_FROM_ND=>n44,D_TXBIT_CLKN_FROM_ND=>n44,D_SYNC_ND=>n44,D_TXPLL_LOL_FROM_ND=>n44, + CH0_RX_REFCLK=>n103,CH1_RX_REFCLK=>rxrefclk,CH0_FF_RXI_CLK=>n102,CH1_FF_RXI_CLK=>tx_pclk_c, + CH0_FF_TXI_CLK=>n102,CH1_FF_TXI_CLK=>txi_clk,CH0_FF_EBRD_CLK=>n102,CH1_FF_EBRD_CLK=>tx_pclk_c, + CH0_FF_TX_D_0=>n103,CH1_FF_TX_D_0=>txdata(0),CH0_FF_TX_D_1=>n103,CH1_FF_TX_D_1=>txdata(1), + CH0_FF_TX_D_2=>n103,CH1_FF_TX_D_2=>txdata(2),CH0_FF_TX_D_3=>n103,CH1_FF_TX_D_3=>txdata(3), + CH0_FF_TX_D_4=>n103,CH1_FF_TX_D_4=>txdata(4),CH0_FF_TX_D_5=>n103,CH1_FF_TX_D_5=>txdata(5), + CH0_FF_TX_D_6=>n103,CH1_FF_TX_D_6=>txdata(6),CH0_FF_TX_D_7=>n103,CH1_FF_TX_D_7=>txdata(7), + CH0_FF_TX_D_8=>n103,CH1_FF_TX_D_8=>tx_k(0),CH0_FF_TX_D_9=>n103,CH1_FF_TX_D_9=>n44, + CH0_FF_TX_D_10=>n103,CH1_FF_TX_D_10=>xmit(0),CH0_FF_TX_D_11=>n103,CH1_FF_TX_D_11=>tx_disp_correct(0), + CH0_FF_TX_D_12=>n103,CH1_FF_TX_D_12=>n103,CH0_FF_TX_D_13=>n103,CH1_FF_TX_D_13=>n103, + CH0_FF_TX_D_14=>n103,CH1_FF_TX_D_14=>n103,CH0_FF_TX_D_15=>n103,CH1_FF_TX_D_15=>n103, + CH0_FF_TX_D_16=>n103,CH1_FF_TX_D_16=>n103,CH0_FF_TX_D_17=>n103,CH1_FF_TX_D_17=>n103, + CH0_FF_TX_D_18=>n103,CH1_FF_TX_D_18=>n103,CH0_FF_TX_D_19=>n103,CH1_FF_TX_D_19=>n103, + CH0_FF_TX_D_20=>n103,CH1_FF_TX_D_20=>n103,CH0_FF_TX_D_21=>n103,CH1_FF_TX_D_21=>n44, + CH0_FF_TX_D_22=>n103,CH1_FF_TX_D_22=>n103,CH0_FF_TX_D_23=>n103,CH1_FF_TX_D_23=>n103, + CH0_FFC_EI_EN=>n103,CH1_FFC_EI_EN=>n44,CH0_FFC_PCIE_DET_EN=>n103,CH1_FFC_PCIE_DET_EN=>n44, + CH0_FFC_PCIE_CT=>n103,CH1_FFC_PCIE_CT=>n44,CH0_FFC_SB_INV_RX=>n103,CH1_FFC_SB_INV_RX=>n103, + CH0_FFC_ENABLE_CGALIGN=>n103,CH1_FFC_ENABLE_CGALIGN=>n103,CH0_FFC_SIGNAL_DETECT=>n103, + CH1_FFC_SIGNAL_DETECT=>signal_detect_c,CH0_FFC_FB_LOOPBACK=>n103,CH1_FFC_FB_LOOPBACK=>n44, + CH0_FFC_SB_PFIFO_LP=>n103,CH1_FFC_SB_PFIFO_LP=>n44,CH0_FFC_PFIFO_CLR=>n103, + CH1_FFC_PFIFO_CLR=>n44,CH0_FFC_RATE_MODE_RX=>n103,CH1_FFC_RATE_MODE_RX=>n44, + CH0_FFC_RATE_MODE_TX=>n103,CH1_FFC_RATE_MODE_TX=>n44,CH0_FFC_DIV11_MODE_RX=>n103, + CH1_FFC_DIV11_MODE_RX=>n44,CH0_FFC_DIV11_MODE_TX=>n103,CH1_FFC_DIV11_MODE_TX=>n44, + CH0_FFC_RX_GEAR_MODE=>n103,CH1_FFC_RX_GEAR_MODE=>n44,CH0_FFC_TX_GEAR_MODE=>n103, + CH1_FFC_TX_GEAR_MODE=>n44,CH0_FFC_LDR_CORE2TX_EN=>n103,CH1_FFC_LDR_CORE2TX_EN=>n103, + CH0_FFC_LANE_TX_RST=>n103,CH1_FFC_LANE_TX_RST=>rsl_tx_pcs_rst_c,CH0_FFC_LANE_RX_RST=>n103, + CH1_FFC_LANE_RX_RST=>rsl_rx_pcs_rst_c,CH0_FFC_RRST=>n103,CH1_FFC_RRST=>rsl_rx_serdes_rst_c, + CH0_FFC_TXPWDNB=>n103,CH1_FFC_TXPWDNB=>tx_pwrup_c,CH0_FFC_RXPWDNB=>n103, + CH1_FFC_RXPWDNB=>rx_pwrup_c,CH0_LDR_CORE2TX=>n103,CH1_LDR_CORE2TX=>n103, + D_SCIWDATA0=>sci_wrdata(0),D_SCIWDATA1=>sci_wrdata(1),D_SCIWDATA2=>sci_wrdata(2), + D_SCIWDATA3=>sci_wrdata(3),D_SCIWDATA4=>sci_wrdata(4),D_SCIWDATA5=>sci_wrdata(5), + D_SCIWDATA6=>sci_wrdata(6),D_SCIWDATA7=>sci_wrdata(7),D_SCIADDR0=>sci_addr(0), + D_SCIADDR1=>sci_addr(1),D_SCIADDR2=>sci_addr(2),D_SCIADDR3=>sci_addr(3), + D_SCIADDR4=>sci_addr(4),D_SCIADDR5=>sci_addr(5),D_SCIENAUX=>sci_en_dual, + D_SCISELAUX=>sci_sel_dual,CH0_SCIEN=>n103,CH1_SCIEN=>sci_en,CH0_SCISEL=>n103, + CH1_SCISEL=>sci_sel,D_SCIRD=>sci_rd,D_SCIWSTN=>sci_wrn,D_CYAWSTN=>cyawstn, + D_FFC_SYNC_TOGGLE=>n103,D_FFC_DUAL_RST=>rsl_rst_dual_c,D_FFC_MACRO_RST=>rsl_serdes_rst_dual_c, + D_FFC_MACROPDB=>serdes_pdb,D_FFC_TRST=>rsl_tx_serdes_rst_c,CH0_FFC_CDR_EN_BITSLIP=>n103, + CH1_FFC_CDR_EN_BITSLIP=>n44,D_SCAN_ENABLE=>n44,D_SCAN_IN_0=>n44,D_SCAN_IN_1=>n44, + D_SCAN_IN_2=>n44,D_SCAN_IN_3=>n44,D_SCAN_IN_4=>n44,D_SCAN_IN_5=>n44, + D_SCAN_IN_6=>n44,D_SCAN_IN_7=>n44,D_SCAN_MODE=>n44,D_SCAN_RESET=>n44, + D_CIN0=>n44,D_CIN1=>n44,D_CIN2=>n44,D_CIN3=>n44,D_CIN4=>n44,D_CIN5=>n44, + D_CIN6=>n44,D_CIN7=>n44,D_CIN8=>n44,D_CIN9=>n44,D_CIN10=>n44,D_CIN11=>n44, + CH0_HDOUTP=>n47,CH1_HDOUTP=>hdoutp,CH0_HDOUTN=>n48,CH1_HDOUTN=>hdoutn, + D_TXBIT_CLKP_TO_ND=>n1,D_TXBIT_CLKN_TO_ND=>n2,D_SYNC_PULSE2ND=>n3,D_TXPLL_LOL_TO_ND=>n4, + CH0_FF_RX_F_CLK=>n49,CH1_FF_RX_F_CLK=>n5,CH0_FF_RX_H_CLK=>n50,CH1_FF_RX_H_CLK=>n6, + CH0_FF_TX_F_CLK=>n51,CH1_FF_TX_F_CLK=>n7,CH0_FF_TX_H_CLK=>n52,CH1_FF_TX_H_CLK=>n8, + CH0_FF_RX_PCLK=>n53,CH1_FF_RX_PCLK=>n9,CH0_FF_TX_PCLK=>n54,CH1_FF_TX_PCLK=>tx_pclk_c, + CH0_FF_RX_D_0=>n55,CH1_FF_RX_D_0=>rxdata(0),CH0_FF_RX_D_1=>n56,CH1_FF_RX_D_1=>rxdata(1), + CH0_FF_RX_D_2=>n57,CH1_FF_RX_D_2=>rxdata(2),CH0_FF_RX_D_3=>n58,CH1_FF_RX_D_3=>rxdata(3), + CH0_FF_RX_D_4=>n59,CH1_FF_RX_D_4=>rxdata(4),CH0_FF_RX_D_5=>n60,CH1_FF_RX_D_5=>rxdata(5), + CH0_FF_RX_D_6=>n61,CH1_FF_RX_D_6=>rxdata(6),CH0_FF_RX_D_7=>n62,CH1_FF_RX_D_7=>rxdata(7), + CH0_FF_RX_D_8=>n63,CH1_FF_RX_D_8=>rx_k(0),CH0_FF_RX_D_9=>n64,CH1_FF_RX_D_9=>rx_disp_err(0), + CH0_FF_RX_D_10=>n65,CH1_FF_RX_D_10=>rx_cv_err(0),CH0_FF_RX_D_11=>n66, + CH1_FF_RX_D_11=>n10,CH0_FF_RX_D_12=>n67,CH1_FF_RX_D_12=>n68,CH0_FF_RX_D_13=>n69, + CH1_FF_RX_D_13=>n70,CH0_FF_RX_D_14=>n71,CH1_FF_RX_D_14=>n72,CH0_FF_RX_D_15=>n73, + CH1_FF_RX_D_15=>n74,CH0_FF_RX_D_16=>n75,CH1_FF_RX_D_16=>n76,CH0_FF_RX_D_17=>n77, + CH1_FF_RX_D_17=>n78,CH0_FF_RX_D_18=>n79,CH1_FF_RX_D_18=>n80,CH0_FF_RX_D_19=>n81, + CH1_FF_RX_D_19=>n82,CH0_FF_RX_D_20=>n83,CH1_FF_RX_D_20=>n84,CH0_FF_RX_D_21=>n85, + CH1_FF_RX_D_21=>n86,CH0_FF_RX_D_22=>n87,CH1_FF_RX_D_22=>n88,CH0_FF_RX_D_23=>n89, + CH1_FF_RX_D_23=>n11,CH0_FFS_PCIE_DONE=>n90,CH1_FFS_PCIE_DONE=>n12,CH0_FFS_PCIE_CON=>n91, + CH1_FFS_PCIE_CON=>n13,CH0_FFS_RLOS=>n92,CH1_FFS_RLOS=>rx_los_low_s_c, + CH0_FFS_LS_SYNC_STATUS=>n93,CH1_FFS_LS_SYNC_STATUS=>lsm_status_s,CH0_FFS_CC_UNDERRUN=>n94, + CH1_FFS_CC_UNDERRUN=>ctc_urun_s,CH0_FFS_CC_OVERRUN=>n95,CH1_FFS_CC_OVERRUN=>ctc_orun_s, + CH0_FFS_RXFBFIFO_ERROR=>n96,CH1_FFS_RXFBFIFO_ERROR=>n14,CH0_FFS_TXFBFIFO_ERROR=>n97, + CH1_FFS_TXFBFIFO_ERROR=>n15,CH0_FFS_RLOL=>n98,CH1_FFS_RLOL=>rx_cdr_lol_s_c, + CH0_FFS_SKP_ADDED=>n99,CH1_FFS_SKP_ADDED=>ctc_ins_s,CH0_FFS_SKP_DELETED=>n100, + CH1_FFS_SKP_DELETED=>ctc_del_s,CH0_LDR_RX2CORE=>n101,CH1_LDR_RX2CORE=>n112, + D_SCIRDATA0=>sci_rddata(0),D_SCIRDATA1=>sci_rddata(1),D_SCIRDATA2=>sci_rddata(2), + D_SCIRDATA3=>sci_rddata(3),D_SCIRDATA4=>sci_rddata(4),D_SCIRDATA5=>sci_rddata(5), + D_SCIRDATA6=>sci_rddata(6),D_SCIRDATA7=>sci_rddata(7),D_SCIINT=>sci_int, + D_SCAN_OUT_0=>n16,D_SCAN_OUT_1=>n17,D_SCAN_OUT_2=>n18,D_SCAN_OUT_3=>n19, + D_SCAN_OUT_4=>n20,D_SCAN_OUT_5=>n21,D_SCAN_OUT_6=>n22,D_SCAN_OUT_7=>n23, + D_COUT0=>n24,D_COUT1=>n25,D_COUT2=>n26,D_COUT3=>n27,D_COUT4=>n28,D_COUT5=>n29, + D_COUT6=>n30,D_COUT7=>n31,D_COUT8=>n32,D_COUT9=>n33,D_COUT10=>n34,D_COUT11=>n35, + D_COUT12=>n36,D_COUT13=>n37,D_COUT14=>n38,D_COUT15=>n39,D_COUT16=>n40, + D_COUT17=>n41,D_COUT18=>n42,D_COUT19=>n43,D_REFCLKI=>pll_refclki,D_FFS_PLOL=>n46); + n45 <= '1' ; + n44 <= '0' ; + n1 <= 'Z' ; + n2 <= 'Z' ; + n3 <= 'Z' ; + n4 <= 'Z' ; + n5 <= 'Z' ; + n6 <= 'Z' ; + n7 <= 'Z' ; + n8 <= 'Z' ; + n9 <= 'Z' ; + n10 <= 'Z' ; + n11 <= 'Z' ; + n12 <= 'Z' ; + n13 <= 'Z' ; + n14 <= 'Z' ; + n15 <= 'Z' ; + n16 <= 'Z' ; + n17 <= 'Z' ; + n18 <= 'Z' ; + n19 <= 'Z' ; + n20 <= 'Z' ; + n21 <= 'Z' ; + n22 <= 'Z' ; + n23 <= 'Z' ; + n24 <= 'Z' ; + n25 <= 'Z' ; + n26 <= 'Z' ; + n27 <= 'Z' ; + n28 <= 'Z' ; + n29 <= 'Z' ; + n30 <= 'Z' ; + n31 <= 'Z' ; + n32 <= 'Z' ; + n33 <= 'Z' ; + n34 <= 'Z' ; + n35 <= 'Z' ; + n36 <= 'Z' ; + n37 <= 'Z' ; + n38 <= 'Z' ; + n39 <= 'Z' ; + n40 <= 'Z' ; + n41 <= 'Z' ; + n42 <= 'Z' ; + n43 <= 'Z' ; + n46 <= 'Z' ; + n103 <= '0' ; + n102 <= '1' ; + n47 <= 'Z' ; + n48 <= 'Z' ; + n49 <= 'Z' ; + n50 <= 'Z' ; + n51 <= 'Z' ; + n52 <= 'Z' ; + n53 <= 'Z' ; + n54 <= 'Z' ; + n55 <= 'Z' ; + n56 <= 'Z' ; + n57 <= 'Z' ; + n58 <= 'Z' ; + n59 <= 'Z' ; + n60 <= 'Z' ; + n61 <= 'Z' ; + n62 <= 'Z' ; + n63 <= 'Z' ; + n64 <= 'Z' ; + n65 <= 'Z' ; + n66 <= 'Z' ; + n67 <= 'Z' ; + n68 <= 'Z' ; + n69 <= 'Z' ; + n70 <= 'Z' ; + n71 <= 'Z' ; + n72 <= 'Z' ; + n73 <= 'Z' ; + n74 <= 'Z' ; + n75 <= 'Z' ; + n76 <= 'Z' ; + n77 <= 'Z' ; + n78 <= 'Z' ; + n79 <= 'Z' ; + n80 <= 'Z' ; + n81 <= 'Z' ; + n82 <= 'Z' ; + n83 <= 'Z' ; + n84 <= 'Z' ; + n85 <= 'Z' ; + n86 <= 'Z' ; + n87 <= 'Z' ; + n88 <= 'Z' ; + n89 <= 'Z' ; + n90 <= 'Z' ; + n91 <= 'Z' ; + n92 <= 'Z' ; + n93 <= 'Z' ; + n94 <= 'Z' ; + n95 <= 'Z' ; + n96 <= 'Z' ; + n97 <= 'Z' ; + n98 <= 'Z' ; + n99 <= 'Z' ; + n100 <= 'Z' ; + n101 <= 'Z' ; + n112 <= 'Z' ; + rsl_inst: component sgmii_ecp5rsl_core port map (rui_rst=>rsl_rst,rui_serdes_rst_dual_c=>serdes_rst_dual_c, + rui_rst_dual_c=>rst_dual_c,rui_rsl_disable=>rsl_disable,rui_tx_ref_clk=>pll_refclki, + rui_tx_serdes_rst_c=>tx_serdes_rst_c,rui_tx_pcs_rst_c(3)=>n122, + rui_tx_pcs_rst_c(2)=>n122,rui_tx_pcs_rst_c(1)=>n122,rui_tx_pcs_rst_c(0)=>tx_pcs_rst_c, + rdi_pll_lol=>pll_lol_c,rui_rx_ref_clk=>rxrefclk,rui_rx_serdes_rst_c(3)=>n122, + rui_rx_serdes_rst_c(2)=>n122,rui_rx_serdes_rst_c(1)=>n122,rui_rx_serdes_rst_c(0)=>rx_serdes_rst_c, + rui_rx_pcs_rst_c(3)=>n122,rui_rx_pcs_rst_c(2)=>n122,rui_rx_pcs_rst_c(1)=>n122, + rui_rx_pcs_rst_c(0)=>rx_pcs_rst_c,rdi_rx_los_low_s(3)=>n122,rdi_rx_los_low_s(2)=>n122, + rdi_rx_los_low_s(1)=>n122,rdi_rx_los_low_s(0)=>rx_los_low_s_c, + rdi_rx_cdr_lol_s(3)=>n122,rdi_rx_cdr_lol_s(2)=>n122,rdi_rx_cdr_lol_s(1)=>n122, + rdi_rx_cdr_lol_s(0)=>rx_cdr_lol_s_c,rdo_serdes_rst_dual_c=>rsl_serdes_rst_dual_c, + rdo_rst_dual_c=>rsl_rst_dual_c,ruo_tx_rdy=>rsl_tx_rdy,rdo_tx_serdes_rst_c=>rsl_tx_serdes_rst_c, + rdo_tx_pcs_rst_c(3)=>n113,rdo_tx_pcs_rst_c(2)=>n114,rdo_tx_pcs_rst_c(1)=>n115, + rdo_tx_pcs_rst_c(0)=>rsl_tx_pcs_rst_c,ruo_rx_rdy=>rsl_rx_rdy,rdo_rx_serdes_rst_c(3)=>n116, + rdo_rx_serdes_rst_c(2)=>n117,rdo_rx_serdes_rst_c(1)=>n118,rdo_rx_serdes_rst_c(0)=>rsl_rx_serdes_rst_c, + rdo_rx_pcs_rst_c(3)=>n119,rdo_rx_pcs_rst_c(2)=>n120,rdo_rx_pcs_rst_c(1)=>\_Z\, + rdo_rx_pcs_rst_c(0)=>rsl_rx_pcs_rst_c); + n111 <= '1' ; + n110 <= '0' ; + n122 <= '0' ; + n121 <= '1' ; + n113 <= 'Z' ; + n114 <= 'Z' ; + n115 <= 'Z' ; + n116 <= 'Z' ; + n117 <= 'Z' ; + n118 <= 'Z' ; + n119 <= 'Z' ; + n120 <= 'Z' ; + \_Z\ <= 'Z' ; + sll_inst: component sgmii_ecp5sll_core port map (sli_rst=>sli_rst,sli_refclk=>pll_refclki, + sli_pclk=>tx_pclk_c,sli_div2_rate=>gnd,sli_div11_rate=>gnd,sli_gear_mode=>gnd, + sli_cpri_mode(2)=>gnd,sli_cpri_mode(1)=>gnd,sli_cpri_mode(0)=>gnd, + sli_pcie_mode=>gnd,slo_plol=>pll_lol_c); + n124 <= '1' ; + n123 <= '0' ; + gnd <= '0' ; + pwr <= '1' ; + +end architecture v1; + diff --git a/gbe_trb/media/ecp5/pcstest/sgmii_ecp5_softlogic.v b/gbe_trb/media/ecp5/pcstest/sgmii_ecp5_softlogic.v new file mode 100644 index 0000000..69a023d --- /dev/null +++ b/gbe_trb/media/ecp5/pcstest/sgmii_ecp5_softlogic.v @@ -0,0 +1,2003 @@ + + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2016 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : RSL- Reset Sequence Logic +// File : rsl_core.v +// Title : Top-level file for RSL +// Dependencies : 1. +// : 2. +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : BM +// Mod. Date : October 28, 2013 +// Changes Made : Initial Creation +// ----------------------------------------------------------------------------- +// Version : 1.1 +// Author(s) : BM +// Mod. Date : November 06, 2013 +// Changes Made : Tx/Rx separation, ready port code exclusion +// ----------------------------------------------------------------------------- +// Version : 1.2 +// Author(s) : BM +// Mod. Date : June 13, 2014 +// Changes Made : Updated Rx PCS reset method +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// Version : 1.3 +// Author(s) : UA +// Mod. Date : Dec 19, 2014 +// Changes Made : Added new parameter fro PCIE +// ----------------------------------------------------------------------------- +// Version : 1.31 +// Author(s) : BM/UM +// Mod. Date : Feb 23, 2016 +// Changes Made : Behavior of rx_rdy output modified. The output rx_rdy +// and the rx_rdy wait counter are reset to zero on +// LOL or LOS. Reverted back the counter value change for PCIE. +// ----------------------------------------------------------------------------- +// Version : 1.4 +// Author(s) : EB +// Mod. Date: : March 21, 2017 +// Changes Made : +// ----------------------------------------------------------------------------- +// Version : 1.5 +// Author(s) : ES +// Mod. Date: : May 8, 2017 +// Changes Made : Implemented common RSL behaviour as proposed by BM. +// ============================================================================= + +`timescale 1ns/10ps + +module sgmii_ecp5rsl_core ( + // ------------ Inputs + // Common + rui_rst, // Active high reset for the RSL module + rui_serdes_rst_dual_c, // SERDES macro reset user command + rui_rst_dual_c, // PCS dual reset user command + rui_rsl_disable, // Active high signal that disables all reset outputs of RSL + // Tx + rui_tx_ref_clk, // Tx reference clock + rui_tx_serdes_rst_c, // Tx SERDES reset user command + rui_tx_pcs_rst_c, // Tx lane reset user command + rdi_pll_lol, // Tx PLL Loss of Lock status input from the SERDES + // Rx + rui_rx_ref_clk, // Rx reference clock + rui_rx_serdes_rst_c, // SERDES Receive channel reset user command + rui_rx_pcs_rst_c, // Rx lane reset user command + rdi_rx_los_low_s, // Receive loss of signal status input from SERDES + rdi_rx_cdr_lol_s, // Receive CDR loss of lock status input from SERDES + + // ------------ Outputs + // Common + rdo_serdes_rst_dual_c, // SERDES macro reset command output + rdo_rst_dual_c, // PCS dual reset command output + // Tx + ruo_tx_rdy, // Tx lane ready status output + rdo_tx_serdes_rst_c, // SERDES Tx reset command output + rdo_tx_pcs_rst_c, // PCS Tx lane reset command output + // Rx + ruo_rx_rdy, // Rx lane ready status output + rdo_rx_serdes_rst_c, // SERDES Rx channel reset command output + rdo_rx_pcs_rst_c // PCS Rx lane reset command output + ); + +// ------------ Module parameters +`ifdef NUM_CHANNELS + parameter pnum_channels = `NUM_CHANNELS; // 1,2,4 +`else + parameter pnum_channels = 1; +`endif + +`ifdef PCIE + parameter pprotocol = "PCIE"; +`else + parameter pprotocol = ""; +`endif + +`ifdef RX_ONLY + parameter pserdes_mode = "RX ONLY"; +`else + `ifdef TX_ONLY + parameter pserdes_mode = "TX ONLY"; + `else + parameter pserdes_mode = "RX AND TX"; + `endif +`endif + +`ifdef PORT_TX_RDY + parameter pport_tx_rdy = "ENABLED"; +`else + parameter pport_tx_rdy = "DISABLED"; +`endif + +`ifdef WAIT_TX_RDY + parameter pwait_tx_rdy = `WAIT_TX_RDY; +`else + parameter pwait_tx_rdy = 3000; +`endif + +`ifdef PORT_RX_RDY + parameter pport_rx_rdy = "ENABLED"; +`else + parameter pport_rx_rdy = "DISABLED"; +`endif + +`ifdef WAIT_RX_RDY + parameter pwait_rx_rdy = `WAIT_RX_RDY; +`else + parameter pwait_rx_rdy = 3000; +`endif + +// ------------ Local parameters + localparam wa_num_cycles = 1024; + localparam dac_num_cycles = 3; + localparam lreset_pwidth = 3; // reset pulse width-1, default=4-1=3 + localparam lwait_b4_trst = 781250; // 5ms wait with worst-case Fmax=156 MHz + localparam lwait_b4_trst_s = 781; // for simulation + localparam lplol_cnt_width = 20; // width for lwait_b4_trst + localparam lwait_after_plol0 = 4; + localparam lwait_b4_rrst = 180224; // total calibration time + localparam lrrst_wait_width = 20; + localparam lwait_after_rrst = 800000; // For CPRI- unused + localparam lwait_b4_rrst_s = 460; // wait cycles provided by design team + localparam lrlol_cnt_width = 19; // width for lwait_b4_rrst + localparam lwait_after_lols = (16384 * dac_num_cycles) + wa_num_cycles; // 16384 cycles * dac_num_cycles + 1024 cycles + localparam lwait_after_lols_s = 150; // wait cycles provided by design team + localparam llols_cnt_width = 18; // lols count width + localparam lrdb_max = 15; // maximum debounce count + localparam ltxr_wait_width = 12; // width of tx ready wait counter + localparam lrxr_wait_width = 12; // width of tx ready wait counter + +// ------------ input ports + input rui_rst; + input rui_serdes_rst_dual_c; + input rui_rst_dual_c; + input rui_rsl_disable; + + input rui_tx_ref_clk; + input rui_tx_serdes_rst_c; + input [3:0] rui_tx_pcs_rst_c; + input rdi_pll_lol; + + input rui_rx_ref_clk; + input [3:0] rui_rx_serdes_rst_c; + input [3:0] rui_rx_pcs_rst_c; + input [3:0] rdi_rx_los_low_s; + input [3:0] rdi_rx_cdr_lol_s; + +// ------------ output ports + output rdo_serdes_rst_dual_c; + output rdo_rst_dual_c; + + output ruo_tx_rdy; + output rdo_tx_serdes_rst_c; + output [3:0] rdo_tx_pcs_rst_c; + + output ruo_rx_rdy; + output [3:0] rdo_rx_serdes_rst_c; + output [3:0] rdo_rx_pcs_rst_c; + +// ------------ Internal registers and wires + // inputs + wire rui_rst; + wire rui_serdes_rst_dual_c; + wire rui_rst_dual_c; + wire rui_rsl_disable; + wire rui_tx_ref_clk; + wire rui_tx_serdes_rst_c; + wire [3:0] rui_tx_pcs_rst_c; + wire rdi_pll_lol; + wire rui_rx_ref_clk; + wire [3:0] rui_rx_serdes_rst_c; + wire [3:0] rui_rx_pcs_rst_c; + wire [3:0] rdi_rx_los_low_s; + wire [3:0] rdi_rx_cdr_lol_s; + + // outputs + wire rdo_serdes_rst_dual_c; + wire rdo_rst_dual_c; + wire ruo_tx_rdy; + wire rdo_tx_serdes_rst_c; + wire [3:0] rdo_tx_pcs_rst_c; + wire ruo_rx_rdy; + wire [3:0] rdo_rx_serdes_rst_c; + wire [3:0] rdo_rx_pcs_rst_c; + + // internal signals + // common + wire rsl_enable; + wire [lplol_cnt_width-1:0] wait_b4_trst; + wire [lrlol_cnt_width-1:0] wait_b4_rrst; + wire [llols_cnt_width-1:0] wait_after_lols; + reg pll_lol_p1; + reg pll_lol_p2; + reg pll_lol_p3; + // ------------ Tx + // rdo_tx_serdes_rst_c + reg [lplol_cnt_width-1:0] plol_cnt; + wire plol_cnt_tc; + + reg [2:0] txs_cnt; + reg txs_rst; + wire txs_cnt_tc; + // rdo_tx_pcs_rst_c + wire plol_fedge; + wire plol_redge; + reg waita_plol0; + reg [2:0] plol0_cnt; + wire plol0_cnt_tc; + reg [2:0] txp_cnt; + reg txp_rst; + wire txp_cnt_tc; + // ruo_tx_rdy + wire dual_or_serd_rst; + wire tx_any_pcs_rst; + wire tx_any_rst; + reg txsr_appd /* synthesis syn_keep=1 */; + reg txdpr_appd; + reg [pnum_channels-1:0] txpr_appd; + reg txr_wt_en; + reg [ltxr_wait_width-1:0] txr_wt_cnt; + wire txr_wt_tc; + reg ruo_tx_rdyr; + + // ------------ Rx + wire comb_rlos; + wire comb_rlol; + //wire rlols; + wire rx_all_well; + + //reg rlols_p1; + //reg rlols_p2; + //reg rlols_p3; + + reg rlol_p1; + reg rlol_p2; + reg rlol_p3; + reg rlos_p1; + reg rlos_p2; + reg rlos_p3; + + //reg [3:0] rdb_cnt; + //wire rdb_cnt_max; + //wire rdb_cnt_zero; + //reg rlols_db; + //reg rlols_db_p1; + + reg [3:0] rlol_db_cnt; + wire rlol_db_cnt_max; + wire rlol_db_cnt_zero; + reg rlol_db; + reg rlol_db_p1; + + reg [3:0] rlos_db_cnt; + wire rlos_db_cnt_max; + wire rlos_db_cnt_zero; + reg rlos_db; + reg rlos_db_p1; + + // rdo_rx_serdes_rst_c + reg [lrlol_cnt_width-1:0] rlol1_cnt; + wire rlol1_cnt_tc; + reg [2:0] rxs_cnt; + reg rxs_rst; + wire rxs_cnt_tc; + reg [lrrst_wait_width-1:0] rrst_cnt; + wire rrst_cnt_tc; + reg rrst_wait; + // rdo_rx_pcs_rst_c + //wire rlols_fedge; + //wire rlols_redge; + wire rlol_fedge; + wire rlol_redge; + wire rlos_fedge; + wire rlos_redge; + + reg wait_calib; + reg waita_rlols0; + reg [llols_cnt_width-1:0] rlols0_cnt; + wire rlols0_cnt_tc; + reg [2:0] rxp_cnt; + reg rxp_rst; + wire rxp_cnt_tc; + + wire rx_any_serd_rst; + reg [llols_cnt_width-1:0] rlolsz_cnt; + wire rlolsz_cnt_tc; + reg [2:0] rxp_cnt2; + reg rxp_rst2; + wire rxp_cnt2_tc; + reg [15:0] data_loop_b_cnt; + reg data_loop_b; + wire data_loop_b_tc; + + // ruo_rx_rdy + reg [pnum_channels-1:0] rxsr_appd; + reg [pnum_channels-1:0] rxpr_appd; + reg rxsdr_appd /* synthesis syn_keep=1 */; + reg rxdpr_appd; + wire rxsdr_or_sr_appd; + wire dual_or_rserd_rst; + wire rx_any_pcs_rst; + wire rx_any_rst; + reg rxr_wt_en; + reg [lrxr_wait_width-1:0] rxr_wt_cnt; + wire rxr_wt_tc; + reg ruo_rx_rdyr; + +// ================================================================== +// Start of code +// ================================================================== + assign rsl_enable = ~rui_rsl_disable; + +// ------------ rdo_serdes_rst_dual_c + assign rdo_serdes_rst_dual_c = (rui_rst&rsl_enable) | rui_serdes_rst_dual_c; + +// ------------ rdo_rst_dual_c + assign rdo_rst_dual_c = rui_rst_dual_c; + +// ------------ Setting counter values for RSL_SIM_MODE + `ifdef RSL_SIM_MODE + assign wait_b4_trst = lwait_b4_trst_s; + assign wait_b4_rrst = lwait_b4_rrst_s; + assign wait_after_lols = lwait_after_lols_s; + `else + assign wait_b4_trst = lwait_b4_trst; + assign wait_b4_rrst = lwait_b4_rrst; + assign wait_after_lols = lwait_after_lols; + `endif + +// ================================================================== +// Tx +// ================================================================== + generate + if((pserdes_mode=="RX AND TX")||(pserdes_mode=="TX ONLY")) begin + +// ------------ Synchronizing pll_lol to the tx clock + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + pll_lol_p1 <= 1'd0; + pll_lol_p2 <= 1'd0; + pll_lol_p3 <= 1'd0; + end + else begin + pll_lol_p1 <= rdi_pll_lol; + pll_lol_p2 <= pll_lol_p1; + pll_lol_p3 <= pll_lol_p2; + end + end + +// ------------ rdo_tx_serdes_rst_c + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + plol_cnt <= 'd0; + else if((pll_lol_p2==0)||(plol_cnt_tc==1)||(rdo_tx_serdes_rst_c==1)) + plol_cnt <= 'd0; + else + plol_cnt <= plol_cnt+1; + end + assign plol_cnt_tc = (plol_cnt==wait_b4_trst)?1'b1:1'b0; + + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + txs_cnt <= 'd0; // tx serdes reset pulse count + txs_rst <= 1'b0; // tx serdes reset + end + else if(plol_cnt_tc==1) + txs_rst <= 1'b1; + else if(txs_cnt_tc==1) begin + txs_cnt <= 'd0; + txs_rst <= 1'b0; + end + else if(txs_rst==1) + txs_cnt <= txs_cnt+1; + end + assign txs_cnt_tc = (txs_cnt==lreset_pwidth)?1'b1:1'b0; + + assign rdo_tx_serdes_rst_c = (rsl_enable&txs_rst)| rui_tx_serdes_rst_c; + +// ------------ rdo_tx_pcs_rst_c + assign plol_fedge = ~pll_lol_p2 & pll_lol_p3; + assign plol_redge = pll_lol_p2 & ~pll_lol_p3; + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + waita_plol0 <= 1'd0; + else if(plol_fedge==1'b1) + waita_plol0 <= 1'b1; + else if((plol0_cnt_tc==1)||(plol_redge==1)) + waita_plol0 <= 1'd0; + end + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + plol0_cnt <= 'd0; + else if((pll_lol_p2==1)||(plol0_cnt_tc==1)) + plol0_cnt <= 'd0; + else if(waita_plol0==1'b1) + plol0_cnt <= plol0_cnt+1; + end + assign plol0_cnt_tc = (plol0_cnt==lwait_after_plol0)?1'b1:1'b0; + + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + txp_cnt <= 'd0; // tx serdes reset pulse count + txp_rst <= 1'b0; // tx serdes reset + end + else if(plol0_cnt_tc==1) + txp_rst <= 1'b1; + else if(txp_cnt_tc==1) begin + txp_cnt <= 'd0; + txp_rst <= 1'b0; + end + else if(txp_rst==1) + txp_cnt <= txp_cnt+1; + end + assign txp_cnt_tc = (txp_cnt==lreset_pwidth)?1'b1:1'b0; + + genvar i; + for(i=0;i>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : SLL - Soft Loss Of Lock(LOL) Logic +// File : sll_core.v +// Title : Top-level file for SLL +// Dependencies : 1. +// : 2. +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : March 2, 2015 +// Changes Made : Initial Creation +// ============================================================================= +// REVISION HISTORY +// Version : 1.1 +// Author(s) : AV +// Mod. Date : June 8, 2015 +// Changes Made : Following updates were made +// : 1. Changed all the PLOL status logic and FSM to run +// : on sli_refclk. +// : 2. Added the HB logic for presence of tx_pclk +// : 3. Changed the lparam assignment scheme for +// : simulation purposes. +// ============================================================================= +// REVISION HISTORY +// Version : 1.2 +// Author(s) : AV +// Mod. Date : June 24, 2015 +// Changes Made : Updated the gearing logic for SDI dynamic rate change +// ============================================================================= +// REVISION HISTORY +// Version : 1.3 +// Author(s) : AV +// Mod. Date : July 14, 2015 +// Changes Made : Added the logic for dynamic rate change in CPRI +// ============================================================================= +// REVISION HISTORY +// Version : 1.4 +// Author(s) : AV +// Mod. Date : August 21, 2015 +// Changes Made : Added the logic for dynamic rate change of 5G CPRI & +// PCIe. +// ============================================================================= +// REVISION HISTORY +// Version : 1.5 +// Author(s) : ES/EB +// Mod. Date : March 21, 2017 +// Changes Made : 1. Added pdiff_sync signal to syncrhonize pcount_diff +// : to sli_refclk. +// : 2. Updated terminal count logic for PCIe 5G +// : 3. Modified checking of pcount_diff in SLL state +// : machine to cover actual count +// : (from 16-bits to 22-bits) +// ============================================================================= +// REVISION HISTORY +// Version : 1.6 +// Author(s) : ES +// Mod. Date : April 19, 2017 +// Changes Made : 1. Added registered lock and unlock signal from +// pdiff_sync to totally decouple pcount_diff from +// SLL state machine. +// : 2. Modified LPCLK_TC_4 to 1:1 clock ratio when CPRI +// is operating @ 4.9125Gbps data rate. +// ============================================================================= +`timescale 1ns/10ps + +module sgmii_ecp5sll_core ( + //Reset and Clock inputs + sli_rst, //Active high asynchronous reset input + sli_refclk, //Refclk input to the Tx PLL + sli_pclk, //Tx pclk output from the PCS + + //Control inputs + sli_div2_rate, //Divide by 2 control; 0 - Full rate; 1 - Half rate + sli_div11_rate, //Divide by 11 control; 0 - Full rate; 1 - Div by 11 + sli_gear_mode, //Gear mode control for PCS; 0 - 8/10; 1- 16/20 + sli_cpri_mode, //Mode of operation specific to CPRI protocol + sli_pcie_mode, //Mode of operation specific to PCIe mode (2.5G or 5G) + + //LOL Output + slo_plol //Tx PLL Loss of Lock output to the user logic + ); + +// Inputs +input sli_rst; +input sli_refclk; +input sli_pclk; +input sli_div2_rate; +input sli_div11_rate; +input sli_gear_mode; +input [2:0] sli_cpri_mode; +input sli_pcie_mode; + +// Outputs +output slo_plol; + + +// Parameters +parameter PPROTOCOL = "PCIE"; //Protocol selected by the User +parameter PLOL_SETTING = 0; //PLL LOL setting. Possible values are 0,1,2,3 +parameter PDYN_RATE_CTRL = "DISABLED"; //PCS Dynamic Rate control +parameter PPCIE_MAX_RATE = "2.5"; //PCIe max data rate +parameter PDIFF_VAL_LOCK = 20; //Differential count value for Lock +parameter PDIFF_VAL_UNLOCK = 39; //Differential count value for Unlock +parameter PPCLK_TC = 65535; //Terminal count value for counter running on sli_pclk +parameter PDIFF_DIV11_VAL_LOCK = 3; //Differential count value for Lock for SDI Div11 +parameter PDIFF_DIV11_VAL_UNLOCK = 3; //Differential count value for Unlock for SDI Div11 +parameter PPCLK_DIV11_TC = 2383; //Terminal count value (SDI Div11) for counter running on sli_pclk + + +// Local Parameters +localparam [1:0] LPLL_LOSS_ST = 2'b00; //PLL Loss state +localparam [1:0] LPLL_PRELOSS_ST = 2'b01; //PLL Pre-Loss state +localparam [1:0] LPLL_PRELOCK_ST = 2'b10; //PLL Pre-Lock state +localparam [1:0] LPLL_LOCK_ST = 2'b11; //PLL Lock state +`ifdef RSL_SIM_MODE +localparam [15:0] LRCLK_TC = 16'd63; //Terminal count value for counter running on sli_refclk +`else +localparam [15:0] LRCLK_TC = 16'd65535; //Terminal count value for counter running on sli_refclk +`endif +localparam [15:0] LRCLK_TC_PUL_WIDTH = 16'd50; //Pulse width for the Refclk terminal count pulse +localparam [7:0] LHB_WAIT_CNT = 8'd255; //Wait count for the Heartbeat signal + +// Local Parameters related to the CPRI dynamic modes +// Terminal count values for the four CPRI modes +localparam LPCLK_TC_0 = 32768; +localparam LPCLK_TC_1 = 65536; +localparam LPCLK_TC_2 = 131072; +localparam LPCLK_TC_3 = 163840; +localparam LPCLK_TC_4 = 65536; + +// Lock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_LOCK_00 = 9; localparam LPDIFF_LOCK_10 = 19; localparam LPDIFF_LOCK_20 = 39; localparam LPDIFF_LOCK_30 = 49; localparam LPDIFF_LOCK_40 = 19; +localparam LPDIFF_LOCK_01 = 9; localparam LPDIFF_LOCK_11 = 19; localparam LPDIFF_LOCK_21 = 39; localparam LPDIFF_LOCK_31 = 49; localparam LPDIFF_LOCK_41 = 19; +localparam LPDIFF_LOCK_02 = 49; localparam LPDIFF_LOCK_12 = 98; localparam LPDIFF_LOCK_22 = 196; localparam LPDIFF_LOCK_32 = 245; localparam LPDIFF_LOCK_42 = 98; +localparam LPDIFF_LOCK_03 = 131; localparam LPDIFF_LOCK_13 = 262; localparam LPDIFF_LOCK_23 = 524; localparam LPDIFF_LOCK_33 = 655; localparam LPDIFF_LOCK_43 = 262; + +// Unlock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_UNLOCK_00 = 19; localparam LPDIFF_UNLOCK_10 = 39; localparam LPDIFF_UNLOCK_20 = 78; localparam LPDIFF_UNLOCK_30 = 98; localparam LPDIFF_UNLOCK_40 = 39; +localparam LPDIFF_UNLOCK_01 = 65; localparam LPDIFF_UNLOCK_11 = 131; localparam LPDIFF_UNLOCK_21 = 262; localparam LPDIFF_UNLOCK_31 = 327; localparam LPDIFF_UNLOCK_41 = 131; +localparam LPDIFF_UNLOCK_02 = 72; localparam LPDIFF_UNLOCK_12 = 144; localparam LPDIFF_UNLOCK_22 = 288; localparam LPDIFF_UNLOCK_32 = 360; localparam LPDIFF_UNLOCK_42 = 144; +localparam LPDIFF_UNLOCK_03 = 196; localparam LPDIFF_UNLOCK_13 = 393; localparam LPDIFF_UNLOCK_23 = 786; localparam LPDIFF_UNLOCK_33 = 983; localparam LPDIFF_UNLOCK_43 = 393; + +// Input and Output reg and wire declarations +wire sli_rst; +wire sli_refclk; +wire sli_pclk; +wire sli_div2_rate; +wire sli_div11_rate; +wire sli_gear_mode; +wire [2:0] sli_cpri_mode; +wire sli_pcie_mode; +wire slo_plol; + +//-------------- Internal signals reg and wire declarations -------------------- + +//Signals running on sli_refclk +reg [15:0] rcount; //16-bit Counter +reg rtc_pul; //Terminal count pulse +reg rtc_pul_p1; //Terminal count pulse pipeline +reg rtc_ctrl; //Terminal count pulse control + +reg [7:0] rhb_wait_cnt; //Heartbeat wait counter + +//Heatbeat synchronization and pipeline registers +wire rhb_sync; +reg rhb_sync_p2; +reg rhb_sync_p1; + +//Pipeling registers for dynamic control mode +wire rgear; +wire rdiv2; +wire rdiv11; +reg rgear_p1; +reg rdiv2_p1; +reg rdiv11_p1; + +reg rstat_pclk; //Pclk presence/absence status + +reg [21:0] rcount_tc; //Tx_pclk terminal count register +reg [15:0] rdiff_comp_lock; //Differential comparison value for Lock +reg [15:0] rdiff_comp_unlock; //Differential compariosn value for Unlock + +wire rpcie_mode; //PCIe mode signal synchronized to refclk +reg rpcie_mode_p1; //PCIe mode pipeline register + +wire rcpri_mod_ch_sync; //CPRI mode change synchronized to refclk +reg rcpri_mod_ch_p1; //CPRI mode change pipeline register +reg rcpri_mod_ch_p2; //CPRI mode change pipeline register +reg rcpri_mod_ch_st; //CPRI mode change status + +reg [1:0] sll_state; //Current-state register for LOL FSM + +reg pll_lock; //PLL Lock signal + +//Signals running on sli_pclk +//Synchronization and pipeline registers +wire ppul_sync; +reg ppul_sync_p1; +reg ppul_sync_p2; +reg ppul_sync_p3; + +wire pdiff_sync; +reg pdiff_sync_p1; + +reg [21:0] pcount; //22-bit counter +reg [21:0] pcount_diff; //Differential value between Tx_pclk counter and theoritical value + +//Heartbeat counter and heartbeat signal running on pclk +reg [2:0] phb_cnt; +reg phb; + +//CPRI dynamic mode releated signals +reg [2:0] pcpri_mode; +reg pcpri_mod_ch; + +//Assignment scheme changed mainly for simulation purpose +wire [15:0] LRCLK_TC_w; +assign LRCLK_TC_w = LRCLK_TC; + +reg unlock; +reg lock; + +//Heartbeat synchronization +sync # (.PDATA_RST_VAL(0)) phb_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (phb), + .data_out(rhb_sync) + ); + + +//Terminal count pulse synchronization +sync # (.PDATA_RST_VAL(0)) rtc_sync_inst ( + .clk (sli_pclk), + .rst (sli_rst), + .data_in (rtc_pul), + .data_out(ppul_sync) + ); + +//Differential value logic update synchronization +sync # (.PDATA_RST_VAL(0)) pdiff_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (ppul_sync), + .data_out(pdiff_sync) + ); + +//Gear mode synchronization +sync # (.PDATA_RST_VAL(0)) gear_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_gear_mode), + .data_out(rgear) + ); + +//Div2 synchronization +sync # (.PDATA_RST_VAL(0)) div2_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div2_rate), + .data_out(rdiv2) + ); + +//Div11 synchronization +sync # (.PDATA_RST_VAL(0)) div11_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div11_rate), + .data_out(rdiv11) + ); + +//CPRI mode change synchronization +sync # (.PDATA_RST_VAL(0)) cpri_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (pcpri_mod_ch), + .data_out(rcpri_mod_ch_sync) + ); + +//PCIe mode change synchronization +sync # (.PDATA_RST_VAL(0)) pcie_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_pcie_mode), + .data_out(rpcie_mode) + ); + +// ============================================================================= +// Synchronized Lock/Unlock signals +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + unlock <= 1'b0; + lock <= 1'b0; + pdiff_sync_p1 <= 1'b0; + end + else begin + pdiff_sync_p1 <= pdiff_sync; + if (unlock) begin + unlock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : unlock; + end + else begin + unlock <= pdiff_sync ? (pcount_diff[21:0] > {6'd0, rdiff_comp_unlock}) : 1'b0; + end + if (lock) begin + lock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : lock; + end + else begin + lock <= pdiff_sync ? (pcount_diff[21:0] <= {6'd0, rdiff_comp_lock}) : 1'b0; + end + end +end + +// ============================================================================= +// Refclk Counter, pulse generation logic and Heartbeat monitor logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount <= 16'd0; + rtc_pul <= 1'b0; + rtc_ctrl <= 1'b0; + rtc_pul_p1 <= 1'b0; + end + else begin + //Counter logic + if ((rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + if (rtc_ctrl == 1'b1) begin + rcount <= LRCLK_TC_PUL_WIDTH; + end + end + else begin + if (rcount != LRCLK_TC_w) begin + rcount <= rcount + 1; + end + else begin + rcount <= 16'd0; + end + end + + //Pulse control logic + if (rcount == LRCLK_TC_w - 1) begin + rtc_ctrl <= 1'b1; + end + + //Pulse Generation logic + if (rtc_ctrl == 1'b1) begin + if ((rcount == LRCLK_TC_w) || (rcount < LRCLK_TC_PUL_WIDTH)) begin + rtc_pul <= 1'b1; + end + else begin + rtc_pul <= 1'b0; + end + end + + rtc_pul_p1 <= rtc_pul; + end +end + + +// ============================================================================= +// Heartbeat synchronization & monitor logic and Dynamic mode pipeline logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rhb_sync_p1 <= 1'b0; + rhb_sync_p2 <= 1'b0; + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + rgear_p1 <= 1'b0; + rdiv2_p1 <= 1'b0; + rdiv11_p1 <= 1'b0; + rcpri_mod_ch_p1 <= 1'b0; + rcpri_mod_ch_p2 <= 1'b0; + rcpri_mod_ch_st <= 1'b0; + rpcie_mode_p1 <= 1'b0; + + end + else begin + //Pipeline stages for the Heartbeat + rhb_sync_p1 <= rhb_sync; + rhb_sync_p2 <= rhb_sync_p1; + + //Pipeline stages of the Dynamic rate control signals + rgear_p1 <= rgear; + rdiv2_p1 <= rdiv2; + rdiv11_p1 <= rdiv11; + + //Pipeline stage for PCIe mode + rpcie_mode_p1 <= rpcie_mode; + + //Pipeline stage for CPRI mode change + rcpri_mod_ch_p1 <= rcpri_mod_ch_sync; + rcpri_mod_ch_p2 <= rcpri_mod_ch_p1; + + //CPRI mode change status logic + if (rcpri_mod_ch_p1^rcpri_mod_ch_sync == 1'b1) begin + rcpri_mod_ch_st <= 1'b1; + end + + //Heartbeat wait counter and monitor logic + if (rtc_ctrl == 1'b1) begin + if (rhb_sync_p1 == 1'b1 && rhb_sync_p2 == 1'b0) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b1; + end + else if (rhb_wait_cnt == LHB_WAIT_CNT) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + end + else begin + rhb_wait_cnt <= rhb_wait_cnt + 1; + end + end + end +end + + +// ============================================================================= +// Pipleline registers for the TC pulse and CPRI mode change logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + ppul_sync_p1 <= 1'b0; + ppul_sync_p2 <= 1'b0; + ppul_sync_p3 <= 1'b0; + pcpri_mode <= 3'b0; + pcpri_mod_ch <= 1'b0; + end + else begin + ppul_sync_p1 <= ppul_sync; + ppul_sync_p2 <= ppul_sync_p1; + ppul_sync_p3 <= ppul_sync_p2; + + //CPRI mode change logic + pcpri_mode <= sli_cpri_mode; + + if (pcpri_mode != sli_cpri_mode) begin + pcpri_mod_ch <= ~pcpri_mod_ch; + end + end +end + + +// ============================================================================= +// Terminal count logic +// ============================================================================= + +//For SDI protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "SDI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 11 is enabled + if (rdiv11 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_DIV11_TC; + rdiff_comp_lock <= PDIFF_DIV11_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_DIV11_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_DIV11_TC[20:0], 1'b0}; + rdiff_comp_lock <= {PDIFF_DIV11_VAL_LOCK[14:0], 1'b0}; + rdiff_comp_unlock <= {PDIFF_DIV11_VAL_UNLOCK[14:0], 1'b0}; + end + end + //Div by 2 is enabled + else if (rdiv2 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end + //Both div by 11 and div by 2 are disabled + else begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_TC[20:0],1'b0}; + rdiff_comp_lock <= {PDIFF_VAL_LOCK[14:0],1'b0}; + rdiff_comp_unlock <= {PDIFF_VAL_UNLOCK[14:0],1'b0}; + end + end + end +end +end +endgenerate + +//For G8B10B protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "G8B10B")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 2 is enabled + if (rdiv2 == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + + +//For CPRI protocol with Dynamic rate control is disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "CPRI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for CPRI protocol + //Only if there is a change in the rate mode from the default + if (rcpri_mod_ch_st == 1'b1) begin + if (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) begin + case(sli_cpri_mode) + 3'd0 : begin //For 0.6Gbps + rcount_tc <= LPCLK_TC_0; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_01; + rdiff_comp_unlock <= LPDIFF_UNLOCK_01; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_02; + rdiff_comp_unlock <= LPDIFF_UNLOCK_02; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_03; + rdiff_comp_unlock <= LPDIFF_UNLOCK_03; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + + 3'd1 : begin //For 1.2Gbps + rcount_tc <= LPCLK_TC_1; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_11; + rdiff_comp_unlock <= LPDIFF_UNLOCK_11; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_12; + rdiff_comp_unlock <= LPDIFF_UNLOCK_12; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_13; + rdiff_comp_unlock <= LPDIFF_UNLOCK_13; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + endcase + end + + 3'd2 : begin //For 2.4Gbps + rcount_tc <= LPCLK_TC_2; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_21; + rdiff_comp_unlock <= LPDIFF_UNLOCK_21; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_22; + rdiff_comp_unlock <= LPDIFF_UNLOCK_22; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_23; + rdiff_comp_unlock <= LPDIFF_UNLOCK_23; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + endcase + end + + 3'd3 : begin //For 3.07Gbps + rcount_tc <= LPCLK_TC_3; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_30; + rdiff_comp_unlock <= LPDIFF_UNLOCK_30; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_31; + rdiff_comp_unlock <= LPDIFF_UNLOCK_31; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_32; + rdiff_comp_unlock <= LPDIFF_UNLOCK_32; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_33; + rdiff_comp_unlock <= LPDIFF_UNLOCK_33; + end + endcase + end + + 3'd4 : begin //For 4.9125bps + rcount_tc <= LPCLK_TC_4; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_41; + rdiff_comp_unlock <= LPDIFF_UNLOCK_41; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_42; + rdiff_comp_unlock <= LPDIFF_UNLOCK_42; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_43; + rdiff_comp_unlock <= LPDIFF_UNLOCK_43; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + endcase + end + + default : begin + rcount_tc <= LPCLK_TC_0; + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + end + else begin + //If there is no change in the CPRI rate mode from default + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + +//For PCIe protocol with Dynamic rate control disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "PCIE")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + if (PPCIE_MAX_RATE == "2.5") begin + //2.5G mode is enabled + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //5G mode is enabled + if (rpcie_mode == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //2.5G mode is enabled + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + end + end +end +end +endgenerate + +//For all protocols other than CPRI & PCIe +generate +if ((PDYN_RATE_CTRL == "DISABLED") && ((PPROTOCOL != "CPRI") && (PPROTOCOL != "PCIE"))) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for all protocols other than CPRI & PCIe + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end +end +end +endgenerate + + +// ============================================================================= +// Tx_pclk counter, Heartbeat and Differential value logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pcount <= 22'd0; + pcount_diff <= 22'd65535; + phb_cnt <= 3'd0; + phb <= 1'b0; + end + else begin + //Counter logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount <= 22'd0; + end + else begin + pcount <= pcount + 1; + end + + //Heartbeat logic + phb_cnt <= phb_cnt + 1; + + if ((phb_cnt < 3'd4) && (phb_cnt >= 3'd0)) begin + phb <= 1'b1; + end + else begin + phb <= 1'b0; + end + + //Differential value logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount_diff <= rcount_tc + ~(pcount) + 1; + end + else if (ppul_sync_p2 == 1'b1 && ppul_sync_p3 == 1'b0) begin + if (pcount_diff[21] == 1'b1) begin + pcount_diff <= ~(pcount_diff) + 1; + end + end + end +end + + +// ============================================================================= +// State transition logic for SLL FSM +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + //Reasons to declare an immediate loss - Absence of Tx_pclk, Dynamic rate change for SDI or CPRI + if ((rstat_pclk == 1'b0) || (rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || + (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_LOSS_ST; + end + else if (lock) begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_PRELOCK_ST; + end + else begin + sll_state <= LPLL_LOCK_ST; + end + end + end + end + + LPLL_LOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + end + + LPLL_PRELOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + + LPLL_PRELOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_PRELOSS_ST; + end + else if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + end + end + + default: begin + sll_state <= LPLL_LOSS_ST; + end + endcase + end + end +end + + +// ============================================================================= +// Logic for Tx PLL Lock +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pll_lock <= 1'b0; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + pll_lock <= 1'b0; + end + + LPLL_LOCK_ST : begin + pll_lock <= 1'b1; + end + + LPLL_PRELOSS_ST : begin + pll_lock <= 1'b0; + end + + default: begin + pll_lock <= 1'b0; + end + endcase + end +end + +assign slo_plol = ~(pll_lock); + +endmodule + + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : Synchronizer Logic +// File : sync.v +// Title : Synchronizer module +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : July 7, 2015 +// Changes Made : Initial Creation +// ----------------------------------------------------------------------------- +// Version : 1.1 +// Author(s) : EB +// Mod. Date : March 21, 2017 +// Changes Made : +// ============================================================================= + +`ifndef PCS_SYNC_MODULE +`define PCS_SYNC_MODULE +module sync ( + clk, + rst, + data_in, + data_out + ); + +input clk; //Clock in which the async data needs to be synchronized to +input rst; //Active high reset +input data_in; //Asynchronous data +output data_out; //Synchronized data + +parameter PDATA_RST_VAL = 0; //Reset value for the registers + +reg data_p1; +reg data_p2; + +// ============================================================================= +// Synchronization logic +// ============================================================================= +always @(posedge clk or posedge rst) begin + if (rst == 1'b1) begin + data_p1 <= PDATA_RST_VAL; + data_p2 <= PDATA_RST_VAL; + end + else begin + data_p1 <= data_in; + data_p2 <= data_p1; + end +end + +assign data_out = data_p2; + +endmodule +`endif + diff --git a/gbe_trb/media/ecp5/pmi_fifo_dcEEan163201024102410241818p12701671.ngo b/gbe_trb/media/ecp5/pmi_fifo_dcEEan163201024102410241818p12701671.ngo new file mode 100644 index 0000000000000000000000000000000000000000..4114d270f54e34823778b22a55c82f6070a9b2bf GIT binary patch literal 73162 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

5vgp6SZ_q2&tJ` zx_E>XrWScKp=*R%c4kvW*C@5PGD6a+rB^~oF>2YvBcwRB^p;W!wN$dHqU!=`**7Dk QQ>kUYgpf|7mi;~d4<+~rD*ylh literal 0 HcmV?d00001 diff --git a/gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn208256208256p138702ef.ngo b/gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn208256208256p138702ef.ngo new file mode 100644 index 0000000000000000000000000000000000000000..fa136565a1b37e5a0e11bf33beab8368a228e663 GIT binary patch literal 11424 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 WEH$8XV5t#h14~>ouyhm3h5rMM*2P}{ literal 0 HcmV?d00001 diff --git a/gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn96649664p13506f63.ngo b/gbe_trb/media/ecp5/pmi_ram_dpEbnonessdn96649664p13506f63.ngo new file mode 100644 index 0000000000000000000000000000000000000000..0d70f8924a6f98455cf95fcd39c6700fd4ffbd39 GIT binary patch literal 8956 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 literal 0 HcmV?d00001 diff --git a/gbe_trb/media/ecp5/rate_resolution.v b/gbe_trb/media/ecp5/rate_resolution.v new file mode 100755 index 0000000..b9edbef --- /dev/null +++ b/gbe_trb/media/ecp5/rate_resolution.v @@ -0,0 +1,66 @@ +//************************************************************************** +// ************************************************************************* +// * LATTICE SEMICONDUCTOR CONFIDENTIAL * +// * PROPRIETARY NOTE * +// * * +// * This software contains information confidential and proprietary * +// * to Lattice Semiconductor Corporation. It shall not be reproduced * +// * in whole or in part, or transferred to other documents, or disclosed * +// * to third parties, or used for any purpose other than that for which * +// * it was obtained, without the prior written consent of Lattice * +// * Semiconductor Corporation. All rights reserved. * +// * * +// ************************************************************************* +//************************************************************************** + +`timescale 1ns/100ps + +module rate_resolution ( + gbe_mode, + sgmii_mode, + an_enable, + advertised_rate, + link_partner_rate, + non_an_rate, + + operational_rate +); + +input gbe_mode; +input sgmii_mode; +input an_enable; +input [1:0] advertised_rate; // 00=10Mbps 01=100Mbps 10=1Gbps +input [1:0] link_partner_rate; +input [1:0] non_an_rate; + +output [1:0] operational_rate; +reg [1:0] operational_rate; + + + +always @(gbe_mode or sgmii_mode or an_enable or advertised_rate or link_partner_rate or non_an_rate) begin + if (gbe_mode) begin + operational_rate <= 2'b10; // 1Gbps + end + else begin + if (an_enable) begin + if (sgmii_mode) begin + // PHY Mode + operational_rate <= advertised_rate; + end + else begin + // MAC Mode + operational_rate <= link_partner_rate; + end + end + else begin + // If auto-negotiation disabled, then this becomes active rate + operational_rate <= non_an_rate; + end + end +end + + + +endmodule + diff --git a/gbe_trb/media/ecp5/register_interface_hb.v b/gbe_trb/media/ecp5/register_interface_hb.v new file mode 100755 index 0000000..028d806 --- /dev/null +++ b/gbe_trb/media/ecp5/register_interface_hb.v @@ -0,0 +1,1393 @@ +//************************************************************************** +// ************************************************************************* +// * LATTICE SEMICONDUCTOR CONFIDENTIAL * +// * PROPRIETARY NOTE * +// * * +// * This software contains information confidential and proprietary * +// * to Lattice Semiconductor Corporation. It shall not be reproduced * +// * in whole or in part, or transferred to other documents, or disclosed * +// * to third parties, or used for any purpose other than that for which * +// * it was obtained, without the prior written consent of Lattice * +// * Semiconductor Corporation. All rights reserved. * +// * * +// ************************************************************************* +//************************************************************************** + +`timescale 1ns/100ps + +module register_interface_hb ( + + // Control Signals + rst_n, + hclk, + gbe_mode, + sgmii_mode, + + // Host Bus + hcs_n, + hwrite_n, + haddr, + hdatain, + + hdataout, + hready_n, + + // Register Inputs + mr_stat_1000base_x_fd, + mr_stat_1000base_x_hd, + mr_stat_1000base_t_fd, + mr_stat_1000base_t_hd, + + mr_stat_100base_t4, + mr_stat_100base_x_fd, + mr_stat_100base_x_hd, + mr_stat_10mbps_fd, + mr_stat_10mbps_hd, + mr_stat_100base_t2_fd, + mr_stat_100base_t2_hd, + + mr_stat_extended_stat, + mr_stat_unidir_able, + mr_stat_preamb_supr, + mr_stat_an_complete, + mr_stat_remote_fault, + mr_stat_an_able, + mr_stat_link_stat, + mr_stat_jab_det, + mr_stat_extended_cap, + + mr_page_rx, + mr_lp_adv_ability, + + // Register Outputs + mr_main_reset, + mr_loopback_enable, + mr_speed_selection, + mr_an_enable, + mr_power_down, + mr_isolate, + mr_restart_an, + mr_duplex_mode, + mr_col_test, + mr_unidir_enable, + mr_adv_ability + ); + + +input rst_n ; +input hclk ; +input gbe_mode ; +input sgmii_mode ; + +input hcs_n; +input hwrite_n; +input [5:0] haddr; +input [7:0] hdatain; + +output [7:0] hdataout; +output hready_n; + +input mr_stat_1000base_x_fd; +input mr_stat_1000base_x_hd; +input mr_stat_1000base_t_fd; +input mr_stat_1000base_t_hd; + +input mr_stat_100base_t4; +input mr_stat_100base_x_fd; +input mr_stat_100base_x_hd; +input mr_stat_10mbps_fd; +input mr_stat_10mbps_hd; +input mr_stat_100base_t2_fd; +input mr_stat_100base_t2_hd; + +input mr_stat_extended_stat; +input mr_stat_unidir_able; +input mr_stat_preamb_supr; +input mr_stat_an_complete; +input mr_stat_remote_fault; +input mr_stat_an_able; +input mr_stat_link_stat; +input mr_stat_jab_det; +input mr_stat_extended_cap; + +input mr_page_rx; +input [15:0] mr_lp_adv_ability; + +output mr_main_reset; +output mr_loopback_enable; +output [1:0] mr_speed_selection; +output mr_an_enable; +output mr_power_down; +output mr_isolate; +output mr_restart_an; +output mr_duplex_mode; +output mr_col_test; +output mr_unidir_enable; +output [15:0] mr_adv_ability; + +regs_hb regs ( + .rst_n (rst_n), + .hclk (hclk), + + .gbe_mode (gbe_mode), + .sgmii_mode (sgmii_mode), + + .hcs_n (hcs_n), + .hwrite_n (hwrite_n), + .haddr (haddr), + .hdatain (hdatain), + + .hdataout (hdataout), + .hready_n (hready_n), + + .mr_stat_1000base_x_fd (mr_stat_1000base_x_fd), + .mr_stat_1000base_x_hd (mr_stat_1000base_x_hd), + .mr_stat_1000base_t_fd (mr_stat_1000base_t_fd), + .mr_stat_1000base_t_hd (mr_stat_1000base_t_hd), + + .mr_stat_100base_t4 (mr_stat_100base_t4), + .mr_stat_100base_x_fd (mr_stat_100base_x_fd), + .mr_stat_100base_x_hd (mr_stat_100base_x_hd), + .mr_stat_10mbps_fd (mr_stat_10mbps_fd), + .mr_stat_10mbps_hd (mr_stat_10mbps_hd), + .mr_stat_100base_t2_fd (mr_stat_100base_t2_fd), + .mr_stat_100base_t2_hd (mr_stat_100base_t2_hd), + + .mr_stat_extended_stat (mr_stat_extended_stat), + .mr_stat_unidir_able (mr_stat_unidir_able), + .mr_stat_preamb_supr (mr_stat_preamb_supr), + .mr_stat_an_complete (mr_stat_an_complete), + .mr_stat_remote_fault (mr_stat_remote_fault), + .mr_stat_an_able (mr_stat_an_able), + .mr_stat_link_stat (mr_stat_link_stat), + .mr_stat_jab_det (mr_stat_jab_det), + .mr_stat_extended_cap (mr_stat_extended_cap), + + .mr_page_rx (mr_page_rx), + .mr_lp_adv_ability (mr_lp_adv_ability), + + .mr_main_reset (mr_main_reset), + .mr_loopback_enable (mr_loopback_enable), + .mr_speed_selection (mr_speed_selection), + .mr_an_enable (mr_an_enable), + .mr_power_down (mr_power_down), + .mr_isolate (mr_isolate), + .mr_restart_an (mr_restart_an), + .mr_duplex_mode (mr_duplex_mode), + .mr_col_test (mr_col_test), + .mr_unidir_enable (mr_unidir_enable), + + .mr_adv_ability (mr_adv_ability) +); +endmodule + + + + + + +module register_0_hb ( + rst_n, + clk, + gbe_mode, + cs_0, + cs_1, + write, + ready, + data_in, + + data_out, + mr_main_reset, + mr_loopback_enable, + mr_speed_selection, + mr_an_enable, + mr_power_down, + mr_isolate, + mr_restart_an, + mr_duplex_mode, + mr_col_test, + mr_unidir_enable +); + +input rst_n; +input clk; +input gbe_mode; +input cs_0; +input cs_1; +input write; +input ready; +input [15:0] data_in; + +output [15:0] data_out; +output mr_main_reset; // bit D15 // R/W // Self Clearing +output mr_loopback_enable; // bit D14 // R/W +output [1:0] mr_speed_selection; // bit D13 LSB bit D6 MSB // R/W +output mr_an_enable; // bit D12 // R/W +output mr_power_down; // bit D11 // R/W +output mr_isolate; // bit D10 // R/W +output mr_restart_an; // bit D09 // R/W // Self Clearing +output mr_duplex_mode; // bit D08 // STUCK HIGH +output mr_col_test; // bit D08 // STUCK LOW +output mr_unidir_enable; // bit D05 // STUCK LOW + +reg [15:0] data_out; +reg mr_main_reset; +reg mr_loopback_enable; +reg [1:0] mr_speed_selection; +reg mr_an_enable; +reg mr_power_down = 1'b0; +reg mr_isolate; +reg mr_restart_an; +reg mr_duplex_mode; +reg mr_col_test; +reg mr_unidir_enable; +reg m_m_r; +reg m_r_a; +reg gbe_mode_d1; +reg gbe_mode_d2; + + + +// Deboggle +always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + gbe_mode_d1 <= 0; + gbe_mode_d2 <= 0; + end + else begin + gbe_mode_d1 <= gbe_mode; + gbe_mode_d2 <= gbe_mode_d1; + end +end + + + +// Write Operations + + // Low Portion of Register[D7:D0] has no + // implemented bits. Therefore, no write + // operations here. + + // High Portion of Register[D15:D8] + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + mr_main_reset <= 1'b0; + mr_loopback_enable <= 1'b0; + mr_speed_selection <= 2'b10; + mr_an_enable <= 1'b1; + mr_power_down <= 1'b0; + mr_isolate <= 1'b0; + mr_restart_an <= 1'b0; + mr_duplex_mode <= 1'b1; + mr_col_test <= 1'b0; + mr_unidir_enable <= 1'b0; + m_m_r <= 0; + m_r_a <= 0; + end + else begin + + // defaults + mr_duplex_mode <= 1'b1; // STUCK HIGH + mr_col_test <= 1'b0; // STUCK LOW + + // Do the Writes + if (cs_1 && ready && write) begin + mr_main_reset <= data_in[15]; + mr_loopback_enable <= data_in[14]; + mr_an_enable <= data_in[12]; + mr_power_down <= data_in[11]; + mr_isolate <= data_in[10]; + mr_restart_an <= data_in[9]; + end + + + // Manage Writes to Speed Selection Based on GBE MODE + if (gbe_mode_d2) begin + mr_speed_selection[1:0] <= 2'b10; // STUCK AT 1GBPS + end + else begin + if (cs_1 && ready && write) begin + mr_speed_selection[0] <= data_in[13]; + end + if (cs_0 && ready && write) begin + mr_speed_selection[1] <= data_in[6]; + mr_unidir_enable <= data_in[5]; + end + end + + + + // Delay the Self Clearing Register Bits + m_m_r <= mr_main_reset; + m_r_a <= mr_restart_an; + + // Do the Self Clearing + if (m_m_r) + mr_main_reset <= 0; + + if (m_r_a) + mr_restart_an <= 0; + end + end + + + + + +// Read Operations + always @(*) begin + data_out[7] <= mr_col_test; + data_out[6] <= mr_speed_selection[1]; + data_out[5] <= mr_unidir_enable; + data_out[4] <= 1'b0; + data_out[3] <= 1'b0; + data_out[2] <= 1'b0; + data_out[1] <= 1'b0; + data_out[0] <= 1'b0; + + data_out[15] <= mr_main_reset; + data_out[14] <= mr_loopback_enable; + data_out[13] <= mr_speed_selection[0]; + data_out[12] <= mr_an_enable; + data_out[11] <= mr_power_down; + data_out[10] <= mr_isolate; + data_out[9] <= mr_restart_an; + data_out[8] <= mr_duplex_mode; + end +endmodule + +module register_1_hb ( + rst_n, + clk, + cs_0, + cs_1, + write, + ready, + + + mr_stat_100base_t4, + mr_stat_100base_x_fd, + mr_stat_100base_x_hd, + mr_stat_10mbps_fd, + mr_stat_10mbps_hd, + mr_stat_100base_t2_fd, + mr_stat_100base_t2_hd, + + mr_stat_extended_stat, + mr_stat_unidir_able, + mr_stat_preamb_supr, + mr_stat_an_complete, + mr_stat_remote_fault, + mr_stat_an_able, + mr_stat_link_stat, + mr_stat_jab_det, + mr_stat_extended_cap, + + data_out +); + +input rst_n; +input clk; +input cs_0; +input cs_1; +input write; +input ready; +input mr_stat_100base_t4; // bit D15 // Read-Only +input mr_stat_100base_x_fd; // bit D14 // Read-Only +input mr_stat_100base_x_hd; // bit D13 // Read-Only +input mr_stat_10mbps_fd; // bit D12 // Read-Only +input mr_stat_10mbps_hd; // bit D11 // Read-Only +input mr_stat_100base_t2_fd; // bit D10 // Read-Only +input mr_stat_100base_t2_hd; // bit D9 // Read-Only + +input mr_stat_extended_stat; // bit D8 // Read-Only +input mr_stat_unidir_able; // bit D7 // Read-Only +input mr_stat_preamb_supr; // bit D6 // Read-Only +input mr_stat_an_complete; // bit D5 // Read-Only +input mr_stat_remote_fault; // bit D4 // Read-Only +input mr_stat_an_able; // bit D3 // Read-Only +input mr_stat_link_stat; // bit D2 // Read-Only // Latch-On-Zero // Clear-On-Read +input mr_stat_jab_det; // bit D1 // Read-Only +input mr_stat_extended_cap; // bit D0 // Read-Only + +output [15:0] data_out; + +reg [15:0] data_out; + +reg link_stat_d1; +reg link_stat_d2; +reg clear_on_read; +reg read_detect; +reg rd_d1; +reg rd_d2; +reg allow_link_stat; +reg link_ok_status; +// metastability filter + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + link_stat_d1 <= 1'b0; + link_stat_d2 <= 1'b0; + end + else begin + link_stat_d1 <= mr_stat_link_stat; + link_stat_d2 <= link_stat_d1; + end + end + +// generate clear-on-read signal + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + clear_on_read <= 1'b0; + read_detect <= 1'b0; + rd_d1 <= 1'b0; + rd_d2 <= 1'b0; + end + else begin + if (!write && ready && cs_0) + read_detect <= 1'b1; + else + read_detect <= 1'b0; + + rd_d1 <= read_detect; + rd_d2 <= rd_d1; + + // assert on falling edge of rd_d2 + clear_on_read <= !rd_d1 & rd_d2; + end + end + + +// Latch and Clear + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + allow_link_stat <= 1'b0; + link_ok_status <= 1'b0; + end + else begin + + case (allow_link_stat) + 1'b0: begin + if (clear_on_read) begin + allow_link_stat<= 1'b1; + end + end + + 1'b1: begin + if (!link_stat_d2) begin + allow_link_stat <= 1'b0; + end + end + endcase + + + if (allow_link_stat) begin + // allow status shoot-thru after clear-on-read + link_ok_status <= link_stat_d2; + end + else begin + // force status low when link IS NOT_OKAY + link_ok_status <= 1'b0; + end + + end + end + + +// Read Operations + + always @(*) begin + data_out[7] <= mr_stat_unidir_able; + data_out[6] <= mr_stat_preamb_supr; + data_out[5] <= mr_stat_an_complete; + data_out[4] <= mr_stat_remote_fault; + data_out[3] <= mr_stat_an_able; + data_out[2] <= link_ok_status; + data_out[1] <= mr_stat_jab_det; + data_out[0] <= mr_stat_extended_cap; + + data_out[15] <= mr_stat_100base_t4; + data_out[14] <= mr_stat_100base_x_fd; + data_out[13] <= mr_stat_100base_x_hd; + data_out[12] <= mr_stat_10mbps_fd; + data_out[11] <= mr_stat_10mbps_hd; + data_out[10] <= mr_stat_100base_t2_fd; + data_out[9] <= mr_stat_100base_t2_hd; + data_out[8] <= mr_stat_extended_stat; + end +endmodule + +module register_4_hb ( + rst_n, + clk, + gbe_mode, + sgmii_mode, + cs_0, + cs_1, + write, + ready, + data_in, + + data_out, + mr_adv_ability +); + +parameter [15:0] initval_gbe = 16'h0020; +parameter [15:0] initval_phy = 16'hd801; +parameter [15:0] initval_mac = 16'h4001; + +input rst_n; +input clk; +input gbe_mode; +input sgmii_mode; +input cs_0; +input cs_1; +input write; +input ready; +input [15:0] data_in; + +output [15:0] data_out; +output [15:0] mr_adv_ability; // When sgmii_mode == 1 == PHY + // all bits D15-D0 are R/W, + /////////////////////////////////// + // D15 = Link Status (1=up, 0=down) + // D14 = Can be written but has no effect + // on autonegotiation. Instead + // the autonegotiation state machine + // controls the utilization of this bit. + // D12 = Duplex Mode (1=full, 0=half) + // D11:10 = Speed (11=reserved) + // (10=1000Mbps) + // (01=100 Mbps) + // (00=10 Mbps) + // D0 = 1 + // all other bits = 0 + /////////////////////////////////// + //When sgmii_mode == 0 = MAC + // all bits D15-D0 are R/W, + // D14 = Can be written but has no effect + // on autonegotiation. Instead + // the autonegotiation state machine + // controls the utilization of this bit. + // D0 = 1 + // all other bits = 0 + /////////////////////////////////// + + +reg [15:0] data_out; +reg [15:0] mr_adv_ability; +reg rst_d1; +reg rst_d2; +reg rst_d3; +reg rst_d4; +reg rst_d5; +reg rst_d6; +reg rst_d7; +reg rst_d8; +reg sync_reset; +reg sgmii_mode_d1; +reg sgmii_mode_d2; +reg sgmii_mode_d3; +reg sgmii_mode_d4; +reg sgmii_mode_change; +reg gbe_mode_d1; +reg gbe_mode_d2; +reg gbe_mode_d3; +reg gbe_mode_d4; +reg gbe_mode_change; + +// generate a synchronous reset signal +// note: this method is used so that +// an initval can be applied during +// device run-time, instead of at compile time +always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + rst_d1 <= 0; + rst_d2 <= 0; + rst_d3 <= 0; + rst_d4 <= 0; + rst_d5 <= 0; + rst_d6 <= 0; + rst_d7 <= 0; + rst_d8 <= 0; + sync_reset <= 0; + end + else begin + rst_d1 <= 1; + rst_d2 <= rst_d1; + rst_d3 <= rst_d2; + rst_d4 <= rst_d3; + rst_d5 <= rst_d4; + rst_d6 <= rst_d5; + rst_d7 <= rst_d6; + rst_d8 <= rst_d7; + + // asserts on rising edge of rst_d8 + sync_reset <= !rst_d8 & rst_d7; + end +end + + +// Detect change in sgmii_mode +always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + sgmii_mode_d1 <= 0; + sgmii_mode_d2 <= 0; + sgmii_mode_d3 <= 0; + sgmii_mode_d4 <= 0; + sgmii_mode_change <= 0; + end + else begin + + // deboggle + sgmii_mode_d1 <= sgmii_mode; + sgmii_mode_d2 <= sgmii_mode_d1; + + // delay + sgmii_mode_d3 <= sgmii_mode_d2; + sgmii_mode_d4 <= sgmii_mode_d3; + + // detect change + if (sgmii_mode_d3 != sgmii_mode_d4) + sgmii_mode_change <= 1; + else + sgmii_mode_change <= 0; + end +end + + +// Detect change in gbe_mode +always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + gbe_mode_d1 <= 0; + gbe_mode_d2 <= 0; + gbe_mode_d3 <= 0; + gbe_mode_d4 <= 0; + gbe_mode_change <= 0; + end + else begin + + // deboggle + gbe_mode_d1 <= gbe_mode; + gbe_mode_d2 <= gbe_mode_d1; + + // delay + gbe_mode_d3 <= gbe_mode_d2; + gbe_mode_d4 <= gbe_mode_d3; + + // detect change + if (gbe_mode_d3 != gbe_mode_d4) + gbe_mode_change <= 1; + else + gbe_mode_change <= 0; + end +end + + +// Write Operations + // Low Portion of Register[D7:D0] + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + mr_adv_ability[7:0] <= 8'h01; + end + else if (sync_reset || sgmii_mode_change || gbe_mode_change) begin + if (gbe_mode_d4) + mr_adv_ability[7:0] <= initval_gbe[7:0]; + else if (sgmii_mode) + mr_adv_ability[7:0] <= initval_phy[7:0]; + else + mr_adv_ability[7:0] <= initval_mac[7:0]; + end + else begin + if (cs_0 && ready && write && (sgmii_mode || gbe_mode)) begin + mr_adv_ability[7:0] <= data_in[7:0]; + end + end + end + + + // High Portion of Register[D15:D8] + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + mr_adv_ability[15:8] <= 8'h40; // default + end + else if (sync_reset || sgmii_mode_change || gbe_mode_change) begin + if (gbe_mode_d4) + mr_adv_ability[15:8] <= initval_gbe[15:8]; + else if (sgmii_mode) + mr_adv_ability[15:8] <= initval_phy[15:8]; + else + mr_adv_ability[15:8] <= initval_mac[15:8]; + end + else begin + if (cs_1 && ready && write && (sgmii_mode || gbe_mode)) begin + mr_adv_ability[15:8] <= data_in[15:8]; + end + end + end + + + + + + + + + +// Read Operations + + always @(*) begin + data_out[7:0] <= mr_adv_ability[7:0]; + data_out[15:8] <= mr_adv_ability[15:8]; + end + +endmodule + + + + + + +module register_5_hb ( + rst_n, + mr_lp_adv_ability, + cs_0, + cs_1, + ready, + + data_out +); + +input rst_n; +input cs_0; +input cs_1; +input ready; +input [15:0] mr_lp_adv_ability; + // This entire register is read-only + /////////////////////////////////// + // When sgmii_mode == 0 == MAC + /////////////////////////////////// + // D15 = PHY Link Status (1=up, 0=down) + // D14 = PHY Autonegotiation Handshake + // D12 = PHY Duplex Mode (1=full, 0=half) + // D11:10 = PHY Speed (11=reserved) + // (10=1000Mbps) + // (01=100 Mbps) + // (00=10 Mbps) + // D0 = 1 + // all other bits = 0 + /////////////////////////////////// + //When sgmii_mode == 1 = PHY + // D14 = MAC Autonegotiation Handshake + // D0 = 1 + // all other bits = 0 + /////////////////////////////////// +output [15:0] data_out; + +reg [15:0] data_out; + +// Read Operations + + always @(*) begin + data_out[7:0] <= mr_lp_adv_ability[7:0]; + data_out[15:8] <= mr_lp_adv_ability[15:8]; + end +endmodule + +module register_6_hb ( + rst_n, + clk, + mr_page_rx, + cs_0, + cs_1, + write, + ready, + + data_out +); + +input rst_n; +input clk; +input cs_0; +input cs_1; +input write; +input ready; +input mr_page_rx; +output [15:0] data_out; + +reg [15:0] data_out; +reg mr_page_rx_latched; +reg clear_on_read; +reg read_detect; +reg rd_d1; +reg rd_d2; + +// generate clear-on-read signal + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + clear_on_read <= 0; + read_detect <= 0; + rd_d1 <= 0; + rd_d2 <= 0; + end + else begin + if (!write && ready && cs_0) + read_detect <= 1; + else + read_detect <= 0; + + rd_d1 <= read_detect; + rd_d2 <= rd_d1; + + // assert on falling edge of rd_d2 + clear_on_read <= !rd_d1 & rd_d2; + end + end + + +// Latch and Clear + always @(posedge clk or negedge rst_n) begin + if (rst_n == 1'b0) begin + mr_page_rx_latched <= 0; + end + else begin + if (clear_on_read) + mr_page_rx_latched <= 0; + else if (mr_page_rx) + mr_page_rx_latched <= 1; + end + end + + +// Read Operations + + always @(*) begin + data_out[15:2] <= 14'd0; + data_out[1] <= mr_page_rx_latched; + data_out[0] <= 0; + end +endmodule + + +module register_f_hb ( + rst_n, + cs_0, + cs_1, + + mr_stat_1000base_x_fd, + mr_stat_1000base_x_hd, + mr_stat_1000base_t_fd, + mr_stat_1000base_t_hd, + + data_out +); + +input rst_n; +input cs_0; +input cs_1; + +input mr_stat_1000base_x_fd; // bit D15 // Read-Only +input mr_stat_1000base_x_hd; // bit D14 // Read-Only +input mr_stat_1000base_t_fd; // bit D13 // Read-Only +input mr_stat_1000base_t_hd; // bit D12 // Read-Only + +output [15:0] data_out; + +reg [15:0] data_out; + + +// Read Operations + + always @(*) begin + data_out[7] <= 1'b0; + data_out[6] <= 1'b0; + data_out[5] <= 1'b0; + data_out[4] <= 1'b0; + data_out[3] <= 1'b0; + data_out[2] <= 1'b0; + data_out[1] <= 1'b0; + data_out[0] <= 1'b0; + + data_out[15] <= mr_stat_1000base_x_fd; + data_out[14] <= mr_stat_1000base_x_hd; + data_out[13] <= mr_stat_1000base_t_fd; + data_out[12] <= mr_stat_1000base_t_hd; + data_out[11] <= 1'b0; + data_out[10] <= 1'b0; + data_out[9] <= 1'b0; + data_out[8] <= 1'b0; + end +endmodule + + +module regs_hb ( + rst_n, + hclk, + gbe_mode, + sgmii_mode, + hcs_n, + hwrite_n, + haddr, + hdatain, + + hdataout, + hready_n, + + mr_stat_1000base_x_fd, + mr_stat_1000base_x_hd, + mr_stat_1000base_t_fd, + mr_stat_1000base_t_hd, + + mr_stat_100base_t4, + mr_stat_100base_x_fd, + mr_stat_100base_x_hd, + mr_stat_10mbps_fd, + mr_stat_10mbps_hd, + mr_stat_100base_t2_fd, + mr_stat_100base_t2_hd, + + mr_stat_extended_stat, + mr_stat_unidir_able, + mr_stat_preamb_supr, + mr_stat_an_complete, + mr_stat_remote_fault, + mr_stat_an_able, + mr_stat_link_stat, + mr_stat_jab_det, + mr_stat_extended_cap, + + mr_page_rx, + mr_lp_adv_ability, + + mr_main_reset, + mr_loopback_enable, + mr_speed_selection, + mr_an_enable, + mr_power_down, + mr_isolate, + mr_restart_an, + mr_duplex_mode, + mr_col_test, + mr_unidir_enable, + mr_adv_ability +); + +input rst_n; +input hclk; +input gbe_mode; +input sgmii_mode; +input hcs_n; +input hwrite_n; +input [5:0] haddr; +input [7:0] hdatain; + +output [7:0] hdataout; +output hready_n; + +input mr_stat_1000base_x_fd; +input mr_stat_1000base_x_hd; +input mr_stat_1000base_t_fd; +input mr_stat_1000base_t_hd; + +input mr_stat_100base_t4; +input mr_stat_100base_x_fd; +input mr_stat_100base_x_hd; +input mr_stat_10mbps_fd; +input mr_stat_10mbps_hd; +input mr_stat_100base_t2_fd; +input mr_stat_100base_t2_hd; + +input mr_stat_extended_stat; +input mr_stat_unidir_able; +input mr_stat_preamb_supr; +input mr_stat_an_complete; +input mr_stat_remote_fault; +input mr_stat_an_able; +input mr_stat_link_stat; +input mr_stat_jab_det; +input mr_stat_extended_cap; + +input mr_page_rx; +input [15:0] mr_lp_adv_ability; + +output mr_main_reset; +output mr_loopback_enable; +output [1:0] mr_speed_selection; +output mr_an_enable; +output mr_power_down; +output mr_isolate; +output mr_restart_an; +output mr_duplex_mode; +output mr_col_test; +output mr_unidir_enable; +output [15:0] mr_adv_ability; + +/////////////////////////////////// + + + +reg [7:0] hdataout; +reg hr; +reg hready_n; + +reg hcs_n_delayed; + +wire reg0_cs_0; +wire reg0_cs_1; + +wire reg1_cs_0; +wire reg1_cs_1; + +wire reg4_cs_0; +wire reg4_cs_1; + +wire reg5_cs_0; +wire reg5_cs_1; + +wire reg6_cs_0; +wire reg6_cs_1; + +wire regf_cs_0; +wire regf_cs_1; + +wire [15:0] data_out_reg_0; +wire [15:0] data_out_reg_1; +wire [15:0] data_out_reg_4; +wire [15:0] data_out_reg_5; +wire [15:0] data_out_reg_6; +wire [15:0] data_out_reg_f; + + + +register_addr_decoder ad_dec ( + .rst_n(rst_n), + .addr(haddr), + .cs_in(~hcs_n), + + .reg0_cs_0 (reg0_cs_0), + .reg0_cs_1 (reg0_cs_1), + .reg1_cs_0 (reg1_cs_0), + .reg1_cs_1 (reg1_cs_1), + .reg4_cs_0 (reg4_cs_0), + .reg4_cs_1 (reg4_cs_1), + .reg5_cs_0 (reg5_cs_0), + .reg5_cs_1 (reg5_cs_1), + .reg6_cs_0 (reg6_cs_0), + .reg6_cs_1 (reg6_cs_1), + .regf_cs_0 (regf_cs_0), + .regf_cs_1 (regf_cs_1) +); + + +register_0_hb register_0 ( + .rst_n (rst_n), + .clk (hclk), + .gbe_mode (gbe_mode), + .cs_0 (reg0_cs_0), + .cs_1 (reg0_cs_1), + .write (~hwrite_n), + .ready (1'b1), + .data_in ({hdatain, hdatain}), + + .data_out (data_out_reg_0), + .mr_main_reset (mr_main_reset), + .mr_loopback_enable (mr_loopback_enable), + .mr_speed_selection (mr_speed_selection), + .mr_an_enable (mr_an_enable), + .mr_power_down (mr_power_down), + .mr_isolate (mr_isolate), + .mr_restart_an (mr_restart_an), + .mr_duplex_mode (mr_duplex_mode), + .mr_col_test (mr_col_test), + .mr_unidir_enable (mr_unidir_enable) +); + + +register_1_hb register_1 ( + .rst_n (rst_n), + .clk (hclk), + .cs_0 (reg1_cs_0), + .cs_1 (reg1_cs_1), + .write (~hwrite_n), + .ready (1'b1), + + .mr_stat_100base_t4 (mr_stat_100base_t4), + .mr_stat_100base_x_fd (mr_stat_100base_x_fd), + .mr_stat_100base_x_hd (mr_stat_100base_x_hd), + .mr_stat_10mbps_fd (mr_stat_10mbps_fd), + .mr_stat_10mbps_hd (mr_stat_10mbps_hd), + .mr_stat_100base_t2_fd (mr_stat_100base_t2_fd), + .mr_stat_100base_t2_hd (mr_stat_100base_t2_hd), + + .mr_stat_extended_stat (mr_stat_extended_stat), + .mr_stat_unidir_able (mr_stat_unidir_able), + .mr_stat_preamb_supr (mr_stat_preamb_supr), + .mr_stat_an_complete (mr_stat_an_complete), + .mr_stat_remote_fault (mr_stat_remote_fault), + .mr_stat_an_able (mr_stat_an_able), + .mr_stat_link_stat (mr_stat_link_stat), + .mr_stat_jab_det (mr_stat_jab_det), + .mr_stat_extended_cap (mr_stat_extended_cap), + + .data_out (data_out_reg_1) +); + + +register_4_hb register_4 ( + .rst_n (rst_n), + .clk (hclk), + .gbe_mode (gbe_mode), + .sgmii_mode (sgmii_mode), + .cs_0 (reg4_cs_0), + .cs_1 (reg4_cs_1), + .write (~hwrite_n), + .ready (1'b1), + .data_in ({hdatain, hdatain}), + + .data_out (data_out_reg_4), + .mr_adv_ability (mr_adv_ability) +); + + +register_5_hb register_5 ( + .rst_n (rst_n), + .mr_lp_adv_ability (mr_lp_adv_ability), + .cs_0 (reg5_cs_0), + .cs_1 (reg5_cs_1), + .ready (1'b1), + + .data_out (data_out_reg_5) +); + + +register_6_hb register_6 ( + .rst_n (rst_n), + .clk (hclk), + .mr_page_rx (mr_page_rx), + .cs_0 (reg6_cs_0), + .cs_1 (reg6_cs_1), + .write (~hwrite_n), + .ready (1'b1), + + .data_out (data_out_reg_6) +); + + + +register_f_hb register_f ( + .rst_n (rst_n), + .cs_0 (regf_cs_0), + .cs_1 (regf_cs_1), + + .mr_stat_1000base_x_fd (mr_stat_1000base_x_fd), + .mr_stat_1000base_x_hd (mr_stat_1000base_x_hd), + .mr_stat_1000base_t_fd (mr_stat_1000base_t_fd), + .mr_stat_1000base_t_hd (mr_stat_1000base_t_hd), + + .data_out (data_out_reg_f) +); + + +// generate an ack +always @(posedge hclk or negedge rst_n) begin + if (rst_n == 1'b0) begin + hcs_n_delayed <= 1'b1; + hr <= 1'b1; + hready_n <= 1'b1; + end + else begin + hcs_n_delayed <= hcs_n; + + //assert on falling edge of delayed chip select + hr <= ~hcs_n & hcs_n_delayed; + hready_n <= ~hr; + end +end + + + +// Mux Register Read-Data Outputs +always @(posedge hclk or negedge rst_n) +begin + if (rst_n == 1'b0) begin + hdataout <= 8'd0; + end + else begin + case (haddr[5:0]) + + 6'd0: + begin + hdataout <= data_out_reg_0[7:0]; + end + + + 6'd1: + begin + hdataout <= data_out_reg_0[15:8]; + end + + ///////////////////////////////////////////// + + 6'd2: + begin + hdataout <= data_out_reg_1[7:0]; + end + + + 6'd3: + begin + hdataout <= data_out_reg_1[15:8]; + end + + ///////////////////////////////////////////// + + 6'd8: + begin + hdataout <= data_out_reg_4[7:0]; + end + + + 6'd9: + begin + hdataout <= data_out_reg_4[15:8]; + end + + ///////////////////////////////////////////// + + 6'd10: + begin + hdataout <= data_out_reg_5[7:0]; + end + + + 6'd11: + begin + hdataout <= data_out_reg_5[15:8]; + end + + ///////////////////////////////////////////// + + 6'd12: + begin + hdataout <= data_out_reg_6[7:0]; + end + + + 6'd13: + begin + hdataout <= data_out_reg_6[15:8]; + end + + ///////////////////////////////////////////// + + 6'd30: + begin + hdataout <= data_out_reg_f[7:0]; + end + + + 6'd31: + begin + hdataout <= data_out_reg_f[15:8]; + end + + ///////////////////////////////////////////// + + default: + begin + hdataout <= 8'd0; + end + endcase + end +end + +endmodule + +module register_addr_decoder ( + rst_n, + addr, + cs_in, + + reg0_cs_0, + reg0_cs_1, + + reg1_cs_0, + reg1_cs_1, + + reg4_cs_0, + reg4_cs_1, + + reg5_cs_0, + reg5_cs_1, + + reg6_cs_0, + reg6_cs_1, + + regf_cs_0, + regf_cs_1 +); + +input rst_n; +input cs_in; +input [5:0] addr; + +output reg0_cs_0; +output reg0_cs_1; + +output reg1_cs_0; +output reg1_cs_1; + +output reg4_cs_0; +output reg4_cs_1; + +output reg5_cs_0; +output reg5_cs_1; + +output reg6_cs_0; +output reg6_cs_1; + +output regf_cs_0; +output regf_cs_1; + +////////////////////////// + +wire reg0_cs_0; +wire reg0_cs_1; + +wire reg1_cs_0; +wire reg1_cs_1; + +wire reg4_cs_0; +wire reg4_cs_1; + +wire reg5_cs_0; +wire reg5_cs_1; + +wire reg6_cs_0; +wire reg6_cs_1; + +wire regf_cs_0; +wire regf_cs_1; + +////////////////////////// + +assign reg0_cs_0 = (addr == 6'h00) ? cs_in : 1'b0; +assign reg0_cs_1 = (addr == 6'h01) ? cs_in : 1'b0; + +assign reg1_cs_0 = (addr == 6'h02) ? cs_in : 1'b0; +assign reg1_cs_1 = (addr == 6'h03) ? cs_in : 1'b0; + +assign reg4_cs_0 = (addr == 6'h08) ? cs_in : 1'b0; +assign reg4_cs_1 = (addr == 6'h09) ? cs_in : 1'b0; + +assign reg5_cs_0 = (addr == 6'h0a) ? cs_in : 1'b0; +assign reg5_cs_1 = (addr == 6'h0b) ? cs_in : 1'b0; + +assign reg6_cs_0 = (addr == 6'h0c) ? cs_in : 1'b0; +assign reg6_cs_1 = (addr == 6'h0d) ? cs_in : 1'b0; + +assign regf_cs_0 = (addr == 6'h1e) ? cs_in : 1'b0; +assign regf_cs_1 = (addr == 6'h1f) ? cs_in : 1'b0; + + +endmodule + diff --git a/gbe_trb/media/ecp5/sgmii_channel_smi.v b/gbe_trb/media/ecp5/sgmii_channel_smi.v new file mode 100644 index 0000000..7727c68 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_channel_smi.v @@ -0,0 +1,230 @@ +//************************************************************************** +// ************************************************************************* +// * LATTICE SEMICONDUCTOR CONFIDENTIAL * +// * PROPRIETARY NOTE * +// * * +// * This software contains information confidential and proprietary * +// * to Lattice Semiconductor Corporation. It shall not be reproduced * +// * in whole or in part, or transferred to other documents, or disclosed * +// * to third parties, or used for any purpose other than that for which * +// * it was obtained, without the prior written consent of Lattice * +// * Semiconductor Corporation. All rights reserved. * +// * * +// ************************************************************************* +//************************************************************************** + +`define SGMII_YES_SINGLE_CLOCK + +module sgmii_channel_smi (//_core + + // Control Interface + rst_n, + signal_detect, + gbe_mode, + sgmii_mode, + operational_rate, + debug_link_timer_short, + force_isolate, + force_loopback, + force_unidir, + + rx_compensation_err, + ctc_drop_flag, + ctc_add_flag, + an_link_ok, + + // G/MII Interface +`ifdef SGMII_YES_SINGLE_CLOCK + tx_clock_enable_sink , + tx_clock_enable_source , + + rx_clock_enable_sink , + rx_clock_enable_source , +`else + tx_clk_mii , + rx_clk_mii , +`endif + tx_clk_125, + tx_d, + tx_en, + tx_er, + + rx_clk_125, + rx_d, + rx_dv, + rx_er, + col, + crs, + + // 8-bit Interface + tx_data, + tx_kcntl, + tx_disparity_cntl, + xmit_autoneg, + + serdes_recovered_clk, + rx_data, + rx_kcntl, + rx_even , + rx_disp_err , + rx_cv_err , + rx_err_decode_mode , + + // Managment Control Outputs + mr_an_complete, + mr_page_rx, + mr_lp_adv_ability, + + // Managment Control Inputs + mr_main_reset, + mr_an_enable, + mr_restart_an, + mr_adv_ability + ); + + + +// Control Interface +input rst_n ; +input signal_detect ; +input gbe_mode ; +input sgmii_mode ; +input [1:0] operational_rate ; +input debug_link_timer_short ; +input force_isolate ; +input force_loopback ; +input force_unidir ; + +output rx_compensation_err ; +output ctc_drop_flag ; +output ctc_add_flag ; +output an_link_ok ; + +// G/MII Interface +`ifdef SGMII_YES_SINGLE_CLOCK + input tx_clock_enable_sink; + output tx_clock_enable_source; + + input rx_clock_enable_sink; + output rx_clock_enable_source; +`else + input tx_clk_mii; + input rx_clk_mii; +`endif + +input tx_clk_125 ; +input [7:0] tx_d ; +input tx_en ; +input tx_er ; + +input rx_clk_125 ; +output [7:0] rx_d ; +output rx_dv ; +output rx_er ; +output col ; +output crs ; + +// 8-bit Interface +output [7:0] tx_data ; +output tx_kcntl; +output tx_disparity_cntl; +output xmit_autoneg; + +input serdes_recovered_clk ; +input [7:0] rx_data ; +input rx_even ; +input rx_kcntl; +input rx_disp_err ; // Displarity error on "rx_data". +input rx_cv_err ; // Code error on "rx_data". +input rx_err_decode_mode ; + +// Managment Control Outputs +output mr_an_complete; +output mr_page_rx; +output [15:0] mr_lp_adv_ability; + +// Managment Control Inputs +input mr_main_reset; +input mr_an_enable; +input mr_restart_an; +input [15:0] mr_adv_ability; + + +parameter STATIC_HI_THRESH = 32; +parameter STATIC_LO_THRESH = 16; +parameter LINK_TIMER_SH = 21'h1fff01; + + + +// SGMII PCS +sgmii_pcs_gda_001 # (.STATIC_HI_THRESH(STATIC_HI_THRESH), .STATIC_LO_THRESH(STATIC_LO_THRESH), .LINK_TIMER_SH(LINK_TIMER_SH)) sgmii_pcs_gda_001 ( + // Clock and Reset + .rst_n ( rst_n ) , + .signal_detect ( signal_detect ) , + .gbe_mode ( gbe_mode ) , + .sgmii_mode ( sgmii_mode ) , + .operational_rate ( operational_rate ) , + .debug_link_timer_short ( debug_link_timer_short ) , + .force_isolate ( force_isolate ) , + .force_loopback ( force_loopback ) , + .force_unidir ( force_unidir ) , + + .rx_compensation_err ( rx_compensation_err ) , + .ctc_drop_flag ( ctc_drop_flag ) , + .ctc_add_flag ( ctc_add_flag ) , + .an_link_ok ( an_link_ok ) , + +`ifdef SGMII_YES_SINGLE_CLOCK + .tx_clock_enable_sink ( tx_clock_enable_sink ), + .tx_clock_enable_source ( tx_clock_enable_source ), + + .rx_clock_enable_sink ( rx_clock_enable_sink ), + .rx_clock_enable_source ( rx_clock_enable_source ), +`else + .tx_clk_mii ( tx_clk_mii ), + .rx_clk_mii ( rx_clk_mii ), +`endif + + // GMII TX Inputs + .tx_clk_125 ( tx_clk_125 ) , + .tx_d ( tx_d) , + .tx_en ( tx_en) , + .tx_er ( tx_er) , + + // GMII RX Outputs + // To GMII/MAC interface + .rx_clk_125 ( rx_clk_125 ) , + .rx_d ( rx_d ) , + .rx_dv ( rx_dv ) , + .rx_er ( rx_er ) , + .col ( col ) , + .crs ( crs ) , + + // 8BI TX Outputs + .tx_data ( tx_data) , + .tx_kcntl ( tx_kcntl) , + .tx_disparity_cntl ( tx_disparity_cntl) , + .xmit_autoneg ( xmit_autoneg) , + + // 8BI RX Inputs + .serdes_recovered_clk ( serdes_recovered_clk ) , + .rx_data ( rx_data ) , + .rx_kcntl ( rx_kcntl ) , + .rx_even ( rx_even ) , + .rx_disp_err ( rx_disp_err ) , + .rx_cv_err ( rx_cv_err ) , + .rx_err_decode_mode ( rx_err_decode_mode ) , + + // Management Interface I/O + .mr_adv_ability (mr_adv_ability), + .mr_an_enable (mr_an_enable), + .mr_main_reset (mr_main_reset), + .mr_restart_an (mr_restart_an), + + .mr_an_complete (mr_an_complete), + .mr_lp_adv_ability (mr_lp_adv_ability), + .mr_page_rx (mr_page_rx) + ); + + +endmodule diff --git a/gbe_trb/media/ecp5/sgmii_channel_smi_core.v b/gbe_trb/media/ecp5/sgmii_channel_smi_core.v new file mode 100644 index 0000000..d26445c --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_channel_smi_core.v @@ -0,0 +1,230 @@ +//************************************************************************** +// ************************************************************************* +// * LATTICE SEMICONDUCTOR CONFIDENTIAL * +// * PROPRIETARY NOTE * +// * * +// * This software contains information confidential and proprietary * +// * to Lattice Semiconductor Corporation. It shall not be reproduced * +// * in whole or in part, or transferred to other documents, or disclosed * +// * to third parties, or used for any purpose other than that for which * +// * it was obtained, without the prior written consent of Lattice * +// * Semiconductor Corporation. All rights reserved. * +// * * +// ************************************************************************* +//************************************************************************** + +`define SGMII_YES_SINGLE_CLOCK + +module sgmii_channel_smi_core ( + + // Control Interface + rst_n, + signal_detect, + gbe_mode, + sgmii_mode, + operational_rate, + debug_link_timer_short, + force_isolate, + force_loopback, + force_unidir, + + rx_compensation_err, + ctc_drop_flag, + ctc_add_flag, + an_link_ok, + + // G/MII Interface +`ifdef SGMII_YES_SINGLE_CLOCK + tx_clock_enable_sink , + tx_clock_enable_source , + + rx_clock_enable_sink , + rx_clock_enable_source , +`else + tx_clk_mii , + rx_clk_mii , +`endif + tx_clk_125, + tx_d, + tx_en, + tx_er, + + rx_clk_125, + rx_d, + rx_dv, + rx_er, + col, + crs, + + // 8-bit Interface + tx_data, + tx_kcntl, + tx_disparity_cntl, + xmit_autoneg, + + serdes_recovered_clk, + rx_data, + rx_kcntl, + rx_even , + rx_disp_err , + rx_cv_err , + rx_err_decode_mode , + + // Managment Control Outputs + mr_an_complete, + mr_page_rx, + mr_lp_adv_ability, + + // Managment Control Inputs + mr_main_reset, + mr_an_enable, + mr_restart_an, + mr_adv_ability + ); + + + +// Control Interface +input rst_n ; +input signal_detect ; +input gbe_mode ; +input sgmii_mode ; +input [1:0] operational_rate ; +input debug_link_timer_short ; +input force_isolate ; +input force_loopback ; +input force_unidir ; + +output rx_compensation_err ; +output ctc_drop_flag ; +output ctc_add_flag ; +output an_link_ok ; + +// G/MII Interface +`ifdef SGMII_YES_SINGLE_CLOCK + input tx_clock_enable_sink; + output tx_clock_enable_source; + + input rx_clock_enable_sink; + output rx_clock_enable_source; +`else + input tx_clk_mii; + input rx_clk_mii; +`endif + +input tx_clk_125 ; +input [7:0] tx_d ; +input tx_en ; +input tx_er ; + +input rx_clk_125 ; +output [7:0] rx_d ; +output rx_dv ; +output rx_er ; +output col ; +output crs ; + +// 8-bit Interface +output [7:0] tx_data ; +output tx_kcntl; +output tx_disparity_cntl; +output xmit_autoneg; + +input serdes_recovered_clk ; +input [7:0] rx_data ; +input rx_even ; +input rx_kcntl; +input rx_disp_err ; // Displarity error on "rx_data". +input rx_cv_err ; // Code error on "rx_data". +input rx_err_decode_mode ; + +// Managment Control Outputs +output mr_an_complete; +output mr_page_rx; +output [15:0] mr_lp_adv_ability; + +// Managment Control Inputs +input mr_main_reset; +input mr_an_enable; +input mr_restart_an; +input [15:0] mr_adv_ability; + + +parameter STATIC_HI_THRESH = 32; +parameter STATIC_LO_THRESH = 16; +parameter LINK_TIMER_SH = 21'h1fff01; + + + +// SGMII PCS +sgmii_pcs_gda_001 # (.STATIC_HI_THRESH(STATIC_HI_THRESH), .STATIC_LO_THRESH(STATIC_LO_THRESH), .LINK_TIMER_SH(LINK_TIMER_SH)) sgmii_pcs_gda_001 ( + // Clock and Reset + .rst_n ( rst_n ) , + .signal_detect ( signal_detect ) , + .gbe_mode ( gbe_mode ) , + .sgmii_mode ( sgmii_mode ) , + .operational_rate ( operational_rate ) , + .debug_link_timer_short ( debug_link_timer_short ) , + .force_isolate ( force_isolate ) , + .force_loopback ( force_loopback ) , + .force_unidir ( force_unidir ) , + + .rx_compensation_err ( rx_compensation_err ) , + .ctc_drop_flag ( ctc_drop_flag ) , + .ctc_add_flag ( ctc_add_flag ) , + .an_link_ok ( an_link_ok ) , + +`ifdef SGMII_YES_SINGLE_CLOCK + .tx_clock_enable_sink ( tx_clock_enable_sink ), + .tx_clock_enable_source ( tx_clock_enable_source ), + + .rx_clock_enable_sink ( rx_clock_enable_sink ), + .rx_clock_enable_source ( rx_clock_enable_source ), +`else + .tx_clk_mii ( tx_clk_mii ), + .rx_clk_mii ( rx_clk_mii ), +`endif + + // GMII TX Inputs + .tx_clk_125 ( tx_clk_125 ) , + .tx_d ( tx_d) , + .tx_en ( tx_en) , + .tx_er ( tx_er) , + + // GMII RX Outputs + // To GMII/MAC interface + .rx_clk_125 ( rx_clk_125 ) , + .rx_d ( rx_d ) , + .rx_dv ( rx_dv ) , + .rx_er ( rx_er ) , + .col ( col ) , + .crs ( crs ) , + + // 8BI TX Outputs + .tx_data ( tx_data) , + .tx_kcntl ( tx_kcntl) , + .tx_disparity_cntl ( tx_disparity_cntl) , + .xmit_autoneg ( xmit_autoneg) , + + // 8BI RX Inputs + .serdes_recovered_clk ( serdes_recovered_clk ) , + .rx_data ( rx_data ) , + .rx_kcntl ( rx_kcntl ) , + .rx_even ( rx_even ) , + .rx_disp_err ( rx_disp_err ) , + .rx_cv_err ( rx_cv_err ) , + .rx_err_decode_mode ( rx_err_decode_mode ) , + + // Management Interface I/O + .mr_adv_ability (mr_adv_ability), + .mr_an_enable (mr_an_enable), + .mr_main_reset (mr_main_reset), + .mr_restart_an (mr_restart_an), + + .mr_an_complete (mr_an_complete), + .mr_lp_adv_ability (mr_lp_adv_ability), + .mr_page_rx (mr_page_rx) + ); + + +endmodule diff --git a/gbe_trb/media/ecp5/sgmii_defines.v b/gbe_trb/media/ecp5/sgmii_defines.v new file mode 100644 index 0000000..ef2ca4e --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_defines.v @@ -0,0 +1,4 @@ +`define SGMII_NO_ENC +`define SGMII_YES_CTC_DYNAMIC +`define SGMII_YES_SINGLE_CLOCK +`define SGMII_FIFO_FAMILY_ECP5 diff --git a/gbe_trb/media/ecp5/sgmii_ecp5.lpc b/gbe_trb/media/ecp5/sgmii_ecp5.lpc new file mode 100644 index 0000000..1f57fa4 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5.lpc @@ -0,0 +1,97 @@ +[Device] +Family=ecp5um +OperatingCondition=COM +Package=CABGA756 +PartName=LFE5UM-85F-8BG756C +PartType=LFE5UM-85F +SpeedGrade=8 +Status=P +[IP] +CoreName=PCS +CoreRevision=8.2 +CoreStatus=Demo +CoreType=LPM +Date=05/07/2019 +ModuleName=sgmii_ecp5 +ParameterFileVersion=1.0 +SourceFormat=vhdl +Time=17:09:58 +VendorName=Lattice Semiconductor Corporation +[Parameters] +;ACHARA=0 00H +;ACHARB=0 00H +;ACHARM=0 00H +;RXMCAENABLE=Disabled +CDRLOLACTION=Full Recalibration +CDRLOLRANGE=0 +CDR_MAX_RATE=1.25 +CDR_MULT=10X +CDR_REF_RATE=125.0000 +CH_MODE=Rx and Tx +Destination=Synplicity +EDIF=1 +Expression=BusA(0 to 7) +IO=0 +IO_TYPE=GbE +LEQ=0 +LOOPBACK=Disabled +LOSPORT=Enabled +NUM_CHS=1 +Order=Big Endian [MSB:LSB] +PPORT_RX_RDY=Enabled +PPORT_TX_RDY=Enabled +PROTOCOL=GbE +PWAIT_RX_RDY=3000 +PWAIT_TX_RDY=3000 +RCSRC=Disabled +REFCLK_RATE=125.0000 +RSTSEQSEL=Enabled +RX8B10B=Enabled +RXCOMMAA=1010000011 +RXCOMMAB=0101111100 +RXCOMMAM=1111111111 +RXCOUPLING=AC +RXCTC=Enabled +RXCTCBYTEN=0 00H +RXCTCBYTEN1=0 00H +RXCTCBYTEN2=1 BCH +RXCTCBYTEN3=0 50H +RXCTCMATCHPATTERN=M2-S2 +RXDIFFTERM=50 ohms +RXFIFO_ENABLE=Enabled +RXINVPOL=Non-invert +RXLDR=Off +RXLOSTHRESHOLD=2 +RXLSM=Enabled +RXSC=K28P5 +RXWA=Barrel Shift +RX_DATA_WIDTH=8/10-Bit +RX_FICLK_RATE=125.0000 +RX_LINE_RATE=1.2500 +RX_RATE_DIV=Full Rate +SCIPORT=Enabled +SOFTLOL=Enabled +TX8B10B=Enabled +TXAMPLITUDE=1100 +TXDEPOST=Disabled +TXDEPRE=Disabled +TXDIFFTERM=50 ohms +TXFIFO_ENABLE=Enabled +TXINVPOL=Non-invert +TXLDR=Off +TXPLLLOLTHRESHOLD=0 +TXPLLMULT=10X +TX_DATA_WIDTH=8/10-Bit +TX_FICLK_RATE=125.0000 +TX_LINE_RATE=1.2500 +TX_MAX_RATE=1.25 +TX_RATE_DIV=Full Rate +VHDL=1 +Verilog=0 +[FilesGenerated] +sgmii_ecp5.pp=pp +sgmii_ecp5.sym=sym +sgmii_ecp5.tft=tft +sgmii_ecp5.txt=pcs_module +[SYSTEMPNR] +LN0=DCU1_CH1 diff --git a/gbe_trb/media/ecp5/sgmii_ecp5.lpc_old b/gbe_trb/media/ecp5/sgmii_ecp5.lpc_old new file mode 100644 index 0000000..54f9b73 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5.lpc_old @@ -0,0 +1,97 @@ +[Device] +Family=ecp5um +OperatingCondition=COM +Package=CABGA756 +PartName=LFE5UM-85F-8BG756C +PartType=LFE5UM-85F +SpeedGrade=8 +Status=P +[IP] +CoreName=PCS +CoreRevision=8.2 +CoreStatus=Demo +CoreType=LPM +Date=04/29/2019 +ModuleName=sgmii_ecp5 +ParameterFileVersion=1.0 +SourceFormat=vhdl +Time=16:13:12 +VendorName=Lattice Semiconductor Corporation +[Parameters] +;ACHARA=0 00H +;ACHARB=0 00H +;ACHARM=0 00H +;RXMCAENABLE=Disabled +CDRLOLACTION=Full Recalibration +CDRLOLRANGE=0 +CDR_MAX_RATE=1.25 +CDR_MULT=10X +CDR_REF_RATE=125.0000 +CH_MODE=Rx and Tx +Destination=Synplicity +EDIF=1 +Expression=BusA(0 to 7) +IO=0 +IO_TYPE=GbE +LEQ=0 +LOOPBACK=Disabled +LOSPORT=Enabled +NUM_CHS=1 +Order=Big Endian [MSB:LSB] +PPORT_RX_RDY=Disabled +PPORT_TX_RDY=Disabled +PROTOCOL=GbE +PWAIT_RX_RDY=3000 +PWAIT_TX_RDY=3000 +RCSRC=Disabled +REFCLK_RATE=125.0000 +RSTSEQSEL=Disabled +RX8B10B=Enabled +RXCOMMAA=1010000011 +RXCOMMAB=0101111100 +RXCOMMAM=1111111111 +RXCOUPLING=AC +RXCTC=Enabled +RXCTCBYTEN=0 00H +RXCTCBYTEN1=0 00H +RXCTCBYTEN2=1 BCH +RXCTCBYTEN3=0 50H +RXCTCMATCHPATTERN=M2-S2 +RXDIFFTERM=50 ohms +RXFIFO_ENABLE=Enabled +RXINVPOL=Non-invert +RXLDR=Off +RXLOSTHRESHOLD=2 +RXLSM=Enabled +RXSC=K28P5 +RXWA=Barrel Shift +RX_DATA_WIDTH=8/10-Bit +RX_FICLK_RATE=125.0000 +RX_LINE_RATE=1.2500 +RX_RATE_DIV=Full Rate +SCIPORT=Disabled +SOFTLOL=Enabled +TX8B10B=Enabled +TXAMPLITUDE=1100 +TXDEPOST=Disabled +TXDEPRE=Disabled +TXDIFFTERM=50 ohms +TXFIFO_ENABLE=Enabled +TXINVPOL=Non-invert +TXLDR=Off +TXPLLLOLTHRESHOLD=0 +TXPLLMULT=10X +TX_DATA_WIDTH=8/10-Bit +TX_FICLK_RATE=125.0000 +TX_LINE_RATE=1.2500 +TX_MAX_RATE=1.25 +TX_RATE_DIV=Full Rate +VHDL=1 +Verilog=0 +[FilesGenerated] +sgmii_ecp5.pp=pp +sgmii_ecp5.sym=sym +sgmii_ecp5.tft=tft +sgmii_ecp5.txt=pcs_module +[SYSTEMPNR] +LN0=DCU1_CH1 diff --git a/gbe_trb/media/ecp5/sgmii_ecp5.ngd b/gbe_trb/media/ecp5/sgmii_ecp5.ngd new file mode 100644 index 0000000000000000000000000000000000000000..77445dfab09d1d8be4dd245f76d55f522af6c60a GIT binary patch literal 393974 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

Spzmhx`g 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%0AB5tuaom*vv%;lAHMf|5oVmI!6yJ_> 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 OE#o=jgg)UZ;r|bd>~QA* literal 0 HcmV?d00001 diff --git a/gbe_trb/media/ecp5/sgmii_ecp5.ngo_old b/gbe_trb/media/ecp5/sgmii_ecp5.ngo_old new file mode 100644 index 0000000000000000000000000000000000000000..7e95388f87408381d90b98ab7e875e8cc5af3b4a GIT binary patch literal 102117 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%0DAPJ~wjSySxy#ozzH5*#S&)k> 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"0b1",D_IB_PWDNB=>"0b1", + D_XGE_MODE=>"0b0",D_LOW_MARK=>"0d4",D_HIGH_MARK=>"0d12",D_BUS8BIT_SEL=>"0b0", + D_CDR_LOL_SET=>"0b00",D_TXPLL_PWDNB=>"0b1",D_BITCLK_LOCAL_EN=>"0b1", + D_BITCLK_ND_EN=>"0b0",D_BITCLK_FROM_ND_EN=>"0b0",D_SYNC_LOCAL_EN=>"0b1", + D_SYNC_ND_EN=>"0b0",CH1_UC_MODE=>"0b0",CH1_PCIE_MODE=>"0b0",CH1_RIO_MODE=>"0b0", + CH1_WA_MODE=>"0b0",CH1_INVERT_RX=>"0b0",CH1_INVERT_TX=>"0b0",CH1_PRBS_SELECTION=>"0b0", + CH1_GE_AN_ENABLE=>"0b0",CH1_PRBS_LOCK=>"0b0",CH1_PRBS_ENABLE=>"0b0", + CH1_ENABLE_CG_ALIGN=>"0b1",CH1_TX_GEAR_MODE=>"0b0",CH1_RX_GEAR_MODE=>"0b0", + CH1_PCS_DET_TIME_SEL=>"0b00",CH1_PCIE_EI_EN=>"0b0",CH1_TX_GEAR_BYPASS=>"0b0", + CH1_ENC_BYPASS=>"0b0",CH1_SB_BYPASS=>"0b0",CH1_RX_SB_BYPASS=>"0b0", + CH1_WA_BYPASS=>"0b0",CH1_DEC_BYPASS=>"0b0",CH1_CTC_BYPASS=>"0b0", + CH1_RX_GEAR_BYPASS=>"0b0",CH1_LSM_DISABLE=>"0b0",CH1_MATCH_2_ENABLE=>"0b1", + CH1_MATCH_4_ENABLE=>"0b0",CH1_MIN_IPG_CNT=>"0b11",CH1_CC_MATCH_1=>"0x000", + CH1_CC_MATCH_2=>"0x000",CH1_CC_MATCH_3=>"0x1BC",CH1_CC_MATCH_4=>"0x050", + CH1_UDF_COMMA_MASK=>"0x3ff",CH1_UDF_COMMA_A=>"0x283",CH1_UDF_COMMA_B=>"0x17C", + CH1_RX_DCO_CK_DIV=>"0b010",CH1_RCV_DCC_EN=>"0b0",CH1_TPWDNB=>"0b1", + CH1_RATE_MODE_TX=>"0b0",CH1_RTERM_TX=>"0d19",CH1_TX_CM_SEL=>"0b00", + CH1_TDRV_PRE_EN=>"0b0",CH1_TDRV_SLICE0_SEL=>"0b01",CH1_TDRV_SLICE1_SEL=>"0b00", + CH1_TDRV_SLICE2_SEL=>"0b01",CH1_TDRV_SLICE3_SEL=>"0b01",CH1_TDRV_SLICE4_SEL=>"0b01", + CH1_TDRV_SLICE5_SEL=>"0b01",CH1_TDRV_SLICE0_CUR=>"0b101",CH1_TDRV_SLICE1_CUR=>"0b000", + CH1_TDRV_SLICE2_CUR=>"0b11",CH1_TDRV_SLICE3_CUR=>"0b11",CH1_TDRV_SLICE4_CUR=>"0b11", + CH1_TDRV_SLICE5_CUR=>"0b00",CH1_TDRV_DAT_SEL=>"0b00",CH1_TX_DIV11_SEL=>"0b0", + CH1_RPWDNB=>"0b1",CH1_RATE_MODE_RX=>"0b0",CH1_RX_DIV11_SEL=>"0b0", + CH1_SEL_SD_RX_CLK=>"0b0",CH1_FF_RX_H_CLK_EN=>"0b0",CH1_FF_RX_F_CLK_DIS=>"0b0", + CH1_FF_TX_H_CLK_EN=>"0b0",CH1_FF_TX_F_CLK_DIS=>"0b0",CH1_TDRV_POST_EN=>"0b0", + CH1_TX_POST_SIGN=>"0b0",CH1_TX_PRE_SIGN=>"0b0",CH1_REQ_LVL_SET=>"0b00", + CH1_REQ_EN=>"0b1",CH1_RTERM_RX=>"0d22",CH1_RXTERM_CM=>"0b11",CH1_PDEN_SEL=>"0b1", + CH1_RXIN_CM=>"0b11",CH1_LEQ_OFFSET_SEL=>"0b0",CH1_LEQ_OFFSET_TRIM=>"0b000", + CH1_RLOS_SEL=>"0b1",CH1_RX_LOS_LVL=>"0b010",CH1_RX_LOS_CEQ=>"0b11", + CH1_RX_LOS_HYST_EN=>"0b0",CH1_RX_LOS_EN=>"0b1",CH1_LDR_RX2CORE_SEL=>"0b0", + CH1_LDR_CORE2TX_SEL=>"0b0",D_TX_MAX_RATE=>"1.25",CH1_CDR_MAX_RATE=>"1.25", + CH1_TXAMPLITUDE=>"0d1100",CH1_TXDEPRE=>"DISABLED",CH1_TXDEPOST=>"DISABLED", + CH1_PROTOCOL=>"GBE",D_ISETLOS=>"0d0",D_SETIRPOLY_AUX=>"0b00",D_SETICONST_AUX=>"0b00", + D_SETIRPOLY_CH=>"0b00",D_SETICONST_CH=>"0b00",D_REQ_ISET=>"0b000", + D_PD_ISET=>"0b00",D_DCO_CALIB_TIME_SEL=>"0b00",CH1_CDR_CNT4SEL=>"0b00", + CH1_CDR_CNT8SEL=>"0b00",CH1_DCOATDCFG=>"0b00",CH1_DCOATDDLY=>"0b00", + CH1_DCOBYPSATD=>"0b1",CH1_DCOCALDIV=>"0b001",CH1_DCOCTLGI=>"0b010", + CH1_DCODISBDAVOID=>"0b0",CH1_DCOFLTDAC=>"0b01",CH1_DCOFTNRG=>"0b110", + CH1_DCOIOSTUNE=>"0b000",CH1_DCOITUNE=>"0b00",CH1_DCOITUNE4LSB=>"0b111", + CH1_DCOIUPDNX2=>"0b1",CH1_DCONUOFLSB=>"0b101",CH1_DCOSCALEI=>"0b00", + CH1_DCOSTARTVAL=>"0b000",CH1_DCOSTEP=>"0b00",CH1_BAND_THRESHOLD=>"0d0", + CH1_AUTO_FACQ_EN=>"0b1",CH1_AUTO_CALIB_EN=>"0b1",CH1_CALIB_CK_MODE=>"0b0", + CH1_REG_BAND_OFFSET=>"0d0",CH1_REG_BAND_SEL=>"0d0",CH1_REG_IDAC_SEL=>"0d0", + CH1_REG_IDAC_EN=>"0b0",D_CMUSETISCL4VCO=>"0b000",D_CMUSETI4VCO=>"0b00", + D_CMUSETINITVCT=>"0b00",D_CMUSETZGM=>"0b000",D_CMUSETP2AGM=>"0b000", + D_CMUSETP1GM=>"0b000",D_CMUSETI4CPZ=>"0d3",D_CMUSETI4CPP=>"0d3",D_CMUSETICP4Z=>"0b101", + D_CMUSETICP4P=>"0b01",D_CMUSETBIASI=>"0b00",D_SETPLLRC=>"0d1",CH1_RX_RATE_SEL=>"0d8", + D_REFCK_MODE=>"0b001",D_TX_VCO_CK_DIV=>"0b010",D_PLL_LOL_SET=>"0b00", + D_RG_EN=>"0b0",D_RG_SET=>"0b00") + port map (CH0_HDINP=>n103,CH1_HDINP=>hdinp,CH0_HDINN=>n103,CH1_HDINN=>hdinn, + D_TXBIT_CLKP_FROM_ND=>n44,D_TXBIT_CLKN_FROM_ND=>n44,D_SYNC_ND=>n44,D_TXPLL_LOL_FROM_ND=>n44, + CH0_RX_REFCLK=>n103,CH1_RX_REFCLK=>rxrefclk,CH0_FF_RXI_CLK=>n102,CH1_FF_RXI_CLK=>tx_pclk_c, + CH0_FF_TXI_CLK=>n102,CH1_FF_TXI_CLK=>txi_clk,CH0_FF_EBRD_CLK=>n102,CH1_FF_EBRD_CLK=>tx_pclk_c, + CH0_FF_TX_D_0=>n103,CH1_FF_TX_D_0=>txdata(0),CH0_FF_TX_D_1=>n103,CH1_FF_TX_D_1=>txdata(1), + CH0_FF_TX_D_2=>n103,CH1_FF_TX_D_2=>txdata(2),CH0_FF_TX_D_3=>n103,CH1_FF_TX_D_3=>txdata(3), + CH0_FF_TX_D_4=>n103,CH1_FF_TX_D_4=>txdata(4),CH0_FF_TX_D_5=>n103,CH1_FF_TX_D_5=>txdata(5), + CH0_FF_TX_D_6=>n103,CH1_FF_TX_D_6=>txdata(6),CH0_FF_TX_D_7=>n103,CH1_FF_TX_D_7=>txdata(7), + CH0_FF_TX_D_8=>n103,CH1_FF_TX_D_8=>tx_k(0),CH0_FF_TX_D_9=>n103,CH1_FF_TX_D_9=>n44, + CH0_FF_TX_D_10=>n103,CH1_FF_TX_D_10=>xmit(0),CH0_FF_TX_D_11=>n103,CH1_FF_TX_D_11=>tx_disp_correct(0), + CH0_FF_TX_D_12=>n103,CH1_FF_TX_D_12=>n103,CH0_FF_TX_D_13=>n103,CH1_FF_TX_D_13=>n103, + CH0_FF_TX_D_14=>n103,CH1_FF_TX_D_14=>n103,CH0_FF_TX_D_15=>n103,CH1_FF_TX_D_15=>n103, + CH0_FF_TX_D_16=>n103,CH1_FF_TX_D_16=>n103,CH0_FF_TX_D_17=>n103,CH1_FF_TX_D_17=>n103, + CH0_FF_TX_D_18=>n103,CH1_FF_TX_D_18=>n103,CH0_FF_TX_D_19=>n103,CH1_FF_TX_D_19=>n103, + CH0_FF_TX_D_20=>n103,CH1_FF_TX_D_20=>n103,CH0_FF_TX_D_21=>n103,CH1_FF_TX_D_21=>n44, + CH0_FF_TX_D_22=>n103,CH1_FF_TX_D_22=>n103,CH0_FF_TX_D_23=>n103,CH1_FF_TX_D_23=>n103, + CH0_FFC_EI_EN=>n103,CH1_FFC_EI_EN=>n44,CH0_FFC_PCIE_DET_EN=>n103,CH1_FFC_PCIE_DET_EN=>n44, + CH0_FFC_PCIE_CT=>n103,CH1_FFC_PCIE_CT=>n44,CH0_FFC_SB_INV_RX=>n103,CH1_FFC_SB_INV_RX=>n103, + CH0_FFC_ENABLE_CGALIGN=>n103,CH1_FFC_ENABLE_CGALIGN=>n103,CH0_FFC_SIGNAL_DETECT=>n103, + CH1_FFC_SIGNAL_DETECT=>signal_detect_c,CH0_FFC_FB_LOOPBACK=>n103,CH1_FFC_FB_LOOPBACK=>n44, + CH0_FFC_SB_PFIFO_LP=>n103,CH1_FFC_SB_PFIFO_LP=>n44,CH0_FFC_PFIFO_CLR=>n103, + CH1_FFC_PFIFO_CLR=>n44,CH0_FFC_RATE_MODE_RX=>n103,CH1_FFC_RATE_MODE_RX=>n44, + CH0_FFC_RATE_MODE_TX=>n103,CH1_FFC_RATE_MODE_TX=>n44,CH0_FFC_DIV11_MODE_RX=>n103, + CH1_FFC_DIV11_MODE_RX=>n44,CH0_FFC_DIV11_MODE_TX=>n103,CH1_FFC_DIV11_MODE_TX=>n44, + CH0_FFC_RX_GEAR_MODE=>n103,CH1_FFC_RX_GEAR_MODE=>n44,CH0_FFC_TX_GEAR_MODE=>n103, + CH1_FFC_TX_GEAR_MODE=>n44,CH0_FFC_LDR_CORE2TX_EN=>n103,CH1_FFC_LDR_CORE2TX_EN=>n103, + CH0_FFC_LANE_TX_RST=>n103,CH1_FFC_LANE_TX_RST=>rsl_tx_pcs_rst_c,CH0_FFC_LANE_RX_RST=>n103, + CH1_FFC_LANE_RX_RST=>rsl_rx_pcs_rst_c,CH0_FFC_RRST=>n103,CH1_FFC_RRST=>rsl_rx_serdes_rst_c, + CH0_FFC_TXPWDNB=>n103,CH1_FFC_TXPWDNB=>tx_pwrup_c,CH0_FFC_RXPWDNB=>n103, + CH1_FFC_RXPWDNB=>rx_pwrup_c,CH0_LDR_CORE2TX=>n103,CH1_LDR_CORE2TX=>n103, + D_SCIWDATA0=>sci_wrdata(0),D_SCIWDATA1=>sci_wrdata(1),D_SCIWDATA2=>sci_wrdata(2), + D_SCIWDATA3=>sci_wrdata(3),D_SCIWDATA4=>sci_wrdata(4),D_SCIWDATA5=>sci_wrdata(5), + D_SCIWDATA6=>sci_wrdata(6),D_SCIWDATA7=>sci_wrdata(7),D_SCIADDR0=>sci_addr(0), + D_SCIADDR1=>sci_addr(1),D_SCIADDR2=>sci_addr(2),D_SCIADDR3=>sci_addr(3), + D_SCIADDR4=>sci_addr(4),D_SCIADDR5=>sci_addr(5),D_SCIENAUX=>sci_en_dual, + D_SCISELAUX=>sci_sel_dual,CH0_SCIEN=>n103,CH1_SCIEN=>sci_en,CH0_SCISEL=>n103, + CH1_SCISEL=>sci_sel,D_SCIRD=>sci_rd,D_SCIWSTN=>sci_wrn,D_CYAWSTN=>cyawstn, + D_FFC_SYNC_TOGGLE=>n103,D_FFC_DUAL_RST=>rsl_rst_dual_c,D_FFC_MACRO_RST=>rsl_serdes_rst_dual_c, + D_FFC_MACROPDB=>serdes_pdb,D_FFC_TRST=>rsl_tx_serdes_rst_c,CH0_FFC_CDR_EN_BITSLIP=>n103, + CH1_FFC_CDR_EN_BITSLIP=>n44,D_SCAN_ENABLE=>n44,D_SCAN_IN_0=>n44,D_SCAN_IN_1=>n44, + D_SCAN_IN_2=>n44,D_SCAN_IN_3=>n44,D_SCAN_IN_4=>n44,D_SCAN_IN_5=>n44, + D_SCAN_IN_6=>n44,D_SCAN_IN_7=>n44,D_SCAN_MODE=>n44,D_SCAN_RESET=>n44, + D_CIN0=>n44,D_CIN1=>n44,D_CIN2=>n44,D_CIN3=>n44,D_CIN4=>n44,D_CIN5=>n44, + D_CIN6=>n44,D_CIN7=>n44,D_CIN8=>n44,D_CIN9=>n44,D_CIN10=>n44,D_CIN11=>n44, + CH0_HDOUTP=>n47,CH1_HDOUTP=>hdoutp,CH0_HDOUTN=>n48,CH1_HDOUTN=>hdoutn, + D_TXBIT_CLKP_TO_ND=>n1,D_TXBIT_CLKN_TO_ND=>n2,D_SYNC_PULSE2ND=>n3,D_TXPLL_LOL_TO_ND=>n4, + CH0_FF_RX_F_CLK=>n49,CH1_FF_RX_F_CLK=>n5,CH0_FF_RX_H_CLK=>n50,CH1_FF_RX_H_CLK=>n6, + CH0_FF_TX_F_CLK=>n51,CH1_FF_TX_F_CLK=>n7,CH0_FF_TX_H_CLK=>n52,CH1_FF_TX_H_CLK=>n8, + CH0_FF_RX_PCLK=>n53,CH1_FF_RX_PCLK=>n9,CH0_FF_TX_PCLK=>n54,CH1_FF_TX_PCLK=>tx_pclk_c, + CH0_FF_RX_D_0=>n55,CH1_FF_RX_D_0=>rxdata(0),CH0_FF_RX_D_1=>n56,CH1_FF_RX_D_1=>rxdata(1), + CH0_FF_RX_D_2=>n57,CH1_FF_RX_D_2=>rxdata(2),CH0_FF_RX_D_3=>n58,CH1_FF_RX_D_3=>rxdata(3), + CH0_FF_RX_D_4=>n59,CH1_FF_RX_D_4=>rxdata(4),CH0_FF_RX_D_5=>n60,CH1_FF_RX_D_5=>rxdata(5), + CH0_FF_RX_D_6=>n61,CH1_FF_RX_D_6=>rxdata(6),CH0_FF_RX_D_7=>n62,CH1_FF_RX_D_7=>rxdata(7), + CH0_FF_RX_D_8=>n63,CH1_FF_RX_D_8=>rx_k(0),CH0_FF_RX_D_9=>n64,CH1_FF_RX_D_9=>rx_disp_err(0), + CH0_FF_RX_D_10=>n65,CH1_FF_RX_D_10=>rx_cv_err(0),CH0_FF_RX_D_11=>n66, + CH1_FF_RX_D_11=>n10,CH0_FF_RX_D_12=>n67,CH1_FF_RX_D_12=>n68,CH0_FF_RX_D_13=>n69, + CH1_FF_RX_D_13=>n70,CH0_FF_RX_D_14=>n71,CH1_FF_RX_D_14=>n72,CH0_FF_RX_D_15=>n73, + CH1_FF_RX_D_15=>n74,CH0_FF_RX_D_16=>n75,CH1_FF_RX_D_16=>n76,CH0_FF_RX_D_17=>n77, + CH1_FF_RX_D_17=>n78,CH0_FF_RX_D_18=>n79,CH1_FF_RX_D_18=>n80,CH0_FF_RX_D_19=>n81, + CH1_FF_RX_D_19=>n82,CH0_FF_RX_D_20=>n83,CH1_FF_RX_D_20=>n84,CH0_FF_RX_D_21=>n85, + CH1_FF_RX_D_21=>n86,CH0_FF_RX_D_22=>n87,CH1_FF_RX_D_22=>n88,CH0_FF_RX_D_23=>n89, + CH1_FF_RX_D_23=>n11,CH0_FFS_PCIE_DONE=>n90,CH1_FFS_PCIE_DONE=>n12,CH0_FFS_PCIE_CON=>n91, + CH1_FFS_PCIE_CON=>n13,CH0_FFS_RLOS=>n92,CH1_FFS_RLOS=>rx_los_low_s_c, + CH0_FFS_LS_SYNC_STATUS=>n93,CH1_FFS_LS_SYNC_STATUS=>lsm_status_s,CH0_FFS_CC_UNDERRUN=>n94, + CH1_FFS_CC_UNDERRUN=>ctc_urun_s,CH0_FFS_CC_OVERRUN=>n95,CH1_FFS_CC_OVERRUN=>ctc_orun_s, + CH0_FFS_RXFBFIFO_ERROR=>n96,CH1_FFS_RXFBFIFO_ERROR=>n14,CH0_FFS_TXFBFIFO_ERROR=>n97, + CH1_FFS_TXFBFIFO_ERROR=>n15,CH0_FFS_RLOL=>n98,CH1_FFS_RLOL=>rx_cdr_lol_s_c, + CH0_FFS_SKP_ADDED=>n99,CH1_FFS_SKP_ADDED=>ctc_ins_s,CH0_FFS_SKP_DELETED=>n100, + CH1_FFS_SKP_DELETED=>ctc_del_s,CH0_LDR_RX2CORE=>n101,CH1_LDR_RX2CORE=>n112, + D_SCIRDATA0=>sci_rddata(0),D_SCIRDATA1=>sci_rddata(1),D_SCIRDATA2=>sci_rddata(2), + D_SCIRDATA3=>sci_rddata(3),D_SCIRDATA4=>sci_rddata(4),D_SCIRDATA5=>sci_rddata(5), + D_SCIRDATA6=>sci_rddata(6),D_SCIRDATA7=>sci_rddata(7),D_SCIINT=>sci_int, + D_SCAN_OUT_0=>n16,D_SCAN_OUT_1=>n17,D_SCAN_OUT_2=>n18,D_SCAN_OUT_3=>n19, + D_SCAN_OUT_4=>n20,D_SCAN_OUT_5=>n21,D_SCAN_OUT_6=>n22,D_SCAN_OUT_7=>n23, + D_COUT0=>n24,D_COUT1=>n25,D_COUT2=>n26,D_COUT3=>n27,D_COUT4=>n28,D_COUT5=>n29, + D_COUT6=>n30,D_COUT7=>n31,D_COUT8=>n32,D_COUT9=>n33,D_COUT10=>n34,D_COUT11=>n35, + D_COUT12=>n36,D_COUT13=>n37,D_COUT14=>n38,D_COUT15=>n39,D_COUT16=>n40, + D_COUT17=>n41,D_COUT18=>n42,D_COUT19=>n43,D_REFCLKI=>pll_refclki,D_FFS_PLOL=>n46); + n45 <= '1' ; + n44 <= '0' ; + n1 <= 'Z' ; + n2 <= 'Z' ; + n3 <= 'Z' ; + n4 <= 'Z' ; + n5 <= 'Z' ; + n6 <= 'Z' ; + n7 <= 'Z' ; + n8 <= 'Z' ; + n9 <= 'Z' ; + n10 <= 'Z' ; + n11 <= 'Z' ; + n12 <= 'Z' ; + n13 <= 'Z' ; + n14 <= 'Z' ; + n15 <= 'Z' ; + n16 <= 'Z' ; + n17 <= 'Z' ; + n18 <= 'Z' ; + n19 <= 'Z' ; + n20 <= 'Z' ; + n21 <= 'Z' ; + n22 <= 'Z' ; + n23 <= 'Z' ; + n24 <= 'Z' ; + n25 <= 'Z' ; + n26 <= 'Z' ; + n27 <= 'Z' ; + n28 <= 'Z' ; + n29 <= 'Z' ; + n30 <= 'Z' ; + n31 <= 'Z' ; + n32 <= 'Z' ; + n33 <= 'Z' ; + n34 <= 'Z' ; + n35 <= 'Z' ; + n36 <= 'Z' ; + n37 <= 'Z' ; + n38 <= 'Z' ; + n39 <= 'Z' ; + n40 <= 'Z' ; + n41 <= 'Z' ; + n42 <= 'Z' ; + n43 <= 'Z' ; + n46 <= 'Z' ; + n103 <= '0' ; + n102 <= '1' ; + n47 <= 'Z' ; + n48 <= 'Z' ; + n49 <= 'Z' ; + n50 <= 'Z' ; + n51 <= 'Z' ; + n52 <= 'Z' ; + n53 <= 'Z' ; + n54 <= 'Z' ; + n55 <= 'Z' ; + n56 <= 'Z' ; + n57 <= 'Z' ; + n58 <= 'Z' ; + n59 <= 'Z' ; + n60 <= 'Z' ; + n61 <= 'Z' ; + n62 <= 'Z' ; + n63 <= 'Z' ; + n64 <= 'Z' ; + n65 <= 'Z' ; + n66 <= 'Z' ; + n67 <= 'Z' ; + n68 <= 'Z' ; + n69 <= 'Z' ; + n70 <= 'Z' ; + n71 <= 'Z' ; + n72 <= 'Z' ; + n73 <= 'Z' ; + n74 <= 'Z' ; + n75 <= 'Z' ; + n76 <= 'Z' ; + n77 <= 'Z' ; + n78 <= 'Z' ; + n79 <= 'Z' ; + n80 <= 'Z' ; + n81 <= 'Z' ; + n82 <= 'Z' ; + n83 <= 'Z' ; + n84 <= 'Z' ; + n85 <= 'Z' ; + n86 <= 'Z' ; + n87 <= 'Z' ; + n88 <= 'Z' ; + n89 <= 'Z' ; + n90 <= 'Z' ; + n91 <= 'Z' ; + n92 <= 'Z' ; + n93 <= 'Z' ; + n94 <= 'Z' ; + n95 <= 'Z' ; + n96 <= 'Z' ; + n97 <= 'Z' ; + n98 <= 'Z' ; + n99 <= 'Z' ; + n100 <= 'Z' ; + n101 <= 'Z' ; + n112 <= 'Z' ; + rsl_inst: component sgmii_ecp5rsl_core port map (rui_rst=>rsl_rst,rui_serdes_rst_dual_c=>serdes_rst_dual_c, + rui_rst_dual_c=>rst_dual_c,rui_rsl_disable=>rsl_disable,rui_tx_ref_clk=>pll_refclki, + rui_tx_serdes_rst_c=>tx_serdes_rst_c,rui_tx_pcs_rst_c(3)=>n122, + rui_tx_pcs_rst_c(2)=>n122,rui_tx_pcs_rst_c(1)=>n122,rui_tx_pcs_rst_c(0)=>tx_pcs_rst_c, + rdi_pll_lol=>pll_lol_c,rui_rx_ref_clk=>rxrefclk,rui_rx_serdes_rst_c(3)=>n122, + rui_rx_serdes_rst_c(2)=>n122,rui_rx_serdes_rst_c(1)=>n122,rui_rx_serdes_rst_c(0)=>rx_serdes_rst_c, + rui_rx_pcs_rst_c(3)=>n122,rui_rx_pcs_rst_c(2)=>n122,rui_rx_pcs_rst_c(1)=>n122, + rui_rx_pcs_rst_c(0)=>rx_pcs_rst_c,rdi_rx_los_low_s(3)=>n122,rdi_rx_los_low_s(2)=>n122, + rdi_rx_los_low_s(1)=>n122,rdi_rx_los_low_s(0)=>rx_los_low_s_c, + rdi_rx_cdr_lol_s(3)=>n122,rdi_rx_cdr_lol_s(2)=>n122,rdi_rx_cdr_lol_s(1)=>n122, + rdi_rx_cdr_lol_s(0)=>rx_cdr_lol_s_c,rdo_serdes_rst_dual_c=>rsl_serdes_rst_dual_c, + rdo_rst_dual_c=>rsl_rst_dual_c,ruo_tx_rdy=>rsl_tx_rdy,rdo_tx_serdes_rst_c=>rsl_tx_serdes_rst_c, + rdo_tx_pcs_rst_c(3)=>n113,rdo_tx_pcs_rst_c(2)=>n114,rdo_tx_pcs_rst_c(1)=>n115, + rdo_tx_pcs_rst_c(0)=>rsl_tx_pcs_rst_c,ruo_rx_rdy=>rsl_rx_rdy,rdo_rx_serdes_rst_c(3)=>n116, + rdo_rx_serdes_rst_c(2)=>n117,rdo_rx_serdes_rst_c(1)=>n118,rdo_rx_serdes_rst_c(0)=>rsl_rx_serdes_rst_c, + rdo_rx_pcs_rst_c(3)=>n119,rdo_rx_pcs_rst_c(2)=>n120,rdo_rx_pcs_rst_c(1)=>\_Z\, + rdo_rx_pcs_rst_c(0)=>rsl_rx_pcs_rst_c); + n111 <= '1' ; + n110 <= '0' ; + n122 <= '0' ; + n121 <= '1' ; + n113 <= 'Z' ; + n114 <= 'Z' ; + n115 <= 'Z' ; + n116 <= 'Z' ; + n117 <= 'Z' ; + n118 <= 'Z' ; + n119 <= 'Z' ; + n120 <= 'Z' ; + \_Z\ <= 'Z' ; + sll_inst: component sgmii_ecp5sll_core port map (sli_rst=>sli_rst,sli_refclk=>pll_refclki, + sli_pclk=>tx_pclk_c,sli_div2_rate=>gnd,sli_div11_rate=>gnd,sli_gear_mode=>gnd, + sli_cpri_mode(2)=>gnd,sli_cpri_mode(1)=>gnd,sli_cpri_mode(0)=>gnd, + sli_pcie_mode=>gnd,slo_plol=>pll_lol_c); + n124 <= '1' ; + n123 <= '0' ; + gnd <= '0' ; + pwr <= '1' ; + +end architecture v1; + diff --git a/gbe_trb/media/ecp5/sgmii_ecp5.vhd_old b/gbe_trb/media/ecp5/sgmii_ecp5.vhd_old new file mode 100644 index 0000000..31195d1 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5.vhd_old @@ -0,0 +1,351 @@ + +-- +-- Verific VHDL Description of module DCUA +-- + +-- DCUA is a black-box. Cannot print a valid VHDL entity description for it + +-- +-- Verific VHDL Description of module sgmii_ecp5sll_core +-- + +-- sgmii_ecp5sll_core is a black-box. Cannot print a valid VHDL entity description for it + +-- +-- Verific VHDL Description of module sgmii_ecp5 +-- + +library ieee ; +use ieee.std_logic_1164.all ; + +library ecp5um ; +use ecp5um.components.all ; + +entity sgmii_ecp5 is + port (hdoutp: out std_logic; + hdoutn: out std_logic; + hdinp: in std_logic; + hdinn: in std_logic; + rxrefclk: in std_logic; + tx_pclk: out std_logic; + txi_clk: in std_logic; + txdata: in std_logic_vector(7 downto 0); + tx_k: in std_logic_vector(0 downto 0); + xmit: in std_logic_vector(0 downto 0); + tx_disp_correct: in std_logic_vector(0 downto 0); + rxdata: out std_logic_vector(7 downto 0); + rx_k: out std_logic_vector(0 downto 0); + rx_disp_err: out std_logic_vector(0 downto 0); + rx_cv_err: out std_logic_vector(0 downto 0); + signal_detect_c: in std_logic; + rx_los_low_s: out std_logic; + lsm_status_s: out std_logic; + ctc_urun_s: out std_logic; + ctc_orun_s: out std_logic; + rx_cdr_lol_s: out std_logic; + ctc_ins_s: out std_logic; + ctc_del_s: out std_logic; + tx_pcs_rst_c: in std_logic; + rx_pcs_rst_c: in std_logic; + rx_serdes_rst_c: in std_logic; + tx_pwrup_c: in std_logic; + rx_pwrup_c: in std_logic; + rst_dual_c: in std_logic; + serdes_rst_dual_c: in std_logic; + serdes_pdb: in std_logic; + tx_serdes_rst_c: in std_logic; + pll_refclki: in std_logic; + sli_rst: in std_logic; + pll_lol: out std_logic + ); + +end entity sgmii_ecp5; + +architecture v1 of sgmii_ecp5 is + component sgmii_ecp5sll_core is + generic (PPROTOCOL: string := "GBE"; + PLOL_SETTING: integer := 0; + PDYN_RATE_CTRL: string := "DISABLED"; + PPCIE_MAX_RATE: string := "2.5"; + PDIFF_VAL_LOCK: integer := 39; + PDIFF_VAL_UNLOCK: integer := 78; + PPCLK_TC: integer := 131072; + PDIFF_DIV11_VAL_LOCK: integer := 0; + PDIFF_DIV11_VAL_UNLOCK: integer := 0; + PPCLK_DIV11_TC: integer := 0); + port (sli_rst: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(125) + sli_refclk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(126) + sli_pclk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(127) + sli_div2_rate: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(128) + sli_div11_rate: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(129) + sli_gear_mode: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(130) + sli_cpri_mode: in std_logic_vector(2 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(131) + sli_pcie_mode: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(132) + slo_plol: out std_logic -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(135) + ); + + end component sgmii_ecp5sll_core; -- syn_black_box=1 -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(107) + signal n45,n44,n1,n2,n3,n4,tx_pclk_c,n5,n6,n7,n8,n9,n10,n11, + n12,n13,n14,n15,n16,n17,n18,n19,n20,n21,n22,n23,n24,n25, + n26,n27,n28,n29,n30,n31,n32,n33,n34,n35,n36,n37,n38,n39, + n40,n41,n42,n43,n46,n112,n111,n47,n48,n49,n50,n51,n52,n53, + n54,n55,n56,n57,n58,n59,n60,n61,n62,n63,n64,n65,n66,n67, + n68,n69,n70,n71,n72,n73,n74,n75,n76,n77,n78,n79,n80,n81, + n82,n83,n84,n85,n86,n87,n88,n89,n90,n91,n92,n93,n94,n95, + n96,n97,n98,n99,n100,n101,n102,n103,n104,n105,n106,n107, + n108,n109,n110,\_Z\,n114,n113,gnd,pwr : std_logic; + attribute LOC : string; + attribute LOC of DCU1_inst : label is "DCU1"; + attribute CHAN : string; + attribute CHAN of DCU1_inst : label is "CH1"; +begin + tx_pclk <= tx_pclk_c; + DCU1_inst: component DCUA generic map (D_MACROPDB=>"0b1",D_IB_PWDNB=>"0b1", + D_XGE_MODE=>"0b0",D_LOW_MARK=>"0d4",D_HIGH_MARK=>"0d12",D_BUS8BIT_SEL=>"0b0", + D_CDR_LOL_SET=>"0b00",D_TXPLL_PWDNB=>"0b1",D_BITCLK_LOCAL_EN=>"0b1", + D_BITCLK_ND_EN=>"0b0",D_BITCLK_FROM_ND_EN=>"0b0",D_SYNC_LOCAL_EN=>"0b1", + D_SYNC_ND_EN=>"0b0",CH1_UC_MODE=>"0b0",CH1_PCIE_MODE=>"0b0",CH1_RIO_MODE=>"0b0", + CH1_WA_MODE=>"0b0",CH1_INVERT_RX=>"0b0",CH1_INVERT_TX=>"0b0",CH1_PRBS_SELECTION=>"0b0", + CH1_GE_AN_ENABLE=>"0b0",CH1_PRBS_LOCK=>"0b0",CH1_PRBS_ENABLE=>"0b0", + CH1_ENABLE_CG_ALIGN=>"0b1",CH1_TX_GEAR_MODE=>"0b0",CH1_RX_GEAR_MODE=>"0b0", + CH1_PCS_DET_TIME_SEL=>"0b00",CH1_PCIE_EI_EN=>"0b0",CH1_TX_GEAR_BYPASS=>"0b0", + CH1_ENC_BYPASS=>"0b0",CH1_SB_BYPASS=>"0b0",CH1_RX_SB_BYPASS=>"0b0", + CH1_WA_BYPASS=>"0b0",CH1_DEC_BYPASS=>"0b0",CH1_CTC_BYPASS=>"0b0", + CH1_RX_GEAR_BYPASS=>"0b0",CH1_LSM_DISABLE=>"0b0",CH1_MATCH_2_ENABLE=>"0b1", + CH1_MATCH_4_ENABLE=>"0b0",CH1_MIN_IPG_CNT=>"0b11",CH1_CC_MATCH_1=>"0x000", + CH1_CC_MATCH_2=>"0x000",CH1_CC_MATCH_3=>"0x1BC",CH1_CC_MATCH_4=>"0x050", + CH1_UDF_COMMA_MASK=>"0x3ff",CH1_UDF_COMMA_A=>"0x283",CH1_UDF_COMMA_B=>"0x17C", + CH1_RX_DCO_CK_DIV=>"0b010",CH1_RCV_DCC_EN=>"0b0",CH1_TPWDNB=>"0b1", + CH1_RATE_MODE_TX=>"0b0",CH1_RTERM_TX=>"0d19",CH1_TX_CM_SEL=>"0b00", + CH1_TDRV_PRE_EN=>"0b0",CH1_TDRV_SLICE0_SEL=>"0b01",CH1_TDRV_SLICE1_SEL=>"0b00", + CH1_TDRV_SLICE2_SEL=>"0b01",CH1_TDRV_SLICE3_SEL=>"0b01",CH1_TDRV_SLICE4_SEL=>"0b01", + CH1_TDRV_SLICE5_SEL=>"0b01",CH1_TDRV_SLICE0_CUR=>"0b101",CH1_TDRV_SLICE1_CUR=>"0b000", + CH1_TDRV_SLICE2_CUR=>"0b11",CH1_TDRV_SLICE3_CUR=>"0b11",CH1_TDRV_SLICE4_CUR=>"0b11", + CH1_TDRV_SLICE5_CUR=>"0b00",CH1_TDRV_DAT_SEL=>"0b00",CH1_TX_DIV11_SEL=>"0b0", + CH1_RPWDNB=>"0b1",CH1_RATE_MODE_RX=>"0b0",CH1_RX_DIV11_SEL=>"0b0", + CH1_SEL_SD_RX_CLK=>"0b0",CH1_FF_RX_H_CLK_EN=>"0b0",CH1_FF_RX_F_CLK_DIS=>"0b0", + CH1_FF_TX_H_CLK_EN=>"0b0",CH1_FF_TX_F_CLK_DIS=>"0b0",CH1_TDRV_POST_EN=>"0b0", + CH1_TX_POST_SIGN=>"0b0",CH1_TX_PRE_SIGN=>"0b0",CH1_REQ_LVL_SET=>"0b00", + CH1_REQ_EN=>"0b1",CH1_RTERM_RX=>"0d22",CH1_RXTERM_CM=>"0b11",CH1_PDEN_SEL=>"0b1", + CH1_RXIN_CM=>"0b11",CH1_LEQ_OFFSET_SEL=>"0b0",CH1_LEQ_OFFSET_TRIM=>"0b000", + CH1_RLOS_SEL=>"0b1",CH1_RX_LOS_LVL=>"0b010",CH1_RX_LOS_CEQ=>"0b11", + CH1_RX_LOS_HYST_EN=>"0b0",CH1_RX_LOS_EN=>"0b1",CH1_LDR_RX2CORE_SEL=>"0b0", + CH1_LDR_CORE2TX_SEL=>"0b0",D_TX_MAX_RATE=>"1.25",CH1_CDR_MAX_RATE=>"1.25", + CH1_TXAMPLITUDE=>"0d1100",CH1_TXDEPRE=>"DISABLED",CH1_TXDEPOST=>"DISABLED", + CH1_PROTOCOL=>"GBE",D_ISETLOS=>"0d0",D_SETIRPOLY_AUX=>"0b00",D_SETICONST_AUX=>"0b00", + D_SETIRPOLY_CH=>"0b00",D_SETICONST_CH=>"0b00",D_REQ_ISET=>"0b000", + D_PD_ISET=>"0b00",D_DCO_CALIB_TIME_SEL=>"0b00",CH1_CDR_CNT4SEL=>"0b00", + CH1_CDR_CNT8SEL=>"0b00",CH1_DCOATDCFG=>"0b00",CH1_DCOATDDLY=>"0b00", + CH1_DCOBYPSATD=>"0b1",CH1_DCOCALDIV=>"0b001",CH1_DCOCTLGI=>"0b010", + CH1_DCODISBDAVOID=>"0b0",CH1_DCOFLTDAC=>"0b01",CH1_DCOFTNRG=>"0b110", + CH1_DCOIOSTUNE=>"0b000",CH1_DCOITUNE=>"0b00",CH1_DCOITUNE4LSB=>"0b111", + CH1_DCOIUPDNX2=>"0b1",CH1_DCONUOFLSB=>"0b101",CH1_DCOSCALEI=>"0b00", + CH1_DCOSTARTVAL=>"0b000",CH1_DCOSTEP=>"0b00",CH1_BAND_THRESHOLD=>"0d0", + CH1_AUTO_FACQ_EN=>"0b1",CH1_AUTO_CALIB_EN=>"0b1",CH1_CALIB_CK_MODE=>"0b0", + CH1_REG_BAND_OFFSET=>"0d0",CH1_REG_BAND_SEL=>"0d0",CH1_REG_IDAC_SEL=>"0d0", + CH1_REG_IDAC_EN=>"0b0",D_CMUSETISCL4VCO=>"0b000",D_CMUSETI4VCO=>"0b00", + D_CMUSETINITVCT=>"0b00",D_CMUSETZGM=>"0b000",D_CMUSETP2AGM=>"0b000", + D_CMUSETP1GM=>"0b000",D_CMUSETI4CPZ=>"0d3",D_CMUSETI4CPP=>"0d3",D_CMUSETICP4Z=>"0b101", + D_CMUSETICP4P=>"0b01",D_CMUSETBIASI=>"0b00",D_SETPLLRC=>"0d1",CH1_RX_RATE_SEL=>"0d8", + D_REFCK_MODE=>"0b001",D_TX_VCO_CK_DIV=>"0b010",D_PLL_LOL_SET=>"0b00", + D_RG_EN=>"0b0",D_RG_SET=>"0b00") + port map (CH0_HDINP=>n112,CH1_HDINP=>hdinp,CH0_HDINN=>n112,CH1_HDINN=>hdinn, + D_TXBIT_CLKP_FROM_ND=>n44,D_TXBIT_CLKN_FROM_ND=>n44,D_SYNC_ND=>n44,D_TXPLL_LOL_FROM_ND=>n44, + CH0_RX_REFCLK=>n112,CH1_RX_REFCLK=>rxrefclk,CH0_FF_RXI_CLK=>n111,CH1_FF_RXI_CLK=>tx_pclk_c, + CH0_FF_TXI_CLK=>n111,CH1_FF_TXI_CLK=>txi_clk,CH0_FF_EBRD_CLK=>n111,CH1_FF_EBRD_CLK=>tx_pclk_c, + CH0_FF_TX_D_0=>n112,CH1_FF_TX_D_0=>txdata(0),CH0_FF_TX_D_1=>n112,CH1_FF_TX_D_1=>txdata(1), + CH0_FF_TX_D_2=>n112,CH1_FF_TX_D_2=>txdata(2),CH0_FF_TX_D_3=>n112,CH1_FF_TX_D_3=>txdata(3), + CH0_FF_TX_D_4=>n112,CH1_FF_TX_D_4=>txdata(4),CH0_FF_TX_D_5=>n112,CH1_FF_TX_D_5=>txdata(5), + CH0_FF_TX_D_6=>n112,CH1_FF_TX_D_6=>txdata(6),CH0_FF_TX_D_7=>n112,CH1_FF_TX_D_7=>txdata(7), + CH0_FF_TX_D_8=>n112,CH1_FF_TX_D_8=>tx_k(0),CH0_FF_TX_D_9=>n112,CH1_FF_TX_D_9=>n44, + CH0_FF_TX_D_10=>n112,CH1_FF_TX_D_10=>xmit(0),CH0_FF_TX_D_11=>n112,CH1_FF_TX_D_11=>tx_disp_correct(0), + CH0_FF_TX_D_12=>n112,CH1_FF_TX_D_12=>n112,CH0_FF_TX_D_13=>n112,CH1_FF_TX_D_13=>n112, + CH0_FF_TX_D_14=>n112,CH1_FF_TX_D_14=>n112,CH0_FF_TX_D_15=>n112,CH1_FF_TX_D_15=>n112, + CH0_FF_TX_D_16=>n112,CH1_FF_TX_D_16=>n112,CH0_FF_TX_D_17=>n112,CH1_FF_TX_D_17=>n112, + CH0_FF_TX_D_18=>n112,CH1_FF_TX_D_18=>n112,CH0_FF_TX_D_19=>n112,CH1_FF_TX_D_19=>n112, + CH0_FF_TX_D_20=>n112,CH1_FF_TX_D_20=>n112,CH0_FF_TX_D_21=>n112,CH1_FF_TX_D_21=>n44, + CH0_FF_TX_D_22=>n112,CH1_FF_TX_D_22=>n112,CH0_FF_TX_D_23=>n112,CH1_FF_TX_D_23=>n112, + CH0_FFC_EI_EN=>n112,CH1_FFC_EI_EN=>n44,CH0_FFC_PCIE_DET_EN=>n112,CH1_FFC_PCIE_DET_EN=>n44, + CH0_FFC_PCIE_CT=>n112,CH1_FFC_PCIE_CT=>n44,CH0_FFC_SB_INV_RX=>n112,CH1_FFC_SB_INV_RX=>n112, + CH0_FFC_ENABLE_CGALIGN=>n112,CH1_FFC_ENABLE_CGALIGN=>n112,CH0_FFC_SIGNAL_DETECT=>n112, + CH1_FFC_SIGNAL_DETECT=>signal_detect_c,CH0_FFC_FB_LOOPBACK=>n112,CH1_FFC_FB_LOOPBACK=>n44, + CH0_FFC_SB_PFIFO_LP=>n112,CH1_FFC_SB_PFIFO_LP=>n44,CH0_FFC_PFIFO_CLR=>n112, + CH1_FFC_PFIFO_CLR=>n44,CH0_FFC_RATE_MODE_RX=>n112,CH1_FFC_RATE_MODE_RX=>n44, + CH0_FFC_RATE_MODE_TX=>n112,CH1_FFC_RATE_MODE_TX=>n44,CH0_FFC_DIV11_MODE_RX=>n112, + CH1_FFC_DIV11_MODE_RX=>n44,CH0_FFC_DIV11_MODE_TX=>n112,CH1_FFC_DIV11_MODE_TX=>n44, + CH0_FFC_RX_GEAR_MODE=>n112,CH1_FFC_RX_GEAR_MODE=>n44,CH0_FFC_TX_GEAR_MODE=>n112, + CH1_FFC_TX_GEAR_MODE=>n44,CH0_FFC_LDR_CORE2TX_EN=>n112,CH1_FFC_LDR_CORE2TX_EN=>n112, + CH0_FFC_LANE_TX_RST=>n112,CH1_FFC_LANE_TX_RST=>tx_pcs_rst_c,CH0_FFC_LANE_RX_RST=>n112, + CH1_FFC_LANE_RX_RST=>rx_pcs_rst_c,CH0_FFC_RRST=>n112,CH1_FFC_RRST=>rx_serdes_rst_c, + CH0_FFC_TXPWDNB=>n112,CH1_FFC_TXPWDNB=>tx_pwrup_c,CH0_FFC_RXPWDNB=>n112, + CH1_FFC_RXPWDNB=>rx_pwrup_c,CH0_LDR_CORE2TX=>n112,CH1_LDR_CORE2TX=>n112, + D_SCIWDATA0=>n112,D_SCIWDATA1=>n112,D_SCIWDATA2=>n112,D_SCIWDATA3=>n112, + D_SCIWDATA4=>n112,D_SCIWDATA5=>n112,D_SCIWDATA6=>n112,D_SCIWDATA7=>n112, + D_SCIADDR0=>n112,D_SCIADDR1=>n112,D_SCIADDR2=>n112,D_SCIADDR3=>n112, + D_SCIADDR4=>n112,D_SCIADDR5=>n112,D_SCIENAUX=>n112,D_SCISELAUX=>n112, + CH0_SCIEN=>n112,CH1_SCIEN=>n112,CH0_SCISEL=>n112,CH1_SCISEL=>n112,D_SCIRD=>n112, + D_SCIWSTN=>n112,D_CYAWSTN=>n112,D_FFC_SYNC_TOGGLE=>n112,D_FFC_DUAL_RST=>rst_dual_c, + D_FFC_MACRO_RST=>serdes_rst_dual_c,D_FFC_MACROPDB=>serdes_pdb,D_FFC_TRST=>tx_serdes_rst_c, + CH0_FFC_CDR_EN_BITSLIP=>n112,CH1_FFC_CDR_EN_BITSLIP=>n44,D_SCAN_ENABLE=>n44, + D_SCAN_IN_0=>n44,D_SCAN_IN_1=>n44,D_SCAN_IN_2=>n44,D_SCAN_IN_3=>n44, + D_SCAN_IN_4=>n44,D_SCAN_IN_5=>n44,D_SCAN_IN_6=>n44,D_SCAN_IN_7=>n44, + D_SCAN_MODE=>n44,D_SCAN_RESET=>n44,D_CIN0=>n44,D_CIN1=>n44,D_CIN2=>n44, + D_CIN3=>n44,D_CIN4=>n44,D_CIN5=>n44,D_CIN6=>n44,D_CIN7=>n44,D_CIN8=>n44, + D_CIN9=>n44,D_CIN10=>n44,D_CIN11=>n44,CH0_HDOUTP=>n47,CH1_HDOUTP=>hdoutp, + CH0_HDOUTN=>n48,CH1_HDOUTN=>hdoutn,D_TXBIT_CLKP_TO_ND=>n1,D_TXBIT_CLKN_TO_ND=>n2, + D_SYNC_PULSE2ND=>n3,D_TXPLL_LOL_TO_ND=>n4,CH0_FF_RX_F_CLK=>n49,CH1_FF_RX_F_CLK=>n5, + CH0_FF_RX_H_CLK=>n50,CH1_FF_RX_H_CLK=>n6,CH0_FF_TX_F_CLK=>n51,CH1_FF_TX_F_CLK=>n7, + CH0_FF_TX_H_CLK=>n52,CH1_FF_TX_H_CLK=>n8,CH0_FF_RX_PCLK=>n53,CH1_FF_RX_PCLK=>n9, + CH0_FF_TX_PCLK=>n54,CH1_FF_TX_PCLK=>tx_pclk_c,CH0_FF_RX_D_0=>n55,CH1_FF_RX_D_0=>rxdata(0), + CH0_FF_RX_D_1=>n56,CH1_FF_RX_D_1=>rxdata(1),CH0_FF_RX_D_2=>n57,CH1_FF_RX_D_2=>rxdata(2), + CH0_FF_RX_D_3=>n58,CH1_FF_RX_D_3=>rxdata(3),CH0_FF_RX_D_4=>n59,CH1_FF_RX_D_4=>rxdata(4), + CH0_FF_RX_D_5=>n60,CH1_FF_RX_D_5=>rxdata(5),CH0_FF_RX_D_6=>n61,CH1_FF_RX_D_6=>rxdata(6), + CH0_FF_RX_D_7=>n62,CH1_FF_RX_D_7=>rxdata(7),CH0_FF_RX_D_8=>n63,CH1_FF_RX_D_8=>rx_k(0), + CH0_FF_RX_D_9=>n64,CH1_FF_RX_D_9=>rx_disp_err(0),CH0_FF_RX_D_10=>n65, + CH1_FF_RX_D_10=>rx_cv_err(0),CH0_FF_RX_D_11=>n66,CH1_FF_RX_D_11=>n10, + CH0_FF_RX_D_12=>n67,CH1_FF_RX_D_12=>n68,CH0_FF_RX_D_13=>n69,CH1_FF_RX_D_13=>n70, + CH0_FF_RX_D_14=>n71,CH1_FF_RX_D_14=>n72,CH0_FF_RX_D_15=>n73,CH1_FF_RX_D_15=>n74, + CH0_FF_RX_D_16=>n75,CH1_FF_RX_D_16=>n76,CH0_FF_RX_D_17=>n77,CH1_FF_RX_D_17=>n78, + CH0_FF_RX_D_18=>n79,CH1_FF_RX_D_18=>n80,CH0_FF_RX_D_19=>n81,CH1_FF_RX_D_19=>n82, + CH0_FF_RX_D_20=>n83,CH1_FF_RX_D_20=>n84,CH0_FF_RX_D_21=>n85,CH1_FF_RX_D_21=>n86, + CH0_FF_RX_D_22=>n87,CH1_FF_RX_D_22=>n88,CH0_FF_RX_D_23=>n89,CH1_FF_RX_D_23=>n11, + CH0_FFS_PCIE_DONE=>n90,CH1_FFS_PCIE_DONE=>n12,CH0_FFS_PCIE_CON=>n91,CH1_FFS_PCIE_CON=>n13, + CH0_FFS_RLOS=>n92,CH1_FFS_RLOS=>rx_los_low_s,CH0_FFS_LS_SYNC_STATUS=>n93, + CH1_FFS_LS_SYNC_STATUS=>lsm_status_s,CH0_FFS_CC_UNDERRUN=>n94,CH1_FFS_CC_UNDERRUN=>ctc_urun_s, + CH0_FFS_CC_OVERRUN=>n95,CH1_FFS_CC_OVERRUN=>ctc_orun_s,CH0_FFS_RXFBFIFO_ERROR=>n96, + CH1_FFS_RXFBFIFO_ERROR=>n14,CH0_FFS_TXFBFIFO_ERROR=>n97,CH1_FFS_TXFBFIFO_ERROR=>n15, + CH0_FFS_RLOL=>n98,CH1_FFS_RLOL=>rx_cdr_lol_s,CH0_FFS_SKP_ADDED=>n99,CH1_FFS_SKP_ADDED=>ctc_ins_s, + CH0_FFS_SKP_DELETED=>n100,CH1_FFS_SKP_DELETED=>ctc_del_s,CH0_LDR_RX2CORE=>n101, + CH1_LDR_RX2CORE=>n102,D_SCIRDATA0=>n103,D_SCIRDATA1=>n104,D_SCIRDATA2=>n105, + D_SCIRDATA3=>n106,D_SCIRDATA4=>n107,D_SCIRDATA5=>n108,D_SCIRDATA6=>n109, + D_SCIRDATA7=>n110,D_SCIINT=>\_Z\,D_SCAN_OUT_0=>n16,D_SCAN_OUT_1=>n17, + D_SCAN_OUT_2=>n18,D_SCAN_OUT_3=>n19,D_SCAN_OUT_4=>n20,D_SCAN_OUT_5=>n21, + D_SCAN_OUT_6=>n22,D_SCAN_OUT_7=>n23,D_COUT0=>n24,D_COUT1=>n25,D_COUT2=>n26, + D_COUT3=>n27,D_COUT4=>n28,D_COUT5=>n29,D_COUT6=>n30,D_COUT7=>n31,D_COUT8=>n32, + D_COUT9=>n33,D_COUT10=>n34,D_COUT11=>n35,D_COUT12=>n36,D_COUT13=>n37, + D_COUT14=>n38,D_COUT15=>n39,D_COUT16=>n40,D_COUT17=>n41,D_COUT18=>n42, + D_COUT19=>n43,D_REFCLKI=>pll_refclki,D_FFS_PLOL=>n46); + n45 <= '1' ; + n44 <= '0' ; + n1 <= 'Z' ; + n2 <= 'Z' ; + n3 <= 'Z' ; + n4 <= 'Z' ; + n5 <= 'Z' ; + n6 <= 'Z' ; + n7 <= 'Z' ; + n8 <= 'Z' ; + n9 <= 'Z' ; + n10 <= 'Z' ; + n11 <= 'Z' ; + n12 <= 'Z' ; + n13 <= 'Z' ; + n14 <= 'Z' ; + n15 <= 'Z' ; + n16 <= 'Z' ; + n17 <= 'Z' ; + n18 <= 'Z' ; + n19 <= 'Z' ; + n20 <= 'Z' ; + n21 <= 'Z' ; + n22 <= 'Z' ; + n23 <= 'Z' ; + n24 <= 'Z' ; + n25 <= 'Z' ; + n26 <= 'Z' ; + n27 <= 'Z' ; + n28 <= 'Z' ; + n29 <= 'Z' ; + n30 <= 'Z' ; + n31 <= 'Z' ; + n32 <= 'Z' ; + n33 <= 'Z' ; + n34 <= 'Z' ; + n35 <= 'Z' ; + n36 <= 'Z' ; + n37 <= 'Z' ; + n38 <= 'Z' ; + n39 <= 'Z' ; + n40 <= 'Z' ; + n41 <= 'Z' ; + n42 <= 'Z' ; + n43 <= 'Z' ; + n46 <= 'Z' ; + n112 <= '0' ; + n111 <= '1' ; + n47 <= 'Z' ; + n48 <= 'Z' ; + n49 <= 'Z' ; + n50 <= 'Z' ; + n51 <= 'Z' ; + n52 <= 'Z' ; + n53 <= 'Z' ; + n54 <= 'Z' ; + n55 <= 'Z' ; + n56 <= 'Z' ; + n57 <= 'Z' ; + n58 <= 'Z' ; + n59 <= 'Z' ; + n60 <= 'Z' ; + n61 <= 'Z' ; + n62 <= 'Z' ; + n63 <= 'Z' ; + n64 <= 'Z' ; + n65 <= 'Z' ; + n66 <= 'Z' ; + n67 <= 'Z' ; + n68 <= 'Z' ; + n69 <= 'Z' ; + n70 <= 'Z' ; + n71 <= 'Z' ; + n72 <= 'Z' ; + n73 <= 'Z' ; + n74 <= 'Z' ; + n75 <= 'Z' ; + n76 <= 'Z' ; + n77 <= 'Z' ; + n78 <= 'Z' ; + n79 <= 'Z' ; + n80 <= 'Z' ; + n81 <= 'Z' ; + n82 <= 'Z' ; + n83 <= 'Z' ; + n84 <= 'Z' ; + n85 <= 'Z' ; + n86 <= 'Z' ; + n87 <= 'Z' ; + n88 <= 'Z' ; + n89 <= 'Z' ; + n90 <= 'Z' ; + n91 <= 'Z' ; + n92 <= 'Z' ; + n93 <= 'Z' ; + n94 <= 'Z' ; + n95 <= 'Z' ; + n96 <= 'Z' ; + n97 <= 'Z' ; + n98 <= 'Z' ; + n99 <= 'Z' ; + n100 <= 'Z' ; + n101 <= 'Z' ; + n102 <= 'Z' ; + n103 <= 'Z' ; + n104 <= 'Z' ; + n105 <= 'Z' ; + n106 <= 'Z' ; + n107 <= 'Z' ; + n108 <= 'Z' ; + n109 <= 'Z' ; + n110 <= 'Z' ; + \_Z\ <= 'Z' ; + sll_inst: component sgmii_ecp5sll_core port map (sli_rst=>sli_rst,sli_refclk=>pll_refclki, + sli_pclk=>tx_pclk_c,sli_div2_rate=>gnd,sli_div11_rate=>gnd,sli_gear_mode=>gnd, + sli_cpri_mode(2)=>gnd,sli_cpri_mode(1)=>gnd,sli_cpri_mode(0)=>gnd, + sli_pcie_mode=>gnd,slo_plol=>pll_lol); + n114 <= '1' ; + n113 <= '0' ; + gnd <= '0' ; + pwr <= '1' ; + +end architecture v1; + diff --git a/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v b/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v new file mode 100644 index 0000000..69a023d --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v @@ -0,0 +1,2003 @@ + + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2016 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : RSL- Reset Sequence Logic +// File : rsl_core.v +// Title : Top-level file for RSL +// Dependencies : 1. +// : 2. +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : BM +// Mod. Date : October 28, 2013 +// Changes Made : Initial Creation +// ----------------------------------------------------------------------------- +// Version : 1.1 +// Author(s) : BM +// Mod. Date : November 06, 2013 +// Changes Made : Tx/Rx separation, ready port code exclusion +// ----------------------------------------------------------------------------- +// Version : 1.2 +// Author(s) : BM +// Mod. Date : June 13, 2014 +// Changes Made : Updated Rx PCS reset method +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// Version : 1.3 +// Author(s) : UA +// Mod. Date : Dec 19, 2014 +// Changes Made : Added new parameter fro PCIE +// ----------------------------------------------------------------------------- +// Version : 1.31 +// Author(s) : BM/UM +// Mod. Date : Feb 23, 2016 +// Changes Made : Behavior of rx_rdy output modified. The output rx_rdy +// and the rx_rdy wait counter are reset to zero on +// LOL or LOS. Reverted back the counter value change for PCIE. +// ----------------------------------------------------------------------------- +// Version : 1.4 +// Author(s) : EB +// Mod. Date: : March 21, 2017 +// Changes Made : +// ----------------------------------------------------------------------------- +// Version : 1.5 +// Author(s) : ES +// Mod. Date: : May 8, 2017 +// Changes Made : Implemented common RSL behaviour as proposed by BM. +// ============================================================================= + +`timescale 1ns/10ps + +module sgmii_ecp5rsl_core ( + // ------------ Inputs + // Common + rui_rst, // Active high reset for the RSL module + rui_serdes_rst_dual_c, // SERDES macro reset user command + rui_rst_dual_c, // PCS dual reset user command + rui_rsl_disable, // Active high signal that disables all reset outputs of RSL + // Tx + rui_tx_ref_clk, // Tx reference clock + rui_tx_serdes_rst_c, // Tx SERDES reset user command + rui_tx_pcs_rst_c, // Tx lane reset user command + rdi_pll_lol, // Tx PLL Loss of Lock status input from the SERDES + // Rx + rui_rx_ref_clk, // Rx reference clock + rui_rx_serdes_rst_c, // SERDES Receive channel reset user command + rui_rx_pcs_rst_c, // Rx lane reset user command + rdi_rx_los_low_s, // Receive loss of signal status input from SERDES + rdi_rx_cdr_lol_s, // Receive CDR loss of lock status input from SERDES + + // ------------ Outputs + // Common + rdo_serdes_rst_dual_c, // SERDES macro reset command output + rdo_rst_dual_c, // PCS dual reset command output + // Tx + ruo_tx_rdy, // Tx lane ready status output + rdo_tx_serdes_rst_c, // SERDES Tx reset command output + rdo_tx_pcs_rst_c, // PCS Tx lane reset command output + // Rx + ruo_rx_rdy, // Rx lane ready status output + rdo_rx_serdes_rst_c, // SERDES Rx channel reset command output + rdo_rx_pcs_rst_c // PCS Rx lane reset command output + ); + +// ------------ Module parameters +`ifdef NUM_CHANNELS + parameter pnum_channels = `NUM_CHANNELS; // 1,2,4 +`else + parameter pnum_channels = 1; +`endif + +`ifdef PCIE + parameter pprotocol = "PCIE"; +`else + parameter pprotocol = ""; +`endif + +`ifdef RX_ONLY + parameter pserdes_mode = "RX ONLY"; +`else + `ifdef TX_ONLY + parameter pserdes_mode = "TX ONLY"; + `else + parameter pserdes_mode = "RX AND TX"; + `endif +`endif + +`ifdef PORT_TX_RDY + parameter pport_tx_rdy = "ENABLED"; +`else + parameter pport_tx_rdy = "DISABLED"; +`endif + +`ifdef WAIT_TX_RDY + parameter pwait_tx_rdy = `WAIT_TX_RDY; +`else + parameter pwait_tx_rdy = 3000; +`endif + +`ifdef PORT_RX_RDY + parameter pport_rx_rdy = "ENABLED"; +`else + parameter pport_rx_rdy = "DISABLED"; +`endif + +`ifdef WAIT_RX_RDY + parameter pwait_rx_rdy = `WAIT_RX_RDY; +`else + parameter pwait_rx_rdy = 3000; +`endif + +// ------------ Local parameters + localparam wa_num_cycles = 1024; + localparam dac_num_cycles = 3; + localparam lreset_pwidth = 3; // reset pulse width-1, default=4-1=3 + localparam lwait_b4_trst = 781250; // 5ms wait with worst-case Fmax=156 MHz + localparam lwait_b4_trst_s = 781; // for simulation + localparam lplol_cnt_width = 20; // width for lwait_b4_trst + localparam lwait_after_plol0 = 4; + localparam lwait_b4_rrst = 180224; // total calibration time + localparam lrrst_wait_width = 20; + localparam lwait_after_rrst = 800000; // For CPRI- unused + localparam lwait_b4_rrst_s = 460; // wait cycles provided by design team + localparam lrlol_cnt_width = 19; // width for lwait_b4_rrst + localparam lwait_after_lols = (16384 * dac_num_cycles) + wa_num_cycles; // 16384 cycles * dac_num_cycles + 1024 cycles + localparam lwait_after_lols_s = 150; // wait cycles provided by design team + localparam llols_cnt_width = 18; // lols count width + localparam lrdb_max = 15; // maximum debounce count + localparam ltxr_wait_width = 12; // width of tx ready wait counter + localparam lrxr_wait_width = 12; // width of tx ready wait counter + +// ------------ input ports + input rui_rst; + input rui_serdes_rst_dual_c; + input rui_rst_dual_c; + input rui_rsl_disable; + + input rui_tx_ref_clk; + input rui_tx_serdes_rst_c; + input [3:0] rui_tx_pcs_rst_c; + input rdi_pll_lol; + + input rui_rx_ref_clk; + input [3:0] rui_rx_serdes_rst_c; + input [3:0] rui_rx_pcs_rst_c; + input [3:0] rdi_rx_los_low_s; + input [3:0] rdi_rx_cdr_lol_s; + +// ------------ output ports + output rdo_serdes_rst_dual_c; + output rdo_rst_dual_c; + + output ruo_tx_rdy; + output rdo_tx_serdes_rst_c; + output [3:0] rdo_tx_pcs_rst_c; + + output ruo_rx_rdy; + output [3:0] rdo_rx_serdes_rst_c; + output [3:0] rdo_rx_pcs_rst_c; + +// ------------ Internal registers and wires + // inputs + wire rui_rst; + wire rui_serdes_rst_dual_c; + wire rui_rst_dual_c; + wire rui_rsl_disable; + wire rui_tx_ref_clk; + wire rui_tx_serdes_rst_c; + wire [3:0] rui_tx_pcs_rst_c; + wire rdi_pll_lol; + wire rui_rx_ref_clk; + wire [3:0] rui_rx_serdes_rst_c; + wire [3:0] rui_rx_pcs_rst_c; + wire [3:0] rdi_rx_los_low_s; + wire [3:0] rdi_rx_cdr_lol_s; + + // outputs + wire rdo_serdes_rst_dual_c; + wire rdo_rst_dual_c; + wire ruo_tx_rdy; + wire rdo_tx_serdes_rst_c; + wire [3:0] rdo_tx_pcs_rst_c; + wire ruo_rx_rdy; + wire [3:0] rdo_rx_serdes_rst_c; + wire [3:0] rdo_rx_pcs_rst_c; + + // internal signals + // common + wire rsl_enable; + wire [lplol_cnt_width-1:0] wait_b4_trst; + wire [lrlol_cnt_width-1:0] wait_b4_rrst; + wire [llols_cnt_width-1:0] wait_after_lols; + reg pll_lol_p1; + reg pll_lol_p2; + reg pll_lol_p3; + // ------------ Tx + // rdo_tx_serdes_rst_c + reg [lplol_cnt_width-1:0] plol_cnt; + wire plol_cnt_tc; + + reg [2:0] txs_cnt; + reg txs_rst; + wire txs_cnt_tc; + // rdo_tx_pcs_rst_c + wire plol_fedge; + wire plol_redge; + reg waita_plol0; + reg [2:0] plol0_cnt; + wire plol0_cnt_tc; + reg [2:0] txp_cnt; + reg txp_rst; + wire txp_cnt_tc; + // ruo_tx_rdy + wire dual_or_serd_rst; + wire tx_any_pcs_rst; + wire tx_any_rst; + reg txsr_appd /* synthesis syn_keep=1 */; + reg txdpr_appd; + reg [pnum_channels-1:0] txpr_appd; + reg txr_wt_en; + reg [ltxr_wait_width-1:0] txr_wt_cnt; + wire txr_wt_tc; + reg ruo_tx_rdyr; + + // ------------ Rx + wire comb_rlos; + wire comb_rlol; + //wire rlols; + wire rx_all_well; + + //reg rlols_p1; + //reg rlols_p2; + //reg rlols_p3; + + reg rlol_p1; + reg rlol_p2; + reg rlol_p3; + reg rlos_p1; + reg rlos_p2; + reg rlos_p3; + + //reg [3:0] rdb_cnt; + //wire rdb_cnt_max; + //wire rdb_cnt_zero; + //reg rlols_db; + //reg rlols_db_p1; + + reg [3:0] rlol_db_cnt; + wire rlol_db_cnt_max; + wire rlol_db_cnt_zero; + reg rlol_db; + reg rlol_db_p1; + + reg [3:0] rlos_db_cnt; + wire rlos_db_cnt_max; + wire rlos_db_cnt_zero; + reg rlos_db; + reg rlos_db_p1; + + // rdo_rx_serdes_rst_c + reg [lrlol_cnt_width-1:0] rlol1_cnt; + wire rlol1_cnt_tc; + reg [2:0] rxs_cnt; + reg rxs_rst; + wire rxs_cnt_tc; + reg [lrrst_wait_width-1:0] rrst_cnt; + wire rrst_cnt_tc; + reg rrst_wait; + // rdo_rx_pcs_rst_c + //wire rlols_fedge; + //wire rlols_redge; + wire rlol_fedge; + wire rlol_redge; + wire rlos_fedge; + wire rlos_redge; + + reg wait_calib; + reg waita_rlols0; + reg [llols_cnt_width-1:0] rlols0_cnt; + wire rlols0_cnt_tc; + reg [2:0] rxp_cnt; + reg rxp_rst; + wire rxp_cnt_tc; + + wire rx_any_serd_rst; + reg [llols_cnt_width-1:0] rlolsz_cnt; + wire rlolsz_cnt_tc; + reg [2:0] rxp_cnt2; + reg rxp_rst2; + wire rxp_cnt2_tc; + reg [15:0] data_loop_b_cnt; + reg data_loop_b; + wire data_loop_b_tc; + + // ruo_rx_rdy + reg [pnum_channels-1:0] rxsr_appd; + reg [pnum_channels-1:0] rxpr_appd; + reg rxsdr_appd /* synthesis syn_keep=1 */; + reg rxdpr_appd; + wire rxsdr_or_sr_appd; + wire dual_or_rserd_rst; + wire rx_any_pcs_rst; + wire rx_any_rst; + reg rxr_wt_en; + reg [lrxr_wait_width-1:0] rxr_wt_cnt; + wire rxr_wt_tc; + reg ruo_rx_rdyr; + +// ================================================================== +// Start of code +// ================================================================== + assign rsl_enable = ~rui_rsl_disable; + +// ------------ rdo_serdes_rst_dual_c + assign rdo_serdes_rst_dual_c = (rui_rst&rsl_enable) | rui_serdes_rst_dual_c; + +// ------------ rdo_rst_dual_c + assign rdo_rst_dual_c = rui_rst_dual_c; + +// ------------ Setting counter values for RSL_SIM_MODE + `ifdef RSL_SIM_MODE + assign wait_b4_trst = lwait_b4_trst_s; + assign wait_b4_rrst = lwait_b4_rrst_s; + assign wait_after_lols = lwait_after_lols_s; + `else + assign wait_b4_trst = lwait_b4_trst; + assign wait_b4_rrst = lwait_b4_rrst; + assign wait_after_lols = lwait_after_lols; + `endif + +// ================================================================== +// Tx +// ================================================================== + generate + if((pserdes_mode=="RX AND TX")||(pserdes_mode=="TX ONLY")) begin + +// ------------ Synchronizing pll_lol to the tx clock + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + pll_lol_p1 <= 1'd0; + pll_lol_p2 <= 1'd0; + pll_lol_p3 <= 1'd0; + end + else begin + pll_lol_p1 <= rdi_pll_lol; + pll_lol_p2 <= pll_lol_p1; + pll_lol_p3 <= pll_lol_p2; + end + end + +// ------------ rdo_tx_serdes_rst_c + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + plol_cnt <= 'd0; + else if((pll_lol_p2==0)||(plol_cnt_tc==1)||(rdo_tx_serdes_rst_c==1)) + plol_cnt <= 'd0; + else + plol_cnt <= plol_cnt+1; + end + assign plol_cnt_tc = (plol_cnt==wait_b4_trst)?1'b1:1'b0; + + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + txs_cnt <= 'd0; // tx serdes reset pulse count + txs_rst <= 1'b0; // tx serdes reset + end + else if(plol_cnt_tc==1) + txs_rst <= 1'b1; + else if(txs_cnt_tc==1) begin + txs_cnt <= 'd0; + txs_rst <= 1'b0; + end + else if(txs_rst==1) + txs_cnt <= txs_cnt+1; + end + assign txs_cnt_tc = (txs_cnt==lreset_pwidth)?1'b1:1'b0; + + assign rdo_tx_serdes_rst_c = (rsl_enable&txs_rst)| rui_tx_serdes_rst_c; + +// ------------ rdo_tx_pcs_rst_c + assign plol_fedge = ~pll_lol_p2 & pll_lol_p3; + assign plol_redge = pll_lol_p2 & ~pll_lol_p3; + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + waita_plol0 <= 1'd0; + else if(plol_fedge==1'b1) + waita_plol0 <= 1'b1; + else if((plol0_cnt_tc==1)||(plol_redge==1)) + waita_plol0 <= 1'd0; + end + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) + plol0_cnt <= 'd0; + else if((pll_lol_p2==1)||(plol0_cnt_tc==1)) + plol0_cnt <= 'd0; + else if(waita_plol0==1'b1) + plol0_cnt <= plol0_cnt+1; + end + assign plol0_cnt_tc = (plol0_cnt==lwait_after_plol0)?1'b1:1'b0; + + always @(posedge rui_tx_ref_clk or posedge rui_rst) begin + if(rui_rst==1'b1) begin + txp_cnt <= 'd0; // tx serdes reset pulse count + txp_rst <= 1'b0; // tx serdes reset + end + else if(plol0_cnt_tc==1) + txp_rst <= 1'b1; + else if(txp_cnt_tc==1) begin + txp_cnt <= 'd0; + txp_rst <= 1'b0; + end + else if(txp_rst==1) + txp_cnt <= txp_cnt+1; + end + assign txp_cnt_tc = (txp_cnt==lreset_pwidth)?1'b1:1'b0; + + genvar i; + for(i=0;i>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : SLL - Soft Loss Of Lock(LOL) Logic +// File : sll_core.v +// Title : Top-level file for SLL +// Dependencies : 1. +// : 2. +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : March 2, 2015 +// Changes Made : Initial Creation +// ============================================================================= +// REVISION HISTORY +// Version : 1.1 +// Author(s) : AV +// Mod. Date : June 8, 2015 +// Changes Made : Following updates were made +// : 1. Changed all the PLOL status logic and FSM to run +// : on sli_refclk. +// : 2. Added the HB logic for presence of tx_pclk +// : 3. Changed the lparam assignment scheme for +// : simulation purposes. +// ============================================================================= +// REVISION HISTORY +// Version : 1.2 +// Author(s) : AV +// Mod. Date : June 24, 2015 +// Changes Made : Updated the gearing logic for SDI dynamic rate change +// ============================================================================= +// REVISION HISTORY +// Version : 1.3 +// Author(s) : AV +// Mod. Date : July 14, 2015 +// Changes Made : Added the logic for dynamic rate change in CPRI +// ============================================================================= +// REVISION HISTORY +// Version : 1.4 +// Author(s) : AV +// Mod. Date : August 21, 2015 +// Changes Made : Added the logic for dynamic rate change of 5G CPRI & +// PCIe. +// ============================================================================= +// REVISION HISTORY +// Version : 1.5 +// Author(s) : ES/EB +// Mod. Date : March 21, 2017 +// Changes Made : 1. Added pdiff_sync signal to syncrhonize pcount_diff +// : to sli_refclk. +// : 2. Updated terminal count logic for PCIe 5G +// : 3. Modified checking of pcount_diff in SLL state +// : machine to cover actual count +// : (from 16-bits to 22-bits) +// ============================================================================= +// REVISION HISTORY +// Version : 1.6 +// Author(s) : ES +// Mod. Date : April 19, 2017 +// Changes Made : 1. Added registered lock and unlock signal from +// pdiff_sync to totally decouple pcount_diff from +// SLL state machine. +// : 2. Modified LPCLK_TC_4 to 1:1 clock ratio when CPRI +// is operating @ 4.9125Gbps data rate. +// ============================================================================= +`timescale 1ns/10ps + +module sgmii_ecp5sll_core ( + //Reset and Clock inputs + sli_rst, //Active high asynchronous reset input + sli_refclk, //Refclk input to the Tx PLL + sli_pclk, //Tx pclk output from the PCS + + //Control inputs + sli_div2_rate, //Divide by 2 control; 0 - Full rate; 1 - Half rate + sli_div11_rate, //Divide by 11 control; 0 - Full rate; 1 - Div by 11 + sli_gear_mode, //Gear mode control for PCS; 0 - 8/10; 1- 16/20 + sli_cpri_mode, //Mode of operation specific to CPRI protocol + sli_pcie_mode, //Mode of operation specific to PCIe mode (2.5G or 5G) + + //LOL Output + slo_plol //Tx PLL Loss of Lock output to the user logic + ); + +// Inputs +input sli_rst; +input sli_refclk; +input sli_pclk; +input sli_div2_rate; +input sli_div11_rate; +input sli_gear_mode; +input [2:0] sli_cpri_mode; +input sli_pcie_mode; + +// Outputs +output slo_plol; + + +// Parameters +parameter PPROTOCOL = "PCIE"; //Protocol selected by the User +parameter PLOL_SETTING = 0; //PLL LOL setting. Possible values are 0,1,2,3 +parameter PDYN_RATE_CTRL = "DISABLED"; //PCS Dynamic Rate control +parameter PPCIE_MAX_RATE = "2.5"; //PCIe max data rate +parameter PDIFF_VAL_LOCK = 20; //Differential count value for Lock +parameter PDIFF_VAL_UNLOCK = 39; //Differential count value for Unlock +parameter PPCLK_TC = 65535; //Terminal count value for counter running on sli_pclk +parameter PDIFF_DIV11_VAL_LOCK = 3; //Differential count value for Lock for SDI Div11 +parameter PDIFF_DIV11_VAL_UNLOCK = 3; //Differential count value for Unlock for SDI Div11 +parameter PPCLK_DIV11_TC = 2383; //Terminal count value (SDI Div11) for counter running on sli_pclk + + +// Local Parameters +localparam [1:0] LPLL_LOSS_ST = 2'b00; //PLL Loss state +localparam [1:0] LPLL_PRELOSS_ST = 2'b01; //PLL Pre-Loss state +localparam [1:0] LPLL_PRELOCK_ST = 2'b10; //PLL Pre-Lock state +localparam [1:0] LPLL_LOCK_ST = 2'b11; //PLL Lock state +`ifdef RSL_SIM_MODE +localparam [15:0] LRCLK_TC = 16'd63; //Terminal count value for counter running on sli_refclk +`else +localparam [15:0] LRCLK_TC = 16'd65535; //Terminal count value for counter running on sli_refclk +`endif +localparam [15:0] LRCLK_TC_PUL_WIDTH = 16'd50; //Pulse width for the Refclk terminal count pulse +localparam [7:0] LHB_WAIT_CNT = 8'd255; //Wait count for the Heartbeat signal + +// Local Parameters related to the CPRI dynamic modes +// Terminal count values for the four CPRI modes +localparam LPCLK_TC_0 = 32768; +localparam LPCLK_TC_1 = 65536; +localparam LPCLK_TC_2 = 131072; +localparam LPCLK_TC_3 = 163840; +localparam LPCLK_TC_4 = 65536; + +// Lock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_LOCK_00 = 9; localparam LPDIFF_LOCK_10 = 19; localparam LPDIFF_LOCK_20 = 39; localparam LPDIFF_LOCK_30 = 49; localparam LPDIFF_LOCK_40 = 19; +localparam LPDIFF_LOCK_01 = 9; localparam LPDIFF_LOCK_11 = 19; localparam LPDIFF_LOCK_21 = 39; localparam LPDIFF_LOCK_31 = 49; localparam LPDIFF_LOCK_41 = 19; +localparam LPDIFF_LOCK_02 = 49; localparam LPDIFF_LOCK_12 = 98; localparam LPDIFF_LOCK_22 = 196; localparam LPDIFF_LOCK_32 = 245; localparam LPDIFF_LOCK_42 = 98; +localparam LPDIFF_LOCK_03 = 131; localparam LPDIFF_LOCK_13 = 262; localparam LPDIFF_LOCK_23 = 524; localparam LPDIFF_LOCK_33 = 655; localparam LPDIFF_LOCK_43 = 262; + +// Unlock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_UNLOCK_00 = 19; localparam LPDIFF_UNLOCK_10 = 39; localparam LPDIFF_UNLOCK_20 = 78; localparam LPDIFF_UNLOCK_30 = 98; localparam LPDIFF_UNLOCK_40 = 39; +localparam LPDIFF_UNLOCK_01 = 65; localparam LPDIFF_UNLOCK_11 = 131; localparam LPDIFF_UNLOCK_21 = 262; localparam LPDIFF_UNLOCK_31 = 327; localparam LPDIFF_UNLOCK_41 = 131; +localparam LPDIFF_UNLOCK_02 = 72; localparam LPDIFF_UNLOCK_12 = 144; localparam LPDIFF_UNLOCK_22 = 288; localparam LPDIFF_UNLOCK_32 = 360; localparam LPDIFF_UNLOCK_42 = 144; +localparam LPDIFF_UNLOCK_03 = 196; localparam LPDIFF_UNLOCK_13 = 393; localparam LPDIFF_UNLOCK_23 = 786; localparam LPDIFF_UNLOCK_33 = 983; localparam LPDIFF_UNLOCK_43 = 393; + +// Input and Output reg and wire declarations +wire sli_rst; +wire sli_refclk; +wire sli_pclk; +wire sli_div2_rate; +wire sli_div11_rate; +wire sli_gear_mode; +wire [2:0] sli_cpri_mode; +wire sli_pcie_mode; +wire slo_plol; + +//-------------- Internal signals reg and wire declarations -------------------- + +//Signals running on sli_refclk +reg [15:0] rcount; //16-bit Counter +reg rtc_pul; //Terminal count pulse +reg rtc_pul_p1; //Terminal count pulse pipeline +reg rtc_ctrl; //Terminal count pulse control + +reg [7:0] rhb_wait_cnt; //Heartbeat wait counter + +//Heatbeat synchronization and pipeline registers +wire rhb_sync; +reg rhb_sync_p2; +reg rhb_sync_p1; + +//Pipeling registers for dynamic control mode +wire rgear; +wire rdiv2; +wire rdiv11; +reg rgear_p1; +reg rdiv2_p1; +reg rdiv11_p1; + +reg rstat_pclk; //Pclk presence/absence status + +reg [21:0] rcount_tc; //Tx_pclk terminal count register +reg [15:0] rdiff_comp_lock; //Differential comparison value for Lock +reg [15:0] rdiff_comp_unlock; //Differential compariosn value for Unlock + +wire rpcie_mode; //PCIe mode signal synchronized to refclk +reg rpcie_mode_p1; //PCIe mode pipeline register + +wire rcpri_mod_ch_sync; //CPRI mode change synchronized to refclk +reg rcpri_mod_ch_p1; //CPRI mode change pipeline register +reg rcpri_mod_ch_p2; //CPRI mode change pipeline register +reg rcpri_mod_ch_st; //CPRI mode change status + +reg [1:0] sll_state; //Current-state register for LOL FSM + +reg pll_lock; //PLL Lock signal + +//Signals running on sli_pclk +//Synchronization and pipeline registers +wire ppul_sync; +reg ppul_sync_p1; +reg ppul_sync_p2; +reg ppul_sync_p3; + +wire pdiff_sync; +reg pdiff_sync_p1; + +reg [21:0] pcount; //22-bit counter +reg [21:0] pcount_diff; //Differential value between Tx_pclk counter and theoritical value + +//Heartbeat counter and heartbeat signal running on pclk +reg [2:0] phb_cnt; +reg phb; + +//CPRI dynamic mode releated signals +reg [2:0] pcpri_mode; +reg pcpri_mod_ch; + +//Assignment scheme changed mainly for simulation purpose +wire [15:0] LRCLK_TC_w; +assign LRCLK_TC_w = LRCLK_TC; + +reg unlock; +reg lock; + +//Heartbeat synchronization +sync # (.PDATA_RST_VAL(0)) phb_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (phb), + .data_out(rhb_sync) + ); + + +//Terminal count pulse synchronization +sync # (.PDATA_RST_VAL(0)) rtc_sync_inst ( + .clk (sli_pclk), + .rst (sli_rst), + .data_in (rtc_pul), + .data_out(ppul_sync) + ); + +//Differential value logic update synchronization +sync # (.PDATA_RST_VAL(0)) pdiff_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (ppul_sync), + .data_out(pdiff_sync) + ); + +//Gear mode synchronization +sync # (.PDATA_RST_VAL(0)) gear_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_gear_mode), + .data_out(rgear) + ); + +//Div2 synchronization +sync # (.PDATA_RST_VAL(0)) div2_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div2_rate), + .data_out(rdiv2) + ); + +//Div11 synchronization +sync # (.PDATA_RST_VAL(0)) div11_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div11_rate), + .data_out(rdiv11) + ); + +//CPRI mode change synchronization +sync # (.PDATA_RST_VAL(0)) cpri_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (pcpri_mod_ch), + .data_out(rcpri_mod_ch_sync) + ); + +//PCIe mode change synchronization +sync # (.PDATA_RST_VAL(0)) pcie_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_pcie_mode), + .data_out(rpcie_mode) + ); + +// ============================================================================= +// Synchronized Lock/Unlock signals +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + unlock <= 1'b0; + lock <= 1'b0; + pdiff_sync_p1 <= 1'b0; + end + else begin + pdiff_sync_p1 <= pdiff_sync; + if (unlock) begin + unlock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : unlock; + end + else begin + unlock <= pdiff_sync ? (pcount_diff[21:0] > {6'd0, rdiff_comp_unlock}) : 1'b0; + end + if (lock) begin + lock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : lock; + end + else begin + lock <= pdiff_sync ? (pcount_diff[21:0] <= {6'd0, rdiff_comp_lock}) : 1'b0; + end + end +end + +// ============================================================================= +// Refclk Counter, pulse generation logic and Heartbeat monitor logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount <= 16'd0; + rtc_pul <= 1'b0; + rtc_ctrl <= 1'b0; + rtc_pul_p1 <= 1'b0; + end + else begin + //Counter logic + if ((rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + if (rtc_ctrl == 1'b1) begin + rcount <= LRCLK_TC_PUL_WIDTH; + end + end + else begin + if (rcount != LRCLK_TC_w) begin + rcount <= rcount + 1; + end + else begin + rcount <= 16'd0; + end + end + + //Pulse control logic + if (rcount == LRCLK_TC_w - 1) begin + rtc_ctrl <= 1'b1; + end + + //Pulse Generation logic + if (rtc_ctrl == 1'b1) begin + if ((rcount == LRCLK_TC_w) || (rcount < LRCLK_TC_PUL_WIDTH)) begin + rtc_pul <= 1'b1; + end + else begin + rtc_pul <= 1'b0; + end + end + + rtc_pul_p1 <= rtc_pul; + end +end + + +// ============================================================================= +// Heartbeat synchronization & monitor logic and Dynamic mode pipeline logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rhb_sync_p1 <= 1'b0; + rhb_sync_p2 <= 1'b0; + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + rgear_p1 <= 1'b0; + rdiv2_p1 <= 1'b0; + rdiv11_p1 <= 1'b0; + rcpri_mod_ch_p1 <= 1'b0; + rcpri_mod_ch_p2 <= 1'b0; + rcpri_mod_ch_st <= 1'b0; + rpcie_mode_p1 <= 1'b0; + + end + else begin + //Pipeline stages for the Heartbeat + rhb_sync_p1 <= rhb_sync; + rhb_sync_p2 <= rhb_sync_p1; + + //Pipeline stages of the Dynamic rate control signals + rgear_p1 <= rgear; + rdiv2_p1 <= rdiv2; + rdiv11_p1 <= rdiv11; + + //Pipeline stage for PCIe mode + rpcie_mode_p1 <= rpcie_mode; + + //Pipeline stage for CPRI mode change + rcpri_mod_ch_p1 <= rcpri_mod_ch_sync; + rcpri_mod_ch_p2 <= rcpri_mod_ch_p1; + + //CPRI mode change status logic + if (rcpri_mod_ch_p1^rcpri_mod_ch_sync == 1'b1) begin + rcpri_mod_ch_st <= 1'b1; + end + + //Heartbeat wait counter and monitor logic + if (rtc_ctrl == 1'b1) begin + if (rhb_sync_p1 == 1'b1 && rhb_sync_p2 == 1'b0) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b1; + end + else if (rhb_wait_cnt == LHB_WAIT_CNT) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + end + else begin + rhb_wait_cnt <= rhb_wait_cnt + 1; + end + end + end +end + + +// ============================================================================= +// Pipleline registers for the TC pulse and CPRI mode change logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + ppul_sync_p1 <= 1'b0; + ppul_sync_p2 <= 1'b0; + ppul_sync_p3 <= 1'b0; + pcpri_mode <= 3'b0; + pcpri_mod_ch <= 1'b0; + end + else begin + ppul_sync_p1 <= ppul_sync; + ppul_sync_p2 <= ppul_sync_p1; + ppul_sync_p3 <= ppul_sync_p2; + + //CPRI mode change logic + pcpri_mode <= sli_cpri_mode; + + if (pcpri_mode != sli_cpri_mode) begin + pcpri_mod_ch <= ~pcpri_mod_ch; + end + end +end + + +// ============================================================================= +// Terminal count logic +// ============================================================================= + +//For SDI protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "SDI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 11 is enabled + if (rdiv11 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_DIV11_TC; + rdiff_comp_lock <= PDIFF_DIV11_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_DIV11_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_DIV11_TC[20:0], 1'b0}; + rdiff_comp_lock <= {PDIFF_DIV11_VAL_LOCK[14:0], 1'b0}; + rdiff_comp_unlock <= {PDIFF_DIV11_VAL_UNLOCK[14:0], 1'b0}; + end + end + //Div by 2 is enabled + else if (rdiv2 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end + //Both div by 11 and div by 2 are disabled + else begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_TC[20:0],1'b0}; + rdiff_comp_lock <= {PDIFF_VAL_LOCK[14:0],1'b0}; + rdiff_comp_unlock <= {PDIFF_VAL_UNLOCK[14:0],1'b0}; + end + end + end +end +end +endgenerate + +//For G8B10B protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "G8B10B")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 2 is enabled + if (rdiv2 == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + + +//For CPRI protocol with Dynamic rate control is disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "CPRI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for CPRI protocol + //Only if there is a change in the rate mode from the default + if (rcpri_mod_ch_st == 1'b1) begin + if (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) begin + case(sli_cpri_mode) + 3'd0 : begin //For 0.6Gbps + rcount_tc <= LPCLK_TC_0; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_01; + rdiff_comp_unlock <= LPDIFF_UNLOCK_01; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_02; + rdiff_comp_unlock <= LPDIFF_UNLOCK_02; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_03; + rdiff_comp_unlock <= LPDIFF_UNLOCK_03; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + + 3'd1 : begin //For 1.2Gbps + rcount_tc <= LPCLK_TC_1; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_11; + rdiff_comp_unlock <= LPDIFF_UNLOCK_11; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_12; + rdiff_comp_unlock <= LPDIFF_UNLOCK_12; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_13; + rdiff_comp_unlock <= LPDIFF_UNLOCK_13; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + endcase + end + + 3'd2 : begin //For 2.4Gbps + rcount_tc <= LPCLK_TC_2; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_21; + rdiff_comp_unlock <= LPDIFF_UNLOCK_21; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_22; + rdiff_comp_unlock <= LPDIFF_UNLOCK_22; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_23; + rdiff_comp_unlock <= LPDIFF_UNLOCK_23; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + endcase + end + + 3'd3 : begin //For 3.07Gbps + rcount_tc <= LPCLK_TC_3; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_30; + rdiff_comp_unlock <= LPDIFF_UNLOCK_30; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_31; + rdiff_comp_unlock <= LPDIFF_UNLOCK_31; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_32; + rdiff_comp_unlock <= LPDIFF_UNLOCK_32; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_33; + rdiff_comp_unlock <= LPDIFF_UNLOCK_33; + end + endcase + end + + 3'd4 : begin //For 4.9125bps + rcount_tc <= LPCLK_TC_4; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_41; + rdiff_comp_unlock <= LPDIFF_UNLOCK_41; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_42; + rdiff_comp_unlock <= LPDIFF_UNLOCK_42; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_43; + rdiff_comp_unlock <= LPDIFF_UNLOCK_43; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + endcase + end + + default : begin + rcount_tc <= LPCLK_TC_0; + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + end + else begin + //If there is no change in the CPRI rate mode from default + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + +//For PCIe protocol with Dynamic rate control disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "PCIE")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + if (PPCIE_MAX_RATE == "2.5") begin + //2.5G mode is enabled + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //5G mode is enabled + if (rpcie_mode == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //2.5G mode is enabled + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + end + end +end +end +endgenerate + +//For all protocols other than CPRI & PCIe +generate +if ((PDYN_RATE_CTRL == "DISABLED") && ((PPROTOCOL != "CPRI") && (PPROTOCOL != "PCIE"))) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for all protocols other than CPRI & PCIe + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end +end +end +endgenerate + + +// ============================================================================= +// Tx_pclk counter, Heartbeat and Differential value logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pcount <= 22'd0; + pcount_diff <= 22'd65535; + phb_cnt <= 3'd0; + phb <= 1'b0; + end + else begin + //Counter logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount <= 22'd0; + end + else begin + pcount <= pcount + 1; + end + + //Heartbeat logic + phb_cnt <= phb_cnt + 1; + + if ((phb_cnt < 3'd4) && (phb_cnt >= 3'd0)) begin + phb <= 1'b1; + end + else begin + phb <= 1'b0; + end + + //Differential value logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount_diff <= rcount_tc + ~(pcount) + 1; + end + else if (ppul_sync_p2 == 1'b1 && ppul_sync_p3 == 1'b0) begin + if (pcount_diff[21] == 1'b1) begin + pcount_diff <= ~(pcount_diff) + 1; + end + end + end +end + + +// ============================================================================= +// State transition logic for SLL FSM +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + //Reasons to declare an immediate loss - Absence of Tx_pclk, Dynamic rate change for SDI or CPRI + if ((rstat_pclk == 1'b0) || (rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || + (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_LOSS_ST; + end + else if (lock) begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_PRELOCK_ST; + end + else begin + sll_state <= LPLL_LOCK_ST; + end + end + end + end + + LPLL_LOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + end + + LPLL_PRELOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + + LPLL_PRELOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_PRELOSS_ST; + end + else if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + end + end + + default: begin + sll_state <= LPLL_LOSS_ST; + end + endcase + end + end +end + + +// ============================================================================= +// Logic for Tx PLL Lock +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pll_lock <= 1'b0; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + pll_lock <= 1'b0; + end + + LPLL_LOCK_ST : begin + pll_lock <= 1'b1; + end + + LPLL_PRELOSS_ST : begin + pll_lock <= 1'b0; + end + + default: begin + pll_lock <= 1'b0; + end + endcase + end +end + +assign slo_plol = ~(pll_lock); + +endmodule + + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : Synchronizer Logic +// File : sync.v +// Title : Synchronizer module +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : July 7, 2015 +// Changes Made : Initial Creation +// ----------------------------------------------------------------------------- +// Version : 1.1 +// Author(s) : EB +// Mod. Date : March 21, 2017 +// Changes Made : +// ============================================================================= + +`ifndef PCS_SYNC_MODULE +`define PCS_SYNC_MODULE +module sync ( + clk, + rst, + data_in, + data_out + ); + +input clk; //Clock in which the async data needs to be synchronized to +input rst; //Active high reset +input data_in; //Asynchronous data +output data_out; //Synchronized data + +parameter PDATA_RST_VAL = 0; //Reset value for the registers + +reg data_p1; +reg data_p2; + +// ============================================================================= +// Synchronization logic +// ============================================================================= +always @(posedge clk or posedge rst) begin + if (rst == 1'b1) begin + data_p1 <= PDATA_RST_VAL; + data_p2 <= PDATA_RST_VAL; + end + else begin + data_p1 <= data_in; + data_p2 <= data_p1; + end +end + +assign data_out = data_p2; + +endmodule +`endif + diff --git a/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v_old b/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v_old new file mode 100644 index 0000000..f730049 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5_softlogic.v_old @@ -0,0 +1,1060 @@ + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : SLL - Soft Loss Of Lock(LOL) Logic +// File : sll_core.v +// Title : Top-level file for SLL +// Dependencies : 1. +// : 2. +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : March 2, 2015 +// Changes Made : Initial Creation +// ============================================================================= +// REVISION HISTORY +// Version : 1.1 +// Author(s) : AV +// Mod. Date : June 8, 2015 +// Changes Made : Following updates were made +// : 1. Changed all the PLOL status logic and FSM to run +// : on sli_refclk. +// : 2. Added the HB logic for presence of tx_pclk +// : 3. Changed the lparam assignment scheme for +// : simulation purposes. +// ============================================================================= +// REVISION HISTORY +// Version : 1.2 +// Author(s) : AV +// Mod. Date : June 24, 2015 +// Changes Made : Updated the gearing logic for SDI dynamic rate change +// ============================================================================= +// REVISION HISTORY +// Version : 1.3 +// Author(s) : AV +// Mod. Date : July 14, 2015 +// Changes Made : Added the logic for dynamic rate change in CPRI +// ============================================================================= +// REVISION HISTORY +// Version : 1.4 +// Author(s) : AV +// Mod. Date : August 21, 2015 +// Changes Made : Added the logic for dynamic rate change of 5G CPRI & +// PCIe. +// ============================================================================= +// REVISION HISTORY +// Version : 1.5 +// Author(s) : ES/EB +// Mod. Date : March 21, 2017 +// Changes Made : 1. Added pdiff_sync signal to syncrhonize pcount_diff +// : to sli_refclk. +// : 2. Updated terminal count logic for PCIe 5G +// : 3. Modified checking of pcount_diff in SLL state +// : machine to cover actual count +// : (from 16-bits to 22-bits) +// ============================================================================= +// REVISION HISTORY +// Version : 1.6 +// Author(s) : ES +// Mod. Date : April 19, 2017 +// Changes Made : 1. Added registered lock and unlock signal from +// pdiff_sync to totally decouple pcount_diff from +// SLL state machine. +// : 2. Modified LPCLK_TC_4 to 1:1 clock ratio when CPRI +// is operating @ 4.9125Gbps data rate. +// ============================================================================= +`timescale 1ns/10ps + +module sgmii_ecp5sll_core ( + //Reset and Clock inputs + sli_rst, //Active high asynchronous reset input + sli_refclk, //Refclk input to the Tx PLL + sli_pclk, //Tx pclk output from the PCS + + //Control inputs + sli_div2_rate, //Divide by 2 control; 0 - Full rate; 1 - Half rate + sli_div11_rate, //Divide by 11 control; 0 - Full rate; 1 - Div by 11 + sli_gear_mode, //Gear mode control for PCS; 0 - 8/10; 1- 16/20 + sli_cpri_mode, //Mode of operation specific to CPRI protocol + sli_pcie_mode, //Mode of operation specific to PCIe mode (2.5G or 5G) + + //LOL Output + slo_plol //Tx PLL Loss of Lock output to the user logic + ); + +// Inputs +input sli_rst; +input sli_refclk; +input sli_pclk; +input sli_div2_rate; +input sli_div11_rate; +input sli_gear_mode; +input [2:0] sli_cpri_mode; +input sli_pcie_mode; + +// Outputs +output slo_plol; + + +// Parameters +parameter PPROTOCOL = "PCIE"; //Protocol selected by the User +parameter PLOL_SETTING = 0; //PLL LOL setting. Possible values are 0,1,2,3 +parameter PDYN_RATE_CTRL = "DISABLED"; //PCS Dynamic Rate control +parameter PPCIE_MAX_RATE = "2.5"; //PCIe max data rate +parameter PDIFF_VAL_LOCK = 20; //Differential count value for Lock +parameter PDIFF_VAL_UNLOCK = 39; //Differential count value for Unlock +parameter PPCLK_TC = 65535; //Terminal count value for counter running on sli_pclk +parameter PDIFF_DIV11_VAL_LOCK = 3; //Differential count value for Lock for SDI Div11 +parameter PDIFF_DIV11_VAL_UNLOCK = 3; //Differential count value for Unlock for SDI Div11 +parameter PPCLK_DIV11_TC = 2383; //Terminal count value (SDI Div11) for counter running on sli_pclk + + +// Local Parameters +localparam [1:0] LPLL_LOSS_ST = 2'b00; //PLL Loss state +localparam [1:0] LPLL_PRELOSS_ST = 2'b01; //PLL Pre-Loss state +localparam [1:0] LPLL_PRELOCK_ST = 2'b10; //PLL Pre-Lock state +localparam [1:0] LPLL_LOCK_ST = 2'b11; //PLL Lock state +`ifdef RSL_SIM_MODE +localparam [15:0] LRCLK_TC = 16'd63; //Terminal count value for counter running on sli_refclk +`else +localparam [15:0] LRCLK_TC = 16'd65535; //Terminal count value for counter running on sli_refclk +`endif +localparam [15:0] LRCLK_TC_PUL_WIDTH = 16'd50; //Pulse width for the Refclk terminal count pulse +localparam [7:0] LHB_WAIT_CNT = 8'd255; //Wait count for the Heartbeat signal + +// Local Parameters related to the CPRI dynamic modes +// Terminal count values for the four CPRI modes +localparam LPCLK_TC_0 = 32768; +localparam LPCLK_TC_1 = 65536; +localparam LPCLK_TC_2 = 131072; +localparam LPCLK_TC_3 = 163840; +localparam LPCLK_TC_4 = 65536; + +// Lock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_LOCK_00 = 9; localparam LPDIFF_LOCK_10 = 19; localparam LPDIFF_LOCK_20 = 39; localparam LPDIFF_LOCK_30 = 49; localparam LPDIFF_LOCK_40 = 19; +localparam LPDIFF_LOCK_01 = 9; localparam LPDIFF_LOCK_11 = 19; localparam LPDIFF_LOCK_21 = 39; localparam LPDIFF_LOCK_31 = 49; localparam LPDIFF_LOCK_41 = 19; +localparam LPDIFF_LOCK_02 = 49; localparam LPDIFF_LOCK_12 = 98; localparam LPDIFF_LOCK_22 = 196; localparam LPDIFF_LOCK_32 = 245; localparam LPDIFF_LOCK_42 = 98; +localparam LPDIFF_LOCK_03 = 131; localparam LPDIFF_LOCK_13 = 262; localparam LPDIFF_LOCK_23 = 524; localparam LPDIFF_LOCK_33 = 655; localparam LPDIFF_LOCK_43 = 262; + +// Unlock values count values for the four CPRI modes and four PLOL settings (4x5) +// CPRI rate mode 0 CPRI rate mode 1 CPRI rate mode 2 CPRI rate mode 3 CPRI rate mode 4 +localparam LPDIFF_UNLOCK_00 = 19; localparam LPDIFF_UNLOCK_10 = 39; localparam LPDIFF_UNLOCK_20 = 78; localparam LPDIFF_UNLOCK_30 = 98; localparam LPDIFF_UNLOCK_40 = 39; +localparam LPDIFF_UNLOCK_01 = 65; localparam LPDIFF_UNLOCK_11 = 131; localparam LPDIFF_UNLOCK_21 = 262; localparam LPDIFF_UNLOCK_31 = 327; localparam LPDIFF_UNLOCK_41 = 131; +localparam LPDIFF_UNLOCK_02 = 72; localparam LPDIFF_UNLOCK_12 = 144; localparam LPDIFF_UNLOCK_22 = 288; localparam LPDIFF_UNLOCK_32 = 360; localparam LPDIFF_UNLOCK_42 = 144; +localparam LPDIFF_UNLOCK_03 = 196; localparam LPDIFF_UNLOCK_13 = 393; localparam LPDIFF_UNLOCK_23 = 786; localparam LPDIFF_UNLOCK_33 = 983; localparam LPDIFF_UNLOCK_43 = 393; + +// Input and Output reg and wire declarations +wire sli_rst; +wire sli_refclk; +wire sli_pclk; +wire sli_div2_rate; +wire sli_div11_rate; +wire sli_gear_mode; +wire [2:0] sli_cpri_mode; +wire sli_pcie_mode; +wire slo_plol; + +//-------------- Internal signals reg and wire declarations -------------------- + +//Signals running on sli_refclk +reg [15:0] rcount; //16-bit Counter +reg rtc_pul; //Terminal count pulse +reg rtc_pul_p1; //Terminal count pulse pipeline +reg rtc_ctrl; //Terminal count pulse control + +reg [7:0] rhb_wait_cnt; //Heartbeat wait counter + +//Heatbeat synchronization and pipeline registers +wire rhb_sync; +reg rhb_sync_p2; +reg rhb_sync_p1; + +//Pipeling registers for dynamic control mode +wire rgear; +wire rdiv2; +wire rdiv11; +reg rgear_p1; +reg rdiv2_p1; +reg rdiv11_p1; + +reg rstat_pclk; //Pclk presence/absence status + +reg [21:0] rcount_tc; //Tx_pclk terminal count register +reg [15:0] rdiff_comp_lock; //Differential comparison value for Lock +reg [15:0] rdiff_comp_unlock; //Differential compariosn value for Unlock + +wire rpcie_mode; //PCIe mode signal synchronized to refclk +reg rpcie_mode_p1; //PCIe mode pipeline register + +wire rcpri_mod_ch_sync; //CPRI mode change synchronized to refclk +reg rcpri_mod_ch_p1; //CPRI mode change pipeline register +reg rcpri_mod_ch_p2; //CPRI mode change pipeline register +reg rcpri_mod_ch_st; //CPRI mode change status + +reg [1:0] sll_state; //Current-state register for LOL FSM + +reg pll_lock; //PLL Lock signal + +//Signals running on sli_pclk +//Synchronization and pipeline registers +wire ppul_sync; +reg ppul_sync_p1; +reg ppul_sync_p2; +reg ppul_sync_p3; + +wire pdiff_sync; +reg pdiff_sync_p1; + +reg [21:0] pcount; //22-bit counter +reg [21:0] pcount_diff; //Differential value between Tx_pclk counter and theoritical value + +//Heartbeat counter and heartbeat signal running on pclk +reg [2:0] phb_cnt; +reg phb; + +//CPRI dynamic mode releated signals +reg [2:0] pcpri_mode; +reg pcpri_mod_ch; + +//Assignment scheme changed mainly for simulation purpose +wire [15:0] LRCLK_TC_w; +assign LRCLK_TC_w = LRCLK_TC; + +reg unlock; +reg lock; + +//Heartbeat synchronization +sync # (.PDATA_RST_VAL(0)) phb_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (phb), + .data_out(rhb_sync) + ); + + +//Terminal count pulse synchronization +sync # (.PDATA_RST_VAL(0)) rtc_sync_inst ( + .clk (sli_pclk), + .rst (sli_rst), + .data_in (rtc_pul), + .data_out(ppul_sync) + ); + +//Differential value logic update synchronization +sync # (.PDATA_RST_VAL(0)) pdiff_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (ppul_sync), + .data_out(pdiff_sync) + ); + +//Gear mode synchronization +sync # (.PDATA_RST_VAL(0)) gear_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_gear_mode), + .data_out(rgear) + ); + +//Div2 synchronization +sync # (.PDATA_RST_VAL(0)) div2_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div2_rate), + .data_out(rdiv2) + ); + +//Div11 synchronization +sync # (.PDATA_RST_VAL(0)) div11_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_div11_rate), + .data_out(rdiv11) + ); + +//CPRI mode change synchronization +sync # (.PDATA_RST_VAL(0)) cpri_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (pcpri_mod_ch), + .data_out(rcpri_mod_ch_sync) + ); + +//PCIe mode change synchronization +sync # (.PDATA_RST_VAL(0)) pcie_mod_sync_inst ( + .clk (sli_refclk), + .rst (sli_rst), + .data_in (sli_pcie_mode), + .data_out(rpcie_mode) + ); + +// ============================================================================= +// Synchronized Lock/Unlock signals +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + unlock <= 1'b0; + lock <= 1'b0; + pdiff_sync_p1 <= 1'b0; + end + else begin + pdiff_sync_p1 <= pdiff_sync; + if (unlock) begin + unlock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : unlock; + end + else begin + unlock <= pdiff_sync ? (pcount_diff[21:0] > {6'd0, rdiff_comp_unlock}) : 1'b0; + end + if (lock) begin + lock <= ~pdiff_sync && pdiff_sync_p1 ? 1'b0 : lock; + end + else begin + lock <= pdiff_sync ? (pcount_diff[21:0] <= {6'd0, rdiff_comp_lock}) : 1'b0; + end + end +end + +// ============================================================================= +// Refclk Counter, pulse generation logic and Heartbeat monitor logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount <= 16'd0; + rtc_pul <= 1'b0; + rtc_ctrl <= 1'b0; + rtc_pul_p1 <= 1'b0; + end + else begin + //Counter logic + if ((rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + if (rtc_ctrl == 1'b1) begin + rcount <= LRCLK_TC_PUL_WIDTH; + end + end + else begin + if (rcount != LRCLK_TC_w) begin + rcount <= rcount + 1; + end + else begin + rcount <= 16'd0; + end + end + + //Pulse control logic + if (rcount == LRCLK_TC_w - 1) begin + rtc_ctrl <= 1'b1; + end + + //Pulse Generation logic + if (rtc_ctrl == 1'b1) begin + if ((rcount == LRCLK_TC_w) || (rcount < LRCLK_TC_PUL_WIDTH)) begin + rtc_pul <= 1'b1; + end + else begin + rtc_pul <= 1'b0; + end + end + + rtc_pul_p1 <= rtc_pul; + end +end + + +// ============================================================================= +// Heartbeat synchronization & monitor logic and Dynamic mode pipeline logic +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rhb_sync_p1 <= 1'b0; + rhb_sync_p2 <= 1'b0; + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + rgear_p1 <= 1'b0; + rdiv2_p1 <= 1'b0; + rdiv11_p1 <= 1'b0; + rcpri_mod_ch_p1 <= 1'b0; + rcpri_mod_ch_p2 <= 1'b0; + rcpri_mod_ch_st <= 1'b0; + rpcie_mode_p1 <= 1'b0; + + end + else begin + //Pipeline stages for the Heartbeat + rhb_sync_p1 <= rhb_sync; + rhb_sync_p2 <= rhb_sync_p1; + + //Pipeline stages of the Dynamic rate control signals + rgear_p1 <= rgear; + rdiv2_p1 <= rdiv2; + rdiv11_p1 <= rdiv11; + + //Pipeline stage for PCIe mode + rpcie_mode_p1 <= rpcie_mode; + + //Pipeline stage for CPRI mode change + rcpri_mod_ch_p1 <= rcpri_mod_ch_sync; + rcpri_mod_ch_p2 <= rcpri_mod_ch_p1; + + //CPRI mode change status logic + if (rcpri_mod_ch_p1^rcpri_mod_ch_sync == 1'b1) begin + rcpri_mod_ch_st <= 1'b1; + end + + //Heartbeat wait counter and monitor logic + if (rtc_ctrl == 1'b1) begin + if (rhb_sync_p1 == 1'b1 && rhb_sync_p2 == 1'b0) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b1; + end + else if (rhb_wait_cnt == LHB_WAIT_CNT) begin + rhb_wait_cnt <= 8'd0; + rstat_pclk <= 1'b0; + end + else begin + rhb_wait_cnt <= rhb_wait_cnt + 1; + end + end + end +end + + +// ============================================================================= +// Pipleline registers for the TC pulse and CPRI mode change logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + ppul_sync_p1 <= 1'b0; + ppul_sync_p2 <= 1'b0; + ppul_sync_p3 <= 1'b0; + pcpri_mode <= 3'b0; + pcpri_mod_ch <= 1'b0; + end + else begin + ppul_sync_p1 <= ppul_sync; + ppul_sync_p2 <= ppul_sync_p1; + ppul_sync_p3 <= ppul_sync_p2; + + //CPRI mode change logic + pcpri_mode <= sli_cpri_mode; + + if (pcpri_mode != sli_cpri_mode) begin + pcpri_mod_ch <= ~pcpri_mod_ch; + end + end +end + + +// ============================================================================= +// Terminal count logic +// ============================================================================= + +//For SDI protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "SDI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 11 is enabled + if (rdiv11 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_DIV11_TC; + rdiff_comp_lock <= PDIFF_DIV11_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_DIV11_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_DIV11_TC[20:0], 1'b0}; + rdiff_comp_lock <= {PDIFF_DIV11_VAL_LOCK[14:0], 1'b0}; + rdiff_comp_unlock <= {PDIFF_DIV11_VAL_UNLOCK[14:0], 1'b0}; + end + end + //Div by 2 is enabled + else if (rdiv2 == 1'b1) begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end + //Both div by 11 and div by 2 are disabled + else begin + //Gear mode is 16/20 + if (rgear == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + rcount_tc <= {PPCLK_TC[20:0],1'b0}; + rdiff_comp_lock <= {PDIFF_VAL_LOCK[14:0],1'b0}; + rdiff_comp_unlock <= {PDIFF_VAL_UNLOCK[14:0],1'b0}; + end + end + end +end +end +endgenerate + +//For G8B10B protocol with Dynamic rate control enabled +generate +if ((PDYN_RATE_CTRL == "ENABLED") && (PPROTOCOL == "G8B10B")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + //Div by 2 is enabled + if (rdiv2 == 1'b1) begin + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + else begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + + +//For CPRI protocol with Dynamic rate control is disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "CPRI")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for CPRI protocol + //Only if there is a change in the rate mode from the default + if (rcpri_mod_ch_st == 1'b1) begin + if (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) begin + case(sli_cpri_mode) + 3'd0 : begin //For 0.6Gbps + rcount_tc <= LPCLK_TC_0; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_01; + rdiff_comp_unlock <= LPDIFF_UNLOCK_01; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_02; + rdiff_comp_unlock <= LPDIFF_UNLOCK_02; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_03; + rdiff_comp_unlock <= LPDIFF_UNLOCK_03; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + + 3'd1 : begin //For 1.2Gbps + rcount_tc <= LPCLK_TC_1; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_11; + rdiff_comp_unlock <= LPDIFF_UNLOCK_11; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_12; + rdiff_comp_unlock <= LPDIFF_UNLOCK_12; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_13; + rdiff_comp_unlock <= LPDIFF_UNLOCK_13; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_10; + rdiff_comp_unlock <= LPDIFF_UNLOCK_10; + end + endcase + end + + 3'd2 : begin //For 2.4Gbps + rcount_tc <= LPCLK_TC_2; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_21; + rdiff_comp_unlock <= LPDIFF_UNLOCK_21; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_22; + rdiff_comp_unlock <= LPDIFF_UNLOCK_22; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_23; + rdiff_comp_unlock <= LPDIFF_UNLOCK_23; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_20; + rdiff_comp_unlock <= LPDIFF_UNLOCK_20; + end + endcase + end + + 3'd3 : begin //For 3.07Gbps + rcount_tc <= LPCLK_TC_3; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_30; + rdiff_comp_unlock <= LPDIFF_UNLOCK_30; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_31; + rdiff_comp_unlock <= LPDIFF_UNLOCK_31; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_32; + rdiff_comp_unlock <= LPDIFF_UNLOCK_32; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_33; + rdiff_comp_unlock <= LPDIFF_UNLOCK_33; + end + endcase + end + + 3'd4 : begin //For 4.9125bps + rcount_tc <= LPCLK_TC_4; + case(PLOL_SETTING) + 'd0 : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + + 'd1 : begin + rdiff_comp_lock <= LPDIFF_LOCK_41; + rdiff_comp_unlock <= LPDIFF_UNLOCK_41; + end + + 'd2 : begin + rdiff_comp_lock <= LPDIFF_LOCK_42; + rdiff_comp_unlock <= LPDIFF_UNLOCK_42; + end + + 'd3 : begin + rdiff_comp_lock <= LPDIFF_LOCK_43; + rdiff_comp_unlock <= LPDIFF_UNLOCK_43; + end + + default : begin + rdiff_comp_lock <= LPDIFF_LOCK_40; + rdiff_comp_unlock <= LPDIFF_UNLOCK_40; + end + endcase + end + + default : begin + rcount_tc <= LPCLK_TC_0; + rdiff_comp_lock <= LPDIFF_LOCK_00; + rdiff_comp_unlock <= LPDIFF_UNLOCK_00; + end + endcase + end + end + else begin + //If there is no change in the CPRI rate mode from default + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + end +end +end +endgenerate + +//For PCIe protocol with Dynamic rate control disabled +generate +if ((PDYN_RATE_CTRL == "DISABLED") && (PPROTOCOL == "PCIE")) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic + if (PPCIE_MAX_RATE == "2.5") begin + //2.5G mode is enabled + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //5G mode is enabled + if (rpcie_mode == 1'b1) begin + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end + else begin + //2.5G mode is enabled + rcount_tc <= {1'b0,PPCLK_TC[21:1]}; + rdiff_comp_lock <= {1'b0,PDIFF_VAL_LOCK[15:1]}; + rdiff_comp_unlock <= {1'b0,PDIFF_VAL_UNLOCK[15:1]}; + end + end + end +end +end +endgenerate + +//For all protocols other than CPRI & PCIe +generate +if ((PDYN_RATE_CTRL == "DISABLED") && ((PPROTOCOL != "CPRI") && (PPROTOCOL != "PCIE"))) begin +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + rcount_tc <= 22'd0; + rdiff_comp_lock <= 16'd0; + rdiff_comp_unlock <= 16'd0; + end + else begin + //Terminal count logic for all protocols other than CPRI & PCIe + rcount_tc <= PPCLK_TC; + rdiff_comp_lock <= PDIFF_VAL_LOCK; + rdiff_comp_unlock <= PDIFF_VAL_UNLOCK; + end +end +end +endgenerate + + +// ============================================================================= +// Tx_pclk counter, Heartbeat and Differential value logic +// ============================================================================= +always @(posedge sli_pclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pcount <= 22'd0; + pcount_diff <= 22'd65535; + phb_cnt <= 3'd0; + phb <= 1'b0; + end + else begin + //Counter logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount <= 22'd0; + end + else begin + pcount <= pcount + 1; + end + + //Heartbeat logic + phb_cnt <= phb_cnt + 1; + + if ((phb_cnt < 3'd4) && (phb_cnt >= 3'd0)) begin + phb <= 1'b1; + end + else begin + phb <= 1'b0; + end + + //Differential value logic + if (ppul_sync_p1 == 1'b1 && ppul_sync_p2 == 1'b0) begin + pcount_diff <= rcount_tc + ~(pcount) + 1; + end + else if (ppul_sync_p2 == 1'b1 && ppul_sync_p3 == 1'b0) begin + if (pcount_diff[21] == 1'b1) begin + pcount_diff <= ~(pcount_diff) + 1; + end + end + end +end + + +// ============================================================================= +// State transition logic for SLL FSM +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + //Reasons to declare an immediate loss - Absence of Tx_pclk, Dynamic rate change for SDI or CPRI + if ((rstat_pclk == 1'b0) || (rgear_p1^rgear == 1'b1) || (rdiv2_p1^rdiv2 == 1'b1) || + (rdiv11_p1^rdiv11 == 1'b1) || (rcpri_mod_ch_p1^rcpri_mod_ch_p2 == 1'b1) || (rpcie_mode_p1^rpcie_mode == 1'b1)) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_LOSS_ST; + end + else if (lock) begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_PRELOCK_ST; + end + else begin + sll_state <= LPLL_LOCK_ST; + end + end + end + end + + LPLL_LOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + if (PLOL_SETTING == 2'd0) begin + sll_state <= LPLL_LOSS_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + end + + LPLL_PRELOCK_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + else begin + sll_state <= LPLL_PRELOSS_ST; + end + end + end + + LPLL_PRELOSS_ST : begin + if (rtc_pul_p1 == 1'b1 && rtc_pul == 1'b0) begin + if (unlock) begin + sll_state <= LPLL_PRELOSS_ST; + end + else if (lock) begin + sll_state <= LPLL_LOCK_ST; + end + end + end + + default: begin + sll_state <= LPLL_LOSS_ST; + end + endcase + end + end +end + + +// ============================================================================= +// Logic for Tx PLL Lock +// ============================================================================= +always @(posedge sli_refclk or posedge sli_rst) begin + if (sli_rst == 1'b1) begin + pll_lock <= 1'b0; + end + else begin + case(sll_state) + LPLL_LOSS_ST : begin + pll_lock <= 1'b0; + end + + LPLL_LOCK_ST : begin + pll_lock <= 1'b1; + end + + LPLL_PRELOSS_ST : begin + pll_lock <= 1'b0; + end + + default: begin + pll_lock <= 1'b0; + end + endcase + end +end + +assign slo_plol = ~(pll_lock); + +endmodule + + +// =========================================================================== +// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// --------------------------------------------------------------------------- +// Copyright (c) 2015 by Lattice Semiconductor Corporation +// ALL RIGHTS RESERVED +// ------------------------------------------------------------------ +// +// Permission: +// +// Lattice SG Pte. Ltd. grants permission to use this code +// pursuant to the terms of the Lattice Reference Design License Agreement. +// +// +// Disclaimer: +// +// This VHDL or Verilog source code is intended as a design reference +// which illustrates how these types of functions can be implemented. +// It is the user's responsibility to verify their design for +// consistency and functionality through the use of formal +// verification methods. Lattice provides no warranty +// regarding the use or functionality of this code. +// +// --------------------------------------------------------------------------- +// +// Lattice SG Pte. Ltd. +// 101 Thomson Road, United Square #07-02 +// Singapore 307591 +// +// +// TEL: 1-800-Lattice (USA and Canada) +// +65-6631-2000 (Singapore) +// +1-503-268-8001 (other locations) +// +// web: http://www.latticesemi.com/ +// email: techsupport@latticesemi.com +// +// --------------------------------------------------------------------------- +// +// ============================================================================= +// FILE DETAILS +// Project : Synchronizer Logic +// File : sync.v +// Title : Synchronizer module +// Description : +// ============================================================================= +// REVISION HISTORY +// Version : 1.0 +// Author(s) : AV +// Mod. Date : July 7, 2015 +// Changes Made : Initial Creation +// ----------------------------------------------------------------------------- +// Version : 1.1 +// Author(s) : EB +// Mod. Date : March 21, 2017 +// Changes Made : +// ============================================================================= + +`ifndef PCS_SYNC_MODULE +`define PCS_SYNC_MODULE +module sync ( + clk, + rst, + data_in, + data_out + ); + +input clk; //Clock in which the async data needs to be synchronized to +input rst; //Active high reset +input data_in; //Asynchronous data +output data_out; //Synchronized data + +parameter PDATA_RST_VAL = 0; //Reset value for the registers + +reg data_p1; +reg data_p2; + +// ============================================================================= +// Synchronization logic +// ============================================================================= +always @(posedge clk or posedge rst) begin + if (rst == 1'b1) begin + data_p1 <= PDATA_RST_VAL; + data_p2 <= PDATA_RST_VAL; + end + else begin + data_p1 <= data_in; + data_p2 <= data_p1; + end +end + +assign data_out = data_p2; + +endmodule +`endif + diff --git a/gbe_trb/media/ecp5/sgmii_ecp5_txpllLoLdeleted.vhd b/gbe_trb/media/ecp5/sgmii_ecp5_txpllLoLdeleted.vhd new file mode 100644 index 0000000..d4b7e6e --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_ecp5_txpllLoLdeleted.vhd @@ -0,0 +1,433 @@ + +-- +-- Verific VHDL Description of module DCUA +-- + +-- DCUA is a black-box. Cannot print a valid VHDL entity description for it + +-- +-- Verific VHDL Description of module sgmii_ecp5rsl_core +-- + +-- sgmii_ecp5rsl_core is a black-box. Cannot print a valid VHDL entity description for it + +-- +-- Verific VHDL Description of module sgmii_ecp5sll_core +-- + +-- sgmii_ecp5sll_core is a black-box. Cannot print a valid VHDL entity description for it + +-- +-- Verific VHDL Description of module sgmii_ecp5 +-- + +library ieee ; +use ieee.std_logic_1164.all ; + +library ecp5um ; +use ecp5um.components.all ; + +entity sgmii_ecp5 is + port (hdoutp: out std_logic; + hdoutn: out std_logic; + hdinp: in std_logic; + hdinn: in std_logic; + rxrefclk: in std_logic; + tx_pclk: out std_logic; + txi_clk: in std_logic; + txdata: in std_logic_vector(7 downto 0); + tx_k: in std_logic_vector(0 downto 0); + xmit: in std_logic_vector(0 downto 0); + tx_disp_correct: in std_logic_vector(0 downto 0); + rxdata: out std_logic_vector(7 downto 0); + rx_k: out std_logic_vector(0 downto 0); + rx_disp_err: out std_logic_vector(0 downto 0); + rx_cv_err: out std_logic_vector(0 downto 0); + signal_detect_c: in std_logic; + rx_los_low_s: out std_logic; + lsm_status_s: out std_logic; + ctc_urun_s: out std_logic; + ctc_orun_s: out std_logic; + rx_cdr_lol_s: out std_logic; + ctc_ins_s: out std_logic; + ctc_del_s: out std_logic; + sli_rst: in std_logic; + tx_pwrup_c: in std_logic; + rx_pwrup_c: in std_logic; + sci_wrdata: in std_logic_vector(7 downto 0); + sci_addr: in std_logic_vector(5 downto 0); + sci_rddata: out std_logic_vector(7 downto 0); + sci_en_dual: in std_logic; + sci_sel_dual: in std_logic; + sci_en: in std_logic; + sci_sel: in std_logic; + sci_rd: in std_logic; + sci_wrn: in std_logic; + sci_int: out std_logic; + cyawstn: in std_logic; + serdes_pdb: in std_logic; + pll_refclki: in std_logic; + rsl_disable: in std_logic; + rsl_rst: in std_logic; + serdes_rst_dual_c: in std_logic; + rst_dual_c: in std_logic; + tx_serdes_rst_c: in std_logic; + tx_pcs_rst_c: in std_logic; + pll_lol: out std_logic; + rsl_tx_rdy: out std_logic; + rx_serdes_rst_c: in std_logic; + rx_pcs_rst_c: in std_logic; + rsl_rx_rdy: out std_logic + ); + +end entity sgmii_ecp5; + +architecture v1 of sgmii_ecp5 is + component sgmii_ecp5rsl_core is + generic (pnum_channels: integer := 1; + pprotocol: string := "GBE"; + pserdes_mode: string := "RX AND TX"; + pport_tx_rdy: string := "ENABLED"; + pwait_tx_rdy: integer := 3000; + pport_rx_rdy: string := "ENABLED"; + pwait_rx_rdy: integer := 3000); + port (rui_rst: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(132) + rui_serdes_rst_dual_c: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(133) + rui_rst_dual_c: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(134) + rui_rsl_disable: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(135) + rui_tx_ref_clk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(137) + rui_tx_serdes_rst_c: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(138) + rui_tx_pcs_rst_c: in std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(139) + rdi_pll_lol: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(140) + rui_rx_ref_clk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(142) + rui_rx_serdes_rst_c: in std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(143) + rui_rx_pcs_rst_c: in std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(144) + rdi_rx_los_low_s: in std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(145) + rdi_rx_cdr_lol_s: in std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(146) + rdo_serdes_rst_dual_c: out std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(149) + rdo_rst_dual_c: out std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(150) + ruo_tx_rdy: out std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(152) + rdo_tx_serdes_rst_c: out std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(153) + rdo_tx_pcs_rst_c: out std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(154) + ruo_rx_rdy: out std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(156) + rdo_rx_serdes_rst_c: out std_logic_vector(3 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(157) + rdo_rx_pcs_rst_c: out std_logic_vector(3 downto 0) -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(158) + ); + + end component sgmii_ecp5rsl_core; -- syn_black_box=1 -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/rsl_core_syn.v(88) + component sgmii_ecp5sll_core is + generic (PPROTOCOL: string := "GBE"; + PLOL_SETTING: integer := 0; + PDYN_RATE_CTRL: string := "DISABLED"; + PPCIE_MAX_RATE: string := "2.5"; + PDIFF_VAL_LOCK: integer := 39; + PDIFF_VAL_UNLOCK: integer := 78; + PPCLK_TC: integer := 131072; + PDIFF_DIV11_VAL_LOCK: integer := 0; + PDIFF_DIV11_VAL_UNLOCK: integer := 0; + PPCLK_DIV11_TC: integer := 0); + port (sli_rst: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(125) + sli_refclk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(126) + sli_pclk: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(127) + sli_div2_rate: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(128) + sli_div11_rate: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(129) + sli_gear_mode: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(130) + sli_cpri_mode: in std_logic_vector(2 downto 0); -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(131) + sli_pcie_mode: in std_logic; -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(132) + slo_plol: out std_logic -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(135) + ); + + end component sgmii_ecp5sll_core; -- syn_black_box=1 -- /home/soft/lattice/diamond/3.10_x64/ispfpga/sa5p00/data/sll_core_template.v(107) + signal n45,n44,n1,n2,n3,n4,tx_pclk_c,n5,n6,n7,n8,n9,n10,n11, + n12,n13,rx_los_low_s_c,n14,n15,rx_cdr_lol_s_c,rsl_tx_pcs_rst_c, + rsl_rx_pcs_rst_c,rsl_rx_serdes_rst_c,rsl_rst_dual_c,rsl_serdes_rst_dual_c, + rsl_tx_serdes_rst_c,n16,n17,n18,n19,n20,n21,n22,n23,n24,n25, + n26,n27,n28,n29,n30,n31,n32,n33,n34,n35,n36,n37,n38,n39, + n40,n41,n42,n43,n46,n103,n102,n47,n48,n49,n50,n51,n52,n53, + n54,n55,n56,n57,n58,n59,n60,n61,n62,n63,n64,n65,n66,n67, + n68,n69,n70,n71,n72,n73,n74,n75,n76,n77,n78,n79,n80,n81, + n82,n83,n84,n85,n86,n87,n88,n89,n90,n91,n92,n93,n94,n95, + n96,n97,n98,n99,n100,n101,n112,n111,n110,pll_lol_c,n122,n121, + n113,n114,n115,n116,n117,n118,n119,n120,\_Z\,n124,n123,gnd, + pwr : std_logic; + attribute LOC : string; + attribute LOC of DCU1_inst : label is "DCU1"; + attribute CHAN : string; + attribute CHAN of DCU1_inst : label is "CH1"; +begin + tx_pclk <= tx_pclk_c; + rx_los_low_s <= rx_los_low_s_c; + rx_cdr_lol_s <= rx_cdr_lol_s_c; + pll_lol <= pll_lol_c; + DCU1_inst: component DCUA generic map (D_MACROPDB=>"0b1",D_IB_PWDNB=>"0b1", + D_XGE_MODE=>"0b0",D_LOW_MARK=>"0d4",D_HIGH_MARK=>"0d12",D_BUS8BIT_SEL=>"0b0", + D_CDR_LOL_SET=>"0b00",D_TXPLL_PWDNB=>"0b1",D_BITCLK_LOCAL_EN=>"0b1", + D_BITCLK_ND_EN=>"0b0",D_BITCLK_FROM_ND_EN=>"0b0",D_SYNC_LOCAL_EN=>"0b1", + D_SYNC_ND_EN=>"0b0",CH1_UC_MODE=>"0b0",CH1_PCIE_MODE=>"0b0",CH1_RIO_MODE=>"0b0", + CH1_WA_MODE=>"0b0",CH1_INVERT_RX=>"0b0",CH1_INVERT_TX=>"0b0",CH1_PRBS_SELECTION=>"0b0", + CH1_GE_AN_ENABLE=>"0b0",CH1_PRBS_LOCK=>"0b0",CH1_PRBS_ENABLE=>"0b0", + CH1_ENABLE_CG_ALIGN=>"0b1",CH1_TX_GEAR_MODE=>"0b0",CH1_RX_GEAR_MODE=>"0b0", + CH1_PCS_DET_TIME_SEL=>"0b00",CH1_PCIE_EI_EN=>"0b0",CH1_TX_GEAR_BYPASS=>"0b0", + CH1_ENC_BYPASS=>"0b0",CH1_SB_BYPASS=>"0b0",CH1_RX_SB_BYPASS=>"0b0", + CH1_WA_BYPASS=>"0b0",CH1_DEC_BYPASS=>"0b0",CH1_CTC_BYPASS=>"0b0", + CH1_RX_GEAR_BYPASS=>"0b0",CH1_LSM_DISABLE=>"0b0",CH1_MATCH_2_ENABLE=>"0b1", + CH1_MATCH_4_ENABLE=>"0b0",CH1_MIN_IPG_CNT=>"0b11",CH1_CC_MATCH_1=>"0x000", + CH1_CC_MATCH_2=>"0x000",CH1_CC_MATCH_3=>"0x1BC",CH1_CC_MATCH_4=>"0x050", + CH1_UDF_COMMA_MASK=>"0x3ff",CH1_UDF_COMMA_A=>"0x283",CH1_UDF_COMMA_B=>"0x17C", + CH1_RX_DCO_CK_DIV=>"0b010",CH1_RCV_DCC_EN=>"0b0",CH1_TPWDNB=>"0b1", + CH1_RATE_MODE_TX=>"0b0",CH1_RTERM_TX=>"0d19",CH1_TX_CM_SEL=>"0b00", + CH1_TDRV_PRE_EN=>"0b0",CH1_TDRV_SLICE0_SEL=>"0b01",CH1_TDRV_SLICE1_SEL=>"0b00", + CH1_TDRV_SLICE2_SEL=>"0b01",CH1_TDRV_SLICE3_SEL=>"0b01",CH1_TDRV_SLICE4_SEL=>"0b01", + CH1_TDRV_SLICE5_SEL=>"0b01",CH1_TDRV_SLICE0_CUR=>"0b101",CH1_TDRV_SLICE1_CUR=>"0b000", + CH1_TDRV_SLICE2_CUR=>"0b11",CH1_TDRV_SLICE3_CUR=>"0b11",CH1_TDRV_SLICE4_CUR=>"0b11", + CH1_TDRV_SLICE5_CUR=>"0b00",CH1_TDRV_DAT_SEL=>"0b00",CH1_TX_DIV11_SEL=>"0b0", + CH1_RPWDNB=>"0b1",CH1_RATE_MODE_RX=>"0b0",CH1_RX_DIV11_SEL=>"0b0", + CH1_SEL_SD_RX_CLK=>"0b0",CH1_FF_RX_H_CLK_EN=>"0b0",CH1_FF_RX_F_CLK_DIS=>"0b0", + CH1_FF_TX_H_CLK_EN=>"0b0",CH1_FF_TX_F_CLK_DIS=>"0b0",CH1_TDRV_POST_EN=>"0b0", + CH1_TX_POST_SIGN=>"0b0",CH1_TX_PRE_SIGN=>"0b0",CH1_REQ_LVL_SET=>"0b00", + CH1_REQ_EN=>"0b1",CH1_RTERM_RX=>"0d22",CH1_RXTERM_CM=>"0b11",CH1_PDEN_SEL=>"0b1", + CH1_RXIN_CM=>"0b11",CH1_LEQ_OFFSET_SEL=>"0b0",CH1_LEQ_OFFSET_TRIM=>"0b000", + CH1_RLOS_SEL=>"0b1",CH1_RX_LOS_LVL=>"0b010",CH1_RX_LOS_CEQ=>"0b11", + CH1_RX_LOS_HYST_EN=>"0b0",CH1_RX_LOS_EN=>"0b1",CH1_LDR_RX2CORE_SEL=>"0b0", + CH1_LDR_CORE2TX_SEL=>"0b0",D_TX_MAX_RATE=>"1.25",CH1_CDR_MAX_RATE=>"1.25", + CH1_TXAMPLITUDE=>"0d1100",CH1_TXDEPRE=>"DISABLED",CH1_TXDEPOST=>"DISABLED", + CH1_PROTOCOL=>"GBE",D_ISETLOS=>"0d0",D_SETIRPOLY_AUX=>"0b00",D_SETICONST_AUX=>"0b00", + D_SETIRPOLY_CH=>"0b00",D_SETICONST_CH=>"0b00",D_REQ_ISET=>"0b000", + D_PD_ISET=>"0b00",D_DCO_CALIB_TIME_SEL=>"0b00",CH1_CDR_CNT4SEL=>"0b00", + CH1_CDR_CNT8SEL=>"0b00",CH1_DCOATDCFG=>"0b00",CH1_DCOATDDLY=>"0b00", + CH1_DCOBYPSATD=>"0b1",CH1_DCOCALDIV=>"0b001",CH1_DCOCTLGI=>"0b010", + CH1_DCODISBDAVOID=>"0b0",CH1_DCOFLTDAC=>"0b01",CH1_DCOFTNRG=>"0b110", + CH1_DCOIOSTUNE=>"0b000",CH1_DCOITUNE=>"0b00",CH1_DCOITUNE4LSB=>"0b111", + CH1_DCOIUPDNX2=>"0b1",CH1_DCONUOFLSB=>"0b101",CH1_DCOSCALEI=>"0b00", + CH1_DCOSTARTVAL=>"0b000",CH1_DCOSTEP=>"0b00",CH1_BAND_THRESHOLD=>"0d0", + CH1_AUTO_FACQ_EN=>"0b1",CH1_AUTO_CALIB_EN=>"0b1",CH1_CALIB_CK_MODE=>"0b0", + CH1_REG_BAND_OFFSET=>"0d0",CH1_REG_BAND_SEL=>"0d0",CH1_REG_IDAC_SEL=>"0d0", + CH1_REG_IDAC_EN=>"0b0",D_CMUSETISCL4VCO=>"0b000",D_CMUSETI4VCO=>"0b00", + D_CMUSETINITVCT=>"0b00",D_CMUSETZGM=>"0b000",D_CMUSETP2AGM=>"0b000", + D_CMUSETP1GM=>"0b000",D_CMUSETI4CPZ=>"0d3",D_CMUSETI4CPP=>"0d3",D_CMUSETICP4Z=>"0b101", + D_CMUSETICP4P=>"0b01",D_CMUSETBIASI=>"0b00",D_SETPLLRC=>"0d1",CH1_RX_RATE_SEL=>"0d8", + D_REFCK_MODE=>"0b001",D_TX_VCO_CK_DIV=>"0b010",D_PLL_LOL_SET=>"0b00", + D_RG_EN=>"0b0",D_RG_SET=>"0b00") + port map (CH0_HDINP=>n103,CH1_HDINP=>hdinp,CH0_HDINN=>n103,CH1_HDINN=>hdinn, + D_TXBIT_CLKP_FROM_ND=>n44,D_TXBIT_CLKN_FROM_ND=>n44,D_SYNC_ND=>n44,D_TXPLL_LOL_FROM_ND=>n44, + CH0_RX_REFCLK=>n103,CH1_RX_REFCLK=>rxrefclk,CH0_FF_RXI_CLK=>n102,CH1_FF_RXI_CLK=>tx_pclk_c, + CH0_FF_TXI_CLK=>n102,CH1_FF_TXI_CLK=>txi_clk,CH0_FF_EBRD_CLK=>n102,CH1_FF_EBRD_CLK=>tx_pclk_c, + CH0_FF_TX_D_0=>n103,CH1_FF_TX_D_0=>txdata(0),CH0_FF_TX_D_1=>n103,CH1_FF_TX_D_1=>txdata(1), + CH0_FF_TX_D_2=>n103,CH1_FF_TX_D_2=>txdata(2),CH0_FF_TX_D_3=>n103,CH1_FF_TX_D_3=>txdata(3), + CH0_FF_TX_D_4=>n103,CH1_FF_TX_D_4=>txdata(4),CH0_FF_TX_D_5=>n103,CH1_FF_TX_D_5=>txdata(5), + CH0_FF_TX_D_6=>n103,CH1_FF_TX_D_6=>txdata(6),CH0_FF_TX_D_7=>n103,CH1_FF_TX_D_7=>txdata(7), + CH0_FF_TX_D_8=>n103,CH1_FF_TX_D_8=>tx_k(0),CH0_FF_TX_D_9=>n103,CH1_FF_TX_D_9=>n44, + CH0_FF_TX_D_10=>n103,CH1_FF_TX_D_10=>xmit(0),CH0_FF_TX_D_11=>n103,CH1_FF_TX_D_11=>tx_disp_correct(0), + CH0_FF_TX_D_12=>n103,CH1_FF_TX_D_12=>n103,CH0_FF_TX_D_13=>n103,CH1_FF_TX_D_13=>n103, + CH0_FF_TX_D_14=>n103,CH1_FF_TX_D_14=>n103,CH0_FF_TX_D_15=>n103,CH1_FF_TX_D_15=>n103, + CH0_FF_TX_D_16=>n103,CH1_FF_TX_D_16=>n103,CH0_FF_TX_D_17=>n103,CH1_FF_TX_D_17=>n103, + CH0_FF_TX_D_18=>n103,CH1_FF_TX_D_18=>n103,CH0_FF_TX_D_19=>n103,CH1_FF_TX_D_19=>n103, + CH0_FF_TX_D_20=>n103,CH1_FF_TX_D_20=>n103,CH0_FF_TX_D_21=>n103,CH1_FF_TX_D_21=>n44, + CH0_FF_TX_D_22=>n103,CH1_FF_TX_D_22=>n103,CH0_FF_TX_D_23=>n103,CH1_FF_TX_D_23=>n103, + CH0_FFC_EI_EN=>n103,CH1_FFC_EI_EN=>n44,CH0_FFC_PCIE_DET_EN=>n103,CH1_FFC_PCIE_DET_EN=>n44, + CH0_FFC_PCIE_CT=>n103,CH1_FFC_PCIE_CT=>n44,CH0_FFC_SB_INV_RX=>n103,CH1_FFC_SB_INV_RX=>n103, + CH0_FFC_ENABLE_CGALIGN=>n103,CH1_FFC_ENABLE_CGALIGN=>n103,CH0_FFC_SIGNAL_DETECT=>n103, + CH1_FFC_SIGNAL_DETECT=>signal_detect_c,CH0_FFC_FB_LOOPBACK=>n103,CH1_FFC_FB_LOOPBACK=>n44, + CH0_FFC_SB_PFIFO_LP=>n103,CH1_FFC_SB_PFIFO_LP=>n44,CH0_FFC_PFIFO_CLR=>n103, + CH1_FFC_PFIFO_CLR=>n44,CH0_FFC_RATE_MODE_RX=>n103,CH1_FFC_RATE_MODE_RX=>n44, + CH0_FFC_RATE_MODE_TX=>n103,CH1_FFC_RATE_MODE_TX=>n44,CH0_FFC_DIV11_MODE_RX=>n103, + CH1_FFC_DIV11_MODE_RX=>n44,CH0_FFC_DIV11_MODE_TX=>n103,CH1_FFC_DIV11_MODE_TX=>n44, + CH0_FFC_RX_GEAR_MODE=>n103,CH1_FFC_RX_GEAR_MODE=>n44,CH0_FFC_TX_GEAR_MODE=>n103, + CH1_FFC_TX_GEAR_MODE=>n44,CH0_FFC_LDR_CORE2TX_EN=>n103,CH1_FFC_LDR_CORE2TX_EN=>n103, + CH0_FFC_LANE_TX_RST=>n103,CH1_FFC_LANE_TX_RST=>rsl_tx_pcs_rst_c,CH0_FFC_LANE_RX_RST=>n103, + CH1_FFC_LANE_RX_RST=>rsl_rx_pcs_rst_c,CH0_FFC_RRST=>n103,CH1_FFC_RRST=>rsl_rx_serdes_rst_c, + CH0_FFC_TXPWDNB=>n103,CH1_FFC_TXPWDNB=>tx_pwrup_c,CH0_FFC_RXPWDNB=>n103, + CH1_FFC_RXPWDNB=>rx_pwrup_c,CH0_LDR_CORE2TX=>n103,CH1_LDR_CORE2TX=>n103, + D_SCIWDATA0=>sci_wrdata(0),D_SCIWDATA1=>sci_wrdata(1),D_SCIWDATA2=>sci_wrdata(2), + D_SCIWDATA3=>sci_wrdata(3),D_SCIWDATA4=>sci_wrdata(4),D_SCIWDATA5=>sci_wrdata(5), + D_SCIWDATA6=>sci_wrdata(6),D_SCIWDATA7=>sci_wrdata(7),D_SCIADDR0=>sci_addr(0), + D_SCIADDR1=>sci_addr(1),D_SCIADDR2=>sci_addr(2),D_SCIADDR3=>sci_addr(3), + D_SCIADDR4=>sci_addr(4),D_SCIADDR5=>sci_addr(5),D_SCIENAUX=>sci_en_dual, + D_SCISELAUX=>sci_sel_dual,CH0_SCIEN=>n103,CH1_SCIEN=>sci_en,CH0_SCISEL=>n103, + CH1_SCISEL=>sci_sel,D_SCIRD=>sci_rd,D_SCIWSTN=>sci_wrn,D_CYAWSTN=>cyawstn, + D_FFC_SYNC_TOGGLE=>n103,D_FFC_DUAL_RST=>rsl_rst_dual_c,D_FFC_MACRO_RST=>rsl_serdes_rst_dual_c, + D_FFC_MACROPDB=>serdes_pdb,D_FFC_TRST=>rsl_tx_serdes_rst_c,CH0_FFC_CDR_EN_BITSLIP=>n103, + CH1_FFC_CDR_EN_BITSLIP=>n44,D_SCAN_ENABLE=>n44,D_SCAN_IN_0=>n44,D_SCAN_IN_1=>n44, + D_SCAN_IN_2=>n44,D_SCAN_IN_3=>n44,D_SCAN_IN_4=>n44,D_SCAN_IN_5=>n44, + D_SCAN_IN_6=>n44,D_SCAN_IN_7=>n44,D_SCAN_MODE=>n44,D_SCAN_RESET=>n44, + D_CIN0=>n44,D_CIN1=>n44,D_CIN2=>n44,D_CIN3=>n44,D_CIN4=>n44,D_CIN5=>n44, + D_CIN6=>n44,D_CIN7=>n44,D_CIN8=>n44,D_CIN9=>n44,D_CIN10=>n44,D_CIN11=>n44, + CH0_HDOUTP=>n47,CH1_HDOUTP=>hdoutp,CH0_HDOUTN=>n48,CH1_HDOUTN=>hdoutn, + D_TXBIT_CLKP_TO_ND=>n1,D_TXBIT_CLKN_TO_ND=>n2,D_SYNC_PULSE2ND=>n3,D_TXPLL_LOL_TO_ND=>n4, + CH0_FF_RX_F_CLK=>n49,CH1_FF_RX_F_CLK=>n5,CH0_FF_RX_H_CLK=>n50,CH1_FF_RX_H_CLK=>n6, + CH0_FF_TX_F_CLK=>n51,CH1_FF_TX_F_CLK=>n7,CH0_FF_TX_H_CLK=>n52,CH1_FF_TX_H_CLK=>n8, + CH0_FF_RX_PCLK=>n53,CH1_FF_RX_PCLK=>n9,CH0_FF_TX_PCLK=>n54,CH1_FF_TX_PCLK=>tx_pclk_c, + CH0_FF_RX_D_0=>n55,CH1_FF_RX_D_0=>rxdata(0),CH0_FF_RX_D_1=>n56,CH1_FF_RX_D_1=>rxdata(1), + CH0_FF_RX_D_2=>n57,CH1_FF_RX_D_2=>rxdata(2),CH0_FF_RX_D_3=>n58,CH1_FF_RX_D_3=>rxdata(3), + CH0_FF_RX_D_4=>n59,CH1_FF_RX_D_4=>rxdata(4),CH0_FF_RX_D_5=>n60,CH1_FF_RX_D_5=>rxdata(5), + CH0_FF_RX_D_6=>n61,CH1_FF_RX_D_6=>rxdata(6),CH0_FF_RX_D_7=>n62,CH1_FF_RX_D_7=>rxdata(7), + CH0_FF_RX_D_8=>n63,CH1_FF_RX_D_8=>rx_k(0),CH0_FF_RX_D_9=>n64,CH1_FF_RX_D_9=>rx_disp_err(0), + CH0_FF_RX_D_10=>n65,CH1_FF_RX_D_10=>rx_cv_err(0),CH0_FF_RX_D_11=>n66, + CH1_FF_RX_D_11=>n10,CH0_FF_RX_D_12=>n67,CH1_FF_RX_D_12=>n68,CH0_FF_RX_D_13=>n69, + CH1_FF_RX_D_13=>n70,CH0_FF_RX_D_14=>n71,CH1_FF_RX_D_14=>n72,CH0_FF_RX_D_15=>n73, + CH1_FF_RX_D_15=>n74,CH0_FF_RX_D_16=>n75,CH1_FF_RX_D_16=>n76,CH0_FF_RX_D_17=>n77, + CH1_FF_RX_D_17=>n78,CH0_FF_RX_D_18=>n79,CH1_FF_RX_D_18=>n80,CH0_FF_RX_D_19=>n81, + CH1_FF_RX_D_19=>n82,CH0_FF_RX_D_20=>n83,CH1_FF_RX_D_20=>n84,CH0_FF_RX_D_21=>n85, + CH1_FF_RX_D_21=>n86,CH0_FF_RX_D_22=>n87,CH1_FF_RX_D_22=>n88,CH0_FF_RX_D_23=>n89, + CH1_FF_RX_D_23=>n11,CH0_FFS_PCIE_DONE=>n90,CH1_FFS_PCIE_DONE=>n12,CH0_FFS_PCIE_CON=>n91, + CH1_FFS_PCIE_CON=>n13,CH0_FFS_RLOS=>n92,CH1_FFS_RLOS=>rx_los_low_s_c, + CH0_FFS_LS_SYNC_STATUS=>n93,CH1_FFS_LS_SYNC_STATUS=>lsm_status_s,CH0_FFS_CC_UNDERRUN=>n94, + CH1_FFS_CC_UNDERRUN=>ctc_urun_s,CH0_FFS_CC_OVERRUN=>n95,CH1_FFS_CC_OVERRUN=>ctc_orun_s, + CH0_FFS_RXFBFIFO_ERROR=>n96,CH1_FFS_RXFBFIFO_ERROR=>n14,CH0_FFS_TXFBFIFO_ERROR=>n97, + CH1_FFS_TXFBFIFO_ERROR=>n15,CH0_FFS_RLOL=>n98,CH1_FFS_RLOL=>rx_cdr_lol_s_c, + CH0_FFS_SKP_ADDED=>n99,CH1_FFS_SKP_ADDED=>ctc_ins_s,CH0_FFS_SKP_DELETED=>n100, + CH1_FFS_SKP_DELETED=>ctc_del_s,CH0_LDR_RX2CORE=>n101,CH1_LDR_RX2CORE=>n112, + D_SCIRDATA0=>sci_rddata(0),D_SCIRDATA1=>sci_rddata(1),D_SCIRDATA2=>sci_rddata(2), + D_SCIRDATA3=>sci_rddata(3),D_SCIRDATA4=>sci_rddata(4),D_SCIRDATA5=>sci_rddata(5), + D_SCIRDATA6=>sci_rddata(6),D_SCIRDATA7=>sci_rddata(7),D_SCIINT=>sci_int, + D_SCAN_OUT_0=>n16,D_SCAN_OUT_1=>n17,D_SCAN_OUT_2=>n18,D_SCAN_OUT_3=>n19, + D_SCAN_OUT_4=>n20,D_SCAN_OUT_5=>n21,D_SCAN_OUT_6=>n22,D_SCAN_OUT_7=>n23, + D_COUT0=>n24,D_COUT1=>n25,D_COUT2=>n26,D_COUT3=>n27,D_COUT4=>n28,D_COUT5=>n29, + D_COUT6=>n30,D_COUT7=>n31,D_COUT8=>n32,D_COUT9=>n33,D_COUT10=>n34,D_COUT11=>n35, + D_COUT12=>n36,D_COUT13=>n37,D_COUT14=>n38,D_COUT15=>n39,D_COUT16=>n40, + D_COUT17=>n41,D_COUT18=>n42,D_COUT19=>n43,D_REFCLKI=>pll_refclki,D_FFS_PLOL=>n46); + n45 <= '1' ; + n44 <= '0' ; + n1 <= 'Z' ; + n2 <= 'Z' ; + n3 <= 'Z' ; + n4 <= 'Z' ; + n5 <= 'Z' ; + n6 <= 'Z' ; + n7 <= 'Z' ; + n8 <= 'Z' ; + n9 <= 'Z' ; + n10 <= 'Z' ; + n11 <= 'Z' ; + n12 <= 'Z' ; + n13 <= 'Z' ; + n14 <= 'Z' ; + n15 <= 'Z' ; + n16 <= 'Z' ; + n17 <= 'Z' ; + n18 <= 'Z' ; + n19 <= 'Z' ; + n20 <= 'Z' ; + n21 <= 'Z' ; + n22 <= 'Z' ; + n23 <= 'Z' ; + n24 <= 'Z' ; + n25 <= 'Z' ; + n26 <= 'Z' ; + n27 <= 'Z' ; + n28 <= 'Z' ; + n29 <= 'Z' ; + n30 <= 'Z' ; + n31 <= 'Z' ; + n32 <= 'Z' ; + n33 <= 'Z' ; + n34 <= 'Z' ; + n35 <= 'Z' ; + n36 <= 'Z' ; + n37 <= 'Z' ; + n38 <= 'Z' ; + n39 <= 'Z' ; + n40 <= 'Z' ; + n41 <= 'Z' ; + n42 <= 'Z' ; + n43 <= 'Z' ; + n46 <= 'Z' ; + n103 <= '0' ; + n102 <= '1' ; + n47 <= 'Z' ; + n48 <= 'Z' ; + n49 <= 'Z' ; + n50 <= 'Z' ; + n51 <= 'Z' ; + n52 <= 'Z' ; + n53 <= 'Z' ; + n54 <= 'Z' ; + n55 <= 'Z' ; + n56 <= 'Z' ; + n57 <= 'Z' ; + n58 <= 'Z' ; + n59 <= 'Z' ; + n60 <= 'Z' ; + n61 <= 'Z' ; + n62 <= 'Z' ; + n63 <= 'Z' ; + n64 <= 'Z' ; + n65 <= 'Z' ; + n66 <= 'Z' ; + n67 <= 'Z' ; + n68 <= 'Z' ; + n69 <= 'Z' ; + n70 <= 'Z' ; + n71 <= 'Z' ; + n72 <= 'Z' ; + n73 <= 'Z' ; + n74 <= 'Z' ; + n75 <= 'Z' ; + n76 <= 'Z' ; + n77 <= 'Z' ; + n78 <= 'Z' ; + n79 <= 'Z' ; + n80 <= 'Z' ; + n81 <= 'Z' ; + n82 <= 'Z' ; + n83 <= 'Z' ; + n84 <= 'Z' ; + n85 <= 'Z' ; + n86 <= 'Z' ; + n87 <= 'Z' ; + n88 <= 'Z' ; + n89 <= 'Z' ; + n90 <= 'Z' ; + n91 <= 'Z' ; + n92 <= 'Z' ; + n93 <= 'Z' ; + n94 <= 'Z' ; + n95 <= 'Z' ; + n96 <= 'Z' ; + n97 <= 'Z' ; + n98 <= 'Z' ; + n99 <= 'Z' ; + n100 <= 'Z' ; + n101 <= 'Z' ; + n112 <= 'Z' ; + rsl_inst: component sgmii_ecp5rsl_core port map (rui_rst=>rsl_rst,rui_serdes_rst_dual_c=>serdes_rst_dual_c, + rui_rst_dual_c=>rst_dual_c,rui_rsl_disable=>rsl_disable,rui_tx_ref_clk=>pll_refclki, + rui_tx_serdes_rst_c=>tx_serdes_rst_c,rui_tx_pcs_rst_c(3)=>n122, + rui_tx_pcs_rst_c(2)=>n122,rui_tx_pcs_rst_c(1)=>n122,rui_tx_pcs_rst_c(0)=>tx_pcs_rst_c, + rdi_pll_lol=>'0',rui_rx_ref_clk=>rxrefclk,rui_rx_serdes_rst_c(3)=>n122, + rui_rx_serdes_rst_c(2)=>n122,rui_rx_serdes_rst_c(1)=>n122,rui_rx_serdes_rst_c(0)=>rx_serdes_rst_c, + rui_rx_pcs_rst_c(3)=>n122,rui_rx_pcs_rst_c(2)=>n122,rui_rx_pcs_rst_c(1)=>n122, + rui_rx_pcs_rst_c(0)=>rx_pcs_rst_c,rdi_rx_los_low_s(3)=>n122,rdi_rx_los_low_s(2)=>n122, + rdi_rx_los_low_s(1)=>n122,rdi_rx_los_low_s(0)=>rx_los_low_s_c, + rdi_rx_cdr_lol_s(3)=>n122,rdi_rx_cdr_lol_s(2)=>n122,rdi_rx_cdr_lol_s(1)=>n122, + rdi_rx_cdr_lol_s(0)=>rx_cdr_lol_s_c,rdo_serdes_rst_dual_c=>rsl_serdes_rst_dual_c, + rdo_rst_dual_c=>rsl_rst_dual_c,ruo_tx_rdy=>rsl_tx_rdy,rdo_tx_serdes_rst_c=>rsl_tx_serdes_rst_c, + rdo_tx_pcs_rst_c(3)=>n113,rdo_tx_pcs_rst_c(2)=>n114,rdo_tx_pcs_rst_c(1)=>n115, + rdo_tx_pcs_rst_c(0)=>rsl_tx_pcs_rst_c,ruo_rx_rdy=>rsl_rx_rdy,rdo_rx_serdes_rst_c(3)=>n116, + rdo_rx_serdes_rst_c(2)=>n117,rdo_rx_serdes_rst_c(1)=>n118,rdo_rx_serdes_rst_c(0)=>rsl_rx_serdes_rst_c, + rdo_rx_pcs_rst_c(3)=>n119,rdo_rx_pcs_rst_c(2)=>n120,rdo_rx_pcs_rst_c(1)=>\_Z\, + rdo_rx_pcs_rst_c(0)=>rsl_rx_pcs_rst_c); + n111 <= '1' ; + n110 <= '0' ; + n122 <= '0' ; + n121 <= '1' ; + n113 <= 'Z' ; + n114 <= 'Z' ; + n115 <= 'Z' ; + n116 <= 'Z' ; + n117 <= 'Z' ; + n118 <= 'Z' ; + n119 <= 'Z' ; + n120 <= 'Z' ; + \_Z\ <= 'Z' ; + sll_inst: component sgmii_ecp5sll_core port map (sli_rst=>sli_rst,sli_refclk=>pll_refclki, + sli_pclk=>tx_pclk_c,sli_div2_rate=>gnd,sli_div11_rate=>gnd,sli_gear_mode=>gnd, + sli_cpri_mode(2)=>gnd,sli_cpri_mode(1)=>gnd,sli_cpri_mode(0)=>gnd, + sli_pcie_mode=>gnd,slo_plol=>pll_lol_c); + n124 <= '1' ; + n123 <= '0' ; + gnd <= '0' ; + pwr <= '1' ; + +end architecture v1; + diff --git a/gbe_trb/media/ecp5/sgmii_gbe_pcs35.vhd b/gbe_trb/media/ecp5/sgmii_gbe_pcs35.vhd new file mode 100644 index 0000000..d4ecee8 --- /dev/null +++ b/gbe_trb/media/ecp5/sgmii_gbe_pcs35.vhd @@ -0,0 +1,191 @@ +--************************************************************************** +-- ************************************************************************* +-- * LATTICE SEMICONDUCTOR CONFIDENTIAL * +-- * PROPRIETARY NOTE * +-- * * +-- * This software contains information confidential and proprietary * +-- * to Lattice Semiconductor Corporation. It shall not be reproduced * +-- * in whole or in part, or transferred to other documents, or disclosed * +-- * to third parties, or used for any purpose other than that for which * +-- * it was obtained, without the prior written consent of Lattice * +-- * Semiconductor Corporation. All rights reserved. * +-- * * +-- ************************************************************************* +--************************************************************************** + +library ieee; +use ieee.std_logic_1164.all; + +entity sgmii_gbe_pcs35 is port ( + rst_n : in std_logic; + signal_detect : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + force_isolate : in std_logic; + force_loopback : in std_logic; + force_unidir : in std_logic; + operational_rate : in std_logic_vector(1 downto 0); + debug_link_timer_short : in std_logic; + rx_compensation_err : out std_logic; + ctc_drop_flag : out std_logic; + ctc_add_flag : out std_logic; + an_link_ok : out std_logic; + + tx_clock_enable_sink : in std_logic; + tx_clock_enable_source : out std_logic; + + rx_clock_enable_sink : in std_logic; + rx_clock_enable_source : out std_logic; + + tx_clk_125 : in std_logic; + tx_d : in std_logic_vector(7 downto 0); + tx_en : in std_logic; + tx_er : in std_logic; + rx_clk_125 : in std_logic; + rx_d : out std_logic_vector(7 downto 0); + rx_dv : out std_logic; + rx_er : out std_logic; + col : out std_logic; + crs : out std_logic; + tx_data : out std_logic_vector(7 downto 0); + tx_kcntl : out std_logic; + tx_disparity_cntl : out std_logic; + xmit_autoneg : out std_logic; + serdes_recovered_clk : in std_logic; + rx_data : in std_logic_vector(7 downto 0); + rx_even : in std_logic; + rx_kcntl : in std_logic; + rx_disp_err : in std_logic; + rx_cv_err : in std_logic; + rx_err_decode_mode : in std_logic; + mr_an_complete : out std_logic; + mr_page_rx : out std_logic; + mr_lp_adv_ability : out std_logic_vector(15 downto 0); + mr_main_reset : in std_logic; + mr_an_enable : in std_logic; + mr_restart_an : in std_logic; + mr_adv_ability : in std_logic_vector(15 downto 0) + ); +end entity; + +architecture arch of sgmii_gbe_pcs35 is +component sgmii_channel_smi_core port ( + rst_n : in std_logic; + signal_detect : in std_logic; + gbe_mode : in std_logic; + sgmii_mode : in std_logic; + force_isolate : in std_logic; + force_loopback : in std_logic; + force_unidir : in std_logic; + operational_rate : in std_logic_vector(1 downto 0); + debug_link_timer_short : in std_logic; + rx_compensation_err : out std_logic; + ctc_drop_flag : out std_logic; + ctc_add_flag : out std_logic; + an_link_ok : out std_logic; + + tx_clock_enable_sink : in std_logic; + tx_clock_enable_source : out std_logic; + + rx_clock_enable_sink : in std_logic; + rx_clock_enable_source : out std_logic; + + tx_clk_125 : in std_logic; + tx_d : in std_logic_vector(7 downto 0); + tx_en : in std_logic; + tx_er : in std_logic; + rx_clk_125 : in std_logic; + rx_d : out std_logic_vector(7 downto 0); + rx_dv : out std_logic; + rx_er : out std_logic; + col : out std_logic; + crs : out std_logic; + tx_data : out std_logic_vector(7 downto 0); + tx_kcntl : out std_logic; + tx_disparity_cntl : out std_logic; + xmit_autoneg : out std_logic; + serdes_recovered_clk : in std_logic; + rx_data : in std_logic_vector(7 downto 0); + rx_even : in std_logic; + rx_kcntl : in std_logic; + rx_disp_err : in std_logic; + rx_cv_err : in std_logic; + rx_err_decode_mode : in std_logic; + mr_an_complete : out std_logic; + mr_page_rx : out std_logic; + mr_lp_adv_ability : out std_logic_vector(15 downto 0); + mr_main_reset : in std_logic; + mr_an_enable : in std_logic; + mr_restart_an : in std_logic; + mr_adv_ability : in std_logic_vector(15 downto 0) + ); +end component; + + +begin + +-- Instantiate SGMII IP Core +u_sgmii_core : sgmii_channel_smi_core port map( + -- Clock and Reset + rst_n => rst_n , + signal_detect => signal_detect , + gbe_mode => gbe_mode , + sgmii_mode => sgmii_mode , + operational_rate => operational_rate , + debug_link_timer_short => debug_link_timer_short , + force_isolate => force_isolate , + force_loopback => force_loopback , + force_unidir => force_unidir , + + rx_compensation_err => rx_compensation_err , + ctc_drop_flag => ctc_drop_flag , + ctc_add_flag => ctc_add_flag , + an_link_ok => an_link_ok , + + tx_clock_enable_sink => tx_clock_enable_sink , + tx_clock_enable_source => tx_clock_enable_source , + + rx_clock_enable_sink => rx_clock_enable_sink , + rx_clock_enable_source => rx_clock_enable_source , + tx_clk_125 => tx_clk_125 , + rx_clk_125 => rx_clk_125 , + -- GMII TX Inputs + tx_d => tx_d, + tx_en => tx_en, + tx_er => tx_er, + -- GMII RX Outputs + -- To GMII/MAC interface + rx_d => rx_d , + rx_dv => rx_dv , + rx_er => rx_er , + col => col , + crs => crs , + + -- 8BI TX Outputs + tx_data => tx_data, + tx_kcntl => tx_kcntl, + tx_disparity_cntl => tx_disparity_cntl, + xmit_autoneg => xmit_autoneg, + + -- 8BI RX Inputs + serdes_recovered_clk => serdes_recovered_clk , + rx_data => rx_data , + rx_kcntl => rx_kcntl , + rx_even => rx_even , + rx_disp_err => rx_disp_err , + rx_cv_err => rx_cv_err , + rx_err_decode_mode => rx_err_decode_mode , + + -- Management Interface I/O + mr_adv_ability => mr_adv_ability, + mr_an_enable => mr_an_enable, + mr_main_reset => mr_main_reset, + mr_restart_an => mr_restart_an, + + mr_an_complete => mr_an_complete, + mr_lp_adv_ability => mr_lp_adv_ability, + mr_page_rx => mr_page_rx + ); + +end architecture; + diff --git a/gbe_trb/media/ecp5/sgmii_gbe_pcs35_core.ngo b/gbe_trb/media/ecp5/sgmii_gbe_pcs35_core.ngo new file mode 100644 index 0000000000000000000000000000000000000000..aeab23d0bb7911ab1026df4f6d4afdc1648c28ff GIT binary patch literal 387770 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

NkQGt0g@9k~vZ4i}-&Nx4`r+)>UeDxRvp2+ndSk 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 literal 0 HcmV?d00001 diff --git a/gbe_trb/media/ecp5/test/sgmii_channel_smi_core.ngo b/gbe_trb/media/ecp5/test/sgmii_channel_smi_core.ngo new file mode 100644 index 0000000000000000000000000000000000000000..924439efe59ea7f99b4a6d979abb681d7142e4dc GIT binary patch literal 194270 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