1 ----------------------------------------------------------------------------------
5 -- Create Date: 14:
49:
29 05/12/2010
7 -- Module Name: DTC_T2 - Behavioral
16 -- Revision 0.
01 -
File Created
17 -- Additional Comments:
19 ----------------------------------------------------------------------------------
21 use IEEE.STD_LOGIC_1164.
ALL;
22 use IEEE.STD_LOGIC_ARITH.
ALL;
23 use IEEE.STD_LOGIC_UNSIGNED.
ALL;
24 use IEEE.std_logic_misc.
all;
28 -- Uncomment the following library declaration if using
29 -- arithmetic functions with or values
30 -- use IEEE.NUMERIC_STD.ALL;
32 -- Uncomment the following library declaration if instantiating
33 -- any Xilinx primitives in this code.
35 use UNISIM.VComponents.
all;
37 use UNIMACRO.vcomponents.
all;
41 VAUXP : in (12 downto 0);
42 VAUXN : in (12 downto 0);
46 SFP_SCL : out (3 downto 0);
47 SFP_SDA : inout (3 downto 0);
49 SFP_LOS : in (2 downto 0);
50 SFP_ABS : in (3 downto 0);
51 TxFault : in (3 downto 0);
52 TxDisable : out (3 downto 0);
53 -- RATE : out (3 downto 0);
77 ddr3_dq : inout (31 downto 0);
78 ddr3_addr : out (13 downto 0);
79 ddr3_ba : out (2 downto 0);
80 ddr3_dm : out (3 downto 0);
81 ddr3_dqs_p : inout (3 downto 0);
82 ddr3_dqs_n : inout (3 downto 0);
87 ddr3_cke : out (0 to 0);
88 ddr3_odt : out (0 to 0);
89 ddr3_ck_p : out (0 to 0);
90 ddr3_ck_n : out (0 to 0);
109 AMC_RXN : in (12 downto 1);
110 AMC_RXP : in (12 downto 1);
111 AMC_TXN : out (12 downto 1);
112 AMC_TXP : out (12 downto 1);
113 -- signal to/from DTC_T2
134 Trigdata :
IN array12x8;
139 ipb_addr :
IN (
31 downto 0);
140 ipb_wdata :
IN (
31 downto 0);
145 ipb_rdata :
OUT (
31 downto 0);
156 TTS :
IN (
3 downto 0);
180 BCN_off :
IN (
12 downto 0);
181 OC_off :
IN (
3 downto 0);
183 cal_win_high :
IN (
11 downto 0);
184 cal_win_low :
IN (
11 downto 0);
186 LocalL1A_cfg :
IN (
31 downto 0);
197 ipb_addr :
IN (
31 downto 0);
198 ipb_wdata :
IN (
31 downto 0);
200 state :
IN (
3 downto 0);
210 CalType :
OUT (
3 downto 0);
211 TTC_Brcst :
OUT (
3 downto 0);
212 localL1A_periodic :
OUT ;
213 ipb_rdata :
OUT (
31 downto 0);
216 ttc_soft_reset :
OUT ;
228 ttc_evcnt_reset :
OUT ;
229 event_number_avl :
OUT ;
230 event_number :
OUT (
59 downto 0)
234 Generic (useTCPIP : := false; AMC_useTRIG : := true; simulation : := false);
245 AllEventBuilt :
OUT ;
249 enSFP :
IN (
3 downto 0);
254 fake_length :
IN (
19 downto 0);
255 T1_version :
IN (
7 downto 0);
256 Source_ID :
IN array3x12;
257 AMC_en :
IN (
11 downto 0);
258 TTS_disable :
IN (
11 downto 0);
261 AMC_RXN :
IN (
12 downto 1);
262 AMC_RXP :
IN (
12 downto 1);
263 evt_data_re :
IN (
2 downto 0);
264 evt_buf_full :
IN (
2 downto 0);
265 ddr_pa :
IN (
9 downto 0);
271 ipb_addr :
IN (
31 downto 0);
272 ipb_wdata :
IN (
31 downto 0);
276 ttc_evcnt_reset :
IN ;
277 event_number_avl :
IN ;
278 event_number :
IN (
59 downto 0);
279 AMC_Ready :
OUT (
11 downto 0);
281 BC0_lock :
OUT (
11 downto 0);
282 AMC_TXN :
OUT (
12 downto 1);
283 AMC_TXP :
OUT (
12 downto 1);
284 AMC_status :
OUT (
31 downto 0);
285 evt_data :
OUT array3x67;
286 evt_data_we :
OUT (
2 downto 0);
287 evt_data_rdy :
OUT (
2 downto 0);
288 mon_evt_wc :
OUT (
47 downto 0);
289 mon_ctrl :
OUT (
31 downto 0);
290 buf_rqst :
OUT (
3 downto 0);
291 ipb_rdata :
OUT (
31 downto 0);
295 TrigData :
OUT array12x8;
296 TTS_coded :
OUT (
4 downto 0)
304 addr :
IN (
31 downto 0);
305 SFP_ABS :
IN (
3 downto 0);
306 SFP_LOS :
IN (
2 downto 0);
308 SFP_SDA :
INOUT (
3 downto 0);
309 rdata :
OUT (
31 downto 0);
312 SFP_SCL :
OUT (
3 downto 0)
320 SN :
IN (
8 downto 0);
323 SPI_rdata :
IN (
7 downto 0);
328 IPADDR :
OUT (
31 downto 0);
329 SPI_wdata :
OUT (
7 downto 0);
330 SPI_addr :
OUT (
7 downto 0)
344 mem_test :
in (
1 downto 0);
345 EventData :
in array3X67;
346 EventData_we :
in (
2 downto 0);
347 wport_rdy :
out (
2 downto 0);
348 WrtMonBlkDone :
OUT (
2 downto 0);
349 WrtMonEvtDone :
OUT (
2 downto 0);
350 KiloByte_toggle :
OUT (
2 downto 0);
351 EoB_toggle :
OUT (
2 downto 0);
352 EventBufAddr :
in array3x14;
353 EventBufAddr_we :
in (
2 downto 0);
354 EventFIFOfull :
out (
2 downto 0);
355 TCP_din :
in (
31 downto 0);
356 TCP_channel :
in (
1 downto 0);
358 TCP_wcount :
out (
2 downto 0);
359 TCP_dout :
out (
31 downto 0);
-- TCP data are written in unit of 32-bit words
360 TCP_raddr :
in (
28 downto 0);
-- 28-26 encoded request source 25-0 address in 64 word
361 TCP_length :
in (
10 downto 0);
-- in 64 word, actual length -
1
362 TCP_dout_valid :
out ;
370 page_addr :
in (
9 downto 0);
371 ipb_addr :
in (
31 downto 0);
372 ipb_wdata :
in (
31 downto 0);
373 ipb_rdata :
out (
31 downto 0);
375 mem_stat :
out (
63 downto 0);
376 device_temp :
in (
11 downto 0);
378 ddr3_dq :
inout (
31 downto 0);
379 ddr3_dm :
out (
3 downto 0);
380 ddr3_addr :
out (
13 downto 0);
381 ddr3_ba :
out (
2 downto 0);
382 ddr3_dqs_p :
inout (
3 downto 0);
383 ddr3_dqs_n :
inout (
3 downto 0);
388 ddr3_cke :
out (
0 to 0);
389 ddr3_odt :
out (
0 to 0);
390 ddr3_ck_p :
out (
0 to 0);
391 ddr3_ck_n :
out (
0 to 0)
395 generic(RXPOLARITY : := '
0'; TXPOLARITY : := '
0');
409 amc_en :
in (
11 downto 0);
411 IPADDR :
in (
31 downto 0);
412 MACADDR :
in (
47 downto 0);
413 ipb_out :
out ipb_wbus;
414 ipb_in :
in ipb_rbus;
415 SN :
out (
8 downto 0);
416 debug_in :
IN (
31 downto 0);
417 debug_out :
OUT (
127 downto 0)
424 SN :
IN (
8 downto 0);
425 VAUXN_IN :
IN (
12 downto 0);
426 VAUXP_IN :
IN (
12 downto 0);
427 addr :
IN (
15 downto 0);
428 data :
OUT (
31 downto 0);
429 device_temp :
OUT (
11 downto 0);
430 ALM :
OUT (
7 downto 0);
434 --COMPONENT DAQLSCXG_2x_if
446 -- enSFP : IN (3 downto 0);
447 -- SFP_ABS : IN (1 downto 0);
448 -- LSC_ID : IN (15 downto 0);
450 -- evt_data_rdy : IN (2 downto 0);
451 -- EventData_in : IN array3x67;
452 -- EventData_we : IN (2 downto 0);
453 -- buf_rqst : IN (3 downto 0);
454 -- WrtMonBlkDone : IN (2 downto 0);
455 -- WrtMonEvtDone : IN (2 downto 0);
456 -- wport_rdy : IN (2 downto 0);
457 -- wport_FIFO_full : IN (2 downto 0);
462 -- SFP_REFCLK_P : in ;
463 -- SFP_REFCLK_N : in ;
467 -- ipb_addr : IN (31 downto 0);
468 -- ipb_wdata : IN (31 downto 0);
469 -- SFP_down : OUT (2 downto 0);
470 -- EventData_re : OUT (2 downto 0);
471 -- evt_buf_full : OUT (2 downto 0);
473 -- MonBufOverWrite : IN ;
474 -- MonBuf_avl : OUT ;
475 -- MonBuf_empty : OUT ;
476 -- MonBufOvfl : OUT ;
477 -- mon_evt_cnt : OUT (31 downto 0);
478 -- EventBufAddr_we : OUT (2 downto 0);
479 -- EventBufAddr : OUT array3x14;
484 -- ipb_rdata : OUT (31 downto 0);
500 enSFP :
IN (
3 downto 0);
501 SFP_ABS :
IN (
2 downto 0);
502 LSC_ID :
IN (
15 downto 0);
504 evt_data_rdy :
IN (
2 downto 0);
505 EventData_in :
IN array3x67;
506 EventData_we :
IN (
2 downto 0);
507 buf_rqst :
IN (
3 downto 0);
509 WrtMonBlkDone :
IN (
2 downto 0);
510 WrtMonEvtDone :
IN (
2 downto 0);
511 wport_rdy :
IN (
2 downto 0);
512 wport_FIFO_full :
IN (
2 downto 0);
524 ipb_addr :
IN (
31 downto 0);
525 ipb_wdata :
IN (
31 downto 0);
526 SFP_down :
OUT (
2 downto 0);
527 EventData_re :
OUT (
2 downto 0);
528 evt_buf_full :
OUT (
2 downto 0);
529 MonBufOverWrite :
IN ;
533 mon_evt_cnt :
OUT (
31 downto 0);
534 EventBufAddr_we :
OUT (
2 downto 0);
535 EventBufAddr :
OUT array3x14;
542 ipb_rdata :
OUT (
31 downto 0);
559 state :
IN (
3 downto 0);
561 ipb_addr :
IN (
15 downto 0);
562 ipb_rdata :
OUT (
31 downto 0)
565 constant ipbus_ver_addr : (15 downto 0) := x"0000";
566 constant ipbus_sfp_addr: (15 downto 0) := x"0002";
567 constant CDRclk_pol : := '0';
568 constant CDRdata_pol : := '1';
569 constant TTCclk_pol : := '1';
570 constant TTCdata_pol : := '1';
571 constant Coarse_Delay: (3 downto 0) := x"0";
572 signal rst_ipbus : := '0';
573 signal LDC_UsrClk : := '0';
574 signal wr_AMC_en : := '0';
575 signal wr_EnSFP : := '0';
576 signal fake_length : (19 downto 0) := x"00400";
577 signal AMC_en : (11 downto 0) := (others =>'0');
578 signal TTS_disable : (11 downto 0) := (others =>'0');
579 signal AMC_Ready : (11 downto 0) := (others =>'0');
580 signal TTC_lock : := '0';
581 signal BC0_lock : (11 downto 0) := (others =>'0');
582 signal AMC_status : (31 downto 0) := (others =>'0');
583 signal AMC_DATA : (31 downto 0) := (others =>'0');
584 signal AMC_ack : := '0';
585 signal L1Aovfl_warning : := '0';
586 signal HCAL_trigger : := '0';
587 signal TRIGDATA : array12x8 := (others => (others => '0'));
588 signal TTS_coded : (4 downto 0) := (others =>'0');
589 signal pattern : (3 downto 0) := (others =>'0');
590 --signal Trig_mask : (7 downto 0) := (
others =>'0');
591 signal SPI_SCK_buf : := '0';
592 signal CLK_rdy : := '0';
593 signal I2C_data : (31 downto 0) := (others =>'0');
594 signal TTCclk_in : := '0';
595 signal TTC_Clk : := '0';
596 signal TTC_strobe : := '0';
597 signal BcntErr_cnt : (7 downto 0) := (others =>'0');
598 signal SinErr_cnt : (7 downto 0) := (others =>'0');
599 signal DbErr_cnt : (7 downto 0) := (others =>'0');
600 signal L1_reg : (15 downto 0) := (others =>'0');
601 signal Bcnt_reg : (11 downto 0) := (others =>'0');
602 signal OC_reg : (31 downto 0) := (others =>'0');
603 signal DB_cmd : := '0';
606 signal S2V_cntr : (5 downto 0) := (others => '0');
607 signal S2V_sr : (3 downto 0) := (others => '0');
608 signal ddr_rdata : (7 downto 0) := (others =>'0');
609 signal ipb_clk_dcm : := '0';
610 signal ipb_clk : := '0';
611 signal clk125_dcm : := '0';
612 signal clk125 : := '0';
613 signal DRPclk_dcm : := '0';
614 signal DRPclk : := '0';
615 signal sysclk_dcm : := '0';
616 signal sysclk : := '0';
617 signal clkfb : := '0';
618 signal refclk_dcm : := '0';
619 signal refclk : := '0';
620 signal mem_clk_dcm : := '0';
621 signal mem_clk : := '0';
622 signal sysclk_inp : := '0';
623 signal sysclk_in : := '0';
624 --signal clk125 : := '0';
625 signal sys_lock : := '0';
626 signal sys_lock_n : := '0';
627 signal ldc_reset : := '0';
628 signal ldc_GTXreset : := '0';
629 signal lsc_start : := '0';
630 signal lsc_reset : := '0';
631 signal lsc_GTXreset : := '0';
632 signal amc_reset : := '0';
633 signal amc_GTXreset : := '0';
634 signal conf7_q : := '0';
635 signal conf7_fall : := '0';
637 signal LSC_LinkDown : := '0';
638 signal mem_rst : := '0';
639 signal mem_test : (1 downto 0) := (others =>'0');
640 signal mem_stat : (63 downto 0) := (others =>'0');
641 signal mem_ack : := '0';
642 signal mem_data : (31 downto 0) := (others =>'0');
643 signal EventData : array3X67 := (others => (others => '0'));
644 signal wport_rdy : (2 downto 0) := (others =>'0');
645 signal EventBufAddr : array3x14 := (others => (others => '0'));
646 signal EventBufAddr_we : (2 downto 0) := (others =>'0');
647 signal evt_buf_full : (2 downto 0) := (others =>'0');
648 signal wport_FIFO_full : (2 downto 0) := (others =>'0');
649 --signal TCP_din : (31 downto 0) := (
others =>'0');
650 --signal TCP_channel : (1 downto 0) := (
others =>'0');
651 --signal TCP_wrqst : := '0';
652 --signal TCP_re : := '0';
653 --signal TCP_dout : (31 downto 0) := (
others =>'0');
654 --signal TCP_raddr : (23 downto 0) := (
others =>'0');
655 --signal TCP_length : (11 downto 0) := (
others =>'0');
656 --signal TCP_dout_valid : := '0';
657 --signal TCP_rrqst : := '0';
658 --signal TCP_rack : := '0';
659 --signal TCP_lastword : := '0';
660 signal MonBufOvfl : := '0';
661 signal MonBuf_empty : := '0';
662 --signal inc_mon_cntr : := '0';
663 signal mon_evt_wc : (47 downto 0) := (others =>'0');
664 signal mon_evt_cnt : (31 downto 0) := (others =>'0');
665 signal mon_ctrl : (31 downto 0) := (others =>'0');
666 --signal TCPbuf_avl : := '0';
667 signal mon_buf_avl : := '0';
668 signal EventBufAddrAvl : := '0';
669 signal EventBufAddrRe : := '0';
670 signal mon_wp : (31 downto 0) := (others =>'0');
671 --signal TCP_releaseAck : (2 downto 0) := (
others =>'0');
672 --signal TCP_releaseRqst : (2 downto 0) := (
others =>'0');
673 --signal TCP_releaseAddr : array3X13 := (others => (others => '0'));
674 signal EventBuf_rqst : (3 downto 0) := (others =>'0');
675 signal rst_cntr : := '0';
676 signal rst_ddr_pa : := '0';
677 signal inc_ddr_pa : := '0';
678 signal Source_ID : array3X12 := (others => (others => '0'));
679 signal ddr_pa : (9 downto 0) := (others =>'0');
680 signal CDRclk : := '0';
681 signal TTS_clk : := '0';
682 signal chk_lock : := '0';
683 signal chk_lock_q : := '0';
685 signal BC0_dl : := '0';
686 signal BC0_locked : (1 downto 0) := (others =>'0');
687 signal BC0_cntr : (4 downto 0) := (others =>'0');
688 signal T3_trigger : := '0';
689 signal inc_BX_offset : := '0';
690 signal en_HCAL_trig : := '0';
691 signal ec_BX_offset : := '0';
692 signal add_two : (1 downto 0) := (others =>'0');
693 signal BX_offset : (11 downto 0) := (others =>'0');
694 signal BX_offset2SC : (11 downto 0) := (others =>'0');
695 signal bcnt : (11 downto 0) := x"000";
696 signal LocalL1A_cfg : (31 downto 0) := (others =>'0');
697 signal BCN_off : (12 downto 0) := (others =>'0');
698 signal OC_off : (3 downto 0) := (others =>'0');
699 signal en_cal_win : := '0';
700 signal CalibCtrl : (31 downto 0) := x"0d800d80";
701 signal cal_win_high : (11 downto 0) := (others =>'0');
702 signal cal_win_low : (11 downto 0) := (others =>'0');
703 signal CalType : (3 downto 0) := (others =>'0');
704 signal TTC_Brcst : (3 downto 0) := (others =>'0');
705 signal local_TTCcmd : := '0';
706 signal en_brcst : := '0';
707 signal ttc_start : := '0';
708 signal ttc_stop : := '0';
709 signal ttc_soft_reset : := '0';
710 signal ttc_soft_resetp : := '0';
711 signal ttc_ready : := '0';
712 signal ttc_serr : := '0';
713 signal ttc_derr : := '0';
714 signal ttc_bcnt_err : := '0';
715 signal ttc_evcnt_reset : := '0';
716 signal inc_rate_ofw : := '0';
717 signal rate_ofw : := '0';
718 signal rate_ofwp : := '0';
719 signal rate_ofw_q : := '0';
720 signal sync_lost : := '0';
721 signal oc_cntr : (3 downto 0) := (others =>'0');
722 signal ttc_resync : := '0';
723 signal AllEventBuilt : := '0';
724 signal dcc_quiet : := '0';
725 signal inc_oc : := '0';
726 signal inc_L1ac : := '0';
727 signal inc_bcnterr : := '0';
728 signal inc_serr : := '0';
729 signal inc_derr : := '0';
730 signal evn_fifo_full : := '0';
731 signal event_number_avl : := '0';
732 signal state : (3 downto 0) := (others =>'0');
733 signal TTS_wait : (20 downto 0) := (others =>'0');
734 signal event_number : (59 downto 0) := (others =>'0');
735 signal status_l : (22 downto 0) := (others =>'0');
736 signal SFP_down_l : (2 downto 0) := (others =>'0');
737 signal SFP_status_l : (11 downto 0) := (others =>'0');
738 signal AMC_status_l : (31 downto 0) := (others =>'0');
739 signal TTC_cntr_data : (31 downto 0) := (others => '0');
740 signal got_SN : := '0';
741 signal ipb_strobe_q : := '0';
742 signal SFP_clk : := '0';
743 signal AMC_clk : := '0';
744 signal AMC_clk_in : := '0';
745 signal SV_Cntr : (7 downto 0) := (others => '0');
746 signal sysclk_div : (7 downto 0) := (others => '0');
747 signal SFP_UsrClk : := '0';
748 signal SFP_TxOutClk : := '0';
749 signal I2C_debug_out : (15 downto 0) := (others =>'0');
750 signal SFPOSC_rdy : := '0';
751 signal reset : := '0';
752 signal DAQ_reset : := '0';
753 signal AMCOSC_rdy : := '0';
754 --signal cs_clk_in : := '0';
755 --signal cs_clk : := '0';
756 signal TTC_debug : (63 downto 0) := (others =>'0');
757 signal TxDisable_i : (3 downto 0) := (others => '0');
758 signal DAQfifo_re : := '0';
759 signal DAQfifoAlmostEmpty : := '0';
760 signal DAQfifoEmpty : := '0';
761 signal DAQfifo_do : (63 downto 0) := (others =>'0');
762 signal DAQ_debug_in : (63 downto 0) := (others =>'0');
763 signal LDC_debug_out : (63 downto 0) := (others =>'0');
764 signal LSC_debug_out : (63 downto 0) := (others =>'0');
765 signal ddr_debug_in : (31 downto 0) := (others =>'0');
766 signal ddr_debug_out : (127 downto 0) := (others =>'0');
767 signal GbE_REFCLK : := '0';
768 signal S6Link_debug_in : (31 downto 0) := (others =>'0');
769 signal S6Link_debug_out : (127 downto 0) := (others =>'0');
770 signal GbE_debug_in : (31 downto 0) := (others =>'0');
771 signal GbE_debug_out : (127 downto 0) := (others =>'0');
772 signal AMC_debug_in : (255 downto 0) := (others =>'0');
773 signal AMC_debug_out : (255 downto 0) := (others =>'0');
774 signal SFP0_debug_in : (31 downto 0) := (others =>'0');
775 signal SFP0_debug_out : (127 downto 0) := (others =>'0');
776 signal SFP1_debug_in : (31 downto 0) := (others =>'0');
777 signal SFP1_debug_out : (127 downto 0) := (others =>'0');
778 signal ipb_master_out : ipb_wbus;
779 signal ipb_master_in : ipb_rbus;
780 signal SN : (8 downto 0) := (others =>'0');
781 signal MACADDR : (47 downto 0) := (others =>'0');
782 signal ipaddr : (31 downto 0) := (others =>'0');
783 signal en_RARP : := '0';
784 --signal SPI_IP : (31 downto 0) := (
others =>'0');
785 signal status : (31 downto 0) := (others =>'0');
786 signal cmd : (31 downto 0) := (others =>'0');
787 signal cmd0_dl : (1 downto 0) := (others =>'0');
788 signal cmd2_dl : (1 downto 0) := (others =>'0');
789 signal conf : (15 downto 0) := (others =>'0');
790 signal LSC_ID : (15 downto 0) := x"1234";
792 signal inc_HTRCRC_err : := '0';
793 signal ttc_data : (31 downto 0) := (others => '0');
794 signal sysmon_data : (31 downto 0) := (others => '0');
795 signal HCAL_trig_data : (31 downto 0) := (others => '0');
796 signal device_temp : (11 downto 0) := (others =>'0');
797 signal ALM : (7 downto 0) := (others =>'0');
798 signal evt_data_rdy : (2 downto 0) := (others => '0');
799 signal evt_data_re : (2 downto 0) := (others => '0');
800 signal evt_data_we : (2 downto 0) := (others => '0');
801 --signal event_size : array3x13;
802 signal SFP_data : (31 downto 0) := (others =>'0');
803 signal SFP_ack : := '0';
804 --signal TCP_data : (31 downto 0) := (
others =>'0');
805 --signal TCP_ack : := '0';
806 signal S2V_SyncRegs : (2 downto 0) := (others => '0');
807 signal resetSyncRegs : (2 downto 0) := (others => '0');
808 signal sysclk_div7SyncRegs : (3 downto 0) := (others => '0');
809 signal resetCntr_SyncRegs : (2 downto 0) := (others =>'0');
810 signal newIPADDR : := '0';
811 signal newIPADDRSyncRegs : (2 downto 0) := (others =>'0');
812 signal DNA_out : := '0';
813 signal load_DNA : := '0';
814 signal shift_DNA : (2 downto 0) := (others =>'0');
815 signal DNA_cntr : (5 downto 0) := (others =>'0');
816 signal DNA : (56 downto 0) := (others =>'0');
817 signal Dis_pd : := '0';
818 signal enSFP : (3 downto 0) := (others =>'0');
819 signal SFP_down : (2 downto 0) := (others =>'0');
820 signal WrtMonBlkDone : (2 downto 0) := (others =>'0');
821 signal WrtMonEvtDone : (2 downto 0) := (others =>'0');
824 CONTROL0 :
INOUT (
35 DOWNTO 0);
825 CONTROL1 :
INOUT (
35 DOWNTO 0));
830 CONTROL :
INOUT (
35 DOWNTO 0);
832 DATA :
IN (
15 DOWNTO 0);
833 TRIG0 :
IN (
7 DOWNTO 0));
836 signal CONTROL0 : (35 downto 0) := (others => '0');
837 signal CONTROL1 : (35 downto 0) := (others => '0');
838 signal TRIG0 : (7 downto 0) := (others => '0');
839 signal TRIG1 : (7 downto 0) := (others => '0');
840 signal DATA0 : (15 downto 0) := (others => '0');
841 signal DATA1 : (15 downto 0) := (others => '0');
845 -- CONTROL0 => CONTROL0,
846 -- CONTROL1 => CONTROL1);
849 -- CONTROL => CONTROL0,
853 --DATA0(14) <= evt_buf_full(
0);
854 --DATA0(13) <= evt_data_re(
0);
855 --DATA0(12) <= evt_data_rdy(
0);
856 --DATA0(11 downto 10) <= EventBufAddr(
0)(
5 downto 4);
857 --DATA0(9 downto 8) <= EventData(
0)(
65 downto 64);
858 --DATA0(7) <= wport_rdy(
0);
859 --DATA0(6) <= wport_FIFO_full(
0);
860 --DATA0(5) <= evt_data_we(
0);
861 --DATA0(4) <= EventBufAddr_we(
0);
862 --DATA0(3 downto 0) <= mem_stat(
3 downto 0);
863 --TRIG0(7 downto 4) <= (
others => '0');
864 --TRIG0(3) <= wport_rdy(
0);
865 --TRIG0(2) <= EventBufAddr_we(
0);
866 --TRIG0(1) <= evt_data_re(
0);
867 --TRIG0(0) <= evt_data_rdy(
0);
871 -- CONTROL => CONTROL1,
872 -- CLK => mem_stat(19),
875 --DATA1(14 downto 0) <= mem_stat(
18 downto 4);
876 --TRIG1(7 downto 2) <= (
others => '0');
877 --TRIG1(1 downto 0) <= mem_stat(
18 downto 17);
878 i_TTS_if:
TTS_if PORT MAP(
892 en_HCAL_trig => en_HCAL_trig ,
893 Trigdata => Trigdata,
894 triggerOut => HCAL_trigger,
896 ipb_write => ipb_master_out.ipb_write ,
897 ipb_strobe => ipb_master_out.ipb_strobe ,
898 ipb_addr => ipb_master_out.ipb_addr ,
899 ipb_wdata => ipb_master_out.ipb_wdata ,
900 ipb_rdata => HCAL_trig_data,
901 GTX_REFCLKp => CDR_REFCLK_P,
902 GTX_REFCLKn => CDR_REFCLK_N,
908 TxDisable <= TxDisable_i;
913 addr => ipb_master_out.ipb_addr,
923 i_SPI_SCK_buf: bufh
port map(i => SPI_SCK, o => SPI_SCK_buf
);
924 i_SPI_if:
SPI_if PORT MAP(
934 newIPADDR => newIPADDR,
936 SPI_rdata =>
(others => '0'
),
940 i_ttc_if:
ttc_if PORT MAP(
946 DB_cmd_out => DB_cmd,
948 TTC_strobe => TTC_strobe,
949 sys_lock => sys_lock,
951 local_TTCcmd => local_TTCcmd ,
952 single_TTCcmd => cmd
(8),
956 DIV_nRST => DIV_nRST,
957 CDRclk_p => CDRclk_p,
958 CDRclk_n => CDRclk_n,
959 CDRclk_out => CDRclk,
960 CDRdata_p => CDRdata_p,
961 CDRdata_n => CDRdata_n,
962 TTCdata_p => TTCdata_p,
963 TTCdata_n => TTCdata_n,
968 en_cal_win => en_cal_win,
969 cal_win_high => cal_win_high ,
970 cal_win_low => cal_win_low ,
972 TTC_Brcst => TTC_Brcst,
973 ovfl_warning => L1Aovfl_warning ,
975 ipb_write => ipb_master_out.ipb_write ,
976 ipb_strobe => ipb_master_out.ipb_strobe ,
977 ipb_addr => ipb_master_out.ipb_addr ,
978 ipb_wdata => ipb_master_out.ipb_wdata ,
979 ipb_rdata => ttc_data,
980 en_localL1A => conf
(2),
981 LocalL1A_cfg => LocalL1A_cfg ,
982 localL1A_s => cmd
(26),
983 localL1A_r => cmd
(10),
984 localL1A_periodic => status
(10),
985 T3_trigger => T3_trigger,
986 HCAL_trigger => HCAL_trigger ,
989 en_brcst => en_brcst,
990 ttc_start => ttc_start,
991 ttc_stop => ttc_stop,
992 ttc_soft_reset => ttc_soft_reset ,
993 ttc_ready => ttc_ready,
994 ttc_serr => ttc_serr,
995 ttc_derr => ttc_derr,
996 ttc_bcnt_err => ttc_bcnt_err ,
997 rate_OFW => rate_OFW,
998 sync_lost => sync_lost,
1000 inc_l1ac => inc_l1ac,
1001 inc_bcnterr => inc_bcnterr ,
1002 inc_serr => inc_serr,
1003 inc_derr => inc_derr,
1005 evn_fifo_full => evn_fifo_full ,
1006 ttc_evcnt_reset => ttc_evcnt_reset ,
1007 event_number_avl => event_number_avl ,
1008 event_number => event_number
1010 local_TTCcmd <= conf(
5)
or conf(
8);
1011 CalibCtrl(31) <= en_cal_win;
1012 CalibCtrl(30 downto 28) <= "000";
1013 CalibCtrl(27 downto 16) <= cal_win_high;
1014 CalibCtrl(15 downto 12) <= CalType;
1015 CalibCtrl(11 downto 0) <= cal_win_low;
1016 cal_win_high(11 downto 6) <= "110110";
1017 cal_win_low(11 downto 6) <= "110110";
1018 i_S2V: IBUFDS
generic map(DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25") port map(i => S2V_p, ib => S2V_n, o => S2V
);
1021 if(CDRclk'event and CDRclk = '1')then
1022 if(conf(15) = '0')then
1029 i_GbE_REFCLK: IBUFDS_GTE2
1035 I => GbE_REFCLK_P,
-- Connect to package pin AB6
1036 IB => GbE_REFCLK_N
-- Connect to package pin AB5
1038 i_TTCclk_in : IBUFGDS
generic map (DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25")
1040 O => TTCclk_in,
-- Clock buffer output
1041 I => TTCclk_p,
-- Diff_p clock buffer input
1042 IB => TTCclk_n
-- Diff_n clock buffer input
1044 i_TTC_CLK_buf: bufg
port map(i => TTCclk_in, o => TTC_Clk
);
1045 i_sysclk_in_buf: bufh
port map(i => GbE_REFCLK, o => sysclk_in
);
1046 i_PLL_sysclk : PLLE2_BASE
1048 BANDWIDTH =>
"OPTIMIZED",
-- OPTIMIZED, HIGH, LOW
1049 CLKFBOUT_MULT =>
8,
-- Multiply value for all CLKOUT, (2-64)
1050 CLKFBOUT_PHASE =>
0.0,
-- Phase offset in degrees of CLKFB, (-360.000-360.000).
1051 CLKIN1_PERIOD =>
8.0,
-- Input clock period in ns to ps resolution (i.e. 33.
333 is 30 MHz).
1052 -- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
1053 CLKOUT0_DIVIDE =>
5,
1054 CLKOUT1_DIVIDE =>
32,
1055 CLKOUT2_DIVIDE =>
20,
1056 DIVCLK_DIVIDE =>
1,
-- Master division value, (1-56)
1057 REF_JITTER1 =>
0.0,
-- Reference input jitter in UI, (0.000-0.
999).
1058 STARTUP_WAIT =>
"FALSE" -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
1061 -- Clock Outputs: 1-bit (each) output: User configurable clock outputs
1062 CLKOUT0 => sysclk_dcm,
1063 CLKOUT1 => ipb_clk_dcm ,
1064 CLKOUT2 => DRPclk_dcm,
1065 -- Feedback Clocks: 1-bit (each) output: Clock feedback ports
1066 CLKFBOUT => clk125_dcm,
-- 1-bit output: Feedback clock
1067 -- Status Port: 1-bit (each) output: PLL status ports
1068 LOCKED => sys_lock,
-- 1-bit output: LOCK
1069 -- Clock Input: 1-bit (each) input: Clock input
1070 CLKIN1 => sysclk_in,
-- 1-bit input: Input clock
1071 -- Control Ports: 1-bit (each) input: PLL control ports
1072 PWRDWN => '0',
-- 1-bit input: Power-down
1073 RST => '0',
-- 1-bit input: Reset
1074 -- Feedback Clocks: 1-bit (each) input: Clock feedback ports
1075 CLKFBIN => clk125
-- 1-bit input: Feedback clock
1077 i_clk125_buf: bufg
port map(i => clk125_dcm, o => clk125
);
1078 i_ipb_clk_buf: bufg
port map(i => ipb_clk_dcm, o => ipb_clk
);
1079 i_DRPclk_buf: bufg
port map(i => DRPclk_dcm, o => DRPclk
);
1080 i_sysclk_buf: bufg
port map(i => sysclk_dcm, o => sysclk
);
1081 --i_refclk_buf: bufg port map(i => refclk_dcm, o => refclk);
1082 reset <= not sys_lock or cmd(0);
1084 process(sysclk,reset)
1087 resetSyncRegs <= (others => '1');
1088 elsif(sysclk'event and sysclk = '1')then
1089 resetSyncRegs <= resetSyncRegs(1 downto 0) & '0';
1092 i_ddr_if:
ddr_if PORT MAP(
1093 mem_clk_p => sys_clk_p,
1094 mem_clk_n => sys_clk_n,
1100 resetsys => resetSyncRegs
(2),
1102 mem_test => mem_test,
1103 EventData => EventData,
1104 EventData_we => evt_data_we,
1105 wport_rdy => wport_rdy,
1106 WrtMonBlkDone => WrtMonBlkDone ,
1107 WrtMonEvtDone => WrtMonEvtDone ,
1108 KiloByte_toggle =>
open,
1110 EventBufAddr => EventBufAddr ,
1111 EventBufAddr_we => EventBufAddr_we ,
1112 EventFIFOfull => wport_FIFO_full ,
1113 TCP_din =>
(others => '0'
),
1114 TCP_channel =>
(others => '0'
),
1118 TCP_raddr =>
(others => '0'
),
1119 TCP_length =>
(others => '0'
),
1120 TCP_dout_valid =>
open,
1123 TCP_lastword =>
open,
1124 page_addr => ddr_pa,
1126 ipb_write => ipb_master_out.ipb_write ,
1127 ipb_strobe => ipb_master_out.ipb_strobe ,
1128 ipb_addr => ipb_master_out.ipb_addr ,
1129 ipb_wdata => ipb_master_out.ipb_wdata ,
1130 ipb_rdata => mem_data,
1132 mem_stat => mem_stat,
1133 device_temp => device_temp ,
1136 ddr3_addr => ddr3_addr,
1138 ddr3_dqs_p => ddr3_dqs_p,
1139 ddr3_dqs_n => ddr3_dqs_n,
1140 ddr3_ras_n => ddr3_ras_n,
1141 ddr3_cas_n => ddr3_cas_n,
1142 ddr3_we_n => ddr3_we_n,
1143 ddr3_reset_n => ddr3_reset_n ,
1144 ddr3_cke => ddr3_cke,
1145 ddr3_odt => ddr3_odt,
1146 ddr3_ck_p => ddr3_ck_p,
1147 ddr3_ck_n => ddr3_ck_n
1149 --mem_rst <= not sys_lock or not CLK_rdy or cmd(5)
or cmd(
0);
1150 mem_rst <= not sys_lock or not CLK_rdy or cmd(5);
1151 MACADDR <= x"080030f30" & '0' & not SN(8) & '0' & not SN(7 downto 6) & '1' & SN(5 downto 0);
1157 GTX_RESET => sys_lock_n,
1158 MACADDR => MACADDR,
-- new mac range 08-00-30-F3-00-00 to 08-00-30-F3-00-7F
1161 GbE_REFCLK => GbE_REFCLK,
1162 S6LINK_RXN => S6LINK_RXN,
1163 S6LINK_RXP => S6LINK_RXP,
1164 S6LINK_TXN => S6LINK_TXN,
1165 S6LINK_TXP => S6LINK_TXP,
1166 wr_AMC_en => wr_AMC_en,
1168 ipb_out => ipb_master_out,
1169 ipb_in => ipb_master_in,
1172 debug_in =>
(others => '0'
),
1175 --LSC_LinkDown <= '1' when conf(1) = '0'
or or_reduce(EnSFP(
2 downto 0)
and SFP_down) = '1'
else '0';
1176 --status(0) <= LSC_LinkDown;
1177 status(0) <= or_reduce(SFP_down);
1178 status(1) <= MonBufOvfl;
1179 status(2) <= mon_evt_cnt(10);
1180 status(3) <= MonBuf_empty;
1181 status(4) <= mem_stat(0);
-- monitor input FIFO overflow
1182 status(5) <= not ttc_ready;
1183 status(6) <= ttc_bcnt_err;
1184 status(7) <= ttc_serr;
1185 status(8) <= ttc_derr;
1186 status(9) <= sync_lost;
1187 status(13) <= L1Aovfl_warning;
1188 status(15) <= mem_stat(63);
1191 EnSFP(3) <= not conf(1);
1192 mem_test <= conf(6) & conf(4);
1193 --en_brcst <= conf(5);
1197 Q => cmd0_dl
(0),
-- SRL data output
1198 A0 => '1',
-- Select[0] input
1199 A1 => '1',
-- Select[1] input
1200 A2 => '1',
-- Select[2] input
1201 A3 => '0',
-- Select[3] input
1202 CE => '1',
-- Clock enable input
1203 CLK => ipb_clk,
-- Clock input
1204 D => cmd
(0) -- SRL data input
1208 Q => cmd0_dl
(1),
-- SRL data output
1209 A0 => '1',
-- Select[0] input
1210 A1 => '1',
-- Select[1] input
1211 A2 => '1',
-- Select[2] input
1212 A3 => '0',
-- Select[3] input
1213 CE => '1',
-- Clock enable input
1214 CLK => ipb_clk,
-- Clock input
1215 D => cmd0_dl
(0) -- SRL data input
1219 Q => cmd2_dl
(0),
-- SRL data output
1220 A0 => '1',
-- Select[0] input
1221 A1 => '1',
-- Select[1] input
1222 A2 => '1',
-- Select[2] input
1223 A3 => '0',
-- Select[3] input
1224 CE => '1',
-- Clock enable input
1225 CLK => ipb_clk,
-- Clock input
1226 D => cmd
(2) -- SRL data input
1230 Q => cmd2_dl
(1),
-- SRL data output
1231 A0 => '1',
-- Select[0] input
1232 A1 => '1',
-- Select[1] input
1233 A2 => '1',
-- Select[2] input
1234 A3 => '0',
-- Select[3] input
1235 CE => '1',
-- Clock enable input
1236 CLK => ipb_clk,
-- Clock input
1237 D => cmd2_dl
(0) -- SRL data input
1241 if(ipb_clk'event and ipb_clk = '1')then
1242 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = CSR_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1243 cmd <= ipb_master_out.ipb_wdata;
1245 cmd <= (others => '0');
1248 conf7_fall <= conf7_q and not conf(7);
1249 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = CFG_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1250 conf <= ipb_master_out.ipb_wdata(15 downto 0);
1252 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = HTR_EN_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1253 Dis_pd <= ipb_master_out.ipb_wdata(15);
1254 EnSFP(1 downto 0) <= ipb_master_out.ipb_wdata(13 downto 12);
1255 AMC_en <= ipb_master_out.ipb_wdata(11 downto 0);
1256 if(AMC_en = ipb_master_out.ipb_wdata(11 downto 0))then
1261 if(EnSFP(1 downto 0) = ipb_master_out.ipb_wdata(13 downto 12))then
1270 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = x"001a" and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1271 TTS_disable <= ipb_master_out.ipb_wdata(11 downto 0);
1273 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = TTC_cal_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1274 en_cal_win <= ipb_master_out.ipb_wdata(31);
1275 cal_win_high(5 downto 0) <= ipb_master_out.ipb_wdata(21 downto 16);
1276 cal_win_low(5 downto 0) <= ipb_master_out.ipb_wdata(5 downto 0);
1278 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = SRC_id_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1279 Source_ID(0)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1281 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = SRC_id1_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1282 Source_ID(1)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1284 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = x"001c" and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1285 LocalL1A_cfg <= ipb_master_out.ipb_wdata;
1287 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = SFP_CSR_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1288 LSC_ID(15 downto 2) <= ipb_master_out.ipb_wdata(31 downto 18);
1289 TxDisable_i <= ipb_master_out.ipb_wdata(15 downto 12);
1291 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = TTC_bcnt_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1292 OC_OFF <= ipb_master_out.ipb_wdata(19 downto 16);
1293 BCN_OFF <= ipb_master_out.ipb_wdata(12 downto 0);
1295 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = fake_length_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1296 fake_length <= ipb_master_out.ipb_wdata(19 downto 0);
1298 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = x"0019" and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1299 pattern <= ipb_master_out.ipb_wdata(11 downto 8);
1300 -- Trig_mask <= ipb_master_out.ipb_wdata(7 downto 0);
1302 if(reset = '1' or (ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = MON_ctrl_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1'))then
1303 ddr_pa <= (others => '0');
1304 elsif(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = PAGE_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1306 if(MonBuf_empty = '0')then
1307 ddr_pa <= ddr_pa + 1;
1310 ddr_pa <= ipb_master_out.ipb_wdata(9 downto 0);
1313 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = PAGE_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1' and run = '1' and MonBuf_empty = '0')then
1318 if(DB_cmd = '1')then
1319 status_l <= status(22 downto 0);
1320 SFP_down_l <= SFP_down;
1321 SFP_status_l <= TxFault & (TTC_LOL or TTC_LOL) & SFP_LOS & SFP_ABS;
1322 AMC_status_l <= AMC_status;
1326 ipb_master_in.ipb_ack <= ipb_master_out.ipb_strobe when ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(17) = '0' else mem_ack;
1327 process(ipb_master_out.ipb_addr)
1329 if(ipb_master_out.ipb_addr(27) = '1' or ipb_master_out.ipb_addr(17) = '1')then
1330 ipb_master_in.ipb_rdata <= mem_data;
1331 elsif(ipb_master_out.ipb_addr(14 downto 5) = CSR_addr(14 downto 5))then
1332 if(ipb_master_out.ipb_addr(15) = '0')then
1333 case ipb_master_out.ipb_addr(4 downto 0) is
1334 when "00000" => ipb_master_in.ipb_rdata <= not SN(7 downto 0) & not SN(8) & status(22 downto 0);
1335 when "00001" => ipb_master_in.ipb_rdata <= K7version & conf;
1336 when "00010" => ipb_master_in.ipb_rdata <= mon_ctrl;
1337 when "00011" => ipb_master_in.ipb_rdata <= '0' & SFP_down & AMC_Ready & Dis_pd & EnSFP(2 downto 0) & AMC_en;
1338 when "00100" => ipb_master_in.ipb_rdata <= LSC_ID & TxDisable_i & TxFault & (TTC_LOL or TTC_LOL) & SFP_LOS & SFP_ABS;
1339 when "00101" => ipb_master_in.ipb_rdata <= AMC_status;
1340 when "00111" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(0);
1341 when "01000" => ipb_master_in.ipb_rdata <= x"000" & OC_OFF & "000" & BCN_OFF;
1342 when "01001" => ipb_master_in.ipb_rdata <= CalibCtrl;
1343 when "01010" => ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1344 when "01011" => ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1345 when "01100" => ipb_master_in.ipb_rdata <= x"00000" & "00" & ddr_pa;
1346 when "01101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(15 downto 0) & '0';
1347 when "01110" => ipb_master_in.ipb_rdata <= mon_evt_cnt;
1348 when "01111" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(31 downto 16) & '0';
1349 when "10000" => ipb_master_in.ipb_rdata <= x"000" & "00" & mon_buf_avl & '1' & '0' & wport_FIFO_full & '0' & wport_rdy & x"0" & '0' & evt_data_rdy;
1350 when "10001" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(1);
1351 when "10010" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(2);
1352 when "11000" => ipb_master_in.ipb_rdata <= x"000" & fake_length;
1353 when "11001" => ipb_master_in.ipb_rdata <= x"00" & "000" & TTS_coded & state & pattern & x"00";
1354 when "11010" => ipb_master_in.ipb_rdata <= x"00000" & TTS_disable;
1355 when "11100" => ipb_master_in.ipb_rdata <= LocalL1A_cfg;
1356 when "11101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(47 downto 32) & '0';
1357 when "11110" => ipb_master_in.ipb_rdata <= DNA(31 downto 0);
1358 when "11111" => ipb_master_in.ipb_rdata <= "0000000" & DNA(56 downto 32);
1359 when others => ipb_master_in.ipb_rdata <= (others => '0');
1362 case ipb_master_out.ipb_addr(4 downto 0) is
1363 when "00000" => ipb_master_in.ipb_rdata <= not SN(7 downto 0) & not SN(8) & status_l;
1364 when "00001" => ipb_master_in.ipb_rdata <= K7version & conf;
1365 when "00010" => ipb_master_in.ipb_rdata <= mon_ctrl;
1366 when "00011" => ipb_master_in.ipb_rdata <= '0' & SFP_down_l & AMC_Ready & Dis_pd & EnSFP(2 downto 0) & AMC_en;
1367 when "00100" => ipb_master_in.ipb_rdata <= LSC_ID & TxDisable_i & SFP_status_l;
1368 when "00101" => ipb_master_in.ipb_rdata <= AMC_status_l;
1369 when "00111" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(0);
1370 when "01000" => ipb_master_in.ipb_rdata <= x"000" & OC_OFF & "000" & BCN_OFF;
1371 when "01001" => ipb_master_in.ipb_rdata <= CalibCtrl;
1372 when "01010" => ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1373 when "01011" => ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1374 when "01100" => ipb_master_in.ipb_rdata <= x"00000" & "00" & ddr_pa;
1375 when "01101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(15 downto 0) & '0';
1376 when "01110" => ipb_master_in.ipb_rdata <= mon_evt_cnt;
1377 when "01111" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(31 downto 16) & '0';
1378 when "10000" => ipb_master_in.ipb_rdata <= x"000" & "00" & mon_buf_avl & '1' & '0' & wport_FIFO_full & '0' & wport_rdy & x"0" & '0' & evt_data_rdy;
1379 when "10001" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(1);
1380 when "10010" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(2);
1381 when "11000" => ipb_master_in.ipb_rdata <= x"000" & fake_length;
1382 when "11001" => ipb_master_in.ipb_rdata <= x"00" & "000" & TTS_coded & state & pattern & x"00";
1383 when "11010" => ipb_master_in.ipb_rdata <= x"00000" & TTS_disable;
1384 when "11100" => ipb_master_in.ipb_rdata <= LocalL1A_cfg;
1385 when "11101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(47 downto 32) & '0';
1386 when "11110" => ipb_master_in.ipb_rdata <= DNA(31 downto 0);
1387 when "11111" => ipb_master_in.ipb_rdata <= "0000000" & DNA(56 downto 32);
1388 when others => ipb_master_in.ipb_rdata <= (others => '0');
1392 ipb_master_in.ipb_rdata <= AMC_data or TTC_cntr_data or I2C_data or sysmon_data or SFP_data or ttc_data;
1395 rst_cntr <= cmd(1) or cmd(0);
1396 ttc_resync <= ttc_soft_reset;
1397 process(sysClk,reset)
1400 TTS_wait <= (others => '0');
1401 elsif(sysClk'event and sysClk = '1')then
1402 if(ttc_resync = '1')then
1403 TTS_wait <= (others => '0');
1404 elsif(TTS_wait(20) = '0' and sync_lost = '0' and AllEventBuilt = '1')then
1405 TTS_wait <= TTS_wait + 1;
1409 process(sysClk,reset)
1413 elsif(sysClk'event and sysClk = '1')then
1414 if(run = '0' and conf(12) = '1')then
1416 elsif(run = '0')then
1417 state <= "0100";
-- changed upon request starting version 0x3023
1418 elsif(ttc_resync = '1')then
1422 when "1000" => -- Ready
1423 if(TTS_coded(4) = '1')then
1425 elsif(TTS_coded(3) = '1')then
1427 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1429 elsif(L1Aovfl_warning = '1' or evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1' or TTS_coded(0) = '1')then
1432 when "0001" => -- OFW
1433 if(TTS_coded(4) = '1')then
1435 elsif(TTS_coded(3) = '1')then
1437 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1439 elsif(evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1')then
1441 elsif(L1Aovfl_warning = '0' and rate_OFWp = '0' and TTS_coded(0) = '0')then
1444 when "0100" => -- Busy
1445 if(TTS_wait(20) = '0')then
1446 elsif(TTS_coded(4) = '1')then
1448 elsif(TTS_coded(3) = '1')then
1450 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1452 elsif(evn_fifo_full = '0' and rate_OFWp = '0' and TTS_coded(1) = '0')then
1455 when others => null;
-- x"0" or x"f" disconnected, x"2" OOS, x"c" error
1460 ipb_master_in.ipb_err <= '0';
1463 if(TTC_clk'event and TTC_clk = '1')then
1465 bcnt <= x"de8";
-- this compensates 5 TTC clock delay
in HCAL_trig(
2)
and ttc_if(
3)
1466 elsif(bcnt = x"deb")then
1467 bcnt <= (others => '0');
1471 if(bcnt = BX_offset)then
1477 chk_lock_q <= chk_lock;
1478 if(TTC_lock = '0')then
1480 elsif(chk_lock = '1')then
1481 BC0_locked <= BC0_locked(0) & and_reduce(BC0_lock or (not AMC_en));
1483 if(TTC_lock = '0')then
1484 inc_BX_offset <= '0';
1486 elsif(chk_lock_q = '1' and BC0_locked = "10")then
1487 inc_BX_offset <= '1';
1489 elsif(add_two /= "00")then
1490 add_two <= add_two - 1;
1492 if(TTC_lock = '0')then
1493 en_HCAL_trig <= '0';
1494 elsif(chk_lock = '1')then
1495 if(inc_BX_offset = '1' and add_two = "00")then
1496 en_HCAL_trig <= '1';
1498 en_HCAL_trig <= '0';
1501 if(TTC_lock = '0')then
1502 ec_BX_offset <= '0';
1503 elsif(chk_lock = '1' and inc_BX_offset = '0')then
1504 ec_BX_offset <= '1';
1505 elsif(add_two /= "00")then
1506 ec_BX_offset <= '1';
1508 ec_BX_offset <= '0';
1510 if(TTC_lock = '0')then
1511 BX_offset <= x"100";
1512 elsif(ec_BX_offset = '1')then
1513 if(inc_BX_offset = '1')then
1514 if(BX_offset = x"deb")then
1515 BX_offset <= x"000";
1517 BX_offset <= BX_offset + 1;
1519 elsif(BX_offset = x"000")then
1520 BX_offset <= x"deb";
1522 BX_offset <= BX_offset - 1;
1525 if(BX_offset(11) = '1')then
1526 BX_offset2SC <= BX_offset - x"dec";
1528 BX_offset2SC <= BX_offset;
1532 i_AMC_if:
AMC_if PORT MAP(
1539 ReSync => ttc_resync,
1540 GTXreset => amc_GTXreset,
1541 resetCntr => rst_cntr,
1542 AllEventBuilt => AllEventBuilt ,
1544 en_inject_err => conf
(10),
1548 NoReSyncFake => conf
(11),
1549 WaitMonBuf => conf
(14),
1550 fake_length => fake_length ,
1551 en_localL1A => conf
(2),
1552 T1_version => K7version
(7 downto 0),
1553 Source_ID => Source_ID,
1555 TTS_disable => TTS_disable ,
1556 AMC_Ready => AMC_Ready,
1557 TTC_lock => TTC_lock,
1558 BC0_lock => BC0_lock,
1559 AMC_REFCLK_P => AMC_REFCLK_P ,
1560 AMC_REFCLK_N => AMC_REFCLK_N ,
1565 AMC_status => AMC_status,
1566 evt_data => EventData,
1567 evt_data_we => evt_data_we ,
1568 evt_buf_full => evt_buf_full ,
1569 evt_data_re => evt_data_re ,
1570 evt_data_rdy => evt_data_rdy ,
1572 MonBuf_empty => MonBuf_empty ,
1573 mon_evt_wc => mon_evt_wc,
1574 mon_ctrl => mon_ctrl,
1575 mon_buf_avl => mon_buf_avl ,
1577 buf_rqst => EventBuf_rqst,
1578 ipb_write => ipb_master_out.ipb_write ,
1579 ipb_strobe => ipb_master_out.ipb_strobe ,
1580 ipb_addr => ipb_master_out.ipb_addr ,
1581 ipb_wdata => ipb_master_out.ipb_wdata ,
1582 ipb_rdata => AMC_data,
1587 ttc_evcnt_reset => ttc_evcnt_reset ,
1588 event_number_avl => event_number_avl ,
1589 event_number => event_number ,
1590 evn_buf_full => evn_fifo_full,
1591 ovfl_warning => L1Aovfl_warning ,
1592 TrigData => TrigData,
1593 TTS_coded => TTS_coded
1595 AMC_reset <= not sys_lock or cmd(0) or cmd0_dl(1);
1596 amc_GTXreset <= wr_AMC_en or conf7_fall or not sys_lock;
1597 sys_lock_n <= not sys_lock;
1598 --i_DAQLSC_if: DAQLSCXG_2x_if PORT MAP(
1599 -- sysclk => sysclk,
1600 -- clk125 => clk125,
1601 -- DRPclk => DRPclk,
1602 -- reset => AMC_reset,
1603 -- daq_reset => lsc_reset,
1604 -- gtx_reset => lsc_GTXreset,
1605 -- rstCntr => rst_cntr,
1607 -- DB_cmd => DB_cmd,
1608 -- Dis_pd => Dis_pd,
1610 -- SFP_ABS => SFP_ABS(1 downto 0),
1611 -- LSC_ID => LSC_ID,
1612 -- SFP_down => SFP_down,
1613 -- inc_ddr_pa => inc_ddr_pa,
1614 -- evt_data_rdy => evt_data_rdy,
1615 -- EventData_in => EventData,
1616 -- EventData_we => evt_data_we,
1617 -- EventData_re => evt_data_re,
1618 -- evt_buf_full => evt_buf_full,
1619 -- buf_rqst => EventBuf_rqst,
1620 -- WaitMonBuf => conf(14),
1621 -- MonBufOverWrite => conf(13),
1622 -- MonBuf_avl => mon_buf_avl,
1623 -- MonBuf_empty => MonBuf_empty,
1624 -- MonBufOvfl => MonBufOvfl,
1625 -- mon_evt_cnt => mon_evt_cnt,
1626 -- WrtMonBlkDone => WrtMonBlkDone,
1627 -- WrtMonEvtDone => WrtMonEvtDone,
1628 -- wport_rdy => wport_rdy,
1629 -- wport_FIFO_full => wport_FIFO_full,
1630 -- EventBufAddr_we => EventBufAddr_we,
1631 -- EventBufAddr => EventBufAddr,
1632 -- SFP0_RXN => SFP0_RXN,
1633 -- SFP0_RXP => SFP0_RXP,
1634 -- SFP1_RXN => SFP1_RXN,
1635 -- SFP1_RXP => SFP1_RXP,
1636 -- SFP0_TXN => SFP0_TXN,
1637 -- SFP0_TXP => SFP0_TXP,
1638 -- SFP1_TXN => SFP1_TXN,
1639 -- SFP1_TXP => SFP1_TXP,
1640 -- SFP_REFCLK_p => GbE_REFCLK,
1641 -- SFP_REFCLK_n => '0',
1642 -- ipb_clk => ipb_clk,
1643 -- ipb_write => ipb_master_out.ipb_write,
1644 -- ipb_strobe => ipb_master_out.ipb_strobe,
1645 -- ipb_addr => ipb_master_out.ipb_addr,
1646 -- ipb_wdata => ipb_master_out.ipb_wdata,
1647 -- ipb_rdata => SFP_data,
1648 -- ipb_ack => SFP_ack
1655 daq_reset => lsc_reset,
1656 gtx_reset => lsc_GTXreset,
1657 rstCntr => rst_cntr,
1662 SFP_ABS => SFP_ABS
(2 downto 0),
1664 SFP_down => SFP_down,
1665 inc_ddr_pa => inc_ddr_pa,
1666 evt_data_rdy => evt_data_rdy ,
1667 EventData_in => EventData,
1668 EventData_we => evt_data_we,
1669 EventData_re => evt_data_re,
1670 evt_buf_full => evt_buf_full ,
1671 buf_rqst => EventBuf_rqst,
1672 WaitMonBuf => conf
(14),
1673 MonBufOverWrite => conf
(13),
1674 MonBuf_avl => mon_buf_avl,
1675 MonBuf_empty => MonBuf_empty ,
1676 MonBufOvfl => MonBufOvfl,
1677 mon_evt_cnt => mon_evt_cnt ,
1678 WrtMonBlkDone => WrtMonBlkDone ,
1679 WrtMonEvtDone => WrtMonEvtDone ,
1680 wport_rdy => wport_rdy,
1681 wport_FIFO_full => wport_FIFO_full ,
1682 EventBufAddr_we => EventBufAddr_we ,
1683 EventBufAddr => EventBufAddr ,
1684 SFP0_RXN => SFP0_RXN,
1685 SFP0_RXP => SFP0_RXP,
1686 SFP1_RXN => SFP1_RXN,
1687 SFP1_RXP => SFP1_RXP,
1690 SFP0_TXN => SFP0_TXN,
1691 SFP0_TXP => SFP0_TXP,
1692 SFP1_TXN => SFP1_TXN,
1693 SFP1_TXP => SFP1_TXP,
1696 SFP_REFCLK_P => GbE_REFCLK,
1697 SFP_REFCLK_N => '0',
1699 ipb_write => ipb_master_out.ipb_write ,
1700 ipb_strobe => ipb_master_out.ipb_strobe ,
1701 ipb_addr => ipb_master_out.ipb_addr ,
1702 ipb_wdata => ipb_master_out.ipb_wdata ,
1703 ipb_rdata => SFP_data,
1706 lsc_reset <= lsc_start or cmd(2) or cmd2_dl(1);
1707 --lsc_GTXreset <= wr_EnSFP or not sys_lock or cmd2_dl(0);
1708 lsc_GTXreset <= lsc_start or cmd2_dl(0);
1709 process(DRPclk, sys_lock)
1711 if(sys_lock = '0')then
1713 elsif(DRPclk'event and DRPclk = '1')then
1714 if(CLK_rdy = '1')then
1725 addr => ipb_master_out.ipb_addr
(15 downto 0),
1726 data => sysmon_data ,
1727 device_temp => device_temp ,
1733 if(ipb_clk'event and ipb_clk = '1')then
1734 newIPADDRSyncRegs <= newIPADDRSyncRegs(1 downto 0) & newIPADDR;
1735 rst_ipbus <= not newIPADDRSyncRegs(2) and newIPADDR;
1743 rst_cntr => rst_cntr,
1745 inc_serr => inc_serr,
1746 inc_derr => inc_derr,
1747 inc_bcnterr => inc_bcnterr ,
1748 inc_l1ac => inc_l1ac,
1751 ttc_resync => ttc_resync,
1752 ipb_addr => ipb_master_out.ipb_addr
(15 downto 0),
1753 ipb_rdata => TTC_cntr_data
1755 i_DNA_PORT : DNA_PORT
1757 SIM_DNA_VALUE => X"00123456789abcd"
-- Specifies a sample 57-bit DNA value for simulation
1760 DOUT => DNA_out,
-- 1-bit output: DNA output data.
1761 CLK => ipb_clk,
-- 1-bit input: Clock input.
1762 DIN => '0',
-- 1-bit input: User data input pin.
1763 READ => load_DNA,
-- 1-bit input: Active high load DNA, active low read input.
1764 SHIFT => shift_DNA
(1) -- 1-bit input: Active high shift enable input.
1768 if(ipb_clk'event and ipb_clk = '1')then
1769 load_DNA <= not sys_lock;
1770 if(sys_lock = '0')then
1771 shift_DNA(0) <= '0';
1772 elsif(load_DNA = '1')then
1773 shift_DNA(0) <= '1';
1774 elsif(shift_DNA(2) = '1' and or_reduce(DNA_cntr(5 downto 1)) = '0')then
1775 shift_DNA(0) <= '0';
1777 shift_DNA(2) <= shift_DNA(0);
1778 if(shift_DNA(2) = '1')then
1779 DNA_cntr <= DNA_cntr - 1;
1780 elsif(shift_DNA(0) = '1')then
1781 DNA_cntr <= "110111";
1783 if(shift_DNA(2) = '1')then
1784 DNA <= DNA(55 downto 0) & DNA_OUT;
1790 if(ipb_clk'event and ipb_clk = '0')then
1791 shift_DNA(1) <= shift_DNA(0);