CMX
CMX firmware code in-line documentation
 All Classes Namespaces Files Functions Variables
CMX_cable_clocked_80Mbps_output_module.vhd
Go to the documentation of this file.
1 ----------------------------------------------------------------------------------
10 ----------------------------------------------------------------------------------
11 library IEEE;
12 use IEEE.STD_LOGIC_1164.ALL;
13 use IEEE.NUMERIC_STD.ALL;
14 
15 library UNISIM;
16 use UNISIM.VComponents.all;
17 
18 library work;
19 use work.CMXpackage.all;
20 
21 
23  generic (
25  port (
26  data : in std_logic_vector( (numbits_in_cable_connector*2)-1 downto 0);
27  ddr_data_out : out std_logic_vector(numbits_in_cable_connector downto 0); --
28  --includes clock
29  buf_clk40 : in std_logic; -- global 40 MHz clock
30  buf_clk40_center : in std_logic; -- global 40 MHz clock pushed by 90^o
31  buf_clk200 : in std_logic; -- global 200 MHz clock for iodelay calibration
32  pll_locked : in std_logic; -- is the main MMCM locked?
33 
34  del_array: in cable_del_array_type(numbits_in_cable_connector downto 0);
35  upload_delays: in std_logic
36  );
37 
38 end CMX_cable_clocked_80Mbps_output_module;
39 
40 architecture Behavioral of CMX_cable_clocked_80Mbps_output_module is
41 
42 
43  signal PDATA : std_logic_vector(numbits_in_cable_connector-1 downto 0); --DDR data
44  signal NDATA : std_logic_vector(numbits_in_cable_connector-1 downto 0);
45 
46  signal ddr_data_out_nondel : std_logic_vector(numbits_in_cable_connector downto 0);
47 
48 
49  signal i_pll_locked: std_logic;
50 
51 
52 
53 
54 
55  --component CMX_output_data_delay
56  -- port (
57  -- data_in : in mat_var(numactchan-1 downto 0);
58  -- data_out : out mat_var(numactchan-1 downto 0);
59  -- REF_CLK_200 : in std_logic;
60  -- REF_CLK_READY : in std_logic;
61  -- CLK_40 : in std_logic;
62  -- del_register : in del_register_type;
63  -- upload_delays : in std_logic;
64  -- IDELAYCTRL_RDY : out std_logic_vector(num_IDELAYCTRL-1 downto 0));
65  --end component;
66 
67 
68 begin
69 
70 
71 
73 
76 
77  --now connect to ODDR
78  bitgen: for bitnum in 0 to (numbits_in_cable_connector-1) generate
79 
80  ODDR_inst : ODDR
81  generic map(
82  DDR_CLK_EDGE => "SAME_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE"
83  INIT => '0', -- Initial value for Q port ('1' or '0')
84  SRTYPE => "SYNC") -- Reset Type ("ASYNC" or "SYNC")
85  port map (
86  Q => ddr_data_out_nondel(bitnum), -- 1-bit DDR output
87  C => buf_clk40, -- 1-bit clock input
88  CE => '1', -- 1-bit clock enable input
89  D1 => PDATA(bitnum), -- 1-bit data input (positive edge)
90  D2 => NDATA(bitnum), -- 1-bit data input (negative edge)
91  R => i_pll_locked, -- 1-bit reset input
92  S => '0' -- 1-bit set input
93  );
94 
95  end generate bitgen;
96 
97  --generate forwarded clock
98  ODDR_inst : ODDR
99  generic map(
100  DDR_CLK_EDGE => "SAME_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE"
101  INIT => '0', -- Initial value for Q port ('1' or '0')
102  SRTYPE => "SYNC") -- Reset Type ("ASYNC" or "SYNC")
103  port map (
104  Q => ddr_data_out_nondel(numbits_in_cable_connector), -- 1-bit DDR output
105  C => buf_clk40_center , -- 1-bit clock input
106  CE => '1', -- 1-bit clock enable input
107  D1 => '1', -- 1-bit data input (positive edge)
108  D2 => '0', -- 1-bit data input (negative edge)
109  R => i_pll_locked, -- 1-bit reset input
110  S => '0' -- 1-bit set input
111  );
112 
114 
115  --for now no delay circuits
116 
117 
118 
119  ----the output delay module
120  --CMX_output_data_delay_inst: CMX_output_data_delay
121  -- port map (
122  -- data_in => P_out_nondel,
123  -- data_out => P_out,
124  -- REF_CLK_200 => buf_clk200,
125  -- REF_CLK_READY => pll_locked,
126  -- CLK_40 => buf_clk40,
127  -- del_register => del_register,
128  -- upload_delays => upload_delays,
129  -- IDELAYCTRL_RDY => open);
130  --
131  --counter_enable_out<=counter_enable;
132 
133 
134 
135 end Behavioral;
136 
std_logic_vector (numbits_in_cable_connector - 1 downto 0) NDATA
std_logic_vector (numbits_in_cable_connector downto 0) ddr_data_out_nondel
in del_arraycable_del_array_type (numbits_in_cable_connector downto 0)
std_logic_vector (numbits_in_cable_connector - 1 downto 0) PDATA
out ddr_data_outstd_logic_vector (numbits_in_cable_connector downto 0)
in datastd_logic_vector ((numbits_in_cable_connector * 2) - 1 downto 0)