1 ----------------------------------------------------------------------------------
13 ----------------------------------------------------------------------------------
15 use IEEE.STD_LOGIC_1164.
ALL;
29 --data to be sent to CTP as received from the adder
30 --numbits_in_CTP_connector does not include clock
31 data : in ( (numbits_in_CTP_connector*2)-1 downto 0);
33 --registered data or playback data from the RAM
38 buf_clk200 : in ;
-- global 200 MHz clock for iodelay calibration
52 end CMX_CTP_output_module;
58 signal data_r : ( (numbits_in_CTP_connector*2)-1 downto 0);
80 addra :
out (
7 DOWNTO 0);
92 signal dina_CTP_SPY : ( ( numbits_in_CTP_connector *2)-1 downto 0);
101 component blk_mem_A8x62_B8x62
is
105 wea :
IN (
0 DOWNTO 0);
106 addra :
IN (
7 DOWNTO 0);
107 dina :
IN (
61 DOWNTO 0);
108 douta :
OUT (
61 DOWNTO 0);
111 web :
IN (
0 DOWNTO 0);
112 addrb :
IN (
7 DOWNTO 0);
113 dinb :
IN (
61 DOWNTO 0);
114 doutb :
OUT (
61 DOWNTO 0));
223 --first "-1" because the clock line is skipped...
226 signal all_null : (numbits_in_CTP_connector*2 - 1 downto 0);
264 ia_vme => ADDR_REG_RW_CTP_OUTPUT_COUNTER_RESET ,
317 ia_vme => ADDR_REG_RW_CTP_SPY_MEM_START_ADDRESS,
335 --process to locally register the inhibit signal;
369 --data coming in from the adder module
387 --a local register (one copy for each of the memories)to ease timing
398 --create local registers for the master inhibit to aid timing closure
418 --this will make an error detection register that in turn will be used to
419 --generate a latch; also an no-error run length counter is made in this process
424 if bit_error_latch/=all_null or (bit_error_counter)=x"ffffffff" then --bit_error_detect(i_mem_source)/=x"000000000000" or bit_error_counter(i_mem_source)/=to_unsigned(0,32) or std_logic_vector(bit_error_counter(i_mem_source))=x"ffffffff" then
452 --connect the output data
453 --stupendous numbering scheme...
461 --double register to close timing
478 gen_err_latch_bit: for i_bit in 0 to (numbits_in_CTP_connector*2 - 1) generate
481 --resettable 'latch' (so not really a latch) that is set if there is an error
498 end generate gen_err_latch_bit;
500 --assign latches as data to the registers
511 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_CHECK_ERROR+0,
525 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_CHECK_ERROR+2,
539 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_CHECK_ERROR+4,
552 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_CHECK_ERROR+6,
567 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_NOERROR_COUNTER,
580 ia_vme => ADDR_REG_RO_CTP_SPY_MEM_NOERROR_COUNTER+2,
594 --port enables - we enable B port when verifying, spying and playing back. Write
595 --is enabled only when spying
ADDR_REG_RW_GENERIC_SPY_MEM_WORDinteger :=0
std_logic_vector (15 downto 0) data_to_vme_reg_ro_ctp_spy_mem_check_error_3
std_logic counter_reset_r
local_buf_master_inhibit_systembuf_clk40,pll_locked
vme_inreg_notri vme_inreg_reg_rw_ctp_output_counter_resetvme_inreg_reg_rw_ctp_output_counter_reset
in addr_vmestd_logic_vector (15 downto 0)
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_check_error_1vme_outreg_reg_ro_ctp_spy_mem_check_error_1
out data_vmestd_logic_vector (15 downto 0)
out data_vme_outstd_logic_vector (15 downto 0)
out stretched_OUTstd_logic
in start_playbackstd_logic
ADDR_REG_RW_GENERIC_SPY_MEM_CONTROLinteger :=0
std_logic_vector (15 downto 0) data_from_vme_REG_RW_CTP_SPY_MEM_START_ADDRESS
std_logic_vector ((numbits_in_CTP_connector * 2) - 1 downto 0) dina_CTP_SPY)
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_check_error_3vme_outreg_reg_ro_ctp_spy_mem_check_error_3
std_logic_vector (15 downto 0) data_from_vme_REG_RW_CTP_OUTPUT_COUNTER_RESET
in addr_vmestd_logic_vector (15 downto 0)
in spy_write_inhibitstd_logic
out data_from_vmestd_logic_vector (width - 1 downto 0)
arr_16 (8 downto 0) data_vme_from_below
std_logic_vector (numbits_in_CTP_connector * 2 - 1 downto 0) all_null)
std_logic_vector (numbits_in_CTP_connector * 2 - 1 downto 0) bit_error_latch)
CMX_generic_spy_mem_control_FSM
ADDR_REG_RO_GENERIC_SPY_MEM_STATUSinteger :=0
std_logic_vector ((numbits_in_CTP_connector * 2) - 1 downto 0) douta_CTP_SPY)
in data_vme_from_belowarr_16
--! inputs from local registers and from
out data_from_vmestd_logic_vector (width - 1 downto 0)
error_detect_processbuf_clk40
out data_vme_outstd_logic_vector (15 downto 0)
out data_vmestd_logic_vector (15 downto 0)
out data_vme_outstd_logic_vector (15 downto 0)
unsigned (7 downto 0) addrb_CTP_SPY_counter
in data_vme_instd_logic_vector (15 downto 0)
unsigned (31 downto 0) bit_error_counter
out port_b_master_inhibitstd_logic
std_logic start_playback_r
out addrastd_logic_vector (7 downto 0)
out write_detectstd_logic
blk_mem_a8x62_b8x62 blk_mem_a8x62_b8x62_ctp_spyblk_mem_a8x62_b8x62_ctp_spy
std_logic port_b_master_inhibit_CTP_SPY_r
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_noerror_counter_0vme_outreg_reg_ro_ctp_spy_mem_noerror_counter_0
num_external_RAMSpositive :=1
in addr_vmestd_logic_vector (15 downto 0)
std_logic_vector (0 downto 0) web_CTP_SPY_inhibited
std_logic counter_reset_rr
std_logic counter_reset_unstretched
std_logic_vector ((numbits_in_CTP_connector * 2) - 1 downto 0) data_r)
Stretch_10 stretch_10_counter_resetstretch_10_counter_reset
vme_inreg_notri_async vme_inreg_reg_rw_ctp_spy_mem_start_addressvme_inreg_reg_rw_ctp_spy_mem_start_address
in data_to_vmestd_logic_vector (width - 1 downto 0)
std_logic_vector (7 downto 0) addra_CTP_SPY
out data_vme_upstd_logic_vector (15 downto 0)
--! connect this to
in datastd_logic_vector ((numbits_in_CTP_connector * 2) - 1 downto 0)
std_logic_vector (7 downto 0) addrb_CTP_SPY
in addr_vmestd_logic_vector (15 downto 0)
std_logic_vector (15 downto 0) data_to_vme_REG_RW_CTP_OUTPUT_COUNTER_RESET
in data_to_vmestd_logic_vector (width - 1 downto 0)
out bus_drive_upstd_logic
or of all bus drive requests from below
std_logic_vector (15 downto 0) data_to_vme_REG_RW_CTP_SPY_MEM_START_ADDRESS
out mem_select_addressstd_logic_vector (addr_port_width (num_external_RAMS) - 1 downto 0)
std_logic spy_write_inhibit_r
std_logic_vector (3 downto 0) mode_control_CTP_SPY
std_logic enb_CTP_SPY_inhibited
std_logic_vector (15 downto 0) data_to_vme_reg_ro_ctp_spy_mem_check_error_2
in addr_vmestd_logic_vector (15 downto 0)
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_check_error_2vme_outreg_reg_ro_ctp_spy_mem_check_error_2
in data_to_vmestd_logic_vector (width - 1 downto 0)
unsigned (31 downto 0) bit_error_counter_next
std_logic spy_write_inhibit_rr
out data_vme_outstd_logic_vector (15 downto 0)
std_logic_vector (8 downto 0) bus_drive_from_below
in data_vme_instd_logic_vector (15 downto 0)
std_logic_vector (15 downto 0) data_to_vme_reg_ro_ctp_spy_mem_check_error_1
std_logic_vector (61 downto 0) dinb_CTP_SPY
std_logic_vector (numbits_in_CTP_connector * 2 - 1 downto 0) bit_error_detect)
std_logic_vector (61 downto 0) doutb_CTP_SPY
in addr_vmestd_logic_vector (15 downto 0)
std_logic start_playback_rr
in data_vme_instd_logic_vector (15 downto 0)
in buf_clk40_centerstd_logic
std_logic_vector (15 downto 0) data_to_vme_reg_ro_ctp_spy_mem_check_error_0
std_logic_vector (0 downto 0) wea_CTP_SPY
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_noerror_counter_1vme_outreg_reg_ro_ctp_spy_mem_noerror_counter_1
spy_source_addr_procbuf_clk40
in data_vme_instd_logic_vector (15 downto 0)
in data_to_vmestd_logic_vector (width - 1 downto 0)
out mode_controlstd_logic_vector (3 downto 0)
in unstretched_INstd_logic
vme_outreg_notri_async vme_outreg_reg_ro_ctp_spy_mem_check_error_0vme_outreg_reg_ro_ctp_spy_mem_check_error_0
in bus_drive_from_belowstd_logic_vector
std_logic port_b_master_inhibit_CTP_SPY