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);
107 AMC_RXN : in (12 downto 1);
108 AMC_RXP : in (12 downto 1);
109 AMC_TXN : out (12 downto 1);
110 AMC_TXP : out (12 downto 1);
111 -- signal to/from DTC_T2
131 TTS :
IN (
3 downto 0);
153 BCN_off :
IN (
12 downto 0);
154 OC_off :
IN (
3 downto 0);
156 cal_win_high :
IN (
11 downto 0);
157 cal_win_low :
IN (
11 downto 0);
159 LocalL1A_cfg :
IN (
31 downto 0);
169 ipb_addr :
in (
31 downto 0);
170 ipb_wdata :
in (
31 downto 0);
171 ipb_rdata :
out (
31 downto 0);
173 state :
IN (
3 downto 0);
183 CalType :
OUT (
3 downto 0);
184 TTC_Brcst :
OUT (
3 downto 0);
185 localL1A_periodic :
OUT ;
188 ttc_soft_reset :
OUT ;
200 ttc_evcnt_reset :
OUT ;
201 event_number_avl :
OUT ;
202 event_number :
OUT (
59 downto 0)
206 Generic (useTCPIP : := false; AMC_useTRIG : := false; simulation : := false);
216 AllEventBuilt :
OUT ;
219 enSFP :
IN (
3 downto 0);
224 fake_length :
IN (
19 downto 0);
225 T1_version :
IN (
7 downto 0);
226 Source_ID :
IN array3x12;
227 AMC_en :
IN (
11 downto 0);
228 TTS_disable :
IN (
11 downto 0);
231 AMC_RXN :
IN (
12 downto 1);
232 AMC_RXP :
IN (
12 downto 1);
233 evt_data_re :
IN (
2 downto 0);
234 evt_buf_full :
IN (
2 downto 0);
235 ddr_pa :
IN (
9 downto 0);
241 ipb_addr :
IN (
31 downto 0);
242 ipb_wdata :
IN (
31 downto 0);
246 ttc_evcnt_reset :
IN ;
247 event_number_avl :
IN ;
248 event_number :
IN (
59 downto 0);
249 AMC_Ready :
OUT (
11 downto 0);
250 BC0_lock :
OUT (
11 downto 0);
252 AMC_TXN :
OUT (
12 downto 1);
253 AMC_TXP :
OUT (
12 downto 1);
254 AMC_status :
OUT (
31 downto 0);
255 evt_data :
OUT array3x67;
256 evt_data_we :
OUT (
2 downto 0);
257 evt_data_rdy :
OUT (
2 downto 0);
258 mon_evt_wc :
OUT (
47 downto 0);
259 mon_ctrl :
OUT (
31 downto 0);
260 buf_rqst :
OUT (
3 downto 0);
261 ipb_rdata :
OUT (
31 downto 0);
265 TrigData :
OUT array12x8;
266 TTS_coded :
OUT (
4 downto 0)
274 addr :
IN (
31 downto 0);
275 SFP_ABS :
IN (
3 downto 0);
276 SFP_LOS :
IN (
2 downto 0);
278 SFP_SDA :
INOUT (
3 downto 0);
279 rdata :
OUT (
31 downto 0);
282 SFP_SCL :
OUT (
3 downto 0)
290 SN :
IN (
8 downto 0);
293 SPI_rdata :
IN (
7 downto 0);
298 IPADDR :
OUT (
31 downto 0);
299 SPI_wdata :
OUT (
7 downto 0);
300 SPI_addr :
OUT (
7 downto 0)
314 mem_test :
in (
1 downto 0);
315 EventData :
in array3X67;
316 EventData_we :
in (
2 downto 0);
317 wport_rdy :
out (
2 downto 0);
318 WrtMonBlkDone :
OUT (
2 downto 0);
319 WrtMonEvtDone :
OUT (
2 downto 0);
320 KiloByte_toggle :
OUT (
2 downto 0);
321 EoB_toggle :
OUT (
2 downto 0);
322 EventBufAddr :
in array3x14;
323 EventBufAddr_we :
in (
2 downto 0);
324 EventFIFOfull :
out (
2 downto 0);
325 TCP_din :
in (
31 downto 0);
326 TCP_channel :
in (
1 downto 0);
328 TCP_wcount :
out (
2 downto 0);
329 TCP_dout :
out (
31 downto 0);
-- TCP data are written in unit of 32-bit words
330 TCP_raddr :
in (
28 downto 0);
-- 28-26 encoded request source 25-0 address in 64 word
331 TCP_length :
in (
10 downto 0);
-- in 64 word, actual length -
1
332 TCP_dout_valid :
out ;
340 page_addr :
in (
9 downto 0);
341 ipb_addr :
in (
31 downto 0);
342 ipb_wdata :
in (
31 downto 0);
343 ipb_rdata :
out (
31 downto 0);
345 mem_stat :
out (
63 downto 0);
346 device_temp :
in (
11 downto 0);
348 ddr3_dq :
inout (
31 downto 0);
349 ddr3_dm :
out (
3 downto 0);
350 ddr3_addr :
out (
13 downto 0);
351 ddr3_ba :
out (
2 downto 0);
352 ddr3_dqs_p :
inout (
3 downto 0);
353 ddr3_dqs_n :
inout (
3 downto 0);
358 ddr3_cke :
out (
0 to 0);
359 ddr3_odt :
out (
0 to 0);
360 ddr3_ck_p :
out (
0 to 0);
361 ddr3_ck_n :
out (
0 to 0)
365 generic(RXPOLARITY : := '
0'; TXPOLARITY : := '
0');
379 amc_en :
in (
11 downto 0);
381 IPADDR :
in (
31 downto 0);
382 MACADDR :
in (
47 downto 0);
383 ipb_out :
out ipb_wbus;
384 ipb_in :
in ipb_rbus;
385 SN :
out (
8 downto 0);
386 debug_in :
IN (
31 downto 0);
387 debug_out :
OUT (
127 downto 0)
393 SN :
IN (
8 downto 0);
394 VAUXN_IN :
IN (
12 downto 0);
395 VAUXP_IN :
IN (
12 downto 0);
396 addr :
IN (
15 downto 0);
397 data :
OUT (
31 downto 0);
398 device_temp :
OUT (
11 downto 0);
399 ALM :
OUT (
7 downto 0);
414 enSFP :
IN (
3 downto 0);
415 SFP_ABS :
IN (
2 downto 0);
416 LSC_ID :
IN (
15 downto 0);
418 evt_data_rdy :
IN (
2 downto 0);
419 EventData_in :
IN array3x67;
420 EventData_we :
IN (
2 downto 0);
421 buf_rqst :
IN (
3 downto 0);
423 WrtMonBlkDone :
IN (
2 downto 0);
424 WrtMonEvtDone :
IN (
2 downto 0);
425 wport_rdy :
IN (
2 downto 0);
426 wport_FIFO_full :
IN (
2 downto 0);
438 ipb_addr :
IN (
31 downto 0);
439 ipb_wdata :
IN (
31 downto 0);
440 SFP_down :
OUT (
2 downto 0);
441 EventData_re :
OUT (
2 downto 0);
442 evt_buf_full :
OUT (
2 downto 0);
443 MonBufOverWrite :
IN ;
447 mon_evt_cnt :
OUT (
31 downto 0);
448 EventBufAddr_we :
OUT (
2 downto 0);
449 EventBufAddr :
OUT array3x14;
456 ipb_rdata :
OUT (
31 downto 0);
460 constant ipbus_ver_addr : (15 downto 0) := x"0000";
461 constant ipbus_sfp_addr: (15 downto 0) := x"0002";
462 constant CDRclk_pol : := '0';
463 constant CDRdata_pol : := '1';
464 constant TTCclk_pol : := '1';
465 constant TTCdata_pol : := '1';
466 constant Coarse_Delay: (3 downto 0) := x"0";
467 signal rst_ipbus : := '0';
468 signal LDC_UsrClk : := '0';
469 signal wr_AMC_en : := '0';
470 signal wr_EnSFP : := '0';
471 signal fake_length : (19 downto 0) := x"00400";
472 signal AMC_en : (11 downto 0) := (others =>'0');
473 signal TTS_disable : (11 downto 0) := (others =>'0');
474 signal AMC_Ready : (11 downto 0) := (others =>'0');
475 signal AMC_status : (31 downto 0) := (others =>'0');
476 signal AMC_DATA : (31 downto 0) := (others =>'0');
477 signal AMC_ack : := '0';
478 signal L1Aovfl_warning : := '0';
479 --signal TRIGDATA : (7 downto 0) := (
others =>'0');
480 signal TTS_coded : (4 downto 0) := (others =>'0');
481 --signal AMC_trig : := '0';
482 signal pattern : (3 downto 0) := (others =>'0');
483 --signal Trig_mask : (7 downto 0) := (
others =>'0');
484 signal SPI_SCK_buf : := '0';
485 signal CLK_rdy : := '0';
486 signal I2C_data : (31 downto 0) := (others =>'0');
487 signal TTCclk_in : := '0';
488 signal TTC_Clk : := '0';
489 signal TTC_strobe : := '0';
490 signal BcntErr_cnt : (7 downto 0) := (others =>'0');
491 signal SinErr_cnt : (7 downto 0) := (others =>'0');
492 signal DbErr_cnt : (7 downto 0) := (others =>'0');
493 signal L1_reg : (15 downto 0) := (others =>'0');
494 signal Bcnt_reg : (11 downto 0) := (others =>'0');
495 signal OC_reg : (31 downto 0) := (others =>'0');
498 signal S2V_cntr : (5 downto 0) := (others => '0');
499 signal S2V_sr : (3 downto 0) := (others => '0');
500 signal ddr_rdata : (7 downto 0) := (others =>'0');
501 signal ipb_clk_dcm : := '0';
502 signal ipb_clk : := '0';
503 signal clk125_dcm : := '0';
504 signal clk125 : := '0';
505 signal DRPclk_dcm : := '0';
506 signal DRPclk : := '0';
507 signal sysclk_dcm : := '0';
508 signal sysclk : := '0';
509 signal clkfb : := '0';
510 signal refclk_dcm : := '0';
511 signal refclk : := '0';
512 signal mem_clk_dcm : := '0';
513 signal mem_clk : := '0';
514 signal sysclk_inp : := '0';
515 signal sysclk_in : := '0';
516 --signal clk125 : := '0';
517 signal sys_lock : := '0';
518 signal sys_lock_n : := '0';
519 signal ldc_reset : := '0';
520 signal ldc_GTXreset : := '0';
521 signal lsc_start : := '0';
522 signal lsc_reset : := '0';
523 signal lsc_GTXreset : := '0';
524 signal amc_reset : := '0';
525 signal amc_GTXreset : := '0';
526 signal conf7_q : := '0';
527 signal conf7_fall : := '0';
529 signal LSC_LinkDown : := '0';
530 signal mem_rst : := '0';
531 signal mem_test : (1 downto 0) := (others =>'0');
532 signal mem_stat : (63 downto 0) := (others =>'0');
533 signal mem_ack : := '0';
534 signal mem_data : (31 downto 0) := (others =>'0');
535 signal ttc_data : (31 downto 0) := (others =>'0');
536 signal EventData : array3X67 := (others => (others => '0'));
537 signal wport_rdy : (2 downto 0) := (others =>'0');
538 signal EventBufAddr : array3x14 := (others => (others => '0'));
539 signal EventBufAddr_we : (2 downto 0) := (others =>'0');
540 signal evt_buf_full : (2 downto 0) := (others =>'0');
541 signal wport_FIFO_full : (2 downto 0) := (others =>'0');
542 --signal TCP_din : (31 downto 0) := (
others =>'0');
543 --signal TCP_channel : (1 downto 0) := (
others =>'0');
544 --signal TCP_wrqst : := '0';
545 --signal TCP_re : := '0';
546 --signal TCP_dout : (31 downto 0) := (
others =>'0');
547 --signal TCP_raddr : (23 downto 0) := (
others =>'0');
548 --signal TCP_length : (11 downto 0) := (
others =>'0');
549 --signal TCP_dout_valid : := '0';
550 --signal TCP_rrqst : := '0';
551 --signal TCP_rack : := '0';
552 --signal TCP_lastword : := '0';
553 signal MonBufOvfl : := '0';
554 signal MonBuf_empty : := '0';
555 --signal inc_mon_cntr : := '0';
556 signal mon_evt_wc : (47 downto 0) := (others =>'0');
557 signal mon_evt_cnt : (31 downto 0) := (others =>'0');
558 signal mon_ctrl : (31 downto 0) := (others =>'0');
559 --signal TCPbuf_avl : := '0';
560 signal mon_buf_avl : := '0';
561 signal EventBufAddrAvl : := '0';
562 signal EventBufAddrRe : := '0';
563 signal mon_wp : (31 downto 0) := (others =>'0');
564 --signal TCP_releaseAck : (2 downto 0) := (
others =>'0');
565 --signal TCP_releaseRqst : (2 downto 0) := (
others =>'0');
566 --signal TCP_releaseAddr : array3X13 := (others => (others => '0'));
567 signal EventBuf_rqst : (3 downto 0) := (others =>'0');
568 signal rst_cntr : := '0';
569 signal rst_ddr_pa : := '0';
570 signal inc_ddr_pa : := '0';
571 signal Source_ID : array3x12 := (others => (others => '0'));
572 signal ddr_pa : (9 downto 0) := (others =>'0');
573 signal CDRclk : := '0';
574 signal TTS_clk : := '0';
576 signal T3_trigger : := '0';
577 signal BC0_delay : (4 downto 0) := "11000";
578 signal bcnt : (3 downto 0) := x"0";
579 signal LocalL1A_cfg : (31 downto 0) := (others =>'0');
580 signal BCN_off : (12 downto 0) := (others =>'0');
581 signal OC_off : (3 downto 0) := (others =>'0');
582 signal en_cal_win : := '0';
583 signal CalibCtrl : (31 downto 0) := x"0d800d80";
584 signal cal_win_high : (11 downto 0) := (others =>'0');
585 signal cal_win_low : (11 downto 0) := (others =>'0');
586 signal CalType : (3 downto 0) := (others =>'0');
587 signal TTC_Brcst : (3 downto 0) := (others =>'0');
588 signal local_TTCcmd : := '0';
589 signal en_brcst : := '0';
590 signal ttc_start : := '0';
591 signal ttc_stop : := '0';
592 signal ttc_soft_reset : := '0';
593 signal ttc_soft_resetp : := '0';
594 signal ttc_ready : := '0';
595 signal ttc_serr : := '0';
596 signal ttc_derr : := '0';
597 signal ttc_bcnt_err : := '0';
598 signal ttc_evcnt_reset : := '0';
599 signal inc_rate_ofw : := '0';
600 signal rate_ofw : := '0';
601 signal rate_ofwp : := '0';
602 signal rate_ofw_q : := '0';
603 signal sync_lost : := '0';
604 signal oc_cntr : (3 downto 0) := (others =>'0');
605 signal ttc_resync : := '0';
606 signal AllEventBuilt : := '0';
607 signal resync_done : := '0';
608 signal dcc_quiet : := '0';
609 signal inc_oc : := '0';
610 signal inc_L1ac : := '0';
611 signal inc_bcnterr : := '0';
612 signal inc_serr : := '0';
613 signal inc_derr : := '0';
614 signal evn_fifo_full : := '0';
615 signal event_number_avl : := '0';
616 signal state : (3 downto 0) := (others =>'0');
617 signal TTS_wait : (20 downto 0) := (others =>'0');
618 signal event_number : (59 downto 0) := (others =>'0');
619 signal TTC_serr_cntr : (7 downto 0) := (others =>'0');
620 signal TTC_derr_cntr : (7 downto 0) := (others =>'0');
621 signal TTC_BcntErr_cntr : (7 downto 0) := (others =>'0');
622 signal L1A_cntr : (7 downto 0) := (others =>'0');
623 signal L1A_OFW_cntr : (7 downto 0) := (others =>'0');
624 signal L1A_BUSY_cntr : (7 downto 0) := (others =>'0');
625 signal L1A_LOS_cntr : (7 downto 0) := (others =>'0');
626 signal run_cntr : (7 downto 0) := (others =>'0');
627 signal ready_cntr : (7 downto 0) := (others =>'0');
628 signal busy_cntr : (7 downto 0) := (others =>'0');
629 signal sync_cntr : (7 downto 0) := (others =>'0');
630 signal ovfl_cntr : (7 downto 0) := (others =>'0');
631 signal ReSync_cntr : (15 downto 0) := (others =>'0');
632 signal counter_we : (3 downto 0) := (others => '0');
633 signal counter_wa : (9 downto 0) := (others => '0');
634 signal counter_ra_l : (9 downto 0) := (others => '0');
635 signal counter_ra_h : (9 downto 0) := (others => '0');
636 signal CounterDi : (47 downto 0) := (others => '0');
637 signal CounterDoA : (47 downto 0) := (others => '0');
638 signal CounterDoB : (63 downto 0) := (others => '0');
639 signal div : (7 downto 0) := (others =>'0');
640 signal CntrRst : := '0';
641 signal CntrRstCycle : := '0';
642 signal CounterDoB_h : := '0';
643 signal got_SN : := '0';
644 signal ipb_strobe_q : := '0';
645 signal SFP_clk : := '0';
646 signal AMC_clk : := '0';
647 signal AMC_clk_in : := '0';
648 signal SV_Cntr : (7 downto 0) := (others => '0');
649 signal sysclk_div : (7 downto 0) := (others => '0');
650 signal SFP_UsrClk : := '0';
651 signal SFP_TxOutClk : := '0';
652 signal I2C_debug_out : (15 downto 0) := (others =>'0');
653 signal SFPOSC_rdy : := '0';
654 signal reset : := '0';
655 signal DAQ_reset : := '0';
656 signal AMCOSC_rdy : := '0';
657 --signal cs_clk_in : := '0';
658 --signal cs_clk : := '0';
659 signal TTC_debug : (63 downto 0) := (others =>'0');
660 signal TxDisable_i : (3 downto 0) := (others => '0');
661 signal DAQfifo_re : := '0';
662 signal DAQfifoAlmostEmpty : := '0';
663 signal DAQfifoEmpty : := '0';
664 signal DAQfifo_do : (63 downto 0) := (others =>'0');
665 signal DAQ_debug_in : (63 downto 0) := (others =>'0');
666 signal LDC_debug_out : (63 downto 0) := (others =>'0');
667 signal LSC_debug_out : (63 downto 0) := (others =>'0');
668 signal ddr_debug_in : (31 downto 0) := (others =>'0');
669 signal ddr_debug_out : (127 downto 0) := (others =>'0');
670 signal GbE_REFCLK : := '0';
671 signal S6Link_debug_in : (31 downto 0) := (others =>'0');
672 signal S6Link_debug_out : (127 downto 0) := (others =>'0');
673 signal GbE_debug_in : (31 downto 0) := (others =>'0');
674 signal GbE_debug_out : (127 downto 0) := (others =>'0');
675 signal AMC_debug_in : (255 downto 0) := (others =>'0');
676 signal AMC_debug_out : (255 downto 0) := (others =>'0');
677 signal SFP0_debug_in : (31 downto 0) := (others =>'0');
678 signal SFP0_debug_out : (127 downto 0) := (others =>'0');
679 signal SFP1_debug_in : (31 downto 0) := (others =>'0');
680 signal SFP1_debug_out : (127 downto 0) := (others =>'0');
681 signal ipb_master_out : ipb_wbus;
682 signal ipb_master_in : ipb_rbus;
683 signal SN : (8 downto 0) := (others =>'0');
684 signal MACADDR : (47 downto 0) := (others =>'0');
685 signal ipaddr : (31 downto 0) := (others =>'0');
686 signal en_RARP : := '0';
687 --signal SPI_IP : (31 downto 0) := (
others =>'0');
688 signal status : (31 downto 0) := (others =>'0');
689 signal cmd : (31 downto 0) := (others =>'0');
690 signal cmd0_dl : (1 downto 0) := (others =>'0');
691 signal cmd2_dl : (1 downto 0) := (others =>'0');
692 signal conf : (15 downto 0) := (others =>'0');
693 signal LSC_ID : (15 downto 0) := x"1234";
695 signal inc_HTRCRC_err : := '0';
696 signal sysmon_data : (31 downto 0) := (others => '0');
697 signal device_temp : (11 downto 0) := (others =>'0');
698 signal ALM : (7 downto 0) := (others =>'0');
699 signal evt_data_rdy : (2 downto 0) := (others => '0');
700 signal evt_data_re : (2 downto 0) := (others => '0');
701 signal evt_data_we : (2 downto 0) := (others => '0');
702 --signal event_size : array3x13;
703 signal SFP_data : (31 downto 0) := (others =>'0');
704 signal SFP_ack : := '0';
705 --signal TCP_data : (31 downto 0) := (
others =>'0');
706 --signal TCP_ack : := '0';
707 signal S2V_SyncRegs : (2 downto 0) := (others => '0');
708 signal resetSyncRegs : (2 downto 0) := (others => '0');
709 signal sysclk_div7SyncRegs : (3 downto 0) := (others => '0');
710 signal resetCntr_SyncRegs : (2 downto 0) := (others =>'0');
711 signal newIPADDR : := '0';
712 signal newIPADDRSyncRegs : (2 downto 0) := (others =>'0');
713 signal DNA_out : := '0';
714 signal load_DNA : := '0';
715 signal shift_DNA : (2 downto 0) := (others =>'0');
716 signal DNA_cntr : (5 downto 0) := (others =>'0');
717 signal DNA : (56 downto 0) := (others =>'0');
718 signal Dis_pd : := '0';
719 signal enSFP : (3 downto 0) := (others =>'0');
720 signal SFP_down : (2 downto 0) := (others =>'0');
721 --signal evt_buf_space : (2 downto 0) := (
others =>'0');
722 signal WrtMonBlkDone : (2 downto 0) := (others =>'0');
723 signal WrtMonEvtDone : (2 downto 0) := (others =>'0');
726 CONTROL0 :
INOUT (
35 DOWNTO 0);
727 CONTROL1 :
INOUT (
35 DOWNTO 0));
732 CONTROL :
INOUT (
35 DOWNTO 0);
734 DATA :
IN (
15 DOWNTO 0);
735 TRIG0 :
IN (
7 DOWNTO 0));
738 signal CONTROL0 : (35 downto 0) := (others => '0');
739 signal CONTROL1 : (35 downto 0) := (others => '0');
740 signal TRIG0 : (7 downto 0) := (others => '0');
741 signal TRIG1 : (7 downto 0) := (others => '0');
742 signal DATA0 : (15 downto 0) := (others => '0');
743 signal DATA1 : (15 downto 0) := (others => '0');
747 -- CONTROL0 => CONTROL0,
748 -- CONTROL1 => CONTROL1);
751 -- CONTROL => CONTROL0,
755 --DATA0(14) <= evt_buf_full(
0);
756 --DATA0(13) <= evt_data_re(
0);
757 --DATA0(12) <= evt_data_rdy(
0);
758 --DATA0(11 downto 10) <= EventBufAddr(
0)(
5 downto 4);
759 --DATA0(9 downto 8) <= EventData(
0)(
65 downto 64);
760 --DATA0(7) <= wport_rdy(
0);
761 --DATA0(6) <= wport_FIFO_full(
0);
762 --DATA0(5) <= evt_data_we(
0);
763 --DATA0(4) <= EventBufAddr_we(
0);
764 --DATA0(3 downto 0) <= mem_stat(
3 downto 0);
765 --TRIG0(7 downto 4) <= (
others => '0');
766 --TRIG0(3) <= wport_rdy(
0);
767 --TRIG0(2) <= EventBufAddr_we(
0);
768 --TRIG0(1) <= evt_data_re(
0);
769 --TRIG0(0) <= evt_data_rdy(
0);
773 -- CONTROL => CONTROL1,
774 -- CLK => mem_stat(19),
777 --DATA1(14 downto 0) <= mem_stat(
18 downto 4);
778 --TRIG1(7 downto 2) <= (
others => '0');
779 --TRIG1(1 downto 0) <= mem_stat(
18 downto 17);
780 i_TTS_if:
TTS_if PORT MAP(
789 TxDisable <= TxDisable_i;
794 addr => ipb_master_out.ipb_addr,
804 i_SPI_SCK_buf: bufh
port map(i => SPI_SCK, o => SPI_SCK_buf
);
805 i_SPI_if:
SPI_if PORT MAP(
815 newIPADDR => newIPADDR,
817 SPI_rdata =>
(others => '0'
),
821 i_ttc_if:
ttc_if PORT MAP(
827 TTC_strobe => TTC_strobe,
828 sys_lock => sys_lock,
830 local_TTCcmd => local_TTCcmd ,
831 single_TTCcmd => cmd
(8),
835 DIV_nRST => DIV_nRST,
836 CDRclk_p => CDRclk_p,
837 CDRclk_n => CDRclk_n,
838 CDRclk_out => CDRclk,
839 CDRdata_p => CDRdata_p,
840 CDRdata_n => CDRdata_n,
841 TTCdata_p => TTCdata_p,
842 TTCdata_n => TTCdata_n,
847 en_cal_win => en_cal_win,
848 cal_win_high => cal_win_high ,
849 cal_win_low => cal_win_low ,
851 TTC_Brcst => TTC_Brcst,
852 ovfl_warning => L1Aovfl_warning ,
854 ipb_write => ipb_master_out.ipb_write ,
855 ipb_strobe => ipb_master_out.ipb_strobe ,
856 ipb_addr => ipb_master_out.ipb_addr ,
857 ipb_wdata => ipb_master_out.ipb_wdata ,
858 ipb_rdata => ttc_data,
859 en_localL1A => conf
(2),
860 LocalL1A_cfg => LocalL1A_cfg ,
861 localL1A_s => cmd
(26),
862 localL1A_r => cmd
(10),
863 localL1A_periodic => status
(10),
866 T3_trigger => T3_trigger,
867 en_brcst => en_brcst,
868 ttc_start => ttc_start,
869 ttc_stop => ttc_stop,
870 ttc_soft_reset => ttc_soft_reset ,
871 ttc_ready => ttc_ready,
872 ttc_serr => ttc_serr,
873 ttc_derr => ttc_derr,
874 ttc_bcnt_err => ttc_bcnt_err ,
875 rate_OFW => rate_OFW,
876 sync_lost => sync_lost,
878 inc_l1ac => inc_l1ac,
879 inc_bcnterr => inc_bcnterr ,
880 inc_serr => inc_serr,
881 inc_derr => inc_derr,
883 evn_fifo_full => evn_fifo_full ,
884 ttc_evcnt_reset => ttc_evcnt_reset ,
885 event_number_avl => event_number_avl ,
886 event_number => event_number
888 local_TTCcmd <= conf(
5)
or conf(
8);
889 CalibCtrl(31) <= en_cal_win;
890 CalibCtrl(30 downto 28) <= "000";
891 CalibCtrl(27 downto 16) <= cal_win_high;
892 CalibCtrl(15 downto 12) <= CalType;
893 CalibCtrl(11 downto 0) <= cal_win_low;
894 cal_win_high(11 downto 6) <= "110110";
895 cal_win_low(11 downto 6) <= "110110";
896 i_S2V: IBUFDS
generic map(DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25") port map(i => S2V_p, ib => S2V_n, o => S2V
);
899 if(CDRclk'event and CDRclk = '1')then
900 if(conf(15) = '0')then
907 i_GbE_REFCLK: IBUFDS_GTE2
913 I => GbE_REFCLK_P,
-- Connect to package pin AB6
914 IB => GbE_REFCLK_N
-- Connect to package pin AB5
916 i_TTCclk_in : IBUFGDS
generic map (DIFF_TERM => TRUE,IOSTANDARD =>
"LVDS_25")
918 O => TTCclk_in,
-- Clock buffer output
919 I => TTCclk_p,
-- Diff_p clock buffer input
920 IB => TTCclk_n
-- Diff_n clock buffer input
922 i_TTC_CLK_buf: bufg
port map(i => TTCclk_in, o => TTC_Clk
);
923 i_sysclk_in_buf: bufh
port map(i => GbE_REFCLK, o => sysclk_in
);
924 i_PLL_sysclk : PLLE2_BASE
926 BANDWIDTH =>
"OPTIMIZED",
-- OPTIMIZED, HIGH, LOW
927 CLKFBOUT_MULT =>
8,
-- Multiply value for all CLKOUT, (2-64)
928 CLKFBOUT_PHASE =>
0.0,
-- Phase offset in degrees of CLKFB, (-360.000-360.000).
929 CLKIN1_PERIOD =>
8.0,
-- Input clock period in ns to ps resolution (i.e. 33.
333 is 30 MHz).
930 -- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
932 CLKOUT1_DIVIDE =>
32,
933 CLKOUT2_DIVIDE =>
20,
934 DIVCLK_DIVIDE =>
1,
-- Master division value, (1-56)
935 REF_JITTER1 =>
0.0,
-- Reference input jitter in UI, (0.000-0.
999).
936 STARTUP_WAIT =>
"FALSE" -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
939 -- Clock Outputs: 1-bit (each) output: User configurable clock outputs
940 CLKOUT0 => sysclk_dcm,
941 CLKOUT1 => ipb_clk_dcm ,
942 CLKOUT2 => DRPclk_dcm,
943 -- Feedback Clocks: 1-bit (each) output: Clock feedback ports
944 CLKFBOUT => clk125_dcm,
-- 1-bit output: Feedback clock
945 -- Status Port: 1-bit (each) output: PLL status ports
946 LOCKED => sys_lock,
-- 1-bit output: LOCK
947 -- Clock Input: 1-bit (each) input: Clock input
948 CLKIN1 => sysclk_in,
-- 1-bit input: Input clock
949 -- Control Ports: 1-bit (each) input: PLL control ports
950 PWRDWN => '0',
-- 1-bit input: Power-down
951 RST => '0',
-- 1-bit input: Reset
952 -- Feedback Clocks: 1-bit (each) input: Clock feedback ports
953 CLKFBIN => clk125
-- 1-bit input: Feedback clock
955 i_clk125_buf: bufg
port map(i => clk125_dcm, o => clk125
);
956 i_ipb_clk_buf: bufg
port map(i => ipb_clk_dcm, o => ipb_clk
);
957 i_DRPclk_buf: bufg
port map(i => DRPclk_dcm, o => DRPclk
);
958 i_sysclk_buf: bufg
port map(i => sysclk_dcm, o => sysclk
);
959 --i_refclk_buf: bufg port map(i => refclk_dcm, o => refclk);
960 reset <= not sys_lock or cmd(0);
962 process(sysclk,reset)
965 resetSyncRegs <= (others => '1');
966 elsif(sysclk'event and sysclk = '1')then
967 resetSyncRegs <= resetSyncRegs(1 downto 0) & '0';
970 i_ddr_if:
ddr_if PORT MAP(
971 mem_clk_p => sys_clk_p,
972 mem_clk_n => sys_clk_n,
978 resetsys => resetSyncRegs
(2),
980 mem_test => mem_test,
981 EventData => EventData,
982 EventData_we => evt_data_we,
983 wport_rdy => wport_rdy,
984 WrtMonBlkDone => WrtMonBlkDone ,
985 WrtMonEvtDone => WrtMonEvtDone ,
986 KiloByte_toggle =>
open,
988 EventBufAddr => EventBufAddr ,
989 EventBufAddr_we => EventBufAddr_we ,
990 EventFIFOfull => wport_FIFO_full ,
991 TCP_din =>
(others => '0'
),
992 TCP_channel =>
(others => '0'
),
996 TCP_raddr =>
(others => '0'
),
997 TCP_length =>
(others => '0'
),
998 TCP_dout_valid =>
open,
1001 TCP_lastword =>
open,
1002 page_addr => ddr_pa,
1004 ipb_write => ipb_master_out.ipb_write ,
1005 ipb_strobe => ipb_master_out.ipb_strobe ,
1006 ipb_addr => ipb_master_out.ipb_addr ,
1007 ipb_wdata => ipb_master_out.ipb_wdata ,
1008 ipb_rdata => mem_data,
1010 mem_stat => mem_stat,
1011 device_temp => device_temp ,
1014 ddr3_addr => ddr3_addr,
1016 ddr3_dqs_p => ddr3_dqs_p,
1017 ddr3_dqs_n => ddr3_dqs_n,
1018 ddr3_ras_n => ddr3_ras_n,
1019 ddr3_cas_n => ddr3_cas_n,
1020 ddr3_we_n => ddr3_we_n,
1021 ddr3_reset_n => ddr3_reset_n ,
1022 ddr3_cke => ddr3_cke,
1023 ddr3_odt => ddr3_odt,
1024 ddr3_ck_p => ddr3_ck_p,
1025 ddr3_ck_n => ddr3_ck_n
1027 --mem_rst <= not sys_lock or not CLK_rdy or cmd(5)
or cmd(
0);
1028 mem_rst <= not sys_lock or not CLK_rdy or cmd(5);
1029 MACADDR <= x"080030f30" & '0' & not SN(8) & '0' & not SN(7 downto 6) & '1' & SN(5 downto 0);
1035 GTX_RESET => sys_lock_n,
1036 MACADDR => MACADDR,
-- new mac range 08-00-30-F3-00-00 to 08-00-30-F3-00-7F
1039 GbE_REFCLK => GbE_REFCLK,
1040 S6LINK_RXN => S6LINK_RXN,
1041 S6LINK_RXP => S6LINK_RXP,
1042 S6LINK_TXN => S6LINK_TXN,
1043 S6LINK_TXP => S6LINK_TXP,
1044 wr_AMC_en => wr_AMC_en,
1046 ipb_out => ipb_master_out,
1047 ipb_in => ipb_master_in,
1050 debug_in =>
(others => '0'
),
1053 --LSC_LinkDown <= '1' when conf(1) = '0'
or or_reduce(EnSFP(
2 downto 0)
and SFP_down) = '1'
else '0';
1054 --status(0) <= LSC_LinkDown;
1055 status(0) <= or_reduce(SFP_down);
1056 status(1) <= MonBufOvfl;
1057 status(2) <= mon_evt_cnt(10);
1058 status(3) <= MonBuf_empty;
1059 status(4) <= mem_stat(0);
-- monitor input FIFO overflow
1060 status(5) <= not ttc_ready;
1061 status(6) <= ttc_bcnt_err;
1062 status(7) <= ttc_serr;
1063 status(8) <= ttc_derr;
1064 status(9) <= sync_lost;
1065 status(13) <= L1Aovfl_warning;
1066 status(15) <= mem_stat(63);
1069 EnSFP(3) <= not conf(1);
1070 mem_test <= conf(6) & conf(4);
1071 --en_brcst <= conf(5);
1075 Q => cmd0_dl
(0),
-- SRL data output
1076 A0 => '1',
-- Select[0] input
1077 A1 => '1',
-- Select[1] input
1078 A2 => '1',
-- Select[2] input
1079 A3 => '0',
-- Select[3] input
1080 CE => '1',
-- Clock enable input
1081 CLK => ipb_clk,
-- Clock input
1082 D => cmd
(0) -- SRL data input
1086 Q => cmd0_dl
(1),
-- SRL data output
1087 A0 => '1',
-- Select[0] input
1088 A1 => '1',
-- Select[1] input
1089 A2 => '1',
-- Select[2] input
1090 A3 => '0',
-- Select[3] input
1091 CE => '1',
-- Clock enable input
1092 CLK => ipb_clk,
-- Clock input
1093 D => cmd0_dl
(0) -- SRL data input
1097 Q => cmd2_dl
(0),
-- SRL data output
1098 A0 => '1',
-- Select[0] input
1099 A1 => '1',
-- Select[1] input
1100 A2 => '1',
-- Select[2] input
1101 A3 => '0',
-- Select[3] input
1102 CE => '1',
-- Clock enable input
1103 CLK => ipb_clk,
-- Clock input
1104 D => cmd
(2) -- SRL data input
1108 Q => cmd2_dl
(1),
-- SRL data output
1109 A0 => '1',
-- Select[0] input
1110 A1 => '1',
-- Select[1] input
1111 A2 => '1',
-- Select[2] input
1112 A3 => '0',
-- Select[3] input
1113 CE => '1',
-- Clock enable input
1114 CLK => ipb_clk,
-- Clock input
1115 D => cmd2_dl
(0) -- SRL data input
1119 if(ipb_clk'event and ipb_clk = '1')then
1120 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
1121 cmd <= ipb_master_out.ipb_wdata;
1123 cmd <= (others => '0');
1126 conf7_fall <= conf7_q and not conf(7);
1127 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
1128 conf <= ipb_master_out.ipb_wdata(15 downto 0);
1130 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
1131 Dis_pd <= ipb_master_out.ipb_wdata(15);
1132 EnSFP(2 downto 0) <= ipb_master_out.ipb_wdata(14 downto 12);
1133 AMC_en <= ipb_master_out.ipb_wdata(11 downto 0);
1134 if(AMC_en = ipb_master_out.ipb_wdata(11 downto 0))then
1139 if(EnSFP(2 downto 0) = ipb_master_out.ipb_wdata(14 downto 12))then
1148 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
1149 TTS_disable <= ipb_master_out.ipb_wdata(11 downto 0);
1151 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
1152 en_cal_win <= ipb_master_out.ipb_wdata(31);
1153 cal_win_high(5 downto 0) <= ipb_master_out.ipb_wdata(21 downto 16);
1154 cal_win_low(5 downto 0) <= ipb_master_out.ipb_wdata(5 downto 0);
1156 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
1157 Source_ID(0)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1159 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
1160 Source_ID(1)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1162 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
1163 Source_ID(2)(11 downto 0) <= ipb_master_out.ipb_wdata(11 downto 0);
1165 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
1166 LocalL1A_cfg <= ipb_master_out.ipb_wdata;
1168 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
1169 LSC_ID(15 downto 2) <= ipb_master_out.ipb_wdata(31 downto 18);
1170 TxDisable_i <= ipb_master_out.ipb_wdata(15 downto 12);
1172 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
1173 OC_OFF <= ipb_master_out.ipb_wdata(19 downto 16);
1174 BCN_OFF <= ipb_master_out.ipb_wdata(12 downto 0);
1176 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
1177 fake_length <= ipb_master_out.ipb_wdata(19 downto 0);
1179 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
1180 pattern <= ipb_master_out.ipb_wdata(11 downto 8);
1181 -- Trig_mask <= ipb_master_out.ipb_wdata(7 downto 0);
1183 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
1184 ddr_pa <= (others => '0');
1185 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
1187 if(MonBuf_empty = '0')then
1188 ddr_pa <= ddr_pa + 1;
1191 ddr_pa <= ipb_master_out.ipb_wdata(9 downto 0);
1194 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
1201 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;
1202 process(ipb_master_out.ipb_addr)
1204 if(ipb_master_out.ipb_addr(27) = '1' or ipb_master_out.ipb_addr(17) = '1')then
1205 ipb_master_in.ipb_rdata <= mem_data;
1206 -- elsif(ipb_master_out.ipb_addr(20 downto 18) /= "
000")
then
1207 -- if(ipb_master_out.ipb_addr(0) = '0')
then
1208 -- ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1210 -- ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1212 elsif(ipb_master_out.ipb_addr(15 downto 5) = CSR_addr(15 downto 5))then
1213 case ipb_master_out.ipb_addr(4 downto 0) is
1214 when "00000" => ipb_master_in.ipb_rdata <= not SN(7 downto 0) & not SN(8) & status(22 downto 0);
1215 when "00001" => ipb_master_in.ipb_rdata <= K7version & conf;
1216 when "00010" => ipb_master_in.ipb_rdata <= mon_ctrl;
1217 when "00011" => ipb_master_in.ipb_rdata <= '0' & SFP_down & AMC_Ready & Dis_pd & EnSFP(2 downto 0) & AMC_en;
1218 when "00100" => ipb_master_in.ipb_rdata <= LSC_ID & TxDisable_i & TxFault & (TTC_LOL or TTC_LOL) & SFP_LOS & SFP_ABS;
1219 when "00101" => ipb_master_in.ipb_rdata <= AMC_status;
1220 when "00111" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(0);
1221 when "01000" => ipb_master_in.ipb_rdata <= x"000" & OC_OFF & "000" & BCN_OFF;
1222 when "01001" => ipb_master_in.ipb_rdata <= CalibCtrl;
1223 when "01010" => ipb_master_in.ipb_rdata <= mem_stat(31 downto 0);
1224 when "01011" => ipb_master_in.ipb_rdata <= mem_stat(63 downto 32);
1225 when "01100" => ipb_master_in.ipb_rdata <= x"00000" & "00" & ddr_pa;
1226 when "01101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(15 downto 0) & '0';
1227 when "01110" => ipb_master_in.ipb_rdata <= mon_evt_cnt;
1228 when "01111" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(31 downto 16) & '0';
1229 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;
1230 when "10001" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(1);
1231 when "10010" => ipb_master_in.ipb_rdata <= x"000" & Source_ID(2);
1232 when "11000" => ipb_master_in.ipb_rdata <= x"000" & fake_length;
1233 when "11001" => ipb_master_in.ipb_rdata <= x"00" & "000" & TTS_coded & state & pattern & x"00";
1234 when "11010" => ipb_master_in.ipb_rdata <= ReSync_cntr & x"0" & TTS_disable;
1235 when "11100" => ipb_master_in.ipb_rdata <= LocalL1A_cfg;
1236 when "11101" => ipb_master_in.ipb_rdata <= x"0000" & "000" & mon_evt_wc(47 downto 32) & '0';
1237 when "11110" => ipb_master_in.ipb_rdata <= DNA(31 downto 0);
1238 when "11111" => ipb_master_in.ipb_rdata <= "0000000" & DNA(56 downto 32);
1239 when others => ipb_master_in.ipb_rdata <= (others => '0');
1242 ipb_master_in.ipb_rdata <= AMC_data or CounterDoB(63 downto 32) or CounterDoB(31 downto 0) or I2C_data or sysmon_data or SFP_data or ttc_data;
1245 rst_cntr <= cmd(1) or cmd(0);
1246 process(sysClk, rst_cntr,reset)
1248 if(reset = '1' or rst_cntr = '1')then
1249 TTC_serr_cntr <= (others =>'0');
1250 TTC_derr_cntr <= (others =>'0');
1251 TTC_BcntErr_cntr <= (others =>'0');
1252 L1A_cntr <= (others =>'0');
1253 L1A_OFW_cntr <= (others =>'0');
1254 L1A_BUSY_cntr <= (others =>'0');
1255 L1A_LOS_cntr <= (others =>'0');
1256 run_cntr <= (others =>'0');
1257 ready_cntr <= (others =>'0');
1258 busy_cntr <= (others =>'0');
1259 sync_cntr <= (others =>'0');
1260 ovfl_cntr <= (others =>'0');
1261 ReSync_cntr <= (others =>'0');
1262 elsif(sysClk'event and sysClk = '1')then
1263 if(inc_serr = '1')then
1264 TTC_serr_cntr <= TTC_serr_cntr + 1;
1266 if(inc_derr = '1')then
1267 TTC_derr_cntr <= TTC_derr_cntr + 1;
1269 if(inc_bcnterr = '1')then
1270 TTC_BcntErr_cntr <= TTC_BcntErr_cntr + 1;
1272 if(inc_l1ac = '1')then
1273 L1A_cntr <= L1A_cntr + 1;
1274 if(state = x"1")then
1275 L1A_OFW_cntr <= L1A_OFW_cntr + 1;
1277 if(state = x"4")then
1278 L1A_BUSY_cntr <= L1A_BUSY_cntr + 1;
1280 if(state = x"2")then
1281 L1A_LOS_cntr <= L1A_LOS_cntr + 1;
1285 run_cntr <= run_cntr + 1;
1286 if(state(3 downto 2) = "10")then
1287 ready_cntr <= ready_cntr + 1;
1289 if(state(3 downto 2) = "01")then
1290 busy_cntr <= busy_cntr + 1;
1292 if(state(3) = '0' and state(1) = '1')then
1293 sync_cntr <= sync_cntr + 1;
1295 if(state(3) = '0' and state(0) = '1')then
1296 ovfl_cntr <= ovfl_cntr + 1;
1299 if(ttc_resync = '1')then
1300 ReSync_cntr <= ReSync_cntr + 1;
1304 ttc_resync <= ttc_soft_reset;
1305 process(sysClk,reset)
1308 TTS_wait <= (others => '0');
1309 elsif(sysClk'event and sysClk = '1')then
1310 if(ttc_resync = '1')then
1311 TTS_wait <= (others => '0');
1312 elsif(TTS_wait(20) = '0' and sync_lost = '0' and AllEventBuilt = '1')then
1313 TTS_wait <= TTS_wait + 1;
1317 process(sysClk,reset)
1321 elsif(sysClk'event and sysClk = '1')then
1322 if(run = '0' and conf(12) = '1')then
1324 elsif(run = '0')then
1325 state <= "0100";
-- changed upon request starting version 0x3023
1326 elsif(ttc_resync = '1')then
1330 when "1000" => -- Ready
1331 if(TTS_coded(4) = '1')then
1333 elsif(TTS_coded(3) = '1')then
1335 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1337 elsif(L1Aovfl_warning = '1' or evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1' or TTS_coded(0) = '1')then
1340 when "0001" => -- OFW
1341 if(TTS_coded(4) = '1')then
1343 elsif(TTS_coded(3) = '1')then
1345 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1347 elsif(evn_fifo_full = '1' or rate_OFWp = '1' or TTS_coded(1) = '1')then
1349 elsif(L1Aovfl_warning = '0' and rate_OFWp = '0' and TTS_coded(0) = '0')then
1352 when "0100" => -- Busy
1353 if(TTS_wait(20) = '0')then
1354 elsif(TTS_coded(4) = '1')then
1356 elsif(TTS_coded(3) = '1')then
1358 elsif(sync_lost = '1' or TTS_coded(2) = '1')then
1360 elsif(evn_fifo_full = '0' and rate_OFWp = '0' and TTS_coded(1) = '0')then
1363 when others => null;
-- x"0" or x"f" disconnected, x"2" OOS, x"c" error
1368 ipb_master_in.ipb_err <= '0';
1369 i_AMC_if:
AMC_if PORT MAP(
1375 GTXreset => amc_GTXreset,
1376 resetCntr => rst_cntr,
1377 ReSync => ttc_resync,
1378 AllEventBuilt => AllEventBuilt ,
1383 NoReSyncFake => conf
(11),
1384 WaitMonBuf => conf
(14),
1385 fake_length => fake_length ,
1386 en_localL1A => conf
(2),
1387 T1_version => K7version
(7 downto 0),
1388 Source_ID => Source_ID,
1390 TTS_disable => TTS_disable ,
1391 AMC_Ready => AMC_Ready,
1394 AMC_REFCLK_P => AMC_REFCLK_P ,
1395 AMC_REFCLK_N => AMC_REFCLK_N ,
1400 AMC_status => AMC_status,
1401 evt_data => EventData,
1402 evt_data_we => evt_data_we ,
1403 evt_buf_full => evt_buf_full ,
1404 evt_data_re => evt_data_re ,
1405 evt_data_rdy => evt_data_rdy ,
1407 MonBuf_empty => MonBuf_empty ,
1408 mon_evt_wc => mon_evt_wc,
1409 mon_ctrl => mon_ctrl,
1410 mon_buf_avl => mon_buf_avl ,
1412 buf_rqst => EventBuf_rqst,
1413 ipb_write => ipb_master_out.ipb_write ,
1414 ipb_strobe => ipb_master_out.ipb_strobe ,
1415 ipb_addr => ipb_master_out.ipb_addr ,
1416 ipb_wdata => ipb_master_out.ipb_wdata ,
1417 ipb_rdata => AMC_data,
1422 ttc_evcnt_reset => ttc_evcnt_reset ,
1423 event_number_avl => event_number_avl ,
1424 event_number => event_number ,
1425 evn_buf_full => evn_fifo_full,
1426 ovfl_warning => L1Aovfl_warning ,
1428 TTS_coded => TTS_coded
1430 AMC_reset <= not sys_lock or cmd(0) or cmd0_dl(1);
1431 amc_GTXreset <= wr_AMC_en or conf7_fall or not sys_lock;
1432 sys_lock_n <= not sys_lock;
1438 daq_reset => lsc_reset,
1439 gtx_reset => lsc_GTXreset,
1440 rstCntr => rst_cntr,
1444 SFP_ABS => SFP_ABS
(2 downto 0),
1446 SFP_down => SFP_down,
1447 inc_ddr_pa => inc_ddr_pa,
1448 evt_data_rdy => evt_data_rdy ,
1449 EventData_in => EventData,
1450 EventData_we => evt_data_we,
1451 EventData_re => evt_data_re,
1452 evt_buf_full => evt_buf_full ,
1453 buf_rqst => EventBuf_rqst,
1454 WaitMonBuf => conf
(14),
1455 MonBufOverWrite => conf
(13),
1456 MonBuf_avl => mon_buf_avl,
1457 MonBuf_empty => MonBuf_empty ,
1458 MonBufOvfl => MonBufOvfl,
1459 mon_evt_cnt => mon_evt_cnt ,
1460 WrtMonBlkDone => WrtMonBlkDone ,
1461 WrtMonEvtDone => WrtMonEvtDone ,
1462 wport_rdy => wport_rdy,
1463 wport_FIFO_full => wport_FIFO_full ,
1464 EventBufAddr_we => EventBufAddr_we ,
1465 EventBufAddr => EventBufAddr ,
1466 SFP0_RXN => SFP0_RXN,
1467 SFP0_RXP => SFP0_RXP,
1468 SFP1_RXN => SFP1_RXN,
1469 SFP1_RXP => SFP1_RXP,
1470 SFP2_RXN => SFP2_RXN,
1471 SFP2_RXP => SFP2_RXP,
1472 SFP0_TXN => SFP0_TXN,
1473 SFP0_TXP => SFP0_TXP,
1474 SFP1_TXN => SFP1_TXN,
1475 SFP1_TXP => SFP1_TXP,
1476 SFP2_TXN => SFP2_TXN,
1477 SFP2_TXP => SFP2_TXP,
1478 SFP_REFCLK_P => SFP_REFCLK_P ,
1479 SFP_REFCLK_N => SFP_REFCLK_N ,
1481 ipb_write => ipb_master_out.ipb_write ,
1482 ipb_strobe => ipb_master_out.ipb_strobe ,
1483 ipb_addr => ipb_master_out.ipb_addr ,
1484 ipb_wdata => ipb_master_out.ipb_wdata ,
1485 ipb_rdata => SFP_data,
1488 --lsc_reset <= not sys_lock or cmd(2)
or cmd2_dl(
1);
1489 --lsc_GTXreset <= wr_enSFP or not sys_lock or cmd2_dl(0);
1490 lsc_reset <= lsc_start or cmd(2) or cmd2_dl(1);
1491 lsc_GTXreset <= lsc_start or cmd2_dl(0);
1492 process(DRPclk, sys_lock)
1494 if(sys_lock = '0')then
1496 elsif(DRPclk'event and DRPclk = '1')then
1497 if(CLK_rdy = '1')then
1507 addr => ipb_master_out.ipb_addr
(15 downto 0),
1508 data => sysmon_data ,
1509 device_temp => device_temp ,
1513 i_counter_L : BRAM_TDP_MACRO
1515 BRAM_SIZE =>
"36Kb",
-- Target BRAM, "18Kb" or "36Kb"
1516 DEVICE =>
"7SERIES",
-- Target Device: "VIRTEX5",
"VIRTEX6",
"7SERIES",
"SPARTAN6"
1517 DOA_REG =>
0,
-- Optional port A output register (0 or 1)
1518 DOB_REG =>
0,
-- Optional port B output register (0 or 1)
1519 INIT_A => X"000000000",
-- Initial values on A output port
1520 INIT_B => X"000000000",
-- Initial values on B output port
1521 INIT_FILE =>
"NONE",
1522 READ_WIDTH_A =>
32,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1523 READ_WIDTH_B =>
32,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1524 SIM_COLLISION_CHECK =>
"NONE",
-- Collision check enable "ALL",
"WARNING_ONLY",
1525 -- "GENERATE_X_ONLY" or "NONE"
1526 SRVAL_A => X"000000000",
-- Set/Reset value for A port output
1527 SRVAL_B => X"000000000",
-- Set/Reset value for B port output
1528 WRITE_MODE_A =>
"WRITE_FIRST",
-- "WRITE_FIRST",
"READ_FIRST" or "NO_CHANGE"
1529 WRITE_MODE_B =>
"WRITE_FIRST",
-- "WRITE_FIRST",
"READ_FIRST" or "NO_CHANGE"
1530 WRITE_WIDTH_A =>
32,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1531 WRITE_WIDTH_B =>
32) -- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1533 DOA => CounterDoA
(31 downto 0),
-- Output port-A data, width defined by READ_WIDTH_A parameter
1534 DOB => CounterDoB
(31 downto 0),
-- Output port-B data, width defined by READ_WIDTH_B parameter
1535 ADDRA => counter_wa,
-- Input port-A address, width defined by Port A depth
1536 ADDRB => counter_ra_l,
-- Input port-B address, width defined by Port B depth
1537 CLKA => sysclk,
-- 1-bit input port-A clock
1538 CLKB => clk125,
-- 1-bit input port-B clock
1539 DIA => CounterDi
(31 downto 0),
-- Input port-A data, width defined by WRITE_WIDTH_A parameter
1540 DIB =>
(others => '0'
),
-- Input port-B data, width defined by WRITE_WIDTH_B parameter
1541 ENA => '1',
-- 1-bit input port-A enable
1542 ENB => '1',
-- 1-bit input port-B enable
1543 REGCEA => '1',
-- 1-bit input port-A output register enable
1544 REGCEB => '1',
-- 1-bit input port-B output register enable
1545 RSTA => '0',
-- 1-bit input port-A reset
1546 RSTB => '0',
-- 1-bit input port-B reset
1547 WEA => counter_we,
-- Input port-A write enable, width defined by Port A depth
1548 WEB => x"0"
-- Input port-B write enable, width defined by Port B depth
1550 i_counter_H : BRAM_TDP_MACRO
1552 BRAM_SIZE =>
"18Kb",
-- Target BRAM, "18Kb" or "36Kb"
1553 DEVICE =>
"7SERIES",
-- Target Device: "VIRTEX5",
"VIRTEX6",
"7SERIES",
"SPARTAN6"
1554 DOA_REG =>
0,
-- Optional port A output register (0 or 1)
1555 DOB_REG =>
0,
-- Optional port B output register (0 or 1)
1556 INIT_A => X"000000000",
-- Initial values on A output port
1557 INIT_B => X"000000000",
-- Initial values on B output port
1558 INIT_FILE =>
"NONE",
1559 READ_WIDTH_A =>
16,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1560 READ_WIDTH_B =>
16,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1561 SIM_COLLISION_CHECK =>
"NONE",
-- Collision check enable "ALL",
"WARNING_ONLY",
1562 -- "GENERATE_X_ONLY" or "NONE"
1563 SRVAL_A => X"000000000",
-- Set/Reset value for A port output
1564 SRVAL_B => X"000000000",
-- Set/Reset value for B port output
1565 WRITE_MODE_A =>
"WRITE_FIRST",
-- "WRITE_FIRST",
"READ_FIRST" or "NO_CHANGE"
1566 WRITE_MODE_B =>
"WRITE_FIRST",
-- "WRITE_FIRST",
"READ_FIRST" or "NO_CHANGE"
1567 WRITE_WIDTH_A =>
16,
-- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1568 WRITE_WIDTH_B =>
16) -- Valid values are 1-36 (19-36 only valid when BRAM_SIZE="36Kb")
1570 DOA => CounterDoA
(47 downto 32),
-- Output port-A data, width defined by READ_WIDTH_A parameter
1571 DOB => CounterDoB
(47 downto 32),
-- Output port-B data, width defined by READ_WIDTH_B parameter
1572 ADDRA => counter_wa,
-- Input port-A address, width defined by Port A depth
1573 ADDRB => counter_ra_h,
-- Input port-B address, width defined by Port B depth
1574 CLKA => sysclk,
-- 1-bit input port-A clock
1575 CLKB => clk125,
-- 1-bit input port-B clock
1576 DIA => CounterDi
(47 downto 32),
-- Input port-A data, width defined by WRITE_WIDTH_A parameter
1577 DIB =>
(others => '0'
),
-- Input port-B data, width defined by WRITE_WIDTH_B parameter
1578 ENA => '1',
-- 1-bit input port-A enable
1579 ENB => '1',
-- 1-bit input port-B enable
1580 REGCEA => '1',
-- 1-bit input port-A output register enable
1581 REGCEB => '1',
-- 1-bit input port-B output register enable
1582 RSTA => '0',
-- 1-bit input port-A reset
1583 RSTB => '0',
-- 1-bit input port-B reset
1584 WEA => counter_we
(1 downto 0),
-- Input port-A write enable, width defined by Port A depth
1585 WEB => "
00"
-- Input port-B write enable, width defined by Port B depth
1587 counter_we <= x"f" when div(1 downto 0) = "11" else x"0";
1590 if(ipb_clk'event and ipb_clk = '1')then
1591 newIPADDRSyncRegs <= newIPADDRSyncRegs(1 downto 0) & newIPADDR;
1592 rst_ipbus <= not newIPADDRSyncRegs(2) and newIPADDR;
1595 CounterDi(47 downto 8) <= (others => '0') when CntrRstCycle = '1' else
1596 CounterDoA(47 downto 8) + 1 when CounterDi(7 downto 0) < CounterDoA(7 downto 0) else CounterDoA(47 downto 8);
1597 counter_wa <= "00000" & div(6 downto 2);
1598 counter_ra_l(4 downto 0) <= ipb_master_out.ipb_addr(5 downto 1);
1599 counter_ra_h(4 downto 0) <= ipb_master_out.ipb_addr(5 downto 1);
1600 counter_ra_l(5) <= ipb_master_out.ipb_addr(0);
1601 counter_ra_h(5) <= not ipb_master_out.ipb_addr(0);
1602 counter_ra_l(9 downto 6) <= x"0" when ipb_master_out.ipb_addr(15 downto 6) = misc_cntr_addr(15 downto 6) else x"1";
1603 counter_ra_h(9 downto 6) <= x"0" when ipb_master_out.ipb_addr(15 downto 6) = misc_cntr_addr(15 downto 6) else x"1";
1606 if(sysclk'event and sysclk = '1')then
1607 if(CntrRst = '1')then
1608 div <= (others => '0');
1612 resetCntr_SyncRegs <= resetCntr_SyncRegs(1 downto 0) & rst_cntr;
1613 CntrRst <= not resetCntr_SyncRegs(2) and resetCntr_SyncRegs(1);
1614 if(CntrRst = '1')then
1615 CntrRstCycle <= '1';
1616 elsif(and_reduce(div) = '1')then
1617 CntrRstCycle <= '0';
1619 if(CntrRstCycle = '1')then
1620 CounterDi(7 downto 0) <= (others => '0');
1622 case div(6 downto 2) is
1623 when "00000" => CounterDi(7 downto 0) <= TTC_serr_cntr;
1624 when "00001" => CounterDi(7 downto 0) <= TTC_derr_cntr;
1625 when "00010" => CounterDi(7 downto 0) <= TTC_BcntErr_cntr;
1626 when "00011" => CounterDi(7 downto 0) <= L1A_cntr;
1627 when "00100" => CounterDi(7 downto 0) <= run_cntr;
1628 when "00101" => CounterDi(7 downto 0) <= ready_cntr;
1629 when "00110" => CounterDi(7 downto 0) <= busy_cntr;
1630 when "00111" => CounterDi(7 downto 0) <= sync_cntr;
1631 when "01000" => CounterDi(7 downto 0) <= ovfl_cntr;
1632 when "01001" => CounterDi(7 downto 0) <= L1A_OFW_cntr;
1633 when "01010" => CounterDi(7 downto 0) <= L1A_BUSY_cntr;
1634 when "01011" => CounterDi(7 downto 0) <= L1A_LOS_cntr;
1635 when others => CounterDi(7 downto 0) <= (others => '0');
1640 i_DNA_PORT : DNA_PORT
1642 SIM_DNA_VALUE => X"00123456789abcd"
-- Specifies a sample 57-bit DNA value for simulation
1645 DOUT => DNA_out,
-- 1-bit output: DNA output data.
1646 CLK => ipb_clk,
-- 1-bit input: Clock input.
1647 DIN => '0',
-- 1-bit input: User data input pin.
1648 READ => load_DNA,
-- 1-bit input: Active high load DNA, active low read input.
1649 SHIFT => shift_DNA
(1) -- 1-bit input: Active high shift enable input.
1653 if(ipb_clk'event and ipb_clk = '1')then
1654 load_DNA <= not sys_lock;
1655 if(sys_lock = '0')then
1656 shift_DNA(0) <= '0';
1657 elsif(load_DNA = '1')then
1658 shift_DNA(0) <= '1';
1659 elsif(shift_DNA(2) = '1' and or_reduce(DNA_cntr(5 downto 1)) = '0')then
1660 shift_DNA(0) <= '0';
1662 shift_DNA(2) <= shift_DNA(0);
1663 if(shift_DNA(2) = '1')then
1664 DNA_cntr <= DNA_cntr - 1;
1665 elsif(shift_DNA(0) = '1')then
1666 DNA_cntr <= "110111";
1668 if(shift_DNA(2) = '1')then
1669 DNA <= DNA(55 downto 0) & DNA_OUT;
1675 if(ipb_clk'event and ipb_clk = '0')then
1676 shift_DNA(1) <= shift_DNA(0);