1 ----------------------------------------------------------------------------------
9 ----------------------------------------------------------------------------------
12 use IEEE.STD_LOGIC_1164.
ALL;
27 --data in to be sent out
28 data : in ( numbits_in_RTM_connector*2*num_RTM_cables - 1 downto 0);
29 --data to be sent out (connect this to the top level output ports)
35 --inhibit signal for writing to the spy memories
47 end CMX_crate_cable_output_module;
75 component blk_mem_A8x52_B8x52_1clock
is
79 wea :
IN (
0 DOWNTO 0);
80 addra :
IN (
7 DOWNTO 0);
81 dina :
IN (
51 DOWNTO 0);
82 douta :
OUT (
51 DOWNTO 0);
85 web :
IN (
0 DOWNTO 0);
86 addrb :
IN (
7 DOWNTO 0);
87 dinb :
IN (
51 DOWNTO 0);
88 doutb :
OUT (
51 DOWNTO 0));
104 --supplied for sw check
108 signal all_null : (numbits_in_RTM_connector*2 - 1 downto 0);
128 addra :
out (
7 DOWNTO 0);
284 ia_vme => ADDR_REG_RW_RTM_OUTPUT_COUNTER_RESET ,
335 channel_gen: for channel in 0 to num_RTM_cables-1 generate
339 data_sdr(channel)<=data( (channel+1)*2*numbits_in_RTM_connector -1 downto channel*2*numbits_in_RTM_connector);
341 --process to locally register the inhibit signal in system domain and yet again;
373 --CMX_cable_clocked_80Mbps_input_module_inst: entity work.CMX_cable_clocked_80Mbps_input_module
375 -- numbits_in_cable_connector => numbits_in_RTM_connector)
377 -- data => data_sdr(channel),
378 -- parity_error => parity_error_sig(channel),
379 -- forwarded_clock => forwarded_clock(channel),
380 -- ddr_data_in => ddr_data_in(channel),
381 -- buf_clk40 => buf_clk40,
382 -- buf_clk200 => '0',
383 -- pll_locked => pll_locked,
384 -- del_array => (others=>(others=>'0')),
385 -- upload_delays => '0');
405 assert (1=0) report "crate cable output; mem_select_addr_width:"&'IMAGE(mem_select_addr_width)&", num_RTM_cables:"&'IMAGE(num_RTM_cables) severity NOTE;
409 gen_sig_select_mux: if num_RTM_cables/=1 generate
410 assert (1=0) report "generating a mux for the memory signals" severity NOTE;
411 -- select the control signals based on the value of the mem_select_address_RTM_OUTPUT_SPY_SYSTEM
418 --this should generate a n-1 multiplexer with douta_RTM_OUTPUT_SPY_SYSTEM as output
419 --if there are moren than 1 rtm_output sources; if there is just one rtm_output source
420 --I expect the 1-1 'mux' will be optimized out.
423 end generate gen_sig_select_mux;
424 gen_no_sig_select_mux: if num_RTM_cables=1 generate
425 assert (1=0) report "no mux needed, only one output cable, connecting signals straight" severity NOTE;
429 end generate gen_no_sig_select_mux;
448 --a local register (one copy for each of the memories)to ease timing
468 --create local registers for the master inhibit to aid timing closure
492 --select the data going out
494 downto channel*2*numbits_in_RTM_connector )
498 --this will make an error detection register that in turn will be used to
499 --generate a latch; also an no-error run length counter is made in this process
525 gen_err_latch_bit_system: for i_bit in 0 to numbits_in_RTM_connector -1 generate
526 --resettable 'latch' (so not really a latch) that is set if there is an error
540 end generate gen_err_latch_bit_system;
544 -- create counter reset registers
545 --double register to close timing
561 --assign latches as data to the registers
569 ia_vme => ADDR_REG_RO_RTM_OUTPUT_SPY_SYSTEM_MEM_CHECK_ERROR+
(4*channel
),
582 ia_vme => ADDR_REG_RO_RTM_OUTPUT_SPY_SYSTEM_MEM_CHECK_ERROR+
(4*channel
)+2,
595 end generate channel_gen;
599 --port enables - we enable B port when verifying, spying and playing back. Write
600 --is enabled only when spying
601 --no playback for the source spy
617 ia_vme => ADDR_REG_RW_RTM_OUTPUT_SPY_SYSTEM_MEM_START_ADDRESS,
std_logic web_rtm_output_spy_system
blk_mem_A8x52_B8x52_1clock
std_logic_vector (num_RTM_cables - 1 downto 0) enb_rtm_output_spy_system_split
std_logic_vector (num_RTM_cables - 1 downto 0) web_rtm_output_spy_system_r_system
std_logic_vector (num_RTM_cables - 1 downto 0) port_b_master_inhibit_rtm_output_spy_system_r_system
ADDR_REG_RW_GENERIC_SPY_MEM_WORDinteger :=0
in start_playbackstd_logic
in addr_vmestd_logic_vector (15 downto 0)
arr_52 (num_RTM_cables - 1 downto 0) bit_error_detect_system
in buf_clk40_centerstd_logic
vme_outreg_notri_async vme_outreg_reg_ro_rtm_output_spy_system_mem_check_error_0vme_outreg_reg_ro_rtm_output_spy_system_mem_check_error_0
arr_16 (4 + 9 * num_RTM_cables + 2 downto 0) data_vme_from_below)
out data_vmestd_logic_vector (15 downto 0)
std_logic_vector (numbits_in_RTM_connector * 2 - 1 downto 0) douta_RTM_OUTPUT_SPY_SYSTEM)
out data_vme_outstd_logic_vector (15 downto 0)
out stretched_OUTstd_logic
error_detect_process_systembuf_clk40
ADDR_REG_RW_GENERIC_SPY_MEM_CONTROLinteger :=0
std_logic_vector (numbits_in_RTM_connector * 2 - 1 downto 0) all_null)
arr_16 (num_RTM_cables - 1 downto 0) data_to_vme_REG_RO_RTM_OUTPUT_SPY_SYSTEM_MEM_CHECK_ERROR_0
Stretch_10 stretch_10_counter_resetstretch_10_counter_reset
std_logic_vector (num_RTM_cables - 1 downto 0) port_b_master_inhibit_rtm_output_spy_system_split
out data_from_vmestd_logic_vector (width - 1 downto 0)
arr_ctr_32bit (num_RTM_cables - 1 downto 0) bit_error_counter_system
std_logic_vector (15 downto 0) data_to_vme_REG_RW_RTM_OUTPUT_SPY_SYSTEM_MEM_START_ADDRESS
in data_vme_instd_logic_vector (15 downto 0)
ADDR_REG_RO_GENERIC_SPY_MEM_STATUSinteger :=0
std_logic port_b_master_inhibit_RTM_OUTPUT_SPY_SYSTEM
arr_1 (num_RTM_cables - 1 downto 0) web_rtm_output_spy_system_individual
std_logic_vector (num_RTM_cables - 1 downto 0) spy_write_inhibit_rr_system
in data_vme_from_belowarr_16
--! inputs from local registers and from
out data_from_vmestd_logic_vector (width - 1 downto 0)
std_logic_vector (num_RTM_cables - 1 downto 0) web_rtm_output_spy_system_split
out data_vme_outstd_logic_vector (15 downto 0)
out data_vmestd_logic_vector (15 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
out port_b_master_inhibitstd_logic
out addrastd_logic_vector (7 downto 0)
arr_1 (num_RTM_cables - 1 downto 0) wea_rtm_output_spy_system_individual
out write_detectstd_logic
local_buf_master_inhibit_systembuf_clk40,pll_locked
out data_vme_outstd_logic_vector (15 downto 0)
std_logic_vector (num_RTM_cables - 1 downto 0) enb_rtm_output_spy_system_individual
num_external_RAMSpositive :=1
in del_arraycable_del_array_type (numbits_in_cable_connector downto 0)
in addr_vmestd_logic_vector (15 downto 0)
std_logic_vector (num_RTM_cables - 1 downto 0) spy_write_inhibit_r_system
arr_RTM_sdr data_sdr_r_SYSTEM
std_logic counter_reset_unstretched
arr_ctr_8bit (num_RTM_cables - 1 downto 0) addrb_RTM_OUTPUT_SPY_SYSTEM_counter
in buf_clk40_centerstd_logic
arr_RTM_sdr sdr_data_after_mux
std_logic_vector (numactchan - 1 downto 0) counter_reset_r_SYSTEM
in data_to_vmestd_logic_vector (width - 1 downto 0)
out data_vme_upstd_logic_vector (15 downto 0)
--! connect this to
vme_inreg_notri vme_inreg_reg_rw_rtm_output_counter_resetvme_inreg_reg_rw_rtm_output_counter_reset
CMX_cable_clocked_80Mbps_output_module cmx_cable_clocked_80mbps_output_module_instcmx_cable_clocked_80mbps_output_module_inst
std_logic_vector (num_RTM_cables - 1 downto 0) ena_rtm_output_spy_system_individual
in addr_vmestd_logic_vector (15 downto 0)
in datastd_logic_vector (numbits_in_RTM_connector * 2 * num_RTM_cables - 1 downto 0)
arr_RTM_sdr douta_rtm_output_spy_system_individual
out ddr_data_outstd_logic_vector (numbits_in_cable_connector downto 0)
std_logic_vector (num_RTM_cables - 1 downto 0) enb_rtm_output_spy_system_r_system
integer :=addr_port_width (num_RTM_cables) mem_select_addr_width
std_logic_vector (15 downto 0) data_from_vme_REG_RW_RTM_OUTPUT_SPY_SYSTEM_MEM_START_ADDRESS
CMX_cable_clocked_80Mbps_output_module
in data_to_vmestd_logic_vector (width - 1 downto 0)
numbits_in_cable_connectorinteger
out bus_drive_upstd_logic
or of all bus drive requests from below
blk_mem_a8x52_b8x52_1clock blk_mem_a8x52_b8x52_1clock_systemblk_mem_a8x52_b8x52_1clock_system
std_logic_vector (15 downto 0) data_from_vme_REG_RW_RTM_OUTPUT_COUNTER_RESET
vme_outreg_notri_async vme_outreg_reg_ro_rtm_output_spy_system_mem_check_error_1vme_outreg_reg_ro_rtm_output_spy_system_mem_check_error_1
out ddr_data_outarr_RTM (num_RTM_cables - 1 downto 0)
arr_26 (num_RTM_cables - 1 downto 0) bit_error_latch_system
out mem_select_addressstd_logic_vector (addr_port_width (num_external_RAMS) - 1 downto 0)
CMX_generic_spy_mem_control_FSM
in upload_delaysstd_logic
std_logic_vector (num_RTM_cables - 1 downto 0) start_playback_rr_system
std_logic ena_RTM_OUTPUT_SPY_SYSTEM
std_logic_vector (numbits_in_RTM_connector * 2 - 1 downto 0) dina_RTM_OUTPUT_SPY_SYSTEM)
in addr_vmestd_logic_vector (15 downto 0)
std_logic_vector (15 downto 0) data_to_vme_REG_RW_RTM_OUTPUT_COUNTER_RESET
std_logic_vector (numactchan - 1 downto 0) counter_reset_rr_SYSTEM
in data_to_vmestd_logic_vector (width - 1 downto 0)
arr_ctr_32bit (num_RTM_cables - 1 downto 0) bit_error_counter_system_next
std_logic wea_RTM_OUTPUT_SPY_SYSTEM
out data_vme_outstd_logic_vector (15 downto 0)
arr_RTM_sdr doutb_rtm_output_spy_system_individual
arr_RTM_sdr dinb_rtm_output_spy_system_individual
in spy_write_inhibitstd_logic
arr_8 (num_RTM_cables - 1 downto 0) addrb_rtm_output_spy_system_individual
in addr_vmestd_logic_vector (15 downto 0)
in addr_vmestd_logic_vector (15 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
std_logic_vector (addr_port_width (num_RTM_cables) - 1 downto 0) mem_select_address_RTM_OUTPUT_SPY_SYSTEM
std_logic_vector (7 downto 0) addra_RTM_OUTPUT_SPY_SYSTEM
std_logic_vector (3 downto 0) mode_control_RTM_OUTPUT_SPY_SYSTEM
std_logic_vector (num_RTM_cables - 1 downto 0) start_playback_r_system
in datastd_logic_vector ((numbits_in_cable_connector * 2) - 1 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
std_logic_vector (4 + 9 * num_RTM_cables + 2 downto 0) bus_drive_from_below)
in data_to_vmestd_logic_vector (width - 1 downto 0)
out mode_controlstd_logic_vector (3 downto 0)
in unstretched_INstd_logic
spy_system_addr_procbuf_clk40
vme_inreg_notri_async vme_inreg_reg_rw_rtm_output_spy_system_mem_start_addressvme_inreg_reg_rw_rtm_output_spy_system_mem_start_address
in bus_drive_from_belowstd_logic_vector
std_logic enb_rtm_output_spy_system
arr_16 (num_RTM_cables - 1 downto 0) data_to_vme_REG_RO_RTM_OUTPUT_SPY_SYSTEM_MEM_CHECK_ERROR_1