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:
21 ----------------------------------------------------------------------------------
23 use IEEE.STD_LOGIC_1164.
ALL;
24 use IEEE.STD_LOGIC_ARITH.
ALL;
25 use IEEE.STD_LOGIC_UNSIGNED.
ALL;
26 use IEEE.std_logic_misc.
all;
30 -- Uncomment the following library declaration if using
31 -- arithmetic functions with or values
32 -- use IEEE.NUMERIC_STD.ALL;
34 -- Uncomment the following library declaration if instantiating
35 -- any Xilinx primitives in this code.
37 use UNISIM.VComponents.
all;
39 use UNIMACRO.vcomponents.
all;
44 VAUXP : in (12 downto 0);
45 VAUXN : in (12 downto 0);
52 SFP_LOS : in (2 downto 0);
53 SFP_ABS : in (3 downto 0);
54 TxFault : in (3 downto 0);
55 TxDisable : out (3 downto 0);
56 -- RATE : out (3 downto 0);
80 ddr3_dq : inout (31 downto 0);
81 ddr3_addr : out (13 downto 0);
82 ddr3_ba : out (2 downto 0);
83 ddr3_dm : out (3 downto 0);
84 ddr3_dqs_p : inout (3 downto 0);
85 ddr3_dqs_n : inout (3 downto 0);
90 ddr3_cke : out (0 to 0);
91 ddr3_odt : out (0 to 0);
92 ddr3_ck_p : out (0 to 0);
93 ddr3_ck_n : out (0 to 0);
110 AMC_RXN : in (12 downto 1);
111 AMC_RXP : in (12 downto 1);
112 AMC_TXN : out (12 downto 1);
113 AMC_TXP : out (12 downto 1);
114 -- signal to/from DTC_T2
134 TTS :
IN (
3 downto 0);
158 BCN_off :
IN (
12 downto 0);
159 OC_off :
IN (
3 downto 0);
161 cal_win_high :
IN (
11 downto 0);
162 cal_win_low :
IN (
11 downto 0);
164 LocalL1A_cfg :
IN (
31 downto 0);
174 ipb_addr :
in (
31 downto 0);
175 ipb_wdata :
in (
31 downto 0);
176 ipb_rdata :
out (
31 downto 0);
178 state :
IN (
3 downto 0);
188 CalType :
OUT (
3 downto 0);
189 TTC_Brcst :
OUT (
3 downto 0);
190 localL1A_periodic :
OUT ;
193 ttc_soft_reset :
OUT ;
205 ttc_evcnt_reset :
OUT ;
206 event_number_avl :
OUT ;
207 event_number :
OUT (
59 downto 0)
211 Generic (useTCPIP : := false; AMC_useTRIG : := false; simulation : := false);
222 AllEventBuilt :
OUT ;
226 enSFP :
IN (
3 downto 0);
231 fake_length :
IN (
19 downto 0);
232 T1_version :
IN (
7 downto 0);
233 Source_ID :
IN array3x12;
234 AMC_en :
IN (
11 downto 0);
235 TTS_disable :
IN (
11 downto 0);
238 AMC_RXN :
IN (
12 downto 1);
239 AMC_RXP :
IN (
12 downto 1);
240 evt_data_re :
IN (
2 downto 0);
241 evt_buf_full :
IN (
2 downto 0);
242 ddr_pa :
IN (
9 downto 0);
248 ipb_addr :
IN (
31 downto 0);
249 ipb_wdata :
IN (
31 downto 0);
253 ttc_evcnt_reset :
IN ;
254 event_number_avl :
IN ;
255 event_number :
IN (
59 downto 0);
256 AMC_Ready :
OUT (
11 downto 0);
257 BC0_lock :
OUT (
11 downto 0);
259 AMC_TXN :
OUT (
12 downto 1);
260 AMC_TXP :
OUT (
12 downto 1);
261 AMC_status :
OUT (
31 downto 0);
262 evt_data :
OUT array3x67;
263 evt_data_we :
OUT (
2 downto 0);
264 evt_data_rdy :
OUT (
2 downto 0);
265 mon_evt_wc :
OUT (
47 downto 0);
266 mon_ctrl :
OUT (
31 downto 0);
267 buf_rqst :
OUT (
3 downto 0);
268 ipb_rdata :
OUT (
31 downto 0);
272 TrigData :
OUT array12x8;
273 TTS_coded :
OUT (
4 downto 0)
281 addr :
IN (
31 downto 0);
282 SFP_ABS :
IN (
3 downto 0);
283 SFP_LOS :
IN (
2 downto 0);
285 SFP_SDA :
INOUT (
3 downto 0);
286 rdata :
OUT (
31 downto 0);
289 SFP_SCL :
OUT (
3 downto 0)
297 SN :
IN (
8 downto 0);
300 SPI_rdata :
IN (
7 downto 0);
305 IPADDR :
OUT (
31 downto 0);
306 SPI_wdata :
OUT (
7 downto 0);
307 SPI_addr :
OUT (
7 downto 0)
321 mem_test :
in (
1 downto 0);
322 EventData :
in array3X67;
323 EventData_we :
in (
2 downto 0);
324 wport_rdy :
out (
2 downto 0);
325 WrtMonBlkDone :
OUT (
2 downto 0);
326 WrtMonEvtDone :
OUT (
2 downto 0);
327 KiloByte_toggle :
OUT (
2 downto 0);
328 EoB_toggle :
OUT (
2 downto 0);
329 EventBufAddr :
in array3x14;
330 EventBufAddr_we :
in (
2 downto 0);
331 EventFIFOfull :
out (
2 downto 0);
332 TCP_din :
in (
31 downto 0);
333 TCP_channel :
in (
1 downto 0);
335 TCP_wcount :
out (
2 downto 0);
336 TCP_dout :
out (
31 downto 0);
-- TCP data are written in unit of 32-bit words
337 TCP_raddr :
in (
28 downto 0);
-- 28-26 encoded request source 25-0 address in 64 word
338 TCP_length :
in (
10 downto 0);
-- in 64 word, actual length -
1
339 TCP_dout_valid :
out ;
347 page_addr :
in (
9 downto 0);
348 ipb_addr :
in (
31 downto 0);
349 ipb_wdata :
in (
31 downto 0);
350 ipb_rdata :
out (
31 downto 0);
352 mem_stat :
out (
63 downto 0);
353 device_temp :
in (
11 downto 0);
355 ddr3_dq :
inout (
31 downto 0);
356 ddr3_dm :
out (
3 downto 0);
357 ddr3_addr :
out (
13 downto 0);
358 ddr3_ba :
out (
2 downto 0);
359 ddr3_dqs_p :
inout (
3 downto 0);
360 ddr3_dqs_n :
inout (
3 downto 0);
365 ddr3_cke :
out (
0 to 0);
366 ddr3_odt :
out (
0 to 0);
367 ddr3_ck_p :
out (
0 to 0);
368 ddr3_ck_n :
out (
0 to 0)
372 generic(RXPOLARITY : := '
0'; TXPOLARITY : := '
0');
386 amc_en :
in (
11 downto 0);
388 IPADDR :
in (
31 downto 0);
389 MACADDR :
in (
47 downto 0);
390 ipb_out :
out ipb_wbus;
391 ipb_in :
in ipb_rbus;
392 SN :
out (
8 downto 0);
393 debug_in :
IN (
31 downto 0);
394 debug_out :
OUT (
127 downto 0)
401 SN :
IN (
8 downto 0);
402 VAUXN_IN :
IN (
12 downto 0);
403 VAUXP_IN :
IN (
12 downto 0);
404 addr :
IN (
15 downto 0);
405 data :
OUT (
31 downto 0);
406 device_temp :
OUT (
11 downto 0);
407 ALM :
OUT (
7 downto 0);
423 enSFP :
IN (
3 downto 0);
424 SFP_ABS :
IN (
2 downto 0);
425 LSC_ID :
IN (
15 downto 0);
427 evt_data_rdy :
IN (
2 downto 0);
428 EventData_in :
IN array3x67;
429 EventData_we :
IN (
2 downto 0);
430 buf_rqst :
IN (
3 downto 0);
432 WrtMonBlkDone :
IN (
2 downto 0);
433 WrtMonEvtDone :
IN (
2 downto 0);
434 wport_rdy :
IN (
2 downto 0);
435 wport_FIFO_full :
IN (
2 downto 0);
447 ipb_addr :
IN (
31 downto 0);
448 ipb_wdata :
IN (
31 downto 0);
449 SFP_down :
OUT (
2 downto 0);
450 EventData_re :
OUT (
2 downto 0);
451 evt_buf_full :
OUT (
2 downto 0);
452 MonBufOverWrite :
IN ;
456 mon_evt_cnt :
OUT (
31 downto 0);
457 EventBufAddr_we :
OUT (
2 downto 0);
458 EventBufAddr :
OUT array3x14;
465 ipb_rdata :
OUT (
31 downto 0);
482 state :
IN (
3 downto 0);
484 ipb_addr :
IN (
15 downto 0);
485 ipb_rdata :
OUT (
31 downto 0)
488 constant ipbus_ver_addr : (15 downto 0) := x"0000";
489 constant ipbus_sfp_addr: (15 downto 0) := x"0002";
490 constant CDRclk_pol : := '0';
491 constant CDRdata_pol : := '1';
492 constant TTCclk_pol : := '1';
493 constant TTCdata_pol : := '1';
494 constant Coarse_Delay: (3 downto 0) := x"0";
495 signal rst_ipbus : := '0';
496 signal LDC_UsrClk : := '0';
497 signal wr_AMC_en : := '0';
498 signal wr_EnSFP : := '0';
499 signal fake_length : (19 downto 0) := x"00400";
500 signal AMC_en : (11 downto 0) := (others =>'0');
501 signal TTS_disable : (11 downto 0) := (others =>'0');
502 signal AMC_Ready : (11 downto 0) := (others =>'0');
503 signal AMC_status : (31 downto 0) := (others =>'0');
504 signal AMC_DATA : (31 downto 0) := (others =>'0');
505 signal AMC_ack : := '0';
506 signal L1Aovfl_warning : := '0';
507 --signal TRIGDATA : (7 downto 0) := (
others =>'0');
508 signal TTS_coded : (4 downto 0) := (others =>'0');
509 --signal AMC_trig : := '0';
510 signal pattern : (3 downto 0) := (others =>'0');
511 --signal Trig_mask : (7 downto 0) := (
others =>'0');
512 signal SPI_SCK_buf : := '0';
513 signal CLK_rdy : := '0';
514 signal I2C_data : (31 downto 0) := (others =>'0');
515 signal TTCclk_in : := '0';
516 signal TTC_Clk : := '0';
517 signal TTC_strobe : := '0';
518 signal BcntErr_cnt : (7 downto 0) := (others =>'0');
519 signal SinErr_cnt : (7 downto 0) := (others =>'0');
520 signal DbErr_cnt : (7 downto 0) := (others =>'0');
521 signal L1_reg : (15 downto 0) := (others =>'0');
522 signal Bcnt_reg : (11 downto 0) := (others =>'0');
523 signal OC_reg : (31 downto 0) := (others =>'0');
526 signal S2V_cntr : (5 downto 0) := (others => '0');
527 signal S2V_sr : (3 downto 0) := (others => '0');
528 signal ddr_rdata : (7 downto 0) := (others =>'0');
529 signal ipb_clk_dcm : := '0';
530 signal ipb_clk : := '0';
531 signal clk125_dcm : := '0';
532 signal clk125 : := '0';
533 signal DRPclk_dcm : := '0';
534 signal DRPclk : := '0';
535 signal sysclk_dcm : := '0';
536 signal sysclk : := '0';
537 signal clkfb : := '0';
538 signal refclk_dcm : := '0';
539 signal refclk : := '0';
540 signal mem_clk_dcm : := '0';
541 signal mem_clk : := '0';
542 signal sysclk_inp : := '0';
543 signal sysclk_in : := '0';
544 --signal clk125 : := '0';
545 signal sys_lock : := '0';
546 signal sys_lock_n : := '0';
547 signal ldc_reset : := '0';
548 signal ldc_GTXreset : := '0';
549 signal lsc_start : := '0';
550 signal lsc_reset : := '0';
551 signal lsc_GTXreset : := '0';
552 signal amc_reset : := '0';
553 signal amc_GTXreset : := '0';
554 signal DB_cmd : := '0';
555 signal conf7_q : := '0';
556 signal conf7_fall : := '0';
558 signal LSC_LinkDown : := '0';
559 signal mem_rst : := '0';
560 signal mem_test : (1 downto 0) := (others =>'0');
561 signal mem_stat : (63 downto 0) := (others =>'0');
562 signal mem_ack : := '0';
563 signal mem_data : (31 downto 0) := (others =>'0');
564 signal ttc_data : (31 downto 0) := (others =>'0');
565 signal EventData : array3X67 := (others => (others => '0'));
566 signal wport_rdy : (2 downto 0) := (others =>'0');
567 signal EventBufAddr : array3x14 := (others => (others => '0'));
568 signal EventBufAddr_we : (2 downto 0) := (others =>'0');
569 signal evt_buf_full : (2 downto 0) := (others =>'0');
570 signal wport_FIFO_full : (2 downto 0) := (others =>'0');
571 --signal TCP_din : (31 downto 0) := (
others =>'0');
572 --signal TCP_channel : (1 downto 0) := (
others =>'0');
573 --signal TCP_wrqst : := '0';
574 --signal TCP_re : := '0';
575 --signal TCP_dout : (31 downto 0) := (
others =>'0');
576 --signal TCP_raddr : (23 downto 0) := (
others =>'0');
577 --signal TCP_length : (11 downto 0) := (
others =>'0');
578 --signal TCP_dout_valid : := '0';
579 --signal TCP_rrqst : := '0';
580 --signal TCP_rack : := '0';
581 --signal TCP_lastword : := '0';
582 signal MonBufOvfl : := '0';
583 signal MonBuf_empty : := '0';
584 --signal inc_mon_cntr : := '0';
585 signal mon_evt_wc : (47 downto 0) := (others =>'0');
586 signal mon_evt_cnt : (31 downto 0) := (others =>'0');
587 signal mon_ctrl : (31 downto 0) := (others =>'0');
588 --signal TCPbuf_avl : := '0';
589 signal mon_buf_avl : := '0';
590 signal EventBufAddrAvl : := '0';
591 signal EventBufAddrRe : := '0';
592 signal mon_wp : (31 downto 0) := (others =>'0');
593 --signal TCP_releaseAck : (2 downto 0) := (
others =>'0');
594 --signal TCP_releaseRqst : (2 downto 0) := (
others =>'0');
595 --signal TCP_releaseAddr : array3X13 := (others => (others => '0'));
596 signal EventBuf_rqst : (3 downto 0) := (others =>'0');
597 signal rst_cntr : := '0';
598 signal rst_ddr_pa : := '0';
599 signal inc_ddr_pa : := '0';
600 signal Source_ID : array3x12 := (others => (others => '0'));
601 signal ddr_pa : (9 downto 0) := (others =>'0');
602 signal CDRclk : := '0';
603 signal TTS_clk : := '0';
605 signal T3_trigger : := '0';
606 signal BC0_delay : (4 downto 0) := "11000";
607 signal bcnt : (3 downto 0) := x"0";
608 signal LocalL1A_cfg : (31 downto 0) := (others =>'0');
609 signal BCN_off : (12 downto 0) := (others =>'0');
610 signal OC_off : (3 downto 0) := (others =>'0');
611 signal en_cal_win : := '0';
612 signal CalibCtrl : (31 downto 0) := x"0d800d80";
613 signal cal_win_high : (11 downto 0) := (others =>'0');
614 signal cal_win_low : (11 downto 0) := (others =>'0');
615 signal CalType : (3 downto 0) := (others =>'0');
616 signal TTC_Brcst : (3 downto 0) := (others =>'0');
617 signal local_TTCcmd : := '0';
618 signal en_brcst : := '0';
619 signal ttc_start : := '0';
620 signal ttc_stop : := '0';
621 signal ttc_soft_reset : := '0';
622 signal ttc_soft_resetp : := '0';
623 signal ttc_ready : := '0';
624 signal ttc_serr : := '0';
625 signal ttc_derr : := '0';
626 signal ttc_bcnt_err : := '0';
627 signal ttc_evcnt_reset : := '0';
628 signal inc_rate_ofw : := '0';
629 signal rate_ofw : := '0';
630 signal rate_ofwp : := '0';
631 signal rate_ofw_q : := '0';
632 signal sync_lost : := '0';
633 signal oc_cntr : (3 downto 0) := (others =>'0');
634 signal ttc_resync : := '0';
635 signal AllEventBuilt : := '0';
636 signal resync_done : := '0';
637 signal dcc_quiet : := '0';
638 signal inc_oc : := '0';
639 signal inc_L1ac : := '0';
640 signal inc_bcnterr : := '0';
641 signal inc_serr : := '0';
642 signal inc_derr : := '0';
643 signal evn_fifo_full : := '0';
644 signal event_number_avl : := '0';
645 signal state : (3 downto 0) := (others =>'0');
646 signal TTS_wait : (20 downto 0) := (others =>'0');
647 signal event_number : (59 downto 0) := (others =>'0');
648 signal status_l : (22 downto 0) := (others =>'0');
649 signal SFP_down_l : (2 downto 0) := (others =>'0');
650 signal SFP_status_l : (11 downto 0) := (others =>'0');
651 signal AMC_status_l : (31 downto 0) := (others =>'0');
652 signal TTC_cntr_data : (31 downto 0) := (others => '0');
653 signal got_SN : := '0';
654 signal ipb_strobe_q : := '0';
655 signal SFP_clk : := '0';
656 signal AMC_clk : := '0';
657 signal AMC_clk_in : := '0';
658 signal SV_Cntr : (7 downto 0) := (others => '0');
659 signal sysclk_div : (7 downto 0) := (others => '0');
660 signal SFP_UsrClk : := '0';
661 signal SFP_TxOutClk : := '0';
662 signal I2C_debug_out : (15 downto 0) := (others =>'0');
663 signal SFPOSC_rdy : := '0';
664 signal reset : := '0';
665 signal DAQ_reset : := '0';
666 signal AMCOSC_rdy : := '0';
667 --signal cs_clk_in : := '0';
668 --signal cs_clk : := '0';
669 signal TTC_debug : (63 downto 0) := (others =>'0');
670 signal TxDisable_i : (3 downto 0) := (others => '0');
671 signal DAQfifo_re : := '0';
672 signal DAQfifoAlmostEmpty : := '0';
673 signal DAQfifoEmpty : := '0';
674 signal DAQfifo_do : (63 downto 0) := (others =>'0');
675 signal DAQ_debug_in : (63 downto 0) := (others =>'0');
676 signal LDC_debug_out : (63 downto 0) := (others =>'0');
677 signal LSC_debug_out : (63 downto 0) := (others =>'0');
678 signal ddr_debug_in : (31 downto 0) := (others =>'0');
679 signal ddr_debug_out : (127 downto 0) := (others =>'0');
680 signal GbE_REFCLK : := '0';
681 signal S6Link_debug_in : (31 downto 0) := (others =>'0');
682 signal S6Link_debug_out : (127 downto 0) := (others =>'0');
683 signal GbE_debug_in : (31 downto 0) := (others =>'0');
684 signal GbE_debug_out : (127 downto 0) := (others =>'0');
685 signal AMC_debug_in : (255 downto 0) := (others =>'0');
686 signal AMC_debug_out : (255 downto 0) := (others =>'0');
687 signal SFP0_debug_in : (31 downto 0) := (others =>'0');
688 signal SFP0_debug_out : (127 downto 0) := (others =>'0');
689 signal SFP1_debug_in : (31 downto 0) := (others =>'0');
690 signal SFP1_debug_out : (127 downto 0) := (others =>'0');
691 signal ipb_master_out : ipb_wbus;
692 signal ipb_master_in : ipb_rbus;
693 signal SN : (8 downto 0) := (others =>'0');
694 signal MACADDR : (47 downto 0) := (others =>'0');
695 signal ipaddr : (31 downto 0) := (others =>'0');
696 signal en_RARP : := '0';
697 --signal SPI_IP : (31 downto 0) := (
others =>'0');
698 signal status : (31 downto 0) := (others =>'0');
699 signal cmd : (31 downto 0) := (others =>'0');
700 signal cmd0_dl : (1 downto 0) := (others =>'0');
701 signal cmd2_dl : (1 downto 0) := (others =>'0');
702 signal conf : (15 downto 0) := (others =>'0');
703 signal LSC_ID : (15 downto 0) := x"1234";
705 signal inc_HTRCRC_err : := '0';
706 signal sysmon_data : (31 downto 0) := (others => '0');
707 signal device_temp : (11 downto 0) := (others =>'0');
708 signal ALM : (7 downto 0) := (others =>'0');
709 signal evt_data_rdy : (2 downto 0) := (others => '0');
710 signal evt_data_re : (2 downto 0) := (others => '0');
711 signal evt_data_we : (2 downto 0) := (others => '0');
712 --signal event_size : array3x13;
713 signal SFP_data : (31 downto 0) := (others =>'0');
714 signal SFP_ack : := '0';
715 --signal TCP_data : (31 downto 0) := (
others =>'0');
716 --signal TCP_ack : := '0';
717 signal S2V_SyncRegs : (2 downto 0) := (others => '0');
718 signal resetSyncRegs : (2 downto 0) := (others => '0');
719 signal sysclk_div7SyncRegs : (3 downto 0) := (others => '0');
720 signal resetCntr_SyncRegs : (2 downto 0) := (others =>'0');
721 signal newIPADDR : := '0';
722 signal newIPADDRSyncRegs : (2 downto 0) := (others =>'0');
723 signal DNA_out : := '0';
724 signal load_DNA : := '0';
725 signal shift_DNA : (2 downto 0) := (others =>'0');
726 signal DNA_cntr : (5 downto 0) := (others =>'0');
727 signal DNA : (56 downto 0) := (others =>'0');
728 signal Dis_pd : := '0';
729 signal enSFP : (3 downto 0) := (others =>'0');
730 signal SFP_down : (2 downto 0) := (others =>'0');
731 --signal evt_buf_space : (2 downto 0) := (
others =>'0');
732 signal WrtMonBlkDone : (2 downto 0) := (others =>'0');
733 signal WrtMonEvtDone : (2 downto 0) := (others =>'0');
736 CONTROL0 :
INOUT (
35 DOWNTO 0);
737 CONTROL1 :
INOUT (
35 DOWNTO 0));
742 CONTROL :
INOUT (
35 DOWNTO 0);
744 DATA :
IN (
15 DOWNTO 0);
745 TRIG0 :
IN (
7 DOWNTO 0));
748 signal CONTROL0 : (35 downto 0) := (others => '0');
749 signal CONTROL1 : (35 downto 0) := (others => '0');
750 signal TRIG0 : (7 downto 0) := (others => '0');
751 signal TRIG1 : (7 downto 0) := (others => '0');
752 signal DATA0 : (15 downto 0) := (others => '0');
753 signal DATA1 : (15 downto 0) := (others => '0');
757 -- CONTROL0 => CONTROL0,
758 -- CONTROL1 => CONTROL1);
761 -- CONTROL => CONTROL0,
765 --DATA0(14) <= evt_buf_full(
0);
766 --DATA0(13) <= evt_data_re(
0);
767 --DATA0(12) <= evt_data_rdy(
0);
768 --DATA0(11 downto 10) <= EventBufAddr(
0)(
5 downto 4);
769 --DATA0(9 downto 8) <= EventData(
0)(
65 downto 64);
770 --DATA0(7) <= wport_rdy(
0);
771 --DATA0(6) <= wport_FIFO_full(
0);
772 --DATA0(5) <= evt_data_we(
0);
773 --DATA0(4) <= EventBufAddr_we(
0);
774 --DATA0(3 downto 0) <= mem_stat(
3 downto 0);
775 --TRIG0(7 downto 4) <= (
others => '0');
776 --TRIG0(3) <= wport_rdy(
0);
777 --TRIG0(2) <= EventBufAddr_we(
0);
778 --TRIG0(1) <= evt_data_re(
0);
779 --TRIG0(0) <= evt_data_rdy(
0);
783 -- CONTROL => CONTROL1,
784 -- CLK => mem_stat(19),
787 --DATA1(14 downto 0) <= mem_stat(
18 downto 4);
788 --TRIG1(7 downto 2) <= (
others => '0');
789 --TRIG1(1 downto 0) <= mem_stat(
18 downto 17);
790 i_TTS_if:
TTS_if PORT MAP(
799 TxDisable <= TxDisable_i;
804 addr => ipb_master_out.ipb_addr,
814 i_SPI_SCK_buf: bufh
port map(i => SPI_SCK, o => SPI_SCK_buf
);
815 i_SPI_if:
SPI_if PORT MAP(
825 newIPADDR => newIPADDR,
827 SPI_rdata =>
(others => '0'
),
831 i_ttc_if:
ttc_if PORT MAP(
837 DB_cmd_out => DB_cmd,
839 TTC_strobe => TTC_strobe,
840 sys_lock => sys_lock,
842 local_TTCcmd => local_TTCcmd ,
843 single_TTCcmd => cmd
(8),
847 DIV_nRST => DIV_nRST,
848 CDRclk_p => CDRclk_p,
849 CDRclk_n => CDRclk_n,
850 CDRclk_out => CDRclk,
851 CDRdata_p => CDRdata_p,
852 CDRdata_n => CDRdata_n,
853 TTCdata_p => TTCdata_p,
854 TTCdata_n => TTCdata_n,
859 en_cal_win => en_cal_win,
860 cal_win_high => cal_win_high ,
861 cal_win_low => cal_win_low ,
863 TTC_Brcst => TTC_Brcst,
864 ovfl_warning => L1Aovfl_warning ,
866 ipb_write => ipb_master_out.ipb_write ,
867 ipb_strobe => ipb_master_out.ipb_strobe ,
868 ipb_addr => ipb_master_out.ipb_addr ,
869 ipb_wdata => ipb_master_out.ipb_wdata ,
870 ipb_rdata => ttc_data,
871 en_localL1A => conf
(2),
872 LocalL1A_cfg => LocalL1A_cfg ,
873 localL1A_s => cmd
(26),
874 localL1A_r => cmd
(10),
875 localL1A_periodic => status
(10),
878 T3_trigger => T3_trigger,
879 en_brcst => en_brcst,
880 ttc_start => ttc_start,
881 ttc_stop => ttc_stop,
882 ttc_soft_reset => ttc_soft_reset ,
883 ttc_ready => ttc_ready,
884 ttc_serr => ttc_serr,
885 ttc_derr => ttc_derr,
886 ttc_bcnt_err => ttc_bcnt_err ,
887 rate_OFW => rate_OFW,
888 sync_lost => sync_lost,
890 inc_l1ac => inc_l1ac,
891 inc_bcnterr => inc_bcnterr ,
892 inc_serr => inc_serr,
893 inc_derr => inc_derr,
895 evn_fifo_full => evn_fifo_full ,
896 ttc_evcnt_reset => ttc_evcnt_reset ,
897 event_number_avl => event_number_avl ,
898 event_number => event_number
900 local_TTCcmd <= conf(
5)
or conf(
8);
901 CalibCtrl(31) <= en_cal_win;
902 CalibCtrl(30 downto 28) <= "000";
903 CalibCtrl(27 downto 16) <= cal_win_high;
904 CalibCtrl(15 downto 12) <= CalType;
905 CalibCtrl(11 downto 0) <= cal_win_low;
906 cal_win_high(11 downto 6) <= "110110";
907 cal_win_low(11 downto 6) <= "110110";
908 i_S2V: IBUFDS
generic map(DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25") port map(i => S2V_p, ib => S2V_n, o => S2V
);
911 if(CDRclk'event and CDRclk = '1')then
912 if(conf(15) = '0')then
919 i_GbE_REFCLK: IBUFDS_GTE2
925 I => GbE_REFCLK_P,
-- Connect to package pin AB6
926 IB => GbE_REFCLK_N
-- Connect to package pin AB5
928 i_TTCclk_in : IBUFGDS
generic map (DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25")
930 O => TTCclk_in,
-- Clock buffer output
931 I => TTCclk_p,
-- Diff_p clock buffer input
932 IB => TTCclk_n
-- Diff_n clock buffer input
934 i_TTC_CLK_buf: bufg
port map(i => TTCclk_in, o => TTC_Clk
);
935 i_sysclk_in_buf: bufh
port map(i => GbE_REFCLK, o => sysclk_in
);
936 i_PLL_sysclk : PLLE2_BASE
938 BANDWIDTH =>
"OPTIMIZED",
-- OPTIMIZED, HIGH, LOW
939 CLKFBOUT_MULT =>
8,
-- Multiply value for all CLKOUT, (2-64)
940 CLKFBOUT_PHASE =>
0.0,
-- Phase offset in degrees of CLKFB, (-360.000-360.000).
941 CLKIN1_PERIOD =>
8.0,
-- Input clock period in ns to ps resolution (i.e. 33.
333 is 30 MHz).
942 -- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
944 CLKOUT1_DIVIDE =>
32,
945 CLKOUT2_DIVIDE =>
20,
946 DIVCLK_DIVIDE =>
1,
-- Master division value, (1-56)
947 REF_JITTER1 =>
0.0,
-- Reference input jitter in UI, (0.000-0.
999).
948 STARTUP_WAIT =>
"FALSE" -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
951 -- Clock Outputs: 1-bit (each) output: User configurable clock outputs
952 CLKOUT0 => sysclk_dcm,
953 CLKOUT1 => ipb_clk_dcm ,
954 CLKOUT2 => DRPclk_dcm,
955 -- Feedback Clocks: 1-bit (each) output: Clock feedback ports
956 CLKFBOUT => clk125_dcm,
-- 1-bit output: Feedback clock
957 -- Status Port: 1-bit (each) output: PLL status ports
958 LOCKED => sys_lock,
-- 1-bit output: LOCK
959 -- Clock Input: 1-bit (each) input: Clock input
960 CLKIN1 => sysclk_in,
-- 1-bit input: Input clock
961 -- Control Ports: 1-bit (each) input: PLL control ports
962 PWRDWN => '0',
-- 1-bit input: Power-down
963 RST => '0',
-- 1-bit input: Reset
964 -- Feedback Clocks: 1-bit (each) input: Clock feedback ports
965 CLKFBIN => clk125
-- 1-bit input: Feedback clock
967 i_clk125_buf: bufg
port map(i => clk125_dcm, o => clk125
);
968 i_ipb_clk_buf: bufg
port map(i => ipb_clk_dcm, o => ipb_clk
);
969 i_DRPclk_buf: bufg
port map(i => DRPclk_dcm, o => DRPclk
);
970 i_sysclk_buf: bufg
port map(i => sysclk_dcm, o => sysclk
);
971 --i_refclk_buf: bufg port map(i => refclk_dcm, o => refclk);
972 reset <= not sys_lock or cmd(0);
974 process(sysclk,reset)
977 resetSyncRegs <= (others => '1');
978 elsif(sysclk'event and sysclk = '1')then
979 resetSyncRegs <= resetSyncRegs(1 downto 0) & '0';
982 i_ddr_if:
ddr_if PORT MAP(
983 mem_clk_p => sys_clk_p,
984 mem_clk_n => sys_clk_n,
990 resetsys => resetSyncRegs
(2),
992 mem_test => mem_test,
993 EventData => EventData,
994 EventData_we => evt_data_we,
995 wport_rdy => wport_rdy,
996 WrtMonBlkDone => WrtMonBlkDone ,
997 WrtMonEvtDone => WrtMonEvtDone ,
998 KiloByte_toggle =>
open,
1000 EventBufAddr => EventBufAddr ,
1001 EventBufAddr_we => EventBufAddr_we ,
1002 EventFIFOfull => wport_FIFO_full ,
1003 TCP_din =>
(others => '0'
),
1004 TCP_channel =>
(others => '0'
),
1008 TCP_raddr =>
(others => '0'
),
1009 TCP_length =>
(others => '0'
),
1010 TCP_dout_valid =>
open,
1013 TCP_lastword =>
open,
1014 page_addr => ddr_pa,
1016 ipb_write => ipb_master_out.ipb_write ,
1017 ipb_strobe => ipb_master_out.ipb_strobe ,
1018 ipb_addr => ipb_master_out.ipb_addr ,
1019 ipb_wdata => ipb_master_out.ipb_wdata ,
1020 ipb_rdata => mem_data,
1022 mem_stat => mem_stat,
1023 device_temp => device_temp ,
1026 ddr3_addr => ddr3_addr,
1028 ddr3_dqs_p => ddr3_dqs_p,
1029 ddr3_dqs_n => ddr3_dqs_n,
1030 ddr3_ras_n => ddr3_ras_n,
1031 ddr3_cas_n => ddr3_cas_n,
1032 ddr3_we_n => ddr3_we_n,
1033 ddr3_reset_n => ddr3_reset_n ,
1034 ddr3_cke => ddr3_cke,
1035 ddr3_odt => ddr3_odt,
1036 ddr3_ck_p => ddr3_ck_p,
1037 ddr3_ck_n => ddr3_ck_n
1039 --mem_rst <= not sys_lock or not CLK_rdy or cmd(5)
or cmd(
0);
1040 mem_rst <= not sys_lock or not CLK_rdy or cmd(5);
1041 MACADDR <= x"080030f30" & '0' & not SN(8) & '0' & not SN(7 downto 6) & '1' & SN(5 downto 0);
1047 GTX_RESET => sys_lock_n,
1048 MACADDR => MACADDR,
-- new mac range 08-00-30-F3-00-00 to 08-00-30-F3-00-7F
1051 GbE_REFCLK => GbE_REFCLK,
1052 S6LINK_RXN => S6LINK_RXN,
1053 S6LINK_RXP => S6LINK_RXP,
1054 S6LINK_TXN => S6LINK_TXN,
1055 S6LINK_TXP => S6LINK_TXP,
1056 wr_AMC_en => wr_AMC_en,
1058 ipb_out => ipb_master_out,
1059 ipb_in => ipb_master_in,
1062 debug_in =>
(others => '0'
),
1065 status(0) <= or_reduce(SFP_down);
1066 status(1) <= MonBufOvfl;
1067 status(2) <= mon_evt_cnt(10);
1068 status(3) <= MonBuf_empty;
1069 status(4) <= mem_stat(0);
-- monitor input FIFO overflow
1070 status(5) <= not ttc_ready;
1071 status(6) <= ttc_bcnt_err;
1072 status(7) <= ttc_serr;
1073 status(8) <= ttc_derr;
1074 status(9) <= sync_lost;
1075 status(13) <= L1Aovfl_warning;
1076 status(15) <= mem_stat(63);
1079 EnSFP(3) <= not conf(1);
1080 mem_test <= conf(6) & conf(4);
1081 --en_brcst <= conf(5);
1085 Q => cmd0_dl
(0),
-- SRL data output
1086 A0 => '1',
-- Select[0] input
1087 A1 => '1',
-- Select[1] input
1088 A2 => '1',
-- Select[2] input
1089 A3 => '0',
-- Select[3] input
1090 CE => '1',
-- Clock enable input
1091 CLK => ipb_clk,
-- Clock input
1092 D => cmd
(0) -- SRL data input
1096 Q => cmd0_dl
(1),
-- SRL data output
1097 A0 => '1',
-- Select[0] input
1098 A1 => '1',
-- Select[1] input
1099 A2 => '1',
-- Select[2] input
1100 A3 => '0',
-- Select[3] input
1101 CE => '1',
-- Clock enable input
1102 CLK => ipb_clk,
-- Clock input
1103 D => cmd0_dl
(0) -- SRL data input
1107 Q => cmd2_dl
(0),
-- SRL data output
1108 A0 => '1',
-- Select[0] input
1109 A1 => '1',
-- Select[1] input
1110 A2 => '1',
-- Select[2] input
1111 A3 => '0',
-- Select[3] input
1112 CE => '1',
-- Clock enable input
1113 CLK => ipb_clk,
-- Clock input
1114 D => cmd
(2) -- SRL data input
1118 Q => cmd2_dl
(1),
-- SRL data output
1119 A0 => '1',
-- Select[0] input
1120 A1 => '1',
-- Select[1] input
1121 A2 => '1',
-- Select[2] input
1122 A3 => '0',
-- Select[3] input
1123 CE => '1',
-- Clock enable input
1124 CLK => ipb_clk,
-- Clock input
1125 D => cmd2_dl
(0) -- SRL data input
1129 if(ipb_clk'event and ipb_clk = '1')then
1130 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
1131 cmd <= ipb_master_out.ipb_wdata;
1133 cmd <= (others => '0');
1136 conf7_fall <= conf7_q and not conf(7);
1137 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
1138 conf <= ipb_master_out.ipb_wdata(15 downto 0);
1140 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
1141 Dis_pd <= ipb_master_out.ipb_wdata(15);
1142 EnSFP(2 downto 0) <= ipb_master_out.ipb_wdata(14 downto 12);
1143 AMC_en <= ipb_master_out.ipb_wdata(11 downto 0);
1144 if(AMC_en = ipb_master_out.ipb_wdata(11 downto 0))then
1149 if(EnSFP(2 downto 0) = ipb_master_out.ipb_wdata(14 downto 12))then
1158 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
1159 TTS_disable <= ipb_master_out.ipb_wdata(11 downto 0);
1161 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
1162 en_cal_win <= ipb_master_out.ipb_wdata(31);
1163 cal_win_high(5 downto 0) <= ipb_master_out.ipb_wdata(21 downto 16);
1164 cal_win_low(5 downto 0) <= ipb_master_out.ipb_wdata(5 downto 0);
1166 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
1167 Source_ID(0)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1169 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
1170 Source_ID(1)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1172 if(ipb_master_out.ipb_addr(27) = '0' and ipb_master_out.ipb_addr(15 downto 0) = SRC_id2_addr and ipb_master_out.ipb_write = '1' and ipb_master_out.ipb_strobe = '1')then
1173 Source_ID(2)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1175 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
1176 LocalL1A_cfg <= ipb_master_out.ipb_wdata;
1178 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
1179 LSC_ID(15 downto 2) <= ipb_master_out.ipb_wdata(31 downto 18);
1180 TxDisable_i <= ipb_master_out.ipb_wdata(15 downto 12);
1182 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
1183 OC_OFF <= ipb_master_out.ipb_wdata(19 downto 16);
1184 BCN_OFF <= ipb_master_out.ipb_wdata(12 downto 0);
1186 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
1187 fake_length <= ipb_master_out.ipb_wdata(19 downto 0);
1189 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
1190 pattern <= ipb_master_out.ipb_wdata(11 downto 8);
1192 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
1193 ddr_pa <= (others => '0');
1194 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
1196 if(MonBuf_empty = '0')then
1197 ddr_pa <= ddr_pa + 1;
1200 ddr_pa <= ipb_master_out.ipb_wdata(9 downto 0);
1203 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
1208 if(DB_cmd = '1')then
1209 status_l <= status(22 downto 0);
1210 SFP_down_l <= SFP_down;
1211 SFP_status_l <= TxFault & (TTC_LOL or TTC_LOL) & SFP_LOS & SFP_ABS;
1212 AMC_status_l <= AMC_status;
1216 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;
1217 process(ipb_master_out.ipb_addr)
1219 if(ipb_master_out.ipb_addr(27) = '1' or ipb_master_out.ipb_addr(17) = '1')then
1220 ipb_master_in.ipb_rdata <= mem_data;
1221 elsif(ipb_master_out.ipb_addr(14 downto 5) = CSR_addr(14 downto 5))then
1222 if(ipb_master_out.ipb_addr(15) = '0')then
1223 case ipb_master_out.ipb_addr(4 downto 0) is
1224 when "00000" => ipb_master_in.ipb_rdata <= not SN(7 downto 0) & not SN(8) & status(22 downto 0);
1225 when "00001" => ipb_master_in.ipb_rdata <= K7version & conf;
1226 when "00010" => ipb_master_in.ipb_rdata <= mon_ctrl;
1227 when "00011" => ipb_master_in.ipb_rdata <= '0' & SFP_down & AMC_Ready & Dis_pd & EnSFP(2 downto 0) & AMC_en;
1228 when "00100" => ipb_master_in.ipb_rdata <= LSC_ID & TxDisable_i & TxFault & (TTC_LOL or TTC_LOL) & SFP_LOS & SFP_ABS;
1229 when "00101" => ipb_master_in.ipb_rdata <= AMC_status;
1230 when "00111" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(0);
1231 when "01000" => ipb_master_in.ipb_rdata <= x"000" & OC_OFF & "000" & BCN_OFF;
1232 when "01001" => ipb_master_in.ipb_rdata <= CalibCtrl;
1233 when "01010" => ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1234 when "01011" => ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1235 when "01100" => ipb_master_in.ipb_rdata <= x"00000" & "00" & ddr_pa;
1236 when "01101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(15 downto 0) & '0';
1237 when "01110" => ipb_master_in.ipb_rdata <= mon_evt_cnt;
1238 when "01111" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(31 downto 16) & '0';
1239 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;
1240 when "10001" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(1);
1241 when "10010" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(2);
1242 when "11000" => ipb_master_in.ipb_rdata <= x"000" & fake_length;
1243 when "11001" => ipb_master_in.ipb_rdata <= x"00" & "000" & TTS_coded & state & pattern & x"00";
1244 when "11010" => ipb_master_in.ipb_rdata <= x"00000" & TTS_disable;
1245 when "11100" => ipb_master_in.ipb_rdata <= LocalL1A_cfg;
1246 when "11101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(47 downto 32) & '0';
1247 when "11110" => ipb_master_in.ipb_rdata <= DNA(31 downto 0);
1248 when "11111" => ipb_master_in.ipb_rdata <= "0000000" & DNA(56 downto 32);
1249 when others => ipb_master_in.ipb_rdata <= (others => '0');
1252 case ipb_master_out.ipb_addr(4 downto 0) is
1253 when "00000" => ipb_master_in.ipb_rdata <= not SN(7 downto 0) & not SN(8) & status_l;
1254 when "00001" => ipb_master_in.ipb_rdata <= K7version & conf;
1255 when "00010" => ipb_master_in.ipb_rdata <= mon_ctrl;
1256 when "00011" => ipb_master_in.ipb_rdata <= '0' & SFP_down_l & AMC_Ready & Dis_pd & EnSFP(2 downto 0) & AMC_en;
1257 when "00100" => ipb_master_in.ipb_rdata <= LSC_ID & TxDisable_i & SFP_status_l;
1258 when "00101" => ipb_master_in.ipb_rdata <= AMC_status_l;
1259 when "00111" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(0);
1260 when "01000" => ipb_master_in.ipb_rdata <= x"000" & OC_OFF & "000" & BCN_OFF;
1261 when "01001" => ipb_master_in.ipb_rdata <= CalibCtrl;
1262 when "01010" => ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1263 when "01011" => ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1264 when "01100" => ipb_master_in.ipb_rdata <= x"00000" & "00" & ddr_pa;
1265 when "01101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(15 downto 0) & '0';
1266 when "01110" => ipb_master_in.ipb_rdata <= mon_evt_cnt;
1267 when "01111" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(31 downto 16) & '0';
1268 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;
1269 when "10001" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(1);
1270 when "10010" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(2);
1271 when "11000" => ipb_master_in.ipb_rdata <= x"000" & fake_length;
1272 when "11001" => ipb_master_in.ipb_rdata <= x"00" & "000" & TTS_coded & state & pattern & x"00";
1273 when "11010" => ipb_master_in.ipb_rdata <= x"00000" & TTS_disable;
1274 when "11100" => ipb_master_in.ipb_rdata <= LocalL1A_cfg;
1275 when "11101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(47 downto 32) & '0';
1276 when "11110" => ipb_master_in.ipb_rdata <= DNA(31 downto 0);
1277 when "11111" => ipb_master_in.ipb_rdata <= "0000000" & DNA(56 downto 32);
1278 when others => ipb_master_in.ipb_rdata <= (others => '0');
1282 ipb_master_in.ipb_rdata <= AMC_data or TTC_cntr_data or I2C_data or sysmon_data or SFP_data or ttc_data;
1285 rst_cntr <= cmd(1) or cmd(0);
1286 ttc_resync <= ttc_soft_reset;
1287 process(sysClk,reset)
1290 TTS_wait <= (others => '0');
1291 elsif(sysClk'event and sysClk = '1')then
1292 if(ttc_resync = '1')then
1293 TTS_wait <= (others => '0');
1294 elsif(TTS_wait(20) = '0' and sync_lost = '0' and AllEventBuilt = '1')then
1295 TTS_wait <= TTS_wait + 1;
1299 process(sysClk,reset)
1303 elsif(sysClk'event and sysClk = '1')then
1304 if(run = '0' and conf(12) = '1')then
1306 elsif(run = '0')then
1307 state <= "0100";
-- changed upon request starting version 0x3023
1308 elsif(ttc_resync = '1')then
1312 when "1000" => -- Ready
1313 if(TTS_coded(4) = '1')then
1315 elsif(TTS_coded(3) = '1')then
1317 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1319 elsif(L1Aovfl_warning = '1' or evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1' or TTS_coded(0) = '1')then
1322 when "0001" => -- OFW
1323 if(TTS_coded(4) = '1')then
1325 elsif(TTS_coded(3) = '1')then
1327 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1329 elsif(evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1')then
1331 elsif(L1Aovfl_warning = '0' and rate_OFWp = '0' and TTS_coded(0) = '0')then
1334 when "0100" => -- Busy
1335 if(TTS_wait(20) = '0')then
1336 elsif(TTS_coded(4) = '1')then
1338 elsif(TTS_coded(3) = '1')then
1340 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1342 elsif(evn_fifo_full = '0' and rate_OFWp = '0' and TTS_coded(1) = '0')then
1345 when others => null;
-- x"0" or x"f" disconnected, x"2" OOS, x"c" error
1350 ipb_master_in.ipb_err <= '0';
1351 i_AMC_if:
AMC_if PORT MAP(
1358 ReSync => ttc_resync,
1359 GTXreset => amc_GTXreset,
1360 resetCntr => rst_cntr,
1361 AllEventBuilt => AllEventBuilt ,
1363 en_inject_err => conf
(10),
1367 NoReSyncFake => conf
(11),
1368 WaitMonBuf => conf
(14),
1369 fake_length => fake_length ,
1370 en_localL1A => conf
(2),
1371 T1_version => K7version
(7 downto 0),
1372 Source_ID => Source_ID,
1374 TTS_disable => TTS_disable ,
1375 AMC_Ready => AMC_Ready,
1378 AMC_REFCLK_P => AMC_REFCLK_P ,
1379 AMC_REFCLK_N => AMC_REFCLK_N ,
1384 AMC_status => AMC_status,
1385 evt_data => EventData,
1386 evt_data_we => evt_data_we ,
1387 evt_buf_full => evt_buf_full ,
1388 evt_data_re => evt_data_re ,
1389 evt_data_rdy => evt_data_rdy ,
1391 MonBuf_empty => MonBuf_empty ,
1392 mon_evt_wc => mon_evt_wc,
1393 mon_ctrl => mon_ctrl,
1394 mon_buf_avl => mon_buf_avl ,
1396 buf_rqst => EventBuf_rqst,
1397 ipb_write => ipb_master_out.ipb_write ,
1398 ipb_strobe => ipb_master_out.ipb_strobe ,
1399 ipb_addr => ipb_master_out.ipb_addr ,
1400 ipb_wdata => ipb_master_out.ipb_wdata ,
1401 ipb_rdata => AMC_data,
1406 ttc_evcnt_reset => ttc_evcnt_reset ,
1407 event_number_avl => event_number_avl ,
1408 event_number => event_number ,
1409 evn_buf_full => evn_fifo_full,
1410 ovfl_warning => L1Aovfl_warning ,
1412 TTS_coded => TTS_coded
1414 AMC_reset <= not sys_lock or cmd(0) or cmd0_dl(1);
1415 amc_GTXreset <= wr_AMC_en or conf7_fall or not sys_lock;
1416 sys_lock_n <= not sys_lock;
1422 daq_reset => lsc_reset,
1423 gtx_reset => lsc_GTXreset,
1424 rstCntr => rst_cntr,
1429 SFP_ABS => SFP_ABS
(2 downto 0),
1431 SFP_down => SFP_down,
1432 inc_ddr_pa => inc_ddr_pa,
1433 evt_data_rdy => evt_data_rdy ,
1434 EventData_in => EventData,
1435 EventData_we => evt_data_we,
1436 EventData_re => evt_data_re,
1437 evt_buf_full => evt_buf_full ,
1438 buf_rqst => EventBuf_rqst,
1439 WaitMonBuf => conf
(14),
1440 MonBufOverWrite => conf
(13),
1441 MonBuf_avl => mon_buf_avl,
1442 MonBuf_empty => MonBuf_empty ,
1443 MonBufOvfl => MonBufOvfl,
1444 mon_evt_cnt => mon_evt_cnt ,
1445 WrtMonBlkDone => WrtMonBlkDone ,
1446 WrtMonEvtDone => WrtMonEvtDone ,
1447 wport_rdy => wport_rdy,
1448 wport_FIFO_full => wport_FIFO_full ,
1449 EventBufAddr_we => EventBufAddr_we ,
1450 EventBufAddr => EventBufAddr ,
1451 SFP0_RXN => SFP0_RXN,
1452 SFP0_RXP => SFP0_RXP,
1453 SFP1_RXN => SFP1_RXN,
1454 SFP1_RXP => SFP1_RXP,
1455 SFP2_RXN => SFP2_RXN,
1456 SFP2_RXP => SFP2_RXP,
1457 SFP0_TXN => SFP0_TXN,
1458 SFP0_TXP => SFP0_TXP,
1459 SFP1_TXN => SFP1_TXN,
1460 SFP1_TXP => SFP1_TXP,
1461 SFP2_TXN => SFP2_TXN,
1462 SFP2_TXP => SFP2_TXP,
1463 SFP_REFCLK_P => GbE_REFCLK,
1464 SFP_REFCLK_N => '0',
1466 ipb_write => ipb_master_out.ipb_write ,
1467 ipb_strobe => ipb_master_out.ipb_strobe ,
1468 ipb_addr => ipb_master_out.ipb_addr ,
1469 ipb_wdata => ipb_master_out.ipb_wdata ,
1470 ipb_rdata => SFP_data,
1473 --lsc_reset <= not sys_lock or cmd(2)
or cmd2_dl(
1);
1474 --lsc_GTXreset <= wr_enSFP or not sys_lock or cmd2_dl(0);
1475 lsc_reset <= lsc_start or cmd(2) or cmd2_dl(1);
1476 lsc_GTXreset <= lsc_start or cmd2_dl(0);
1477 process(DRPclk, sys_lock)
1479 if(sys_lock = '0')then
1481 elsif(DRPclk'event and DRPclk = '1')then
1482 if(CLK_rdy = '1')then
1493 addr => ipb_master_out.ipb_addr
(15 downto 0),
1494 data => sysmon_data ,
1495 device_temp => device_temp ,
1501 if(ipb_clk'event and ipb_clk = '1')then
1502 newIPADDRSyncRegs <= newIPADDRSyncRegs(1 downto 0) & newIPADDR;
1503 rst_ipbus <= not newIPADDRSyncRegs(2) and newIPADDR;
1511 rst_cntr => rst_cntr,
1513 inc_serr => inc_serr,
1514 inc_derr => inc_derr,
1515 inc_bcnterr => inc_bcnterr ,
1516 inc_l1ac => inc_l1ac,
1519 ttc_resync => ttc_resync,
1520 ipb_addr => ipb_master_out.ipb_addr
(15 downto 0),
1521 ipb_rdata => TTC_cntr_data
1523 i_DNA_PORT : DNA_PORT
1525 SIM_DNA_VALUE => X"00123456789abcd"
-- Specifies a sample 57-bit DNA value for simulation
1528 DOUT => DNA_out,
-- 1-bit output: DNA output data.
1529 CLK => ipb_clk,
-- 1-bit input: Clock input.
1530 DIN => '0',
-- 1-bit input: User data input pin.
1531 READ => load_DNA,
-- 1-bit input: Active high load DNA, active low read input.
1532 SHIFT => shift_DNA
(1) -- 1-bit input: Active high shift enable input.
1536 if(ipb_clk'event and ipb_clk = '1')then
1537 load_DNA <= not sys_lock;
1538 if(sys_lock = '0')then
1539 shift_DNA(0) <= '0';
1540 elsif(load_DNA = '1')then
1541 shift_DNA(0) <= '1';
1542 elsif(shift_DNA(2) = '1' and or_reduce(DNA_cntr(5 downto 1)) = '0')then
1543 shift_DNA(0) <= '0';
1545 shift_DNA(2) <= shift_DNA(0);
1546 if(shift_DNA(2) = '1')then
1547 DNA_cntr <= DNA_cntr - 1;
1548 elsif(shift_DNA(0) = '1')then
1549 DNA_cntr <= "110111";
1551 if(shift_DNA(2) = '1')then
1552 DNA <= DNA(55 downto 0) & DNA_OUT;
1558 if(ipb_clk'event and ipb_clk = '0')then
1559 shift_DNA(1) <= shift_DNA(0);