##// END OF EJS Templates
sauvegarde modif waveform picker
pellion -
r230:61f51a42947c JC
parent child
Show More
@@ -0,0 +1,48
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe PELLION
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 ----------------------------------------------------------------------------
22 LIBRARY IEEE;
23 USE IEEE.numeric_std.ALL;
24 USE IEEE.std_logic_1164.ALL;
25
26 ENTITY RR_Arbiter_4 IS
27
28 GENERIC (
29 NB_INPUT : INTEGER := 4);
30
31 PORT (
32 clk : IN STD_LOGIC;
33 rstn : IN STD_LOGIC;
34 in_valid : IN STD_LOGIC_VECTOR(NB_INPUT DOWNTO 0);
35 out_grant : OUT STD_LOGIC_VECTOR(NB_INPUT DOWNTO 0)
36 );
37
38 END RR_Arbiter;
39
40 ARCHITECTURE beh OF RR_Arbiter IS
41
42 SIGNAL grant_vector : STD_LOGIC_VECTOR(NB_INPUT DOWNTO 0);
43
44 BEGIN -- beh
45
46
47
48 END beh;
@@ -0,0 +1,79
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe PELLION
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 ----------------------------------------------------------------------------
22 LIBRARY IEEE;
23 USE IEEE.numeric_std.ALL;
24 USE IEEE.std_logic_1164.ALL;
25
26 ENTITY RR_Arbiter_4 IS
27
28 PORT (
29 clk : IN STD_LOGIC;
30 rstn : IN STD_LOGIC;
31 in_valid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
32 out_grant : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
33 );
34
35 END RR_Arbiter_4;
36
37 ARCHITECTURE beh OF RR_Arbiter_4 IS
38
39 SIGNAL out_grant_s : STD_LOGIC_VECTOR(3 DOWNTO 0);
40 SIGNAL grant_sel : STD_LOGIC_VECTOR(1 DOWNTO 0);
41
42 BEGIN -- beh
43
44 out_grant <= out_grant_s;
45
46 out_grant_s <= "0001" WHEN grant_sel = "00" AND in_valid(0) = '1' ELSE
47 "0010" WHEN grant_sel = "00" AND in_valid(1) = '1' ELSE
48 "0100" WHEN grant_sel = "00" AND in_valid(2) = '1' ELSE
49 "1000" WHEN grant_sel = "00" AND in_valid(3) = '1' ELSE
50 "0010" WHEN grant_sel = "01" AND in_valid(1) = '1' ELSE
51 "0100" WHEN grant_sel = "01" AND in_valid(2) = '1' ELSE
52 "1000" WHEN grant_sel = "01" AND in_valid(3) = '1' ELSE
53 "0001" WHEN grant_sel = "01" AND in_valid(0) = '1' ELSE
54 "0100" WHEN grant_sel = "10" AND in_valid(2) = '1' ELSE
55 "1000" WHEN grant_sel = "10" AND in_valid(3) = '1' ELSE
56 "0001" WHEN grant_sel = "10" AND in_valid(0) = '1' ELSE
57 "0010" WHEN grant_sel = "10" AND in_valid(1) = '1' ELSE
58 "1000" WHEN grant_sel = "11" AND in_valid(3) = '1' ELSE
59 "0001" WHEN grant_sel = "11" AND in_valid(0) = '1' ELSE
60 "0010" WHEN grant_sel = "11" AND in_valid(1) = '1' ELSE
61 "0100" WHEN grant_sel = "11" AND in_valid(2) = '1' ELSE
62 "0000";
63
64 PROCESS (clk, rstn)
65 BEGIN -- PROCESS
66 IF rstn = '0' THEN -- asynchronous reset (active low)
67 grant_sel <= "00";
68 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
69 CASE out_grant_s IS
70 WHEN "0001" => grant_sel <= "01";
71 WHEN "0010" => grant_sel <= "10";
72 WHEN "0100" => grant_sel <= "11";
73 WHEN "1000" => grant_sel <= "00";
74 WHEN OTHERS => grant_sel <= grant_sel;
75 END CASE;
76 END IF;
77 END PROCESS;
78
79 END beh;
@@ -0,0 +1,164
1
2 ------------------------------------------------------------------------------
3 -- This file is a part of the LPP VHDL IP LIBRARY
4 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
5 --
6 -- This program is free software; you can redistribute it and/or modify
7 -- it under the terms of the GNU General Public License as published by
8 -- the Free Software Foundation; either version 3 of the License, or
9 -- (at your option) any later version.
10 --
11 -- This program is distributed in the hope that it will be useful,
12 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
13 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 -- GNU General Public License for more details.
15 --
16 -- You should have received a copy of the GNU General Public License
17 -- along with this program; if not, write to the Free Software
18 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 -- Author : Jean-christophe Pellion
21 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
22 -- jean-christophe.pellion@easii-ic.com
23 -------------------------------------------------------------------------------
24 -- 1.0 - initial version
25 -- 1.1 - (01/11/2013) FIX boundary error (1kB address should not be crossed by BURSTS)
26 -------------------------------------------------------------------------------
27 LIBRARY ieee;
28 USE ieee.std_logic_1164.ALL;
29 USE ieee.numeric_std.ALL;
30 LIBRARY grlib;
31 USE grlib.amba.ALL;
32 USE grlib.stdlib.ALL;
33 USE grlib.devices.ALL;
34 USE GRLIB.DMA2AHB_Package.ALL;
35 LIBRARY lpp;
36 USE lpp.lpp_amba.ALL;
37 USE lpp.apb_devices_list.ALL;
38 USE lpp.lpp_memory.ALL;
39 USE lpp.lpp_dma_pkg.ALL;
40 USE lpp.lpp_waveform_pkg.ALL;
41 LIBRARY techmap;
42 USE techmap.gencomp.ALL;
43
44
45 ENTITY lpp_dma_multiSource IS
46 GENERIC (
47 tech : INTEGER := inferred;
48 hindex : INTEGER := 2
49 );
50 PORT (
51 -- AMBA AHB system signals
52 HCLK : IN STD_ULOGIC;
53 HRESETn : IN STD_ULOGIC;
54 --
55 run : IN STD_LOGIC;
56 -- AMBA AHB Master Interface
57 AHB_Master_In : IN AHB_Mst_In_Type;
58 AHB_Master_Out : OUT AHB_Mst_Out_Type;
59 --
60 send : IN STD_LOGIC;
61 valid_burst : IN STD_LOGIC; -- (1 => BURST , 0 => SINGLE)
62 done : OUT STD_LOGIC;
63 ren : OUT STD_LOGIC;
64 address : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
65 data : IN STD_LOGIC_VECTOR(31 DOWNTO 0)
66 );
67 END;
68
69 ARCHITECTURE Behavioral OF lpp_dma_multiSource IS
70 -----------------------------------------------------------------------------
71 SIGNAL DMAIn : DMA_In_Type;
72 SIGNAL DMAOut : DMA_OUt_Type;
73 -----------------------------------------------------------------------------
74 -----------------------------------------------------------------------------
75 -- CONTROL
76 SIGNAL single_send : STD_LOGIC;
77 SIGNAL burst_send : STD_LOGIC;
78
79 -----------------------------------------------------------------------------
80 -- SEND SINGLE MODULE
81 SIGNAL single_dmai : DMA_In_Type;
82 SIGNAL single_send : STD_LOGIC;
83 SIGNAL single_send_ok : STD_LOGIC;
84 SIGNAL single_send_ko : STD_LOGIC;
85 -----------------------------------------------------------------------------
86 -- SEND SINGLE MODULE
87 SIGNAL burst_dmai : DMA_In_Type;
88 SIGNAL burst_send : STD_LOGIC;
89 SIGNAL burst_send_ok : STD_LOGIC;
90 SIGNAL burst_send_ko : STD_LOGIC;
91 SIGNAL burst_ren : STD_LOGIC;
92 -----------------------------------------------------------------------------
93 SIGNAL data_2_halfword : STD_LOGIC_VECTOR(31 DOWNTO 0);
94 BEGIN
95
96 -----------------------------------------------------------------------------
97 -- DMA to AHB interface
98 DMA2AHB_1 : DMA2AHB
99 GENERIC MAP (
100 hindex => hindex,
101 vendorid => VENDOR_LPP,
102 deviceid => 10,
103 version => 0,
104 syncrst => 1,
105 boundary => 1) -- FIX 11/01/2013
106 PORT MAP (
107 HCLK => HCLK,
108 HRESETn => HRESETn,
109 DMAIn => DMAIn,
110 DMAOut => DMAOut,
111
112 AHBIn => AHB_Master_In,
113 AHBOut => AHB_Master_Out);
114 -----------------------------------------------------------------------------
115
116 single_send <= send WHEN valid_burst = '0' ELSE '0';
117 burst_send <= send WHEN valid_burst = '1' ELSE '0';
118 DMAIn <= single_dmai WHEN valid_burst = '0' ELSE burst_dmai;
119
120 done <= single_send_ok OR single_send_ko WHEN valid_burst = '0' ELSE
121 burst_send_ok OR burst_send_ko;
122
123 ren <= burst_fifo_ren WHEN valid_burst = '1' ELSE
124 NOT single_send_ok;
125
126 -----------------------------------------------------------------------------
127 -- SEND 1 word by DMA
128 -----------------------------------------------------------------------------
129 lpp_dma_send_1word_1 : lpp_dma_send_1word
130 PORT MAP (
131 HCLK => HCLK,
132 HRESETn => HRESETn,
133 DMAIn => single_dmai,
134 DMAOut => DMAOut,
135
136 send => single_send,
137 address => address,
138 data => data,
139
140 send_ok => single_send_ok, -- TODO
141 send_ko => single_send_ko -- TODO
142 );
143
144 -----------------------------------------------------------------------------
145 -- SEND 16 word by DMA (in burst mode)
146 -----------------------------------------------------------------------------
147 data_2_halfword(31 DOWNTO 0) <= data(15 DOWNTO 0) & data (31 DOWNTO 16);
148
149 lpp_dma_send_16word_1 : lpp_dma_send_16word
150 PORT MAP (
151 HCLK => HCLK,
152 HRESETn => HRESETn,
153 DMAIn => burst_dmai,
154 DMAOut => DMAOut,
155
156 send => burst_send,
157 address => address,
158 data => data_2_halfword,
159 ren => burst_ren,
160
161 send_ok => burst_send_ok,
162 send_ko => burst_send_ko);
163
164 END Behavioral;
@@ -0,0 +1,164
1
2 ------------------------------------------------------------------------------
3 -- This file is a part of the LPP VHDL IP LIBRARY
4 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
5 --
6 -- This program is free software; you can redistribute it and/or modify
7 -- it under the terms of the GNU General Public License as published by
8 -- the Free Software Foundation; either version 3 of the License, or
9 -- (at your option) any later version.
10 --
11 -- This program is distributed in the hope that it will be useful,
12 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
13 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 -- GNU General Public License for more details.
15 --
16 -- You should have received a copy of the GNU General Public License
17 -- along with this program; if not, write to the Free Software
18 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 -- Author : Jean-christophe Pellion
21 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
22 -- jean-christophe.pellion@easii-ic.com
23 -------------------------------------------------------------------------------
24 -- 1.0 - initial version
25 -- 1.1 - (01/11/2013) FIX boundary error (1kB address should not be crossed by BURSTS)
26 -------------------------------------------------------------------------------
27 LIBRARY ieee;
28 USE ieee.std_logic_1164.ALL;
29 USE ieee.numeric_std.ALL;
30 LIBRARY grlib;
31 USE grlib.amba.ALL;
32 USE grlib.stdlib.ALL;
33 USE grlib.devices.ALL;
34 USE GRLIB.DMA2AHB_Package.ALL;
35 LIBRARY lpp;
36 USE lpp.lpp_amba.ALL;
37 USE lpp.apb_devices_list.ALL;
38 USE lpp.lpp_memory.ALL;
39 USE lpp.lpp_dma_pkg.ALL;
40 USE lpp.lpp_waveform_pkg.ALL;
41 LIBRARY techmap;
42 USE techmap.gencomp.ALL;
43
44
45 ENTITY lpp_dma_singleOrBurst IS
46 GENERIC (
47 tech : INTEGER := inferred;
48 hindex : INTEGER := 2
49 );
50 PORT (
51 -- AMBA AHB system signals
52 HCLK : IN STD_ULOGIC;
53 HRESETn : IN STD_ULOGIC;
54 --
55 run : IN STD_LOGIC;
56 -- AMBA AHB Master Interface
57 AHB_Master_In : IN AHB_Mst_In_Type;
58 AHB_Master_Out : OUT AHB_Mst_Out_Type;
59 --
60 send : IN STD_LOGIC;
61 valid_burst : IN STD_LOGIC; -- (1 => BURST , 0 => SINGLE)
62 done : OUT STD_LOGIC;
63 ren : OUT STD_LOGIC;
64 address : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
65 data : IN STD_LOGIC_VECTOR(31 DOWNTO 0)
66 );
67 END;
68
69 ARCHITECTURE Behavioral OF lpp_dma_singleOrBurst IS
70 -----------------------------------------------------------------------------
71 SIGNAL DMAIn : DMA_In_Type;
72 SIGNAL DMAOut : DMA_OUt_Type;
73 -----------------------------------------------------------------------------
74 -----------------------------------------------------------------------------
75 -- CONTROL
76 SIGNAL single_send : STD_LOGIC;
77 SIGNAL burst_send : STD_LOGIC;
78
79 -----------------------------------------------------------------------------
80 -- SEND SINGLE MODULE
81 SIGNAL single_dmai : DMA_In_Type;
82
83 SIGNAL single_send_ok : STD_LOGIC;
84 SIGNAL single_send_ko : STD_LOGIC;
85 -----------------------------------------------------------------------------
86 -- SEND SINGLE MODULE
87 SIGNAL burst_dmai : DMA_In_Type;
88
89 SIGNAL burst_send_ok : STD_LOGIC;
90 SIGNAL burst_send_ko : STD_LOGIC;
91 SIGNAL burst_ren : STD_LOGIC;
92 -----------------------------------------------------------------------------
93 SIGNAL data_2_halfword : STD_LOGIC_VECTOR(31 DOWNTO 0);
94 BEGIN
95
96 -----------------------------------------------------------------------------
97 -- DMA to AHB interface
98 DMA2AHB_1 : DMA2AHB
99 GENERIC MAP (
100 hindex => hindex,
101 vendorid => VENDOR_LPP,
102 deviceid => 10,
103 version => 0,
104 syncrst => 1,
105 boundary => 1) -- FIX 11/01/2013
106 PORT MAP (
107 HCLK => HCLK,
108 HRESETn => HRESETn,
109 DMAIn => DMAIn,
110 DMAOut => DMAOut,
111
112 AHBIn => AHB_Master_In,
113 AHBOut => AHB_Master_Out);
114 -----------------------------------------------------------------------------
115
116 single_send <= send WHEN valid_burst = '0' ELSE '0';
117 burst_send <= send WHEN valid_burst = '1' ELSE '0';
118 DMAIn <= single_dmai WHEN valid_burst = '0' ELSE burst_dmai;
119
120 done <= single_send_ok OR single_send_ko WHEN valid_burst = '0' ELSE
121 burst_send_ok OR burst_send_ko;
122
123 ren <= burst_ren WHEN valid_burst = '1' ELSE
124 NOT single_send_ok;
125
126 -----------------------------------------------------------------------------
127 -- SEND 1 word by DMA
128 -----------------------------------------------------------------------------
129 lpp_dma_send_1word_1 : lpp_dma_send_1word
130 PORT MAP (
131 HCLK => HCLK,
132 HRESETn => HRESETn,
133 DMAIn => single_dmai,
134 DMAOut => DMAOut,
135
136 send => single_send,
137 address => address,
138 data => data,
139
140 send_ok => single_send_ok, -- TODO
141 send_ko => single_send_ko -- TODO
142 );
143
144 -----------------------------------------------------------------------------
145 -- SEND 16 word by DMA (in burst mode)
146 -----------------------------------------------------------------------------
147 data_2_halfword(31 DOWNTO 0) <= data(15 DOWNTO 0) & data (31 DOWNTO 16);
148
149 lpp_dma_send_16word_1 : lpp_dma_send_16word
150 PORT MAP (
151 HCLK => HCLK,
152 HRESETn => HRESETn,
153 DMAIn => burst_dmai,
154 DMAOut => DMAOut,
155
156 send => burst_send,
157 address => address,
158 data => data_2_halfword,
159 ren => burst_ren,
160
161 send_ok => burst_send_ok,
162 send_ko => burst_send_ko);
163
164 END Behavioral;
@@ -0,0 +1,237
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe Pellion
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 -- jean-christophe.pellion@easii-ic.com
22 -------------------------------------------------------------------------------
23 LIBRARY IEEE;
24 USE IEEE.STD_LOGIC_1164.ALL;
25 USE ieee.numeric_std.ALL;
26
27 LIBRARY grlib;
28 USE grlib.amba.ALL;
29 USE grlib.stdlib.ALL;
30 USE grlib.devices.ALL;
31 USE GRLIB.DMA2AHB_Package.ALL;
32
33 LIBRARY lpp;
34 USE lpp.lpp_waveform_pkg.ALL;
35
36 LIBRARY techmap;
37 USE techmap.gencomp.ALL;
38
39 ENTITY lpp_waveform_genaddress IS
40
41 GENERIC (
42 nb_data_by_buffer_size : INTEGER);
43
44 PORT (
45 clk : IN STD_LOGIC;
46 rstn : IN STD_LOGIC;
47 run : IN STD_LOGIC;
48 -------------------------------------------------------------------------
49 -- CONFIG
50 -------------------------------------------------------------------------
51 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
52 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
53 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
54 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
55 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
56 -------------------------------------------------------------------------
57 -- CTRL
58 -------------------------------------------------------------------------
59 empty : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
60 empty_almost : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
61 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
62
63 -------------------------------------------------------------------------
64 -- STATUS
65 -------------------------------------------------------------------------
66 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
67 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
68 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
69
70 -------------------------------------------------------------------------
71 -- ADDR DATA OUT
72 -------------------------------------------------------------------------
73 data_f0_data_out_valid_burst : OUT STD_LOGIC;
74 data_f1_data_out_valid_burst : OUT STD_LOGIC;
75 data_f2_data_out_valid_burst : OUT STD_LOGIC;
76 data_f3_data_out_valid_burst : OUT STD_LOGIC;
77
78 data_f0_data_out_valid : OUT STD_LOGIC;
79 data_f1_data_out_valid : OUT STD_LOGIC;
80 data_f2_data_out_valid : OUT STD_LOGIC;
81 data_f3_data_out_valid : OUT STD_LOGIC;
82
83 data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
84 data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
85 data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
86 data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
87
88 );
89
90 END lpp_waveform_genaddress;
91
92 ARCHITECTURE beh OF lpp_waveform_genaddress IS
93 -----------------------------------------------------------------------------
94 -- Valid gen
95 -----------------------------------------------------------------------------
96 SIGNAL addr_burst_avail : STD_LOGIC_VECTOR(3 DOWNTO 0);
97 SIGNAL data_out_valid : STD_LOGIC_VECTOR(3 DOWNTO 0);
98 SIGNAL data_out_valid_burst : STD_LOGIC_VECTOR(3 DOWNTO 0);
99
100 -----------------------------------------------------------------------------
101 -- Register
102 -----------------------------------------------------------------------------
103 SIGNAL data_addr_v_pre : Data_Vector(3 DOWNTO 0, 31 DOWNTO 0);
104 SIGNAL data_addr_v_reg : Data_Vector(3 DOWNTO 0, 31 DOWNTO 0);
105 SIGNAL data_addr_v_base : Data_Vector(3 DOWNTO 0, 31 DOWNTO 0);
106 SIGNAL data_addr_pre : STD_LOGIC_VECTOR(31 DOWNTO 0); -- TODO
107 SIGNAL data_addr_reg : STD_LOGIC_VECTOR(31 DOWNTO 0); -- TODO
108 SIGNAL data_addr_base : STD_LOGIC_VECTOR(31 DOWNTO 0); -- TODO
109
110 -----------------------------------------------------------------------------
111 --
112 -----------------------------------------------------------------------------
113 SIGNAL status_full_s : STD_LOGIC_VECTOR(3 DOWNTO 0);
114
115 TYPE addr_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(31 DOWNTO 0);
116 SIGNAL addr_v_p : addr_VECTOR(3 DOWNTO 0);
117 SIGNAL addr_v_b : addr_VECTOR(3 DOWNTO 0);
118
119 BEGIN -- beh
120
121 -----------------------------------------------------------------------------
122 -- valid gen
123 -----------------------------------------------------------------------------
124 data_f0_data_out_valid <= data_out_valid(0);
125 data_f1_data_out_valid <= data_out_valid(1);
126 data_f2_data_out_valid <= data_out_valid(2);
127 data_f3_data_out_valid <= data_out_valid(3);
128
129 data_f0_data_out_valid_burst <= data_out_valid_burst(0);
130 data_f1_data_out_valid_burst <= data_out_valid_burst(1);
131 data_f2_data_out_valid_burst <= data_out_valid_burst(2);
132 data_f3_data_out_valid_burst <= data_out_valid_burst(3);
133
134
135 all_bit_data_valid_out: FOR I IN 3 DOWNTO 0 GENERATE
136 addr_burst_avail(I) <= '1' WHEN data_addr_v_pre(I,2) = '0' AND
137 data_addr_v_pre(I,3) = '0' AND
138 data_addr_v_pre(I,4) = '0' AND
139 data_addr_v_pre(I,5) = '0' ELSE '0';
140
141 data_out_valid(I) <= '0' WHEN (status_full_s(I) = '1' AND status_full_ack(I) = '0') ELSE
142 '0' WHEN empty(I) = '1' ELSE
143 '0' WHEN addr_burst_avail(I) = '1' ELSE
144 '0' WHEN (run = '0') ELSE
145 '1';
146
147 data_out_valid_burst(I) <= '0' WHEN (status_full_s(I) = '1' AND status_full_ack(I) = '0') ELSE
148 '0' WHEN empty(I) = '1' ELSE
149 '0' WHEN addr_burst_avail(I) = '0' ELSE
150 '0' WHEN empty_almost(I) = '1' ELSE
151 '0' WHEN (run = '0') ELSE
152 '1';
153 END GENERATE all_bit_data_valid_out;
154
155 -----------------------------------------------------------------------------
156 -- Register
157 -----------------------------------------------------------------------------
158 all_data_bit: FOR J IN 31 DOWNTO 0 GENERATE
159 all_data_addr: FOR I IN 3 DOWNTO 0 GENERATE
160 PROCESS (clk, rstn)
161 BEGIN -- PROCESS
162 IF rstn = '0' THEN -- asynchronous reset (active low)
163 data_addr_v_reg(I,J) <= '0';
164 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
165 IF run = '1' AND status_full_ack(I) = '0' THEN
166 data_addr_v_reg(I,J) <= data_addr_v_pre(I,J);
167 ELSE
168 data_addr_v_reg(I,J) <= data_addr_v_base(I,J);
169 END IF;
170 END IF;
171 END PROCESS;
172
173 data_addr_v_pre(I,J) <= data_addr_v_reg(I,J) WHEN data_ren(I) = '1' ELSE data_addr_pre(J);
174
175 END GENERATE all_data_addr;
176
177 data_addr_reg(J) <= data_addr_v_reg(0,J) WHEN data_ren(0) = '1' ELSE
178 data_addr_v_reg(1,J) WHEN data_ren(1) = '1' ELSE
179 data_addr_v_reg(2,J) WHEN data_ren(2) = '1' ELSE
180 data_addr_v_reg(3,J);
181
182 data_addr_v_base(0,J) <= addr_data_f0(J);
183 data_addr_v_base(1,J) <= addr_data_f1(J);
184 data_addr_v_base(2,J) <= addr_data_f2(J);
185 data_addr_v_base(3,J) <= addr_data_f3(J);
186
187 data_f0_addr_out(J) <= data_addr_v_reg(0,J);
188 data_f1_addr_out(J) <= data_addr_v_reg(1,J);
189 data_f2_addr_out(J) <= data_addr_v_reg(2,J);
190 data_f3_addr_out(J) <= data_addr_v_reg(3,J);
191
192 END GENERATE all_data_bit;
193
194
195
196
197 -----------------------------------------------------------------------------
198 -- ADDER
199 -----------------------------------------------------------------------------
200
201 data_addr_pre <= data_addr_reg + 1;
202
203 -----------------------------------------------------------------------------
204 -- FULL STATUS
205 -----------------------------------------------------------------------------
206 all_status: FOR I IN 3 DOWNTO 0 GENERATE
207 all_bit_addr: FOR J IN 31 DOWNTO 0 GENERATE
208 addr_v_p(I)(J) <= data_addr_v_pre(I,J);
209 addr_v_b(I)(J) <= data_addr_v_base(I,J);
210 END GENERATE all_bit_addr;
211
212 PROCESS (clk, rstn)
213 BEGIN -- PROCESS
214 IF rstn = '0' THEN -- asynchronous reset (active low)
215 status_full_s(I) <= '0';
216 status_full_err(I) <= '0';
217 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
218 IF run = '1' AND status_full_ack(I) = '0' THEN
219 IF addr_v_p(I) = addr_v_b(I) + nb_data_by_buffer THEN
220 status_full_s(I) <= '1';
221 IF status_full_s(I) = '1' AND data_ren(I)= '1' THEN
222 status_full_err(I) <= '1';
223 END IF;
224 END IF;
225 ELSE
226 status_full_s(I) <= '0';
227 status_full_err(I) <= '0';
228 END IF;
229 END IF;
230 END PROCESS;
231
232 END GENERATE all_status;
233
234 status_full <= status_full_s;
235
236
237 END beh;
@@ -0,0 +1,97
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe Pellion
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 -- jean-christophe.pellion@easii-ic.com
22 -------------------------------------------------------------------------------
23 LIBRARY IEEE;
24 USE IEEE.STD_LOGIC_1164.ALL;
25 USE ieee.numeric_std.ALL;
26
27 LIBRARY grlib;
28 USE grlib.amba.ALL;
29 USE grlib.stdlib.ALL;
30 USE grlib.devices.ALL;
31 USE GRLIB.DMA2AHB_Package.ALL;
32
33 LIBRARY lpp;
34 USE lpp.lpp_waveform_pkg.ALL;
35
36 LIBRARY techmap;
37 USE techmap.gencomp.ALL;
38
39 ENTITY lpp_waveform_genaddress_single IS
40
41 GENERIC (
42 nb_burst_available_size : INTEGER);
43
44 PORT (
45 clk : IN STD_LOGIC;
46 rstn : IN STD_LOGIC;
47 run : IN STD_LOGIC;
48 -------------------------------------------------------------------------
49 -- CONFIG
50 -------------------------------------------------------------------------
51 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
52 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
53 -------------------------------------------------------------------------
54 -- CTRL
55 -------------------------------------------------------------------------
56 empty : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
57 empty_almost : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
58 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
59 --burst : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
60
61 -------------------------------------------------------------------------
62 -- STATUS
63 -------------------------------------------------------------------------
64 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
65 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
66 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
67
68 -------------------------------------------------------------------------
69 -- ADDR DATA OUT
70 -------------------------------------------------------------------------
71 data_f0_data_out_valid_burst : OUT STD_LOGIC;
72 data_f1_data_out_valid_burst : OUT STD_LOGIC;
73 data_f2_data_out_valid_burst : OUT STD_LOGIC;
74 data_f3_data_out_valid_burst : OUT STD_LOGIC;
75
76 data_f0_data_out_valid : OUT STD_LOGIC;
77 data_f1_data_out_valid : OUT STD_LOGIC;
78 data_f2_data_out_valid : OUT STD_LOGIC;
79 data_f3_data_out_valid : OUT STD_LOGIC;
80
81 data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
82 data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
83 data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
84 data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
85
86 );
87
88 END lpp_waveform_genaddress_single;
89
90 ARCHITECTURE beh OF lpp_waveform_genaddress_single IS
91
92 BEGIN -- beh
93
94
95
96
97 END beh;
@@ -344,6 +344,14 Constant CLR_MAC_V0 : std_logic_vector(3
344 sout : OUT STD_LOGIC);
344 sout : OUT STD_LOGIC);
345 END COMPONENT;
345 END COMPONENT;
346
346
347 COMPONENT lpp_front_positive_detection
348 PORT (
349 clk : IN STD_LOGIC;
350 rstn : IN STD_LOGIC;
351 sin : IN STD_LOGIC;
352 sout : OUT STD_LOGIC);
353 END COMPONENT;
354
347 COMPONENT SYNC_VALID_BIT
355 COMPONENT SYNC_VALID_BIT
348 GENERIC (
356 GENERIC (
349 NB_FF_OF_SYNC : INTEGER);
357 NB_FF_OF_SYNC : INTEGER);
@@ -354,5 +362,13 Constant CLR_MAC_V0 : std_logic_vector(3
354 sin : IN STD_LOGIC;
362 sin : IN STD_LOGIC;
355 sout : OUT STD_LOGIC);
363 sout : OUT STD_LOGIC);
356 END COMPONENT;
364 END COMPONENT;
357
365
366 COMPONENT RR_Arbiter_4
367 PORT (
368 clk : IN STD_LOGIC;
369 rstn : IN STD_LOGIC;
370 in_valid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
371 out_grant : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
372 END COMPONENT;
373
358 END;
374 END;
@@ -18,4 +18,6 Shifter.vhd
18 TwoComplementer.vhd
18 TwoComplementer.vhd
19 lpp_front_to_level.vhd
19 lpp_front_to_level.vhd
20 lpp_front_detection.vhd
20 lpp_front_detection.vhd
21 lpp_front_positive_detection.vhd
21 SYNC_VALID_BIT.vhd
22 SYNC_VALID_BIT.vhd
23 RR_Arbiter_4.vhd
@@ -196,5 +196,23 PACKAGE lpp_dma_pkg IS
196 addr_matrix_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
196 addr_matrix_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
197 addr_matrix_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
197 addr_matrix_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
198 END COMPONENT;
198 END COMPONENT;
199
200 COMPONENT lpp_dma_singleOrBurst
201 GENERIC (
202 tech : INTEGER;
203 hindex : INTEGER);
204 PORT (
205 HCLK : IN STD_ULOGIC;
206 HRESETn : IN STD_ULOGIC;
207 run : IN STD_LOGIC;
208 AHB_Master_In : IN AHB_Mst_In_Type;
209 AHB_Master_Out : OUT AHB_Mst_Out_Type;
210 send : IN STD_LOGIC;
211 valid_burst : IN STD_LOGIC;
212 done : OUT STD_LOGIC;
213 ren : OUT STD_LOGIC;
214 address : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
215 data : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
216 END COMPONENT;
199
217
200 END;
218 END;
@@ -4,3 +4,4 lpp_dma.vhd
4 lpp_dma_ip.vhd
4 lpp_dma_ip.vhd
5 lpp_dma_send_16word.vhd
5 lpp_dma_send_16word.vhd
6 lpp_dma_send_1word.vhd
6 lpp_dma_send_1word.vhd
7 lpp_dma_singleOrBurst.vhd
@@ -8,8 +8,10 USE lpp.iir_filter.ALL;
8 USE lpp.FILTERcfg.ALL;
8 USE lpp.FILTERcfg.ALL;
9 USE lpp.lpp_memory.ALL;
9 USE lpp.lpp_memory.ALL;
10 USE lpp.lpp_waveform_pkg.ALL;
10 USE lpp.lpp_waveform_pkg.ALL;
11 USE lpp.lpp_dma_pkg.ALL;
11 USE lpp.lpp_top_lfr_pkg.ALL;
12 USE lpp.lpp_top_lfr_pkg.ALL;
12 USE lpp.lpp_lfr_pkg.ALL;
13 USE lpp.lpp_lfr_pkg.ALL;
14 USE lpp.general_purpose.ALL;
13
15
14 LIBRARY techmap;
16 LIBRARY techmap;
15 USE techmap.gencomp.ALL;
17 USE techmap.gencomp.ALL;
@@ -23,11 +25,10 USE GRLIB.DMA2AHB_Package.ALL;
23 ENTITY lpp_lfr IS
25 ENTITY lpp_lfr IS
24 GENERIC (
26 GENERIC (
25 Mem_use : INTEGER := use_RAM;
27 Mem_use : INTEGER := use_RAM;
26 nb_burst_available_size : INTEGER := 11;
28 nb_data_by_buffer_size : INTEGER := 11;
27 nb_snapshot_param_size : INTEGER := 11;
29 nb_snapshot_param_size : INTEGER := 11;
28 delta_snapshot_size : INTEGER := 16;
30 delta_vector_size : INTEGER := 20;
29 delta_f2_f0_size : INTEGER := 10;
31 delta_vector_size_f0_2 : INTEGER := 3;
30 delta_f2_f1_size : INTEGER := 10;
31
32
32 pindex : INTEGER := 4;
33 pindex : INTEGER := 4;
33 paddr : INTEGER := 4;
34 paddr : INTEGER := 4;
@@ -35,29 +36,26 ENTITY lpp_lfr IS
35 pirq_ms : INTEGER := 0;
36 pirq_ms : INTEGER := 0;
36 pirq_wfp : INTEGER := 1;
37 pirq_wfp : INTEGER := 1;
37
38
38 hindex_wfp : INTEGER := 2;
39 hindex : INTEGER := 2
39 hindex_ms : INTEGER := 3
40
40
41 );
41 );
42 PORT (
42 PORT (
43 clk : IN STD_LOGIC;
43 clk : IN STD_LOGIC;
44 rstn : IN STD_LOGIC;
44 rstn : IN STD_LOGIC;
45 --
45 -- SAMPLE
46 sample_B : IN Samples14v(2 DOWNTO 0);
46 sample_B : IN Samples14v(2 DOWNTO 0);
47 sample_E : IN Samples14v(4 DOWNTO 0);
47 sample_E : IN Samples14v(4 DOWNTO 0);
48 sample_val : IN STD_LOGIC;
48 sample_val : IN STD_LOGIC;
49 --
49 -- APB
50 apbi : IN apb_slv_in_type;
50 apbi : IN apb_slv_in_type;
51 apbo : OUT apb_slv_out_type;
51 apbo : OUT apb_slv_out_type;
52 --
52 -- AHB
53 ahbi_wfp : IN AHB_Mst_In_Type;
53 ahbi : IN AHB_Mst_In_Type;
54 ahbo_wfp : OUT AHB_Mst_Out_Type;
54 ahbo : OUT AHB_Mst_Out_Type;
55 --
55 -- TIME
56 ahbi_ms : IN AHB_Mst_In_Type;
56 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- todo
57 ahbo_ms : OUT AHB_Mst_Out_Type;
57 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); -- todo
58 --
58 --
59 coarse_time_0 : IN STD_LOGIC;
60 --
61 data_shaping_BW : OUT STD_LOGIC
59 data_shaping_BW : OUT STD_LOGIC
62 );
60 );
63 END lpp_lfr;
61 END lpp_lfr;
@@ -115,10 +113,13 ARCHITECTURE beh OF lpp_lfr IS
115 SIGNAL status_full_ack : STD_LOGIC_VECTOR(3 DOWNTO 0);
113 SIGNAL status_full_ack : STD_LOGIC_VECTOR(3 DOWNTO 0);
116 SIGNAL status_full_err : STD_LOGIC_VECTOR(3 DOWNTO 0);
114 SIGNAL status_full_err : STD_LOGIC_VECTOR(3 DOWNTO 0);
117 SIGNAL status_new_err : STD_LOGIC_VECTOR(3 DOWNTO 0);
115 SIGNAL status_new_err : STD_LOGIC_VECTOR(3 DOWNTO 0);
118 SIGNAL delta_snapshot : STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
116 SIGNAL delta_snapshot : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
119 SIGNAL delta_f2_f1 : STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
117 SIGNAL delta_f0 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
120 SIGNAL delta_f2_f0 : STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
118 SIGNAL delta_f0_2 : STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
121 SIGNAL nb_burst_available : STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
119 SIGNAL delta_f1 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
120 SIGNAL delta_f2 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
121
122 SIGNAL nb_data_by_buffer : STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
122 SIGNAL nb_snapshot_param : STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
123 SIGNAL nb_snapshot_param : STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
123 SIGNAL enable_f0 : STD_LOGIC;
124 SIGNAL enable_f0 : STD_LOGIC;
124 SIGNAL enable_f1 : STD_LOGIC;
125 SIGNAL enable_f1 : STD_LOGIC;
@@ -132,18 +133,70 ARCHITECTURE beh OF lpp_lfr IS
132 SIGNAL addr_data_f2 : STD_LOGIC_VECTOR(31 DOWNTO 0);
133 SIGNAL addr_data_f2 : STD_LOGIC_VECTOR(31 DOWNTO 0);
133 SIGNAL addr_data_f3 : STD_LOGIC_VECTOR(31 DOWNTO 0);
134 SIGNAL addr_data_f3 : STD_LOGIC_VECTOR(31 DOWNTO 0);
134
135
135 --
136 SIGNAL run : STD_LOGIC;
136 SIGNAL time_info : STD_LOGIC_VECTOR( (4*16)-1 DOWNTO 0);
137 SIGNAL start_date : STD_LOGIC_VECTOR(30 DOWNTO 0);
137 SIGNAL data_f0_wfp : STD_LOGIC_VECTOR(159 DOWNTO 0) ;
138
138 SIGNAL data_f1_wfp : STD_LOGIC_VECTOR(159 DOWNTO 0) ;
139 SIGNAL data_f0_addr_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
139 SIGNAL data_f2_wfp : STD_LOGIC_VECTOR(159 DOWNTO 0) ;
140 SIGNAL data_f0_data_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
140 SIGNAL data_f3_wfp : STD_LOGIC_VECTOR(159 DOWNTO 0) ;
141 SIGNAL data_f0_data_out_valid : STD_LOGIC;
142 SIGNAL data_f0_data_out_valid_burst : STD_LOGIC;
143 SIGNAL data_f0_data_out_ren : STD_LOGIC;
144 --f1
145 SIGNAL data_f1_addr_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
146 SIGNAL data_f1_data_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
147 SIGNAL data_f1_data_out_valid : STD_LOGIC;
148 SIGNAL data_f1_data_out_valid_burst : STD_LOGIC;
149 SIGNAL data_f1_data_out_ren : STD_LOGIC;
150 --f2
151 SIGNAL data_f2_addr_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
152 SIGNAL data_f2_data_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
153 SIGNAL data_f2_data_out_valid : STD_LOGIC;
154 SIGNAL data_f2_data_out_valid_burst : STD_LOGIC;
155 SIGNAL data_f2_data_out_ren : STD_LOGIC;
156 --f3
157 SIGNAL data_f3_addr_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
158 SIGNAL data_f3_data_out : STD_LOGIC_VECTOR(31 DOWNTO 0);
159 SIGNAL data_f3_data_out_valid : STD_LOGIC;
160 SIGNAL data_f3_data_out_valid_burst : STD_LOGIC;
161 SIGNAL data_f3_data_out_ren : STD_LOGIC;
141
162
142 SIGNAL run : STD_LOGIC;
163 -----------------------------------------------------------------------------
143 -- SIGNAL val_f0_wfp : STD_LOGIC;
164 --
144 -- SIGNAL val_f1_wfp : STD_LOGIC;
165 -----------------------------------------------------------------------------
145 -- SIGNAL val_f2_wfp : STD_LOGIC;
166 SIGNAL data_f0_addr_out_s : STD_LOGIC_VECTOR(31 DOWNTO 0);
146 -- SIGNAL val_f3_wfp : STD_LOGIC;
167 SIGNAL data_f0_data_out_valid_s : STD_LOGIC;
168 SIGNAL data_f0_data_out_valid_burst_s : STD_LOGIC;
169 --f1
170 SIGNAL data_f1_addr_out_s : STD_LOGIC_VECTOR(31 DOWNTO 0);
171 SIGNAL data_f1_data_out_valid_s : STD_LOGIC;
172 SIGNAL data_f1_data_out_valid_burst_s : STD_LOGIC;
173 --f2
174 SIGNAL data_f2_addr_out_s : STD_LOGIC_VECTOR(31 DOWNTO 0);
175 SIGNAL data_f2_data_out_valid_s : STD_LOGIC;
176 SIGNAL data_f2_data_out_valid_burst_s : STD_LOGIC;
177 --f3
178 SIGNAL data_f3_addr_out_s : STD_LOGIC_VECTOR(31 DOWNTO 0);
179 SIGNAL data_f3_data_out_valid_s : STD_LOGIC;
180 SIGNAL data_f3_data_out_valid_burst_s : STD_LOGIC;
181
182 -----------------------------------------------------------------------------
183 -- DMA RR
184 -----------------------------------------------------------------------------
185 SIGNAL dma_sel_valid : STD_LOGIC;
186 SIGNAL dma_sel : STD_LOGIC_VECTOR(3 DOWNTO 0);
187 SIGNAL dma_rr_valid : STD_LOGIC_VECTOR(3 DOWNTO 0);
188 SIGNAL dma_rr_grant : STD_LOGIC_VECTOR(3 DOWNTO 0);
189
190 -----------------------------------------------------------------------------
191 -- DMA
192 -----------------------------------------------------------------------------
193 SIGNAL dma_send : STD_LOGIC;
194 SIGNAL dma_valid_burst : STD_LOGIC; -- (1 => BURST , 0 => SINGLE)
195 SIGNAL dma_done : STD_LOGIC;
196 SIGNAL dma_ren : STD_LOGIC;
197 SIGNAL dma_address : STD_LOGIC_VECTOR(31 DOWNTO 0);
198 SIGNAL dma_data : STD_LOGIC_VECTOR(31 DOWNTO 0);
199
147 BEGIN
200 BEGIN
148
201
149 sample(4 DOWNTO 0) <= sample_E(4 DOWNTO 0);
202 sample(4 DOWNTO 0) <= sample_E(4 DOWNTO 0);
@@ -176,24 +229,22 BEGIN
176 sample_f3_wdata => sample_f3_data);
229 sample_f3_wdata => sample_f3_data);
177
230
178 -----------------------------------------------------------------------------
231 -----------------------------------------------------------------------------
179 lpp_top_apbreg_1 : lpp_lfr_apbreg
232 lpp_lfr_apbreg_1: lpp_lfr_apbreg
180 GENERIC MAP (
233 GENERIC MAP (
181 nb_burst_available_size => nb_burst_available_size,
234 nb_data_by_buffer_size => nb_data_by_buffer_size,
182 nb_snapshot_param_size => nb_snapshot_param_size,
235 nb_snapshot_param_size => nb_snapshot_param_size,
183 delta_snapshot_size => delta_snapshot_size,
236 delta_vector_size => delta_vector_size,
184 delta_f2_f0_size => delta_f2_f0_size,
237 delta_vector_size_f0_2 => delta_vector_size_f0_2,
185 delta_f2_f1_size => delta_f2_f1_size,
238 pindex => pindex,
186 pindex => pindex,
239 paddr => paddr,
187 paddr => paddr,
240 pmask => pmask,
188 pmask => pmask,
241 pirq_ms => pirq_ms,
189 pirq_ms => pirq_ms,
242 pirq_wfp => pirq_wfp)
190 pirq_wfp => pirq_wfp)
191 PORT MAP (
243 PORT MAP (
192 HCLK => clk,
244 HCLK => clk,
193 HRESETn => rstn,
245 HRESETn => rstn,
194 apbi => apbi,
246 apbi => apbi,
195 apbo => apbo,
247 apbo => apbo,
196
197 ready_matrix_f0_0 => ready_matrix_f0_0,
248 ready_matrix_f0_0 => ready_matrix_f0_0,
198 ready_matrix_f0_1 => ready_matrix_f0_1,
249 ready_matrix_f0_1 => ready_matrix_f0_1,
199 ready_matrix_f1 => ready_matrix_f1,
250 ready_matrix_f1 => ready_matrix_f1,
@@ -213,55 +264,58 BEGIN
213 addr_matrix_f0_1 => addr_matrix_f0_1,
264 addr_matrix_f0_1 => addr_matrix_f0_1,
214 addr_matrix_f1 => addr_matrix_f1,
265 addr_matrix_f1 => addr_matrix_f1,
215 addr_matrix_f2 => addr_matrix_f2,
266 addr_matrix_f2 => addr_matrix_f2,
216
267 status_full => status_full,
217 status_full => status_full,
268 status_full_ack => status_full_ack,
218 status_full_ack => status_full_ack,
269 status_full_err => status_full_err,
219 status_full_err => status_full_err,
270 status_new_err => status_new_err,
220 status_new_err => status_new_err,
271 data_shaping_BW => data_shaping_BW,
221 data_shaping_BW => data_shaping_BW,
272 data_shaping_SP0 => data_shaping_SP0,
222 data_shaping_SP0 => data_shaping_SP0,
273 data_shaping_SP1 => data_shaping_SP1,
223 data_shaping_SP1 => data_shaping_SP1,
274 data_shaping_R0 => data_shaping_R0,
224 data_shaping_R0 => data_shaping_R0,
275 data_shaping_R1 => data_shaping_R1,
225 data_shaping_R1 => data_shaping_R1,
276 delta_snapshot => delta_snapshot,
226 delta_snapshot => delta_snapshot,
277 delta_f0 => delta_f0,
227 delta_f2_f1 => delta_f2_f1,
278 delta_f0_2 => delta_f0_2,
228 delta_f2_f0 => delta_f2_f0,
279 delta_f1 => delta_f1,
229 nb_burst_available => nb_burst_available,
280 delta_f2 => delta_f2,
230 nb_snapshot_param => nb_snapshot_param,
281 nb_data_by_buffer => nb_data_by_buffer,
231 enable_f0 => enable_f0,
282 nb_snapshot_param => nb_snapshot_param,
232 enable_f1 => enable_f1,
283 enable_f0 => enable_f0,
233 enable_f2 => enable_f2,
284 enable_f1 => enable_f1,
234 enable_f3 => enable_f3,
285 enable_f2 => enable_f2,
235 burst_f0 => burst_f0,
286 enable_f3 => enable_f3,
236 burst_f1 => burst_f1,
287 burst_f0 => burst_f0,
237 burst_f2 => burst_f2,
288 burst_f1 => burst_f1,
238 run => run,
289 burst_f2 => burst_f2,
239 addr_data_f0 => addr_data_f0,
290 run => run,
240 addr_data_f1 => addr_data_f1,
291 addr_data_f0 => addr_data_f0,
241 addr_data_f2 => addr_data_f2,
292 addr_data_f1 => addr_data_f1,
242 addr_data_f3 => addr_data_f3);
293 addr_data_f2 => addr_data_f2,
294 addr_data_f3 => addr_data_f3,
295 start_date => start_date);
243
296
244 -----------------------------------------------------------------------------
297 -----------------------------------------------------------------------------
245 lpp_waveform_1: lpp_waveform
298 lpp_waveform_1: lpp_waveform
246 GENERIC MAP (
299 GENERIC MAP (
247 hindex => hindex_wfp,
248 tech => inferred,
300 tech => inferred,
249 data_size => 160,
301 data_size => 6*16,
250 nb_burst_available_size => nb_burst_available_size,
302 nb_data_by_buffer_size => nb_data_by_buffer_size,
251 nb_snapshot_param_size => nb_snapshot_param_size,
303 nb_snapshot_param_size => nb_snapshot_param_size,
252 delta_snapshot_size => delta_snapshot_size,
304 delta_vector_size => delta_vector_size,
253 delta_f2_f0_size => delta_f2_f0_size,
305 delta_vector_size_f0_2 => delta_vector_size_f0_2
254 delta_f2_f1_size => delta_f2_f1_size)
306 )
255 PORT MAP (
307 PORT MAP (
256 clk => clk,
308 clk => clk,
257 rstn => rstn,
309 rstn => rstn,
258 AHB_Master_In => ahbi_wfp,
310
259 AHB_Master_Out => ahbo_wfp,
311 reg_run => run,
260 coarse_time_0 => coarse_time_0,
312 reg_start_date => start_date,
313 reg_delta_snapshot => delta_snapshot,
314 reg_delta_f0 => delta_f0,
315 reg_delta_f0_2 => delta_f0_2,
316 reg_delta_f1 => delta_f1,
317 reg_delta_f2 => delta_f2,
261
318
262 delta_snapshot => delta_snapshot,
263 delta_f2_f1 => delta_f2_f1,
264 delta_f2_f0 => delta_f2_f0,
265 enable_f0 => enable_f0,
319 enable_f0 => enable_f0,
266 enable_f1 => enable_f1,
320 enable_f1 => enable_f1,
267 enable_f2 => enable_f2,
321 enable_f2 => enable_f2,
@@ -270,80 +324,225 BEGIN
270 burst_f1 => burst_f1,
324 burst_f1 => burst_f1,
271 burst_f2 => burst_f2,
325 burst_f2 => burst_f2,
272
326
273 run => run,
327 nb_data_by_buffer => nb_data_by_buffer,
274
275 nb_burst_available => nb_burst_available,
276 nb_snapshot_param => nb_snapshot_param,
328 nb_snapshot_param => nb_snapshot_param,
277 status_full => status_full,
329 status_full => status_full,
278 status_full_ack => status_full_ack,
330 status_full_ack => status_full_ack,
279 status_full_err => status_full_err,
331 status_full_err => status_full_err,
280 status_new_err => status_new_err,
332 status_new_err => status_new_err,
333
334 coarse_time => coarse_time,
335 fine_time => fine_time,
336
337 --f0
281 addr_data_f0 => addr_data_f0,
338 addr_data_f0 => addr_data_f0,
282 addr_data_f1 => addr_data_f1,
283 addr_data_f2 => addr_data_f2,
284 addr_data_f3 => addr_data_f3,
285
286 data_f0_in => data_f0_wfp,
287 data_f1_in => data_f1_wfp,
288 data_f2_in => data_f2_wfp,
289 data_f3_in => data_f3_wfp,
290 data_f0_in_valid => sample_f0_val,
339 data_f0_in_valid => sample_f0_val,
340 data_f0_in => sample_f0_data,
341 --f1
342 addr_data_f1 => addr_data_f1,
291 data_f1_in_valid => sample_f1_val,
343 data_f1_in_valid => sample_f1_val,
344 data_f1_in => sample_f1_data,
345 --f2
346 addr_data_f2 => addr_data_f2,
292 data_f2_in_valid => sample_f2_val,
347 data_f2_in_valid => sample_f2_val,
293 data_f3_in_valid => sample_f3_val);
348 data_f2_in => sample_f2_data,
294
349 --f3
295 time_info <= (others => '0');
350 addr_data_f3 => addr_data_f3,
296
351 data_f3_in_valid => sample_f3_val,
297 data_f0_wfp <= sample_f0_data & time_info;
352 data_f3_in => sample_f3_data,
298 data_f1_wfp <= sample_f1_data & time_info;
353 -- OUTPUT -- DMA interface
299 data_f2_wfp <= sample_f2_data & time_info;
354 --f0
300 data_f3_wfp <= sample_f3_data & time_info;
355 data_f0_addr_out => data_f0_addr_out_s,
356 data_f0_data_out => data_f0_data_out,
357 data_f0_data_out_valid => data_f0_data_out_valid_s,
358 data_f0_data_out_valid_burst => data_f0_data_out_valid_burst_s,
359 data_f0_data_out_ren => data_f0_data_out_ren,
360 --f1
361 data_f1_addr_out => data_f1_addr_out_s,
362 data_f1_data_out => data_f1_data_out,
363 data_f1_data_out_valid => data_f1_data_out_valid_s,
364 data_f1_data_out_valid_burst => data_f1_data_out_valid_burst_s,
365 data_f1_data_out_ren => data_f1_data_out_ren,
366 --f2
367 data_f2_addr_out => data_f2_addr_out_s,
368 data_f2_data_out => data_f2_data_out,
369 data_f2_data_out_valid => data_f2_data_out_valid_s,
370 data_f2_data_out_valid_burst => data_f2_data_out_valid_burst_s,
371 data_f2_data_out_ren => data_f2_data_out_ren,
372 --f3
373 data_f3_addr_out => data_f3_addr_out_s,
374 data_f3_data_out => data_f3_data_out,
375 data_f3_data_out_valid => data_f3_data_out_valid_s,
376 data_f3_data_out_valid_burst => data_f3_data_out_valid_burst_s,
377 data_f3_data_out_ren => data_f3_data_out_ren
378
379 );
380
301
381
302 -----------------------------------------------------------------------------
382 -----------------------------------------------------------------------------
303 sample_f0_wen <= NOT(sample_f0_val) & NOT(sample_f0_val) & NOT(sample_f0_val) &
383 -- TEMP
304 NOT(sample_f0_val) & NOT(sample_f0_val) ;
384 -----------------------------------------------------------------------------
305 sample_f1_wen <= NOT(sample_f1_val) & NOT(sample_f1_val) & NOT(sample_f1_val) &
306 NOT(sample_f1_val) & NOT(sample_f1_val) ;
307 sample_f3_wen <= NOT(sample_f3_val) & NOT(sample_f3_val) & NOT(sample_f3_val) &
308 NOT(sample_f3_val) & NOT(sample_f3_val) ;
309
385
310 sample_f0_wdata <= sample_f0_data((3*16)-1 DOWNTO (1*16)) & sample_f0_data((6*16)-1 DOWNTO (3*16)); -- (MSB) E2 E1 B2 B1 B0 (LSB)
386 PROCESS (clk, rstn)
311 sample_f1_wdata <= sample_f1_data((3*16)-1 DOWNTO (1*16)) & sample_f1_data((6*16)-1 DOWNTO (3*16));
387 BEGIN -- PROCESS
312 sample_f3_wdata <= sample_f3_data((3*16)-1 DOWNTO (1*16)) & sample_f3_data((6*16)-1 DOWNTO (3*16));
388 IF rstn = '0' THEN -- asynchronous reset (active low)
389 data_f0_addr_out <= (OTHERS => '0');
390 data_f0_data_out_valid <= '0';
391 data_f0_data_out_valid_burst <= '0';
392 data_f1_addr_out <= (OTHERS => '0');
393 data_f1_data_out_valid <= '0';
394 data_f1_data_out_valid_burst <= '0';
395 data_f2_addr_out <= (OTHERS => '0');
396 data_f2_data_out_valid <= '0';
397 data_f2_data_out_valid_burst <= '0';
398 data_f3_addr_out <= (OTHERS => '0');
399 data_f3_data_out_valid <= '0';
400 data_f3_data_out_valid_burst <= '0';
401 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
402 data_f0_addr_out <= data_f0_addr_out_s;
403 data_f0_data_out_valid <= data_f0_data_out_valid_s;
404 data_f0_data_out_valid_burst <= data_f0_data_out_valid_burst_s;
405 data_f1_addr_out <= data_f1_addr_out_s;
406 data_f1_data_out_valid <= data_f1_data_out_valid_s;
407 data_f1_data_out_valid_burst <= data_f1_data_out_valid_burst_s;
408 data_f2_addr_out <= data_f2_addr_out_s;
409 data_f2_data_out_valid <= data_f2_data_out_valid_s;
410 data_f2_data_out_valid_burst <= data_f2_data_out_valid_burst_s;
411 data_f3_addr_out <= data_f3_addr_out_s;
412 data_f3_data_out_valid <= data_f3_data_out_valid_s;
413 data_f3_data_out_valid_burst <= data_f3_data_out_valid_burst_s;
414 END IF;
415 END PROCESS;
416
417
313 -----------------------------------------------------------------------------
418 -----------------------------------------------------------------------------
314 lpp_lfr_ms_1: lpp_lfr_ms
419 -- RoundRobin Selection For DMA
315 GENERIC MAP (
420 -----------------------------------------------------------------------------
316 hindex => hindex_ms)
421
422 dma_rr_valid(0) <= data_f0_data_out_valid OR data_f0_data_out_valid_burst;
423 dma_rr_valid(1) <= data_f1_data_out_valid OR data_f1_data_out_valid_burst;
424 dma_rr_valid(2) <= data_f2_data_out_valid OR data_f2_data_out_valid_burst;
425 dma_rr_valid(3) <= data_f3_data_out_valid OR data_f3_data_out_valid_burst;
426
427 RR_Arbiter_4_1: RR_Arbiter_4
317 PORT MAP (
428 PORT MAP (
318 clk => clk,
429 clk => clk,
319 rstn => rstn,
430 rstn => rstn,
320 sample_f0_wen => sample_f0_wen,
431 in_valid => dma_rr_valid,
321 sample_f0_wdata => sample_f0_wdata,
432 out_grant => dma_rr_grant);
322 sample_f1_wen => sample_f1_wen,
433
323 sample_f1_wdata => sample_f1_wdata,
434 PROCESS (clk, rstn)
324 sample_f3_wen => sample_f3_wen,
435 BEGIN -- PROCESS
325 sample_f3_wdata => sample_f3_wdata,
436 IF rstn = '0' THEN -- asynchronous reset (active low)
326 AHB_Master_In => ahbi_ms,
437 dma_sel <= (OTHERS => '0');
327 AHB_Master_Out => ahbo_ms,
438 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
439 IF dma_sel = "0000" OR dma_send = '1' THEN
440 dma_sel <= dma_rr_grant;
441 ELSE
442 dma_sel <= dma_sel;
443 END IF;
444 END IF;
445 END PROCESS;
446
447
448 dma_address <= data_f0_addr_out WHEN dma_sel(0) = '1' ELSE
449 data_f1_addr_out WHEN dma_sel(1) = '1' ELSE
450 data_f2_addr_out WHEN dma_sel(2) = '1' ELSE
451 data_f3_addr_out ;
452
453 dma_data <= data_f0_data_out WHEN dma_sel(0) = '1' ELSE
454 data_f1_data_out WHEN dma_sel(1) = '1' ELSE
455 data_f2_data_out WHEN dma_sel(2) = '1' ELSE
456 data_f3_data_out ;
457
458 dma_valid_burst <= data_f0_data_out_valid_burst WHEN dma_sel(0) = '1' ELSE
459 data_f1_data_out_valid_burst WHEN dma_sel(1) = '1' ELSE
460 data_f2_data_out_valid_burst WHEN dma_sel(2) = '1' ELSE
461 data_f3_data_out_valid_burst WHEN dma_sel(3) = '1' ELSE
462 '0';
463
464 dma_sel_valid <= data_f0_data_out_valid WHEN dma_sel(0) = '1' ELSE
465 data_f1_data_out_valid WHEN dma_sel(1) = '1' ELSE
466 data_f2_data_out_valid WHEN dma_sel(2) = '1' ELSE
467 data_f3_data_out_valid WHEN dma_sel(3) = '1' ELSE
468 '0';
469
470 dma_send <= dma_sel_valid OR dma_valid_burst;
471
472 data_f0_data_out_ren <= dma_ren WHEN dma_sel(0) = '1' ELSE '1';
473 data_f1_data_out_ren <= dma_ren WHEN dma_sel(1) = '1' ELSE '1';
474 data_f2_data_out_ren <= dma_ren WHEN dma_sel(2) = '1' ELSE '1';
475 data_f3_data_out_ren <= dma_ren WHEN dma_sel(3) = '1' ELSE '1';
476
477 -----------------------------------------------------------------------------
478 -- DMA
479 -----------------------------------------------------------------------------
480 lpp_dma_singleOrBurst_1: lpp_dma_singleOrBurst
481 GENERIC MAP (
482 tech => inferred,
483 hindex => hindex)
484 PORT MAP (
485 HCLK => clk,
486 HRESETn => rstn,
487 run => run,
488 AHB_Master_In => ahbi,
489 AHB_Master_Out => ahbo,
328
490
329 ready_matrix_f0_0 => ready_matrix_f0_0,
491 send => dma_send,
330 ready_matrix_f0_1 => ready_matrix_f0_1,
492 valid_burst => dma_valid_burst,
331 ready_matrix_f1 => ready_matrix_f1,
493 done => dma_done,
332 ready_matrix_f2 => ready_matrix_f2,
494 ren => dma_ren,
333 error_anticipating_empty_fifo => error_anticipating_empty_fifo,
495 address => dma_address,
334 error_bad_component_error => error_bad_component_error,
496 data => dma_data);
335 debug_reg => debug_reg,
497
336 status_ready_matrix_f0_0 => status_ready_matrix_f0_0,
498 -----------------------------------------------------------------------------
337 status_ready_matrix_f0_1 => status_ready_matrix_f0_1,
499 -- Matrix Spectral - TODO
338 status_ready_matrix_f1 => status_ready_matrix_f1,
500 -----------------------------------------------------------------------------
339 status_ready_matrix_f2 => status_ready_matrix_f2,
501 -----------------------------------------------------------------------------
340 status_error_anticipating_empty_fifo => status_error_anticipating_empty_fifo,
502 --sample_f0_wen <= NOT(sample_f0_val) & NOT(sample_f0_val) & NOT(sample_f0_val) &
341 status_error_bad_component_error => status_error_bad_component_error,
503 -- NOT(sample_f0_val) & NOT(sample_f0_val) ;
342 config_active_interruption_onNewMatrix => config_active_interruption_onNewMatrix,
504 --sample_f1_wen <= NOT(sample_f1_val) & NOT(sample_f1_val) & NOT(sample_f1_val) &
343 config_active_interruption_onError => config_active_interruption_onError,
505 -- NOT(sample_f1_val) & NOT(sample_f1_val) ;
344 addr_matrix_f0_0 => addr_matrix_f0_0,
506 --sample_f3_wen <= NOT(sample_f3_val) & NOT(sample_f3_val) & NOT(sample_f3_val) &
345 addr_matrix_f0_1 => addr_matrix_f0_1,
507 -- NOT(sample_f3_val) & NOT(sample_f3_val) ;
346 addr_matrix_f1 => addr_matrix_f1,
347 addr_matrix_f2 => addr_matrix_f2);
348
508
349 END beh; No newline at end of file
509 --sample_f0_wdata <= sample_f0_data((3*16)-1 DOWNTO (1*16)) & sample_f0_data((6*16)-1 DOWNTO (3*16)); -- (MSB) E2 E1 B2 B1 B0 (LSB)
510 --sample_f1_wdata <= sample_f1_data((3*16)-1 DOWNTO (1*16)) & sample_f1_data((6*16)-1 DOWNTO (3*16));
511 --sample_f3_wdata <= sample_f3_data((3*16)-1 DOWNTO (1*16)) & sample_f3_data((6*16)-1 DOWNTO (3*16));
512 -------------------------------------------------------------------------------
513 --lpp_lfr_ms_1: lpp_lfr_ms
514 -- GENERIC MAP (
515 -- hindex => hindex_ms)
516 -- PORT MAP (
517 -- clk => clk,
518 -- rstn => rstn,
519 -- sample_f0_wen => sample_f0_wen,
520 -- sample_f0_wdata => sample_f0_wdata,
521 -- sample_f1_wen => sample_f1_wen,
522 -- sample_f1_wdata => sample_f1_wdata,
523 -- sample_f3_wen => sample_f3_wen,
524 -- sample_f3_wdata => sample_f3_wdata,
525 -- AHB_Master_In => ahbi_ms,
526 -- AHB_Master_Out => ahbo_ms,
527
528 -- ready_matrix_f0_0 => ready_matrix_f0_0,
529 -- ready_matrix_f0_1 => ready_matrix_f0_1,
530 -- ready_matrix_f1 => ready_matrix_f1,
531 -- ready_matrix_f2 => ready_matrix_f2,
532 -- error_anticipating_empty_fifo => error_anticipating_empty_fifo,
533 -- error_bad_component_error => error_bad_component_error,
534 -- debug_reg => debug_reg,
535 -- status_ready_matrix_f0_0 => status_ready_matrix_f0_0,
536 -- status_ready_matrix_f0_1 => status_ready_matrix_f0_1,
537 -- status_ready_matrix_f1 => status_ready_matrix_f1,
538 -- status_ready_matrix_f2 => status_ready_matrix_f2,
539 -- status_error_anticipating_empty_fifo => status_error_anticipating_empty_fifo,
540 -- status_error_bad_component_error => status_error_bad_component_error,
541 -- config_active_interruption_onNewMatrix => config_active_interruption_onNewMatrix,
542 -- config_active_interruption_onError => config_active_interruption_onError,
543 -- addr_matrix_f0_0 => addr_matrix_f0_0,
544 -- addr_matrix_f0_1 => addr_matrix_f0_1,
545 -- addr_matrix_f1 => addr_matrix_f1,
546 -- addr_matrix_f2 => addr_matrix_f2);
547
548 END beh;
@@ -36,17 +36,16 USE techmap.gencomp.ALL;
36
36
37 ENTITY lpp_lfr_apbreg IS
37 ENTITY lpp_lfr_apbreg IS
38 GENERIC (
38 GENERIC (
39 nb_burst_available_size : INTEGER := 11;
39 nb_data_by_buffer_size : INTEGER := 11;
40 nb_snapshot_param_size : INTEGER := 11;
40 nb_snapshot_param_size : INTEGER := 11;
41 delta_snapshot_size : INTEGER := 16;
41 delta_vector_size : INTEGER := 20;
42 delta_f2_f0_size : INTEGER := 10;
42 delta_vector_size_f0_2 : INTEGER := 3;
43 delta_f2_f1_size : INTEGER := 10;
44
43
45 pindex : INTEGER := 4;
44 pindex : INTEGER := 4;
46 paddr : INTEGER := 4;
45 paddr : INTEGER := 4;
47 pmask : INTEGER := 16#fff#;
46 pmask : INTEGER := 16#fff#;
48 pirq_ms : INTEGER := 0;
47 pirq_ms : INTEGER := 0;
49 pirq_wfp : INTEGER := 1);
48 pirq_wfp : INTEGER := 1);
50 PORT (
49 PORT (
51 -- AMBA AHB system signals
50 -- AMBA AHB system signals
52 HCLK : IN STD_ULOGIC;
51 HCLK : IN STD_ULOGIC;
@@ -88,7 +87,7 ENTITY lpp_lfr_apbreg IS
88 status_full_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
87 status_full_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
89 status_full_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
88 status_full_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
90 status_new_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
89 status_new_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
91
90
92 -- OUT
91 -- OUT
93 data_shaping_BW : OUT STD_LOGIC;
92 data_shaping_BW : OUT STD_LOGIC;
94 data_shaping_SP0 : OUT STD_LOGIC;
93 data_shaping_SP0 : OUT STD_LOGIC;
@@ -96,10 +95,12 ENTITY lpp_lfr_apbreg IS
96 data_shaping_R0 : OUT STD_LOGIC;
95 data_shaping_R0 : OUT STD_LOGIC;
97 data_shaping_R1 : OUT STD_LOGIC;
96 data_shaping_R1 : OUT STD_LOGIC;
98
97
99 delta_snapshot : OUT STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
98 delta_snapshot : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
100 delta_f2_f1 : OUT STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
99 delta_f0 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
101 delta_f2_f0 : OUT STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
100 delta_f0_2 : OUT STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
102 nb_burst_available : OUT STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
101 delta_f1 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
102 delta_f2 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
103 nb_data_by_buffer : OUT STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
103 nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
104 nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
104
105
105 enable_f0 : OUT STD_LOGIC;
106 enable_f0 : OUT STD_LOGIC;
@@ -116,7 +117,8 ENTITY lpp_lfr_apbreg IS
116 addr_data_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
117 addr_data_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
117 addr_data_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
118 addr_data_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
118 addr_data_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
119 addr_data_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
119 addr_data_f3 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
120 addr_data_f3 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
121 start_date : OUT STD_LOGIC_VECTOR(30 DOWNTO 0)
120
122
121 ---------------------------------------------------------------------------
123 ---------------------------------------------------------------------------
122 );
124 );
@@ -156,10 +158,12 ARCHITECTURE beh OF lpp_lfr_apbreg IS
156 data_shaping_SP1 : STD_LOGIC;
158 data_shaping_SP1 : STD_LOGIC;
157 data_shaping_R0 : STD_LOGIC;
159 data_shaping_R0 : STD_LOGIC;
158 data_shaping_R1 : STD_LOGIC;
160 data_shaping_R1 : STD_LOGIC;
159 delta_snapshot : STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
161 delta_snapshot : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
160 delta_f2_f1 : STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
162 delta_f0 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
161 delta_f2_f0 : STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
163 delta_f0_2 : STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
162 nb_burst_available : STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
164 delta_f1 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
165 delta_f2 : STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
166 nb_data_by_buffer : STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
163 nb_snapshot_param : STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
167 nb_snapshot_param : STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
164 enable_f0 : STD_LOGIC;
168 enable_f0 : STD_LOGIC;
165 enable_f1 : STD_LOGIC;
169 enable_f1 : STD_LOGIC;
@@ -173,6 +177,7 ARCHITECTURE beh OF lpp_lfr_apbreg IS
173 addr_data_f1 : STD_LOGIC_VECTOR(31 DOWNTO 0);
177 addr_data_f1 : STD_LOGIC_VECTOR(31 DOWNTO 0);
174 addr_data_f2 : STD_LOGIC_VECTOR(31 DOWNTO 0);
178 addr_data_f2 : STD_LOGIC_VECTOR(31 DOWNTO 0);
175 addr_data_f3 : STD_LOGIC_VECTOR(31 DOWNTO 0);
179 addr_data_f3 : STD_LOGIC_VECTOR(31 DOWNTO 0);
180 start_date : STD_LOGIC_VECTOR(30 DOWNTO 0);
176 END RECORD;
181 END RECORD;
177 SIGNAL reg_wp : lpp_WaveformPicker_regs;
182 SIGNAL reg_wp : lpp_WaveformPicker_regs;
178
183
@@ -202,9 +207,11 BEGIN -- beh
202 data_shaping_R1 <= reg_wp.data_shaping_R1;
207 data_shaping_R1 <= reg_wp.data_shaping_R1;
203
208
204 delta_snapshot <= reg_wp.delta_snapshot;
209 delta_snapshot <= reg_wp.delta_snapshot;
205 delta_f2_f1 <= reg_wp.delta_f2_f1;
210 delta_f0 <= reg_wp.delta_f0;
206 delta_f2_f0 <= reg_wp.delta_f2_f0;
211 delta_f0_2 <= reg_wp.delta_f0_2;
207 nb_burst_available <= reg_wp.nb_burst_available;
212 delta_f1 <= reg_wp.delta_f1;
213 delta_f2 <= reg_wp.delta_f2;
214 nb_data_by_buffer <= reg_wp.nb_data_by_buffer;
208 nb_snapshot_param <= reg_wp.nb_snapshot_param;
215 nb_snapshot_param <= reg_wp.nb_snapshot_param;
209
216
210 enable_f0 <= reg_wp.enable_f0;
217 enable_f0 <= reg_wp.enable_f0;
@@ -216,13 +223,15 BEGIN -- beh
216 burst_f1 <= reg_wp.burst_f1;
223 burst_f1 <= reg_wp.burst_f1;
217 burst_f2 <= reg_wp.burst_f2;
224 burst_f2 <= reg_wp.burst_f2;
218
225
219 run <= reg_wp.run;
226 run <= reg_wp.run;
220
227
221 addr_data_f0 <= reg_wp.addr_data_f0;
228 addr_data_f0 <= reg_wp.addr_data_f0;
222 addr_data_f1 <= reg_wp.addr_data_f1;
229 addr_data_f1 <= reg_wp.addr_data_f1;
223 addr_data_f2 <= reg_wp.addr_data_f2;
230 addr_data_f2 <= reg_wp.addr_data_f2;
224 addr_data_f3 <= reg_wp.addr_data_f3;
231 addr_data_f3 <= reg_wp.addr_data_f3;
225
232
233 start_date <= reg_wp.start_date;
234
226 lpp_lfr_apbreg : PROCESS (HCLK, HRESETn)
235 lpp_lfr_apbreg : PROCESS (HCLK, HRESETn)
227 VARIABLE paddr : STD_LOGIC_VECTOR(7 DOWNTO 2);
236 VARIABLE paddr : STD_LOGIC_VECTOR(7 DOWNTO 2);
228 BEGIN -- PROCESS lpp_dma_top
237 BEGIN -- PROCESS lpp_dma_top
@@ -266,10 +275,13 BEGIN -- beh
266 reg_wp.status_full_err <= (OTHERS => '0');
275 reg_wp.status_full_err <= (OTHERS => '0');
267 reg_wp.status_new_err <= (OTHERS => '0');
276 reg_wp.status_new_err <= (OTHERS => '0');
268 reg_wp.delta_snapshot <= (OTHERS => '0');
277 reg_wp.delta_snapshot <= (OTHERS => '0');
269 reg_wp.delta_f2_f1 <= (OTHERS => '0');
278 reg_wp.delta_f0 <= (OTHERS => '0');
270 reg_wp.delta_f2_f0 <= (OTHERS => '0');
279 reg_wp.delta_f0_2 <= (OTHERS => '0');
271 reg_wp.nb_burst_available <= (OTHERS => '0');
280 reg_wp.delta_f1 <= (OTHERS => '0');
281 reg_wp.delta_f2 <= (OTHERS => '0');
282 reg_wp.nb_data_by_buffer <= (OTHERS => '0');
272 reg_wp.nb_snapshot_param <= (OTHERS => '0');
283 reg_wp.nb_snapshot_param <= (OTHERS => '0');
284 reg_wp.start_date <= (OTHERS => '0');
273
285
274 ELSIF HCLK'EVENT AND HCLK = '1' THEN -- rising clock edge
286 ELSIF HCLK'EVENT AND HCLK = '1' THEN -- rising clock edge
275 status_full_ack <= (OTHERS => '0');
287 status_full_ack <= (OTHERS => '0');
@@ -282,9 +294,9 BEGIN -- beh
282 reg_sp.status_error_anticipating_empty_fifo <= reg_sp.status_error_anticipating_empty_fifo OR error_anticipating_empty_fifo;
294 reg_sp.status_error_anticipating_empty_fifo <= reg_sp.status_error_anticipating_empty_fifo OR error_anticipating_empty_fifo;
283 reg_sp.status_error_bad_component_error <= reg_sp.status_error_bad_component_error OR error_bad_component_error;
295 reg_sp.status_error_bad_component_error <= reg_sp.status_error_bad_component_error OR error_bad_component_error;
284
296
285 reg_wp.status_full <= reg_wp.status_full OR status_full;
297 reg_wp.status_full <= reg_wp.status_full OR status_full;
286 reg_wp.status_full_err <= reg_wp.status_full_err OR status_full_err;
298 reg_wp.status_full_err <= reg_wp.status_full_err OR status_full_err;
287 reg_wp.status_new_err <= reg_wp.status_new_err OR status_new_err;
299 reg_wp.status_new_err <= reg_wp.status_new_err OR status_new_err;
288
300
289 paddr := "000000";
301 paddr := "000000";
290 paddr(7 DOWNTO 2) := apbi.paddr(7 DOWNTO 2);
302 paddr(7 DOWNTO 2) := apbi.paddr(7 DOWNTO 2);
@@ -327,11 +339,14 BEGIN -- beh
327 WHEN "001110" => prdata(3 DOWNTO 0) <= reg_wp.status_full;
339 WHEN "001110" => prdata(3 DOWNTO 0) <= reg_wp.status_full;
328 prdata(7 DOWNTO 4) <= reg_wp.status_full_err;
340 prdata(7 DOWNTO 4) <= reg_wp.status_full_err;
329 prdata(11 DOWNTO 8) <= reg_wp.status_new_err;
341 prdata(11 DOWNTO 8) <= reg_wp.status_new_err;
330 WHEN "001111" => prdata(delta_snapshot_size-1 DOWNTO 0) <= reg_wp.delta_snapshot;
342 WHEN "001111" => prdata(delta_vector_size-1 DOWNTO 0) <= reg_wp.delta_snapshot;
331 WHEN "010000" => prdata(delta_f2_f1_size-1 DOWNTO 0) <= reg_wp.delta_f2_f1;
343 WHEN "010000" => prdata(delta_vector_size-1 DOWNTO 0) <= reg_wp.delta_f0;
332 WHEN "010001" => prdata(delta_f2_f0_size-1 DOWNTO 0) <= reg_wp.delta_f2_f0;
344 WHEN "010001" => prdata(delta_vector_size_f0_2-1 DOWNTO 0) <= reg_wp.delta_f0_2;
333 WHEN "010010" => prdata(nb_burst_available_size-1 DOWNTO 0) <= reg_wp.nb_burst_available;
345 WHEN "010010" => prdata(delta_vector_size-1 DOWNTO 0) <= reg_wp.delta_f1;
334 WHEN "010011" => prdata(nb_snapshot_param_size-1 DOWNTO 0) <= reg_wp.nb_snapshot_param;
346 WHEN "010011" => prdata(delta_vector_size-1 DOWNTO 0) <= reg_wp.delta_f2;
347 WHEN "010100" => prdata(nb_data_by_buffer_size-1 DOWNTO 0) <= reg_wp.nb_data_by_buffer;
348 WHEN "010101" => prdata(nb_snapshot_param_size-1 DOWNTO 0) <= reg_wp.nb_snapshot_param;
349 WHEN "010110" => prdata(30 DOWNTO 0) <= reg_wp.start_date;
335 --
350 --
336 WHEN OTHERS => NULL;
351 WHEN OTHERS => NULL;
337 END CASE;
352 END CASE;
@@ -340,8 +355,8 BEGIN -- beh
340 CASE paddr(7 DOWNTO 2) IS
355 CASE paddr(7 DOWNTO 2) IS
341 --
356 --
342 WHEN "000000" => reg_sp.config_active_interruption_onNewMatrix <= apbi.pwdata(0);
357 WHEN "000000" => reg_sp.config_active_interruption_onNewMatrix <= apbi.pwdata(0);
343 reg_sp.config_active_interruption_onError <= apbi.pwdata(1);
358 reg_sp.config_active_interruption_onError <= apbi.pwdata(1);
344 WHEN "000001" => reg_sp.status_ready_matrix_f0_0 <= apbi.pwdata(0);
359 WHEN "000001" => reg_sp.status_ready_matrix_f0_0 <= apbi.pwdata(0);
345 reg_sp.status_ready_matrix_f0_1 <= apbi.pwdata(1);
360 reg_sp.status_ready_matrix_f0_1 <= apbi.pwdata(1);
346 reg_sp.status_ready_matrix_f1 <= apbi.pwdata(2);
361 reg_sp.status_ready_matrix_f1 <= apbi.pwdata(2);
347 reg_sp.status_ready_matrix_f2 <= apbi.pwdata(3);
362 reg_sp.status_ready_matrix_f2 <= apbi.pwdata(3);
@@ -376,11 +391,14 BEGIN -- beh
376 status_full_ack(1) <= reg_wp.status_full(1) AND NOT apbi.pwdata(1);
391 status_full_ack(1) <= reg_wp.status_full(1) AND NOT apbi.pwdata(1);
377 status_full_ack(2) <= reg_wp.status_full(2) AND NOT apbi.pwdata(2);
392 status_full_ack(2) <= reg_wp.status_full(2) AND NOT apbi.pwdata(2);
378 status_full_ack(3) <= reg_wp.status_full(3) AND NOT apbi.pwdata(3);
393 status_full_ack(3) <= reg_wp.status_full(3) AND NOT apbi.pwdata(3);
379 WHEN "001111" => reg_wp.delta_snapshot <= apbi.pwdata(delta_snapshot_size-1 DOWNTO 0);
394 WHEN "001111" => reg_wp.delta_snapshot <= apbi.pwdata(delta_vector_size-1 DOWNTO 0);
380 WHEN "010000" => reg_wp.delta_f2_f1 <= apbi.pwdata(delta_f2_f1_size-1 DOWNTO 0);
395 WHEN "010000" => reg_wp.delta_f0 <= apbi.pwdata(delta_vector_size-1 DOWNTO 0);
381 WHEN "010001" => reg_wp.delta_f2_f0 <= apbi.pwdata(delta_f2_f0_size-1 DOWNTO 0);
396 WHEN "010001" => reg_wp.delta_f0_2 <= apbi.pwdata(delta_vector_size_f0_2-1 DOWNTO 0);
382 WHEN "010010" => reg_wp.nb_burst_available <= apbi.pwdata(nb_burst_available_size-1 DOWNTO 0);
397 WHEN "010010" => reg_wp.delta_f1 <= apbi.pwdata(delta_vector_size-1 DOWNTO 0);
383 WHEN "010011" => reg_wp.nb_snapshot_param <= apbi.pwdata(nb_snapshot_param_size-1 DOWNTO 0);
398 WHEN "010011" => reg_wp.delta_f2 <= apbi.pwdata(delta_vector_size-1 DOWNTO 0);
399 WHEN "010100" => reg_wp.nb_data_by_buffer <= apbi.pwdata(nb_data_by_buffer_size-1 DOWNTO 0);
400 WHEN "010101" => reg_wp.nb_snapshot_param <= apbi.pwdata(nb_snapshot_param_size-1 DOWNTO 0);
401 WHEN "010110" => reg_wp.start_date <= apbi.pwdata(30 DOWNTO 0);
384 --
402 --
385 WHEN OTHERS => NULL;
403 WHEN OTHERS => NULL;
386 END CASE;
404 END CASE;
@@ -388,14 +406,14 BEGIN -- beh
388 END IF;
406 END IF;
389
407
390 apbo.pirq(pirq_ms) <= (reg_sp.config_active_interruption_onNewMatrix AND (ready_matrix_f0_0 OR
408 apbo.pirq(pirq_ms) <= (reg_sp.config_active_interruption_onNewMatrix AND (ready_matrix_f0_0 OR
391 ready_matrix_f0_1 OR
409 ready_matrix_f0_1 OR
392 ready_matrix_f1 OR
410 ready_matrix_f1 OR
393 ready_matrix_f2)
411 ready_matrix_f2)
394 )
412 )
395 OR
413 OR
396 (reg_sp.config_active_interruption_onError AND (error_anticipating_empty_fifo OR
414 (reg_sp.config_active_interruption_onError AND (error_anticipating_empty_fifo OR
397 error_bad_component_error)
415 error_bad_component_error)
398 );
416 );
399
417
400 apbo.pirq(pirq_wfp) <= (status_full(0) OR status_full_err(0) OR status_new_err(0) OR
418 apbo.pirq(pirq_wfp) <= (status_full(0) OR status_full_err(0) OR status_new_err(0) OR
401 status_full(1) OR status_full_err(1) OR status_new_err(1) OR
419 status_full(1) OR status_full_err(1) OR status_new_err(1) OR
@@ -412,4 +430,4 BEGIN -- beh
412 apbo.prdata <= prdata;
430 apbo.prdata <= prdata;
413
431
414
432
415 END beh; No newline at end of file
433 END beh;
@@ -32,7 +32,7 PACKAGE lpp_lfr_pkg IS
32 ready_matrix_f0_1 : OUT STD_LOGIC;
32 ready_matrix_f0_1 : OUT STD_LOGIC;
33 ready_matrix_f1 : OUT STD_LOGIC;
33 ready_matrix_f1 : OUT STD_LOGIC;
34 ready_matrix_f2 : OUT STD_LOGIC;
34 ready_matrix_f2 : OUT STD_LOGIC;
35 error_anticipating_empty_fifo : OUT STD_LOGIC;
35 error_anticipating_empty_fifo : OUT STD_LOGIC;
36 error_bad_component_error : OUT STD_LOGIC;
36 error_bad_component_error : OUT STD_LOGIC;
37 debug_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
37 debug_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
38 status_ready_matrix_f0_0 : IN STD_LOGIC;
38 status_ready_matrix_f0_0 : IN STD_LOGIC;
@@ -73,47 +73,43 PACKAGE lpp_lfr_pkg IS
73
73
74 COMPONENT lpp_lfr
74 COMPONENT lpp_lfr
75 GENERIC (
75 GENERIC (
76 Mem_use : INTEGER;
76 Mem_use : INTEGER;
77 nb_burst_available_size : INTEGER;
77 nb_data_by_buffer_size : INTEGER;
78 nb_snapshot_param_size : INTEGER;
78 nb_snapshot_param_size : INTEGER;
79 delta_snapshot_size : INTEGER;
79 delta_vector_size : INTEGER;
80 delta_f2_f0_size : INTEGER;
80 delta_vector_size_f0_2 : INTEGER;
81 delta_f2_f1_size : INTEGER;
81 pindex : INTEGER;
82 pindex : INTEGER;
82 paddr : INTEGER;
83 paddr : INTEGER;
83 pmask : INTEGER;
84 pmask : INTEGER;
84 pirq_ms : INTEGER;
85 pirq_ms : INTEGER;
85 pirq_wfp : INTEGER;
86 pirq_wfp : INTEGER;
86 hindex : INTEGER);
87 hindex_wfp : INTEGER;
88 hindex_ms : INTEGER);
89 PORT (
87 PORT (
90 clk : IN STD_LOGIC;
88 clk : IN STD_LOGIC;
91 rstn : IN STD_LOGIC;
89 rstn : IN STD_LOGIC;
92 sample_B : IN Samples14v(2 DOWNTO 0);
90 sample_B : IN Samples14v(2 DOWNTO 0);
93 sample_E : IN Samples14v(4 DOWNTO 0);
91 sample_E : IN Samples14v(4 DOWNTO 0);
94 sample_val : IN STD_LOGIC;
92 sample_val : IN STD_LOGIC;
95 apbi : IN apb_slv_in_type;
93 apbi : IN apb_slv_in_type;
96 apbo : OUT apb_slv_out_type;
94 apbo : OUT apb_slv_out_type;
97 ahbi_wfp : IN AHB_Mst_In_Type;
95 ahbi : IN AHB_Mst_In_Type;
98 ahbo_wfp : OUT AHB_Mst_Out_Type;
96 ahbo : OUT AHB_Mst_Out_Type;
99 ahbi_ms : IN AHB_Mst_In_Type;
97 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
100 ahbo_ms : OUT AHB_Mst_Out_Type;
98 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
101 coarse_time_0 : IN STD_LOGIC;
102 data_shaping_BW : OUT STD_LOGIC);
99 data_shaping_BW : OUT STD_LOGIC);
103 END COMPONENT;
100 END COMPONENT;
104
101
105 COMPONENT lpp_lfr_apbreg
102 COMPONENT lpp_lfr_apbreg
106 GENERIC (
103 GENERIC (
107 nb_burst_available_size : INTEGER;
104 nb_data_by_buffer_size : INTEGER;
108 nb_snapshot_param_size : INTEGER;
105 nb_snapshot_param_size : INTEGER;
109 delta_snapshot_size : INTEGER;
106 delta_vector_size : INTEGER;
110 delta_f2_f0_size : INTEGER;
107 delta_vector_size_f0_2 : INTEGER;
111 delta_f2_f1_size : INTEGER;
108 pindex : INTEGER;
112 pindex : INTEGER;
109 paddr : INTEGER;
113 paddr : INTEGER;
110 pmask : INTEGER;
114 pmask : INTEGER;
111 pirq_ms : INTEGER;
115 pirq_ms : INTEGER;
112 pirq_wfp : INTEGER);
116 pirq_wfp : INTEGER);
117 PORT (
113 PORT (
118 HCLK : IN STD_ULOGIC;
114 HCLK : IN STD_ULOGIC;
119 HRESETn : IN STD_ULOGIC;
115 HRESETn : IN STD_ULOGIC;
@@ -147,10 +143,12 PACKAGE lpp_lfr_pkg IS
147 data_shaping_SP1 : OUT STD_LOGIC;
143 data_shaping_SP1 : OUT STD_LOGIC;
148 data_shaping_R0 : OUT STD_LOGIC;
144 data_shaping_R0 : OUT STD_LOGIC;
149 data_shaping_R1 : OUT STD_LOGIC;
145 data_shaping_R1 : OUT STD_LOGIC;
150 delta_snapshot : OUT STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
146 delta_snapshot : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
151 delta_f2_f1 : OUT STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
147 delta_f0 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
152 delta_f2_f0 : OUT STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
148 delta_f0_2 : OUT STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
153 nb_burst_available : OUT STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
149 delta_f1 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
150 delta_f2 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
151 nb_data_by_buffer : OUT STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
154 nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
152 nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
155 enable_f0 : OUT STD_LOGIC;
153 enable_f0 : OUT STD_LOGIC;
156 enable_f1 : OUT STD_LOGIC;
154 enable_f1 : OUT STD_LOGIC;
@@ -163,9 +161,10 PACKAGE lpp_lfr_pkg IS
163 addr_data_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
161 addr_data_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
164 addr_data_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
162 addr_data_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
165 addr_data_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
163 addr_data_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
166 addr_data_f3 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
164 addr_data_f3 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
165 start_date : OUT STD_LOGIC_VECTOR(30 DOWNTO 0));
167 END COMPONENT;
166 END COMPONENT;
168
167
169 COMPONENT lpp_top_ms
168 COMPONENT lpp_top_ms
170 GENERIC (
169 GENERIC (
171 Mem_use : INTEGER;
170 Mem_use : INTEGER;
@@ -45,69 +45,7 PACKAGE lpp_top_lfr_pkg IS
45 sample_f3_wdata : OUT STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0)
45 sample_f3_wdata : OUT STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0)
46 );
46 );
47 END COMPONENT;
47 END COMPONENT;
48
48
49 COMPONENT lpp_top_apbreg
50 GENERIC (
51 nb_burst_available_size : INTEGER;
52 nb_snapshot_param_size : INTEGER;
53 delta_snapshot_size : INTEGER;
54 delta_f2_f0_size : INTEGER;
55 delta_f2_f1_size : INTEGER;
56 pindex : INTEGER;
57 paddr : INTEGER;
58 pmask : INTEGER;
59 pirq : INTEGER);
60 PORT (
61 HCLK : IN STD_ULOGIC;
62 HRESETn : IN STD_ULOGIC;
63 apbi : IN apb_slv_in_type;
64 apbo : OUT apb_slv_out_type;
65 ready_matrix_f0_0 : IN STD_LOGIC;
66 ready_matrix_f0_1 : IN STD_LOGIC;
67 ready_matrix_f1 : IN STD_LOGIC;
68 ready_matrix_f2 : IN STD_LOGIC;
69 error_anticipating_empty_fifo : IN STD_LOGIC;
70 error_bad_component_error : IN STD_LOGIC;
71 debug_reg : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
72 status_ready_matrix_f0_0 : OUT STD_LOGIC;
73 status_ready_matrix_f0_1 : OUT STD_LOGIC;
74 status_ready_matrix_f1 : OUT STD_LOGIC;
75 status_ready_matrix_f2 : OUT STD_LOGIC;
76 status_error_anticipating_empty_fifo : OUT STD_LOGIC;
77 status_error_bad_component_error : OUT STD_LOGIC;
78 config_active_interruption_onNewMatrix : OUT STD_LOGIC;
79 config_active_interruption_onError : OUT STD_LOGIC;
80 addr_matrix_f0_0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
81 addr_matrix_f0_1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
82 addr_matrix_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
83 addr_matrix_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
84 status_full : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
85 status_full_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
86 status_full_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
87 status_new_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
88 data_shaping_BW : OUT STD_LOGIC;
89 data_shaping_SP0 : OUT STD_LOGIC;
90 data_shaping_SP1 : OUT STD_LOGIC;
91 data_shaping_R0 : OUT STD_LOGIC;
92 data_shaping_R1 : OUT STD_LOGIC;
93 delta_snapshot : OUT STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
94 delta_f2_f1 : OUT STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
95 delta_f2_f0 : OUT STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
96 nb_burst_available : OUT STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
97 nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
98 enable_f0 : OUT STD_LOGIC;
99 enable_f1 : OUT STD_LOGIC;
100 enable_f2 : OUT STD_LOGIC;
101 enable_f3 : OUT STD_LOGIC;
102 burst_f0 : OUT STD_LOGIC;
103 burst_f1 : OUT STD_LOGIC;
104 burst_f2 : OUT STD_LOGIC;
105 addr_data_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
106 addr_data_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
107 addr_data_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
108 addr_data_f3 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
109 END COMPONENT;
110
111 COMPONENT lpp_top_lfr_wf_picker
49 COMPONENT lpp_top_lfr_wf_picker
112 GENERIC (
50 GENERIC (
113 hindex : INTEGER;
51 hindex : INTEGER;
@@ -1,3 +1,25
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe Pellion
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 -- jean-christophe.pellion@easii-ic.com
22 -------------------------------------------------------------------------------
1 LIBRARY IEEE;
23 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
24 USE IEEE.STD_LOGIC_1164.ALL;
3 USE ieee.numeric_std.ALL;
25 USE ieee.numeric_std.ALL;
@@ -17,30 +39,30 USE techmap.gencomp.ALL;
17 ENTITY lpp_waveform IS
39 ENTITY lpp_waveform IS
18
40
19 GENERIC (
41 GENERIC (
20 hindex : INTEGER := 2;
42 tech : INTEGER := inferred;
21 tech : INTEGER := inferred;
43 data_size : INTEGER := 96; --16*6
22 data_size : INTEGER := 160;
44 nb_data_by_buffer_size : INTEGER := 11;
23 nb_burst_available_size : INTEGER := 11;
45 nb_snapshot_param_size : INTEGER := 11;
24 nb_snapshot_param_size : INTEGER := 11;
46 delta_vector_size : INTEGER := 20;
25 delta_snapshot_size : INTEGER := 16;
47 delta_vector_size_f0_2 : INTEGER := 3);
26 delta_f2_f0_size : INTEGER := 10;
27 delta_f2_f1_size : INTEGER := 10);
28
48
29 PORT (
49 PORT (
30 clk : IN STD_LOGIC;
50 clk : IN STD_LOGIC;
31 rstn : IN STD_LOGIC;
51 rstn : IN STD_LOGIC;
32
52
33 -- AMBA AHB Master Interface
53 ---- AMBA AHB Master Interface
34 AHB_Master_In : IN AHB_Mst_In_Type;
54 --AHB_Master_In : IN AHB_Mst_In_Type; -- TODO
35 AHB_Master_Out : OUT AHB_Mst_Out_Type;
55 --AHB_Master_Out : OUT AHB_Mst_Out_Type; -- TODO
36
56
37 coarse_time_0 : IN STD_LOGIC;
38
39 --config
57 --config
40 delta_snapshot : IN STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
58 reg_run : IN STD_LOGIC;
41 delta_f2_f1 : IN STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
59 reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
42 delta_f2_f0 : IN STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
60 reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
43
61 reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
62 reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
63 reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
64 reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
65
44 enable_f0 : IN STD_LOGIC;
66 enable_f0 : IN STD_LOGIC;
45 enable_f1 : IN STD_LOGIC;
67 enable_f1 : IN STD_LOGIC;
46 enable_f2 : IN STD_LOGIC;
68 enable_f2 : IN STD_LOGIC;
@@ -50,28 +72,62 ENTITY lpp_waveform IS
50 burst_f1 : IN STD_LOGIC;
72 burst_f1 : IN STD_LOGIC;
51 burst_f2 : IN STD_LOGIC;
73 burst_f2 : IN STD_LOGIC;
52
74
53 run : IN STD_LOGIC; -- TODO
75 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
76 nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
77 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
78 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
79 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
80 status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- New data f(i) before the current data is write by dma
81 ---------------------------------------------------------------------------
82 -- INPUT
83 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
84 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
85
86 --f0
87 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
88 data_f0_in_valid : IN STD_LOGIC;
89 data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
90 --f1
91 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
92 data_f1_in_valid : IN STD_LOGIC;
93 data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
94 --f2
95 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
96 data_f2_in_valid : IN STD_LOGIC;
97 data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
98 --f3
99 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
100 data_f3_in_valid : IN STD_LOGIC;
101 data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
54
102
55 nb_burst_available : IN STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
103 ---------------------------------------------------------------------------
56 nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
104 -- OUTPUT
57 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
105 --f0
58 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
106 data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
59 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
107 data_f0_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
60 status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- New data f(i) before the current data is write by dma
108 data_f0_data_out_valid : OUT STD_LOGIC;
61 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
109 data_f0_data_out_valid_burst : OUT STD_LOGIC;
62 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
110 data_f0_data_out_ren : IN STD_LOGIC;
63 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
111 --f1
64 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
112 data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
113 data_f1_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
114 data_f1_data_out_valid : OUT STD_LOGIC;
115 data_f1_data_out_valid_burst : OUT STD_LOGIC;
116 data_f1_data_out_ren : IN STD_LOGIC;
117 --f2
118 data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
119 data_f2_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
120 data_f2_data_out_valid : OUT STD_LOGIC;
121 data_f2_data_out_valid_burst : OUT STD_LOGIC;
122 data_f2_data_out_ren : IN STD_LOGIC;
123 --f3
124 data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
125 data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
126 data_f3_data_out_valid : OUT STD_LOGIC;
127 data_f3_data_out_valid_burst : OUT STD_LOGIC;
128 data_f3_data_out_ren : IN STD_LOGIC
65
129
66 data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
130
67 data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
68 data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
69 data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
70
71 data_f0_in_valid : IN STD_LOGIC;
72 data_f1_in_valid : IN STD_LOGIC;
73 data_f2_in_valid : IN STD_LOGIC;
74 data_f3_in_valid : IN STD_LOGIC
75 );
131 );
76
132
77 END lpp_waveform;
133 END lpp_waveform;
@@ -86,49 +142,65 ARCHITECTURE beh OF lpp_waveform IS
86 SIGNAL data_f2_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
142 SIGNAL data_f2_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
87 SIGNAL data_f3_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
143 SIGNAL data_f3_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
88
144
89 SIGNAL data_f0_out_valid : STD_LOGIC;
145 SIGNAL data_f0_out_valid : STD_LOGIC;
90 SIGNAL data_f1_out_valid : STD_LOGIC;
146 SIGNAL data_f1_out_valid : STD_LOGIC;
91 SIGNAL data_f2_out_valid : STD_LOGIC;
147 SIGNAL data_f2_out_valid : STD_LOGIC;
92 SIGNAL data_f3_out_valid : STD_LOGIC;
148 SIGNAL data_f3_out_valid : STD_LOGIC;
93 SIGNAL nb_snapshot_param_more_one : STD_LOGIC_VECTOR(nb_snapshot_param_size DOWNTO 0);
149 SIGNAL nb_snapshot_param_more_one : STD_LOGIC_VECTOR(nb_snapshot_param_size DOWNTO 0);
94
95 --
150 --
96 SIGNAL valid_in : STD_LOGIC_VECTOR(3 DOWNTO 0);
151 SIGNAL valid_in : STD_LOGIC_VECTOR(3 DOWNTO 0);
97 SIGNAL valid_out : STD_LOGIC_VECTOR(3 DOWNTO 0);
152 SIGNAL valid_out : STD_LOGIC_VECTOR(3 DOWNTO 0);
98 SIGNAL valid_ack : STD_LOGIC_VECTOR(3 DOWNTO 0);
153 SIGNAL valid_ack : STD_LOGIC_VECTOR(3 DOWNTO 0);
99 SIGNAL time_ready : STD_LOGIC_VECTOR(3 DOWNTO 0);
154 SIGNAL time_ready : STD_LOGIC_VECTOR(3 DOWNTO 0);
100 SIGNAL data_ready : STD_LOGIC_VECTOR(3 DOWNTO 0);
155 SIGNAL data_ready : STD_LOGIC_VECTOR(3 DOWNTO 0);
101 SIGNAL ready_arb : STD_LOGIC_VECTOR(3 DOWNTO 0);
156 SIGNAL ready_arb : STD_LOGIC_VECTOR(3 DOWNTO 0);
102 SIGNAL data_wen : STD_LOGIC_VECTOR(3 DOWNTO 0);
157 SIGNAL data_wen : STD_LOGIC_VECTOR(3 DOWNTO 0);
103 SIGNAL time_wen : STD_LOGIC_VECTOR(3 DOWNTO 0);
158 SIGNAL time_wen : STD_LOGIC_VECTOR(3 DOWNTO 0);
104 SIGNAL wdata : STD_LOGIC_VECTOR(31 DOWNTO 0);
159 SIGNAL wdata : STD_LOGIC_VECTOR(31 DOWNTO 0);
160 SIGNAL full_almost : STD_LOGIC_VECTOR(3 DOWNTO 0);
161 SIGNAL full : STD_LOGIC_VECTOR(3 DOWNTO 0);
162 SIGNAL empty_almost : STD_LOGIC_VECTOR(3 DOWNTO 0);
163 SIGNAL empty : STD_LOGIC_VECTOR(3 DOWNTO 0);
105 --
164 --
106 SIGNAL data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
165 SIGNAL data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
107 SIGNAL time_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
166 SIGNAL time_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
108 SIGNAL rdata : STD_LOGIC_VECTOR(31 DOWNTO 0);
167 SIGNAL rdata : STD_LOGIC_VECTOR(31 DOWNTO 0);
109 SIGNAL enable : STD_LOGIC_VECTOR(3 DOWNTO 0);
168 SIGNAL enable : STD_LOGIC_VECTOR(3 DOWNTO 0);
169 --
170 SIGNAL run : STD_LOGIC;
171 --
172 TYPE TIME_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(47 DOWNTO 0);
173 SIGNAL data_out : Data_Vector(3 DOWNTO 0, 95 DOWNTO 0);
174 SIGNAL time_out_2 : Data_Vector(3 DOWNTO 0, 47 DOWNTO 0);
175 SIGNAL time_out : TIME_VECTOR(3 DOWNTO 0);
176 SIGNAL time_reg1 : STD_LOGIC_VECTOR(47 DOWNTO 0);
177 SIGNAL time_reg2 : STD_LOGIC_VECTOR(47 DOWNTO 0);
110
178
111 BEGIN -- beh
179 BEGIN -- beh
112
180
113 lpp_waveform_snapshot_controler_1: lpp_waveform_snapshot_controler
181 lpp_waveform_snapshot_controler_1 : lpp_waveform_snapshot_controler
114 GENERIC MAP (
182 GENERIC MAP (
115 delta_snapshot_size => delta_snapshot_size,
183 delta_vector_size => delta_vector_size,
116 delta_f2_f0_size => delta_f2_f0_size,
184 delta_vector_size_f0_2 => delta_vector_size_f0_2
117 delta_f2_f1_size => delta_f2_f1_size)
185 )
118 PORT MAP (
186 PORT MAP (
119 clk => clk,
187 clk => clk,
120 rstn => rstn,
188 rstn => rstn,
121 run => run,
189 reg_run => reg_run,
122 delta_snapshot => delta_snapshot,
190 reg_start_date => reg_start_date,
123 delta_f2_f1 => delta_f2_f1,
191 reg_delta_snapshot => reg_delta_snapshot,
124 delta_f2_f0 => delta_f2_f0,
192 reg_delta_f0 => reg_delta_f0,
125 coarse_time_0 => coarse_time_0,
193 reg_delta_f0_2 => reg_delta_f0_2,
126 data_f0_in_valid => data_f0_in_valid,
194 reg_delta_f1 => reg_delta_f1,
127 data_f2_in_valid => data_f2_in_valid,
195 reg_delta_f2 => reg_delta_f2,
128 start_snapshot_f0 => start_snapshot_f0,
196 coarse_time => coarse_time(30 DOWNTO 0),
129 start_snapshot_f1 => start_snapshot_f1,
197 data_f0_valid => data_f0_in_valid,
130 start_snapshot_f2 => start_snapshot_f2);
198 data_f2_valid => data_f2_in_valid,
131
199 start_snapshot_f0 => start_snapshot_f0,
200 start_snapshot_f1 => start_snapshot_f1,
201 start_snapshot_f2 => start_snapshot_f2,
202 wfp_on => run);
203
132 lpp_waveform_snapshot_f0 : lpp_waveform_snapshot
204 lpp_waveform_snapshot_f0 : lpp_waveform_snapshot
133 GENERIC MAP (
205 GENERIC MAP (
134 data_size => data_size,
206 data_size => data_size,
@@ -147,7 +219,7 BEGIN -- beh
147 data_out_valid => data_f0_out_valid);
219 data_out_valid => data_f0_out_valid);
148
220
149 nb_snapshot_param_more_one <= ('0' & nb_snapshot_param) + 1;
221 nb_snapshot_param_more_one <= ('0' & nb_snapshot_param) + 1;
150
222
151 lpp_waveform_snapshot_f1 : lpp_waveform_snapshot
223 lpp_waveform_snapshot_f1 : lpp_waveform_snapshot
152 GENERIC MAP (
224 GENERIC MAP (
153 data_size => data_size,
225 data_size => data_size,
@@ -182,7 +254,7 BEGIN -- beh
182 data_out => data_f2_out,
254 data_out => data_f2_out,
183 data_out_valid => data_f2_out_valid);
255 data_out_valid => data_f2_out_valid);
184
256
185 lpp_waveform_burst_f3: lpp_waveform_burst
257 lpp_waveform_burst_f3 : lpp_waveform_burst
186 GENERIC MAP (
258 GENERIC MAP (
187 data_size => data_size)
259 data_size => data_size)
188 PORT MAP (
260 PORT MAP (
@@ -195,90 +267,160 BEGIN -- beh
195 data_out => data_f3_out,
267 data_out => data_f3_out,
196 data_out_valid => data_f3_out_valid);
268 data_out_valid => data_f3_out_valid);
197
269
198
270 PROCESS (clk, rstn)
199 valid_in <= data_f3_out_valid & data_f2_out_valid & data_f1_out_valid & data_f0_out_valid;
271 BEGIN -- PROCESS
272 IF rstn = '0' THEN -- asynchronous reset (active low)
273 time_reg1 <= (OTHERS => '0');
274 time_reg2 <= (OTHERS => '0');
275 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
276 time_reg1 <= fine_time & coarse_time;
277 time_reg2 <= time_reg1;
278 END IF;
279 END PROCESS;
200
280
201 all_input_valid: FOR i IN 3 DOWNTO 0 GENERATE
281 valid_in <= data_f3_out_valid & data_f2_out_valid & data_f1_out_valid & data_f0_out_valid;
202 lpp_waveform_dma_gen_valid_I: lpp_waveform_dma_gen_valid
282 all_input_valid : FOR i IN 3 DOWNTO 0 GENERATE
283 lpp_waveform_dma_genvalid_I : lpp_waveform_dma_genvalid
203 PORT MAP (
284 PORT MAP (
204 HCLK => clk,
285 HCLK => clk,
205 HRESETn => rstn,
286 HRESETn => rstn,
206 run => run,
287 run => run,
207 valid_in => valid_in(I),
288 valid_in => valid_in(I),
208 ack_in => valid_ack(I),
289 ack_in => valid_ack(I),
290 time_in => time_reg2, -- Todo
209 valid_out => valid_out(I),
291 valid_out => valid_out(I),
292 time_out => time_out(I), -- Todo
210 error => status_new_err(I));
293 error => status_new_err(I));
211 END GENERATE all_input_valid;
294 END GENERATE all_input_valid;
212
295
213 lpp_waveform_fifo_arbiter_1: lpp_waveform_fifo_arbiter
296 all_bit_of_data_out: FOR I IN 95 DOWNTO 0 GENERATE
214 GENERIC MAP (tech => tech)
297 data_out(0,I) <= data_f0_out(I);
298 data_out(1,I) <= data_f1_out(I);
299 data_out(2,I) <= data_f2_out(I);
300 data_out(3,I) <= data_f3_out(I);
301 END GENERATE all_bit_of_data_out;
302
303 all_bit_of_time_out: FOR I IN 47 DOWNTO 0 GENERATE
304 all_sample_of_time_out: FOR J IN 3 DOWNTO 0 GENERATE
305 time_out_2(J,I) <= time_out(J)(I);
306 END GENERATE all_sample_of_time_out;
307 END GENERATE all_bit_of_time_out;
308
309 lpp_waveform_fifo_arbiter_1 : lpp_waveform_fifo_arbiter
310 GENERIC MAP (tech => tech,
311 nb_data_by_buffer_size =>nb_data_by_buffer_size)
215 PORT MAP (
312 PORT MAP (
216 clk => clk,
313 clk => clk,
217 rstn => rstn,
314 rstn => rstn,
218 run => run,
315 run => run,
219 data_f0_valid => valid_out(0),
316 nb_data_by_buffer => nb_data_by_buffer,
220 data_f1_valid => valid_out(1),
317 data_in_valid => valid_out,
221 data_f2_valid => valid_out(2),
318 data_in_ack => valid_ack,
222 data_f3_valid => valid_out(3),
319 data_in => data_out,
223
320 time_in => time_out_2,
224 data_valid_ack => valid_ack,
225
226 data_f0 => data_f0_out,
227 data_f1 => data_f1_out,
228 data_f2 => data_f2_out,
229 data_f3 => data_f3_out,
230
231 ready => ready_arb,
232 time_wen => time_wen,
233 data_wen => data_wen,
234 data => wdata);
235
321
236 ready_arb <= NOT data_ready;
322 data_out => wdata,
237
323 data_out_wen => data_wen,
238 lpp_waveform_fifo_1: lpp_waveform_fifo
324 full => full);
325
326 lpp_waveform_fifo_1 : lpp_waveform_fifo
239 GENERIC MAP (tech => tech)
327 GENERIC MAP (tech => tech)
240 PORT MAP (
328 PORT MAP (
241 clk => clk,
329 clk => clk,
242 rstn => rstn,
330 rstn => rstn,
243 run => run,
331 run => run,
244 time_ready => time_ready,
332
245 data_ready => data_ready,
333 empty => empty,
246 time_ren => time_ren, -- todo
334 empty_almost => empty_almost,
247 data_ren => data_ren, -- todo
335
248 rdata => rdata, -- todo
336 data_ren => data_ren,
337 rdata => rdata,
338
249
339
250 time_wen => time_wen,
340 full_almost => full_almost,
251 data_wen => data_wen,
341 full => full,
252 wdata => wdata);
342 data_wen => data_wen,
343 wdata => wdata);
344
345
346
347
348
349 -----------------------------------------------------------------------------
350 -- TODO : set the alterance : time, data, data, .....
351 -----------------------------------------------------------------------------
253
352
254 enable <= enable_f3 & enable_f2 & enable_f1 & enable_f0;
353
354 -----------------------------------------------------------------------------
355 --
356 -----------------------------------------------------------------------------
357
358 data_ren <= data_f3_data_out_ren &
359 data_f2_data_out_ren &
360 data_f1_data_out_ren &
361 data_f0_data_out_ren;
362
363 data_f3_data_out <= rdata;
364 data_f2_data_out <= rdata;
365 data_f1_data_out <= rdata;
366 data_f0_data_out <= rdata;
367
368
369
255
370
256 pp_waveform_dma_1: lpp_waveform_dma
371
257 GENERIC MAP (
372 -----------------------------------------------------------------------------
258 data_size => data_size,
373 -- TODO
259 tech => tech,
374 -----------------------------------------------------------------------------
260 hindex => hindex,
375 lpp_waveform_gen_address_1 : lpp_waveform_genaddress
261 nb_burst_available_size => nb_burst_available_size)
376 GENERIC MAP (
262 PORT MAP (
377 nb_data_by_buffer_size => nb_data_by_buffer_size)
263 HCLK => clk,
378 PORT MAP (
264 HRESETn => rstn,
379 clk => clk,
265 run => run,
380 rstn => rstn,
266
381 run => run,
267 AHB_Master_In => AHB_Master_In,
382
268 AHB_Master_Out => AHB_Master_Out,
383 -------------------------------------------------------------------------
269 enable => enable, -- todo
384 -- CONFIG
270 time_ready => time_ready, -- todo
385 -------------------------------------------------------------------------
271 data_ready => data_ready,
386 nb_data_by_buffer => nb_data_by_buffer,
272 data => rdata,
387
273 data_data_ren => data_ren,
388 addr_data_f0 => addr_data_f0,
274 data_time_ren => time_ren,
389 addr_data_f1 => addr_data_f1,
275 nb_burst_available => nb_burst_available,
390 addr_data_f2 => addr_data_f2,
276 status_full => status_full,
391 addr_data_f3 => addr_data_f3,
277 status_full_ack => status_full_ack,
392 -------------------------------------------------------------------------
278 status_full_err => status_full_err,
393 -- CTRL
279 addr_data_f0 => addr_data_f0,
394 -------------------------------------------------------------------------
280 addr_data_f1 => addr_data_f1,
395 -- IN
281 addr_data_f2 => addr_data_f2,
396 empty => empty,
282 addr_data_f3 => addr_data_f3);
397 empty_almost => empty_almost,
398 data_ren => data_ren,
399
400 -------------------------------------------------------------------------
401 -- STATUS
402 -------------------------------------------------------------------------
403 status_full => status_full,
404 status_full_ack => status_full_ack,
405 status_full_err => status_full_err,
406
407 -------------------------------------------------------------------------
408 -- ADDR DATA OUT
409 -------------------------------------------------------------------------
410 data_f0_data_out_valid_burst => data_f0_data_out_valid_burst,
411 data_f1_data_out_valid_burst => data_f1_data_out_valid_burst,
412 data_f2_data_out_valid_burst => data_f2_data_out_valid_burst,
413 data_f3_data_out_valid_burst => data_f3_data_out_valid_burst,
414
415 data_f0_data_out_valid => data_f0_data_out_valid,
416 data_f1_data_out_valid => data_f1_data_out_valid,
417 data_f2_data_out_valid => data_f2_data_out_valid,
418 data_f3_data_out_valid => data_f3_data_out_valid,
419
420 data_f0_addr_out => data_f0_addr_out,
421 data_f1_addr_out => data_f1_addr_out,
422 data_f2_addr_out => data_f2_addr_out,
423 data_f3_addr_out => data_f3_addr_out
424 );
283
425
284 END beh;
426 END beh;
@@ -1,4 +1,3
1
2 ------------------------------------------------------------------------------
1 ------------------------------------------------------------------------------
3 -- This file is a part of the LPP VHDL IP LIBRARY
2 -- This file is a part of the LPP VHDL IP LIBRARY
4 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
@@ -29,21 +28,23 USE ieee.std_logic_1164.ALL;
29 USE ieee.numeric_std.ALL;
28 USE ieee.numeric_std.ALL;
30
29
31
30
32 ENTITY lpp_waveform_dma_gen_valid IS
31 ENTITY lpp_waveform_dma_genvalid IS
33 PORT (
32 PORT (
34 HCLK : IN STD_LOGIC;
33 HCLK : IN STD_LOGIC;
35 HRESETn : IN STD_LOGIC;
34 HRESETn : IN STD_LOGIC;
36 run : IN STD_LOGIC;
35 run : IN STD_LOGIC;
37
36
38 valid_in : IN STD_LOGIC;
37 valid_in : IN STD_LOGIC;
39 ack_in : IN STD_LOGIC;
38 time_in : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
40
39
40 ack_in : IN STD_LOGIC;
41 valid_out : OUT STD_LOGIC;
41 valid_out : OUT STD_LOGIC;
42 time_out : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
42 error : OUT STD_LOGIC
43 error : OUT STD_LOGIC
43 );
44 );
44 END;
45 END;
45
46
46 ARCHITECTURE Behavioral OF lpp_waveform_dma_gen_valid IS
47 ARCHITECTURE Behavioral OF lpp_waveform_dma_genvalid IS
47 TYPE state_fsm IS (IDLE, VALID);
48 TYPE state_fsm IS (IDLE, VALID);
48 SIGNAL state : state_fsm;
49 SIGNAL state : state_fsm;
49 BEGIN
50 BEGIN
@@ -54,17 +55,17 BEGIN
54 state <= IDLE;
55 state <= IDLE;
55 valid_out <= '0';
56 valid_out <= '0';
56 error <= '0';
57 error <= '0';
58 time_out <= (OTHERS => '0');
57 ELSIF HCLK'EVENT AND HCLK = '1' THEN
59 ELSIF HCLK'EVENT AND HCLK = '1' THEN
58 CASE state IS
60 CASE state IS
59 WHEN IDLE =>
61 WHEN IDLE =>
62
60 valid_out <= '0';
63 valid_out <= '0';
61 error <= '0';
64 error <= '0';
62 IF run = '0' THEN
65 IF run = '1' AND valid_in = '1' THEN
63 state <= IDLE;
64 valid_out <= '0';
65 ELSIF valid_in = '1' THEN
66 state <= VALID;
66 state <= VALID;
67 valid_out <= '1';
67 valid_out <= '1';
68 time_out <= time_in;
68 END IF;
69 END IF;
69
70
70 WHEN VALID =>
71 WHEN VALID =>
@@ -73,12 +74,11 BEGIN
73 valid_out <= '0';
74 valid_out <= '0';
74 error <= '0';
75 error <= '0';
75 ELSE
76 ELSE
76 valid_out <= '1';
77 error <= '0';
78 IF valid_in = '1' THEN
77 IF valid_in = '1' THEN
79 IF ack_in = '1' THEN
78 IF ack_in = '1' THEN
80 state <= VALID;
79 state <= VALID;
81 valid_out <= '1';
80 valid_out <= '1';
81 time_out <= time_in;
82 ELSE
82 ELSE
83 state <= IDLE;
83 state <= IDLE;
84 error <= '1';
84 error <= '1';
@@ -39,34 +39,24 ENTITY lpp_waveform_fifo IS
39 rstn : IN STD_LOGIC;
39 rstn : IN STD_LOGIC;
40 ---------------------------------------------------------------------------
40 ---------------------------------------------------------------------------
41 run : IN STD_LOGIC;
41 run : IN STD_LOGIC;
42
43 ---------------------------------------------------------------------------
44 time_ready : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- FIFO_DATA occupancy is greater than 16 * 32b
45 data_ready : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- FIFO_DATA occupancy is greater than 16 * 32b
46
42
47 ---------------------------------------------------------------------------
43 ---------------------------------------------------------------------------
48 time_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
44 empty_almost : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --occupancy is lesser than 16 * 32b
49 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
45 empty : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
50
46 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
51 rdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
47 rdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
52
48
53 ---------------------------------------------------------------------------
49 ---------------------------------------------------------------------------
54 time_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
50 full_almost : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --occupancy is greater than MAX - 5 * 32b
55 data_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
51 full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
56
52 data_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
57 wdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0)
53 wdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0)
58 );
54 );
59 END ENTITY;
55 END ENTITY;
60
56
61
57
62 ARCHITECTURE ar_lpp_waveform_fifo OF lpp_waveform_fifo IS
58 ARCHITECTURE ar_lpp_waveform_fifo OF lpp_waveform_fifo IS
63
59
64
65 SIGNAL time_mem_addr_r : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
66 SIGNAL time_mem_addr_w : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
67 SIGNAL time_mem_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
68 SIGNAL time_mem_wen : STD_LOGIC_VECTOR(3 DOWNTO 0);
69
70 SIGNAL data_mem_addr_r : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
60 SIGNAL data_mem_addr_r : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
71 SIGNAL data_mem_addr_w : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
61 SIGNAL data_mem_addr_w : LPP_TYPE_ADDR_FIFO_WAVEFORM(3 DOWNTO 0);
72 SIGNAL data_mem_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
62 SIGNAL data_mem_ren : STD_LOGIC_VECTOR(3 DOWNTO 0);
@@ -84,60 +74,31 BEGIN
84 PORT MAP(clk, ren, data_addr_r, rdata,
74 PORT MAP(clk, ren, data_addr_r, rdata,
85 clk, wen, data_addr_w, wdata);
75 clk, wen, data_addr_w, wdata);
86
76
87
77 ren <= data_mem_ren(3) OR
88 ren <= time_mem_ren(3) OR data_mem_ren(3) OR
78 data_mem_ren(2) OR
89 time_mem_ren(2) OR data_mem_ren(2) OR
79 data_mem_ren(1) OR
90 time_mem_ren(1) OR data_mem_ren(1) OR
80 data_mem_ren(0);
91 time_mem_ren(0) OR data_mem_ren(0);
92
81
93 wen <= time_mem_wen(3) OR data_mem_wen(3) OR
82 wen <= data_mem_wen(3) OR
94 time_mem_wen(2) OR data_mem_wen(2) OR
83 data_mem_wen(2) OR
95 time_mem_wen(1) OR data_mem_wen(1) OR
84 data_mem_wen(1) OR
96 time_mem_wen(0) OR data_mem_wen(0);
85 data_mem_wen(0);
97
86
98 data_addr_r <= time_mem_addr_r(0) WHEN time_mem_ren(0) = '1' ELSE
87 data_addr_r <= data_mem_addr_r(0) WHEN data_mem_ren(0) = '1' ELSE
99 time_mem_addr_r(1) WHEN time_mem_ren(1) = '1' ELSE
100 time_mem_addr_r(2) WHEN time_mem_ren(2) = '1' ELSE
101 time_mem_addr_r(3) WHEN time_mem_ren(3) = '1' ELSE
102 data_mem_addr_r(0) WHEN data_mem_ren(0) = '1' ELSE
103 data_mem_addr_r(1) WHEN data_mem_ren(1) = '1' ELSE
88 data_mem_addr_r(1) WHEN data_mem_ren(1) = '1' ELSE
104 data_mem_addr_r(2) WHEN data_mem_ren(2) = '1' ELSE
89 data_mem_addr_r(2) WHEN data_mem_ren(2) = '1' ELSE
105 data_mem_addr_r(3);
90 data_mem_addr_r(3);
106
91
107 data_addr_w <= time_mem_addr_w(0) WHEN time_mem_wen(0) = '1' ELSE
92 data_addr_w <= data_mem_addr_w(0) WHEN data_mem_wen(0) = '1' ELSE
108 time_mem_addr_w(1) WHEN time_mem_wen(1) = '1' ELSE
109 time_mem_addr_w(2) WHEN time_mem_wen(2) = '1' ELSE
110 time_mem_addr_w(3) WHEN time_mem_wen(3) = '1' ELSE
111 data_mem_addr_w(0) WHEN data_mem_wen(0) = '1' ELSE
112 data_mem_addr_w(1) WHEN data_mem_wen(1) = '1' ELSE
93 data_mem_addr_w(1) WHEN data_mem_wen(1) = '1' ELSE
113 data_mem_addr_w(2) WHEN data_mem_wen(2) = '1' ELSE
94 data_mem_addr_w(2) WHEN data_mem_wen(2) = '1' ELSE
114 data_mem_addr_w(3);
95 data_mem_addr_w(3);
115
116 gen_fifo_ctrl_time: FOR I IN 3 DOWNTO 0 GENERATE
117 lpp_waveform_fifo_ctrl_time: lpp_waveform_fifo_ctrl
118 GENERIC MAP (
119 offset => 32*I + 20,
120 length => 10,
121 enable_ready => '1')
122 PORT MAP (
123 clk => clk,
124 rstn => rstn,
125 run => run,
126 ren => time_ren(I),
127 wen => time_wen(I),
128 mem_re => time_mem_ren(I),
129 mem_we => time_mem_wen(I),
130 mem_addr_ren => time_mem_addr_r(I),
131 mem_addr_wen => time_mem_addr_w(I),
132 ready => time_ready(I));
133 END GENERATE gen_fifo_ctrl_time;
134
96
135 gen_fifo_ctrl_data: FOR I IN 3 DOWNTO 0 GENERATE
97 gen_fifo_ctrl_data: FOR I IN 3 DOWNTO 0 GENERATE
136 lpp_waveform_fifo_ctrl_data: lpp_waveform_fifo_ctrl
98 lpp_waveform_fifo_ctrl_data: lpp_waveform_fifo_ctrl
137 GENERIC MAP (
99 GENERIC MAP (
138 offset => 32*I,
100 offset => 32*I,
139 length => 20,
101 length => 32)
140 enable_ready => '1')
141 PORT MAP (
102 PORT MAP (
142 clk => clk,
103 clk => clk,
143 rstn => rstn,
104 rstn => rstn,
@@ -148,7 +109,11 BEGIN
148 mem_we => data_mem_wen(I),
109 mem_we => data_mem_wen(I),
149 mem_addr_ren => data_mem_addr_r(I),
110 mem_addr_ren => data_mem_addr_r(I),
150 mem_addr_wen => data_mem_addr_w(I),
111 mem_addr_wen => data_mem_addr_w(I),
151 ready => data_ready(I));
112 empty_almost => empty_almost(I),
113 empty => empty(I),
114 full_almost => full_almost(I),
115 full => full(I)
116 );
152 END GENERATE gen_fifo_ctrl_data;
117 END GENERATE gen_fifo_ctrl_data;
153
118
154
119
@@ -25,142 +25,211 USE IEEE.numeric_std.ALL;
25
25
26 LIBRARY lpp;
26 LIBRARY lpp;
27 USE lpp.lpp_waveform_pkg.ALL;
27 USE lpp.lpp_waveform_pkg.ALL;
28 USE lpp.general_purpose.ALL;
28
29
29 ENTITY lpp_waveform_fifo_arbiter IS
30 ENTITY lpp_waveform_fifo_arbiter IS
30 GENERIC(
31 GENERIC(
31 tech : INTEGER := 0
32 tech : INTEGER := 0;
33 nb_data_by_buffer_size : INTEGER
32 );
34 );
33 PORT(
35 PORT(
34 clk : IN STD_LOGIC;
36 clk : IN STD_LOGIC;
35 rstn : IN STD_LOGIC;
37 rstn : IN STD_LOGIC;
36 ---------------------------------------------------------------------------
38 ---------------------------------------------------------------------------
37 run : IN STD_LOGIC;
39 run : IN STD_LOGIC;
40 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size - 1 DOWNTO 0);
38 ---------------------------------------------------------------------------
41 ---------------------------------------------------------------------------
39 data_f0_valid : IN STD_LOGIC;
42 -- SNAPSHOT INTERFACE (INPUT)
40 data_f1_valid : IN STD_LOGIC;
43 ---------------------------------------------------------------------------
41 data_f2_valid : IN STD_LOGIC;
44 data_in_valid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
42 data_f3_valid : IN STD_LOGIC;
45 data_in_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
43
46 data_in : IN Data_Vector(3 DOWNTO 0, 95 DOWNTO 0);
44 data_valid_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
47 time_in : IN Data_Vector(3 DOWNTO 0, 47 DOWNTO 0);
45
46 data_f0 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
47 data_f1 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
48 data_f2 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
49 data_f3 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
50
48
51 ---------------------------------------------------------------------------
49 ---------------------------------------------------------------------------
52 ready : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
50 -- FIFO INTERFACE (OUTPUT)
53
54 ---------------------------------------------------------------------------
51 ---------------------------------------------------------------------------
55 time_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
52 data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
56 data_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
53 data_out_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
57 data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
54 full : IN STD_LOGIC_VECTOR(3 DOWNTO 0)
58
55
59 );
56 );
60 END ENTITY;
57 END ENTITY;
61
58
62
59
63 ARCHITECTURE ar_lpp_waveform_fifo_arbiter OF lpp_waveform_fifo_arbiter IS
60 ARCHITECTURE ar_lpp_waveform_fifo_arbiter OF lpp_waveform_fifo_arbiter IS
64 TYPE state_fsm IS (IDLE, T1, T2, D1, D2);
65 SIGNAL state : state_fsm;
66
61
67 SIGNAL data_valid_and_ready : STD_LOGIC_VECTOR(3 DOWNTO 0);
62 -----------------------------------------------------------------------------
68 SIGNAL data_selected : STD_LOGIC_VECTOR(159 DOWNTO 0);
63 -- DATA FLOW
69 SIGNAL data_valid_selected : STD_LOGIC_VECTOR(3 DOWNTO 0);
64 -----------------------------------------------------------------------------
70 SIGNAL data_ready_to_go : STD_LOGIC;
65 TYPE WORD_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(31 DOWNTO 0);
71
66 SIGNAL time_temp_0 : WORD_VECTOR(3 DOWNTO 0);
72 SIGNAL data_temp : STD_LOGIC_VECTOR(32*4-1 DOWNTO 0);
67 SIGNAL time_temp_1 : WORD_VECTOR(3 DOWNTO 0);
73 SIGNAL time_en_temp : STD_LOGIC_VECTOR(3 DOWNTO 0);
68 SIGNAL data_temp_0 : WORD_VECTOR(3 DOWNTO 0);
69 SIGNAL data_temp_1 : WORD_VECTOR(3 DOWNTO 0);
70 SIGNAL data_temp_2 : WORD_VECTOR(3 DOWNTO 0);
71 SIGNAL data_temp_v : WORD_VECTOR(3 DOWNTO 0);
72 SIGNAL sel_input : STD_LOGIC_VECTOR(3 DOWNTO 0);
73 -----------------------------------------------------------------------------
74 -- CHANNEL SELECTION (RoundRobin)
75 -----------------------------------------------------------------------------
76 SIGNAL valid_in_rr : STD_LOGIC_VECTOR(3 DOWNTO 0);
77 SIGNAL valid_out_rr : STD_LOGIC_VECTOR(3 DOWNTO 0);
78 -----------------------------------------------------------------------------
79 -- FSM CONTROL
80 -----------------------------------------------------------------------------
81 TYPE Counter_Vector IS ARRAY (NATURAL RANGE <>) OF INTEGER;
82 SIGNAL reg_shift_data : Counter_Vector(3 DOWNTO 0);
83 SIGNAL reg_shift_time : Counter_Vector(3 DOWNTO 0);
84 SIGNAL reg_count_data : Counter_Vector(3 DOWNTO 0);
85 -- SHIFT_DATA ---------------------------------------------------------------
86 SIGNAL shift_data_pre : INTEGER;
87 SIGNAL shift_data : INTEGER;
88 SIGNAL reg_shift_data_s : Counter_Vector(3 DOWNTO 0);
89 -- SHIFT_TIME ---------------------------------------------------------------
90 SIGNAL shift_time_pre : INTEGER;
91 SIGNAL shift_time : INTEGER;
92 SIGNAL reg_shift_time_s : Counter_Vector(3 DOWNTO 0);
93 -- COUNT_DATA ---------------------------------------------------------------
94 SIGNAL count_data_pre : INTEGER;
95 SIGNAL count_data : INTEGER;
96 SIGNAL reg_count_data_s : Counter_Vector(3 DOWNTO 0);
97
74 BEGIN
98 BEGIN
75
99
76 data_valid_and_ready(0) <= ready(0) AND data_f0_valid;
100 -----------------------------------------------------------------------------
77 data_valid_and_ready(1) <= ready(1) AND data_f1_valid;
101 -- DATA FLOW
78 data_valid_and_ready(2) <= ready(2) AND data_f2_valid;
102 -----------------------------------------------------------------------------
79 data_valid_and_ready(3) <= ready(3) AND data_f3_valid;
80
103
81 data_selected <= data_f0 WHEN data_valid_and_ready(0) = '1' ELSE
82 data_f1 WHEN data_valid_and_ready(1) = '1' ELSE
83 data_f2 WHEN data_valid_and_ready(2) = '1' ELSE
84 data_f3;
85
104
86 data_valid_selected <= "0001" WHEN data_valid_and_ready(0) = '1' ELSE
105 all_input : FOR I IN 3 DOWNTO 0 GENERATE
87 "0010" WHEN data_valid_and_ready(1) = '1' ELSE
106
88 "0100" WHEN data_valid_and_ready(2) = '1' ELSE
107 all_bit_of_time: FOR J IN 31 DOWNTO 0 GENERATE
89 "1000" WHEN data_valid_and_ready(3) = '1' ELSE
108 time_temp_0(I)(J) <= time_in(I,J);
90 "0000";
109 J_47DOWNTO32: IF J+32 < 48 GENERATE
91
110 time_temp_1(I)(J) <= time_in(I,32+J);
92 data_ready_to_go <= data_valid_and_ready(0) OR
111 END GENERATE J_47DOWNTO32;
93 data_valid_and_ready(1) OR
112 J_63DOWNTO48: IF J+32 > 47 GENERATE
94 data_valid_and_ready(2) OR
113 time_temp_1(I)(J) <= '0';
95 data_valid_and_ready(3);
114 END GENERATE J_63DOWNTO48;
115 data_temp_0(I)(J) <= data_in(I,J);
116 data_temp_1(I)(J) <= data_in(I,J+32);
117 data_temp_2(I)(J) <= data_in(I,J+32*2);
118 END GENERATE all_bit_of_time;
119
120 data_temp_v(I) <= time_temp_0(I) WHEN shift_time = 0 ELSE
121 time_temp_1(I) WHEN shift_time = 1 ELSE
122 data_temp_0(I) WHEN shift_data = 0 ELSE
123 data_temp_1(I) WHEN shift_data = 1 ELSE
124 data_temp_2(I);
125 END GENERATE all_input;
126
127 data_out <= data_temp_v(0) WHEN sel_input = "0001" ELSE
128 data_temp_v(1) WHEN sel_input = "0010" ELSE
129 data_temp_v(2) WHEN sel_input = "0100" ELSE
130 data_temp_v(3);
131
132 -----------------------------------------------------------------------------
133 -- CHANNEL SELECTION (RoundRobin)
134 -----------------------------------------------------------------------------
135 all_input_rr : FOR I IN 3 DOWNTO 0 GENERATE
136 -- valid_in_rr(I) <= data_in_valid(I) AND NOT full_almost(I);
137 valid_in_rr(I) <= data_in_valid(I) AND NOT full(I);
138 END GENERATE all_input_rr;
139
140 RR_Arbiter_4_1 : RR_Arbiter_4
141 PORT MAP (
142 clk => clk,
143 rstn => rstn,
144 in_valid => valid_in_rr,
145 out_grant => valid_out_rr);
146
147 -----------------------------------------------------------------------------
148 -- FSM CONTROL
149 -----------------------------------------------------------------------------
96
150
97 PROCESS (clk, rstn)
151 PROCESS (clk, rstn)
98 BEGIN
152 BEGIN -- PROCESS
99 IF rstn = '0' THEN
153 IF rstn = '0' THEN -- asynchronous reset (active low)
100 state <= IDLE;
154 reg_shift_data <= (0, 0, 0, 0);
101 data_valid_ack <= (OTHERS => '0');
155 reg_shift_time <= (0, 0, 0, 0);
102 data_wen <= (OTHERS => '1');
156 reg_count_data <= (0, 0, 0, 0);
103 time_wen <= (OTHERS => '1');
157 sel_input <= (OTHERS => '0');
104 data <= (OTHERS => '0');
158 ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge
105 data_temp <= (OTHERS => '0');
159 IF run = '0' THEN
106 time_en_temp <= (OTHERS => '0');
160 reg_shift_data <= (0, 0, 0, 0);
107 ELSIF clk'EVENT AND clk = '1' THEN
161 reg_shift_time <= (0, 0, 0, 0);
108 CASE state IS
162 reg_count_data <= (0, 0, 0, 0);
109 WHEN IDLE =>
163 sel_input <= (OTHERS => '0');
110 data_valid_ack <= (OTHERS => '0');
164 ELSE
111 time_wen <= (OTHERS => '1');
165 sel_input <= valid_out_rr;
112 data_wen <= (OTHERS => '1');
166
113 data <= (OTHERS => '0');
167 IF count_data_pre = 0 THEN -- first buffer data
114 data_temp <= (OTHERS => '0');
168 IF shift_time_pre < 2 THEN -- TIME not completly send
115 IF data_ready_to_go = '1' AND run = '1' THEN
169 reg_shift_time <= reg_shift_time_s;
116 state <= T1;
117 data_valid_ack <= data_valid_selected;
118 time_wen <= NOT data_valid_selected;
119 time_en_temp <= NOT data_valid_selected;
120 data <= data_selected(31 DOWNTO 0);
121 data_temp <= data_selected(159 DOWNTO 32);
122 END IF;
123 WHEN T1 =>
124 IF run = '0' THEN
125 state <= IDLE;
126 ELSE
170 ELSE
127 state <= T2;
171 reg_shift_data <= reg_shift_data_s;
172 IF shift_data_pre = 2 THEN
173 reg_count_data <= reg_count_data_s;
174 END IF;
128 END IF;
175 END IF;
129 data_valid_ack <= (OTHERS => '0');
176 ELSE
130 data <= data_temp(31 DOWNTO 0);
177 reg_shift_data <= reg_shift_data_s;
131 data_temp(32*3-1 DOWNTO 0) <= data_temp(32*4-1 DOWNTO 32);
178 IF shift_data_pre = 2 THEN
132
179 reg_count_data <= reg_count_data_s;
133 WHEN T2 =>
180 IF count_data = 0 THEN
134 IF run = '0' THEN
181 reg_shift_time <= reg_shift_time_s;
135 state <= IDLE;
182 END IF;
136 ELSE
137 state <= D1;
138 END IF;
183 END IF;
139 time_wen <= (OTHERS => '1');
184 END IF;
140 data_wen <= time_en_temp;
185 END IF;
141 data <= data_temp(31 DOWNTO 0);
142 data_temp(32*3-1 DOWNTO 0) <= data_temp(32*4-1 DOWNTO 32);
143
144 WHEN D1 =>
145 IF run = '0' THEN
146 state <= IDLE;
147 ELSE
148 state <= D2;
149 END IF;
150 data <= data_temp(31 DOWNTO 0);
151 data_temp(32*3-1 DOWNTO 0) <= data_temp(32*4-1 DOWNTO 32);
152
153 WHEN D2 =>
154 state <= IDLE;
155 data <= data_temp(31 DOWNTO 0);
156 data_temp(32*3-1 DOWNTO 0) <= data_temp(32*4-1 DOWNTO 32);
157
158 WHEN OTHERS => NULL;
159 END CASE;
160
161 END IF;
186 END IF;
162 END PROCESS;
187 END PROCESS;
163
188
189 -----------------------------------------------------------------------------
190 data_out_wen <= NOT sel_input;
191 data_in_ack <= sel_input;
192
193 -- SHIFT_DATA ---------------------------------------------------------------
194 shift_data_pre <= reg_shift_data(0) WHEN valid_out_rr(0) = '1' ELSE
195 reg_shift_data(1) WHEN valid_out_rr(1) = '1' ELSE
196 reg_shift_data(2) WHEN valid_out_rr(2) = '1' ELSE
197 reg_shift_data(3);
198
199 shift_data <= shift_data_pre + 1 WHEN shift_data_pre < 2 ELSE 0;
200
201 reg_shift_data_s(0) <= shift_data WHEN valid_out_rr(0) = '1' ELSE reg_shift_data_s(0);
202 reg_shift_data_s(1) <= shift_data WHEN valid_out_rr(1) = '1' ELSE reg_shift_data_s(1);
203 reg_shift_data_s(2) <= shift_data WHEN valid_out_rr(2) = '1' ELSE reg_shift_data_s(2);
204 reg_shift_data_s(3) <= shift_data WHEN valid_out_rr(3) = '1' ELSE reg_shift_data_s(3);
205
206 -- SHIFT_TIME ---------------------------------------------------------------
207 shift_time_pre <= reg_shift_time(0) WHEN valid_out_rr(0) = '1' ELSE
208 reg_shift_time(1) WHEN valid_out_rr(1) = '1' ELSE
209 reg_shift_time(2) WHEN valid_out_rr(2) = '1' ELSE
210 reg_shift_time(3);
211
212 shift_time <= shift_time_pre + 1 WHEN shift_time_pre < 2 ELSE 0;
213
214 reg_shift_time_s(0) <= shift_time WHEN valid_out_rr(0) = '1' ELSE reg_shift_time_s(0);
215 reg_shift_time_s(1) <= shift_time WHEN valid_out_rr(1) = '1' ELSE reg_shift_time_s(1);
216 reg_shift_time_s(2) <= shift_time WHEN valid_out_rr(2) = '1' ELSE reg_shift_time_s(2);
217 reg_shift_time_s(3) <= shift_time WHEN valid_out_rr(3) = '1' ELSE reg_shift_time_s(3);
218
219 -- COUNT_DATA ---------------------------------------------------------------
220 count_data_pre <= reg_count_data(0) WHEN valid_out_rr(0) = '1' ELSE
221 reg_count_data(1) WHEN valid_out_rr(1) = '1' ELSE
222 reg_count_data(2) WHEN valid_out_rr(2) = '1' ELSE
223 reg_count_data(3);
224
225 count_data <= count_data_pre + 1 WHEN count_data_pre < UNSIGNED(nb_data_by_buffer) ELSE 0;
226
227 reg_count_data_s(0) <= count_data WHEN valid_out_rr(0) = '1' ELSE reg_count_data_s(0);
228 reg_count_data_s(1) <= count_data WHEN valid_out_rr(1) = '1' ELSE reg_count_data_s(1);
229 reg_count_data_s(2) <= count_data WHEN valid_out_rr(2) = '1' ELSE reg_count_data_s(2);
230 reg_count_data_s(3) <= count_data WHEN valid_out_rr(3) = '1' ELSE reg_count_data_s(3);
231 -----------------------------------------------------------------------------
232
164 END ARCHITECTURE;
233 END ARCHITECTURE;
165
234
166
235
@@ -33,8 +33,7 USE techmap.gencomp.ALL;
33 ENTITY lpp_waveform_fifo_ctrl IS
33 ENTITY lpp_waveform_fifo_ctrl IS
34 generic(
34 generic(
35 offset : INTEGER := 0;
35 offset : INTEGER := 0;
36 length : INTEGER := 20;
36 length : INTEGER := 20
37 enable_ready : STD_LOGIC := '1'
38 );
37 );
39 PORT(
38 PORT(
40 clk : IN STD_LOGIC;
39 clk : IN STD_LOGIC;
@@ -50,8 +49,12 ENTITY lpp_waveform_fifo_ctrl IS
50
49
51 mem_addr_ren : out STD_LOGIC_VECTOR(6 DOWNTO 0);
50 mem_addr_ren : out STD_LOGIC_VECTOR(6 DOWNTO 0);
52 mem_addr_wen : out STD_LOGIC_VECTOR(6 DOWNTO 0);
51 mem_addr_wen : out STD_LOGIC_VECTOR(6 DOWNTO 0);
53
52 ---------------------------------------------------------------------------
54 ready : OUT STD_LOGIC
53 empty_almost : OUT STD_LOGIC; --occupancy is lesser than 16 * 32b
54 empty : OUT STD_LOGIC;
55 full_almost : OUT STD_LOGIC; --occupancy is greater than MAX - 5 * 32b
56 full : OUT STD_LOGIC
57
55 );
58 );
56 END ENTITY;
59 END ENTITY;
57
60
@@ -73,6 +76,9 ARCHITECTURE ar_lpp_waveform_fifo_ctrl O
73 SIGNAL Waddr_vect_s : INTEGER RANGE 0 TO length := 0;
76 SIGNAL Waddr_vect_s : INTEGER RANGE 0 TO length := 0;
74 SIGNAL Raddr_vect_s : INTEGER RANGE 0 TO length := 0;
77 SIGNAL Raddr_vect_s : INTEGER RANGE 0 TO length := 0;
75
78
79 SIGNAL space_busy : INTEGER RANGE 0 TO length := 0;
80 SIGNAL space_free : INTEGER RANGE 0 TO length := 0;
81
76 BEGIN
82 BEGIN
77 mem_re <= sRE;
83 mem_re <= sRE;
78 mem_we <= sWE;
84 mem_we <= sWE;
@@ -140,15 +146,32 BEGIN
140 mem_addr_wen <= std_logic_vector(to_unsigned((Waddr_vect + offset), mem_addr_wen'length));
146 mem_addr_wen <= std_logic_vector(to_unsigned((Waddr_vect + offset), mem_addr_wen'length));
141 mem_addr_ren <= std_logic_vector(to_unsigned((Raddr_vect + offset), mem_addr_ren'length));
147 mem_addr_ren <= std_logic_vector(to_unsigned((Raddr_vect + offset), mem_addr_ren'length));
142
148
143 ready_gen: IF enable_ready = '1' GENERATE
149
144 ready <= '1' WHEN Waddr_vect > Raddr_vect AND (Waddr_vect - Raddr_vect) > 15 ELSE
150 -----------------------------------------------------------------------------
145 '1' WHEN Waddr_vect < Raddr_vect AND (length + Waddr_vect - Raddr_vect) > 15 ELSE
151 --
146 '0';
152 -----------------------------------------------------------------------------
147 END GENERATE ready_gen;
153 --empty_almost <= '0' WHEN Waddr_vect > Raddr_vect AND ( Waddr_vect - Raddr_vect) > 15 ELSE
154 -- '0' WHEN Waddr_vect < Raddr_vect AND (length + Waddr_vect - Raddr_vect) > 15 ELSE
155 -- '1';
156 empty_almost <= '0' WHEN space_busy > 15 ELSE '1';
157 empty <= sEmpty;
148
158
149 ready_not_gen: IF enable_ready = '0' GENERATE
159 --full_almost <= '0' WHEN Waddr_vect > Raddr_vect AND (length + Raddr_vect - Waddr_vect) > 5 ELSE
150 ready <= '0';
160 -- '0' WHEN Waddr_vect < Raddr_vect AND ( Raddr_vect - Waddr_vect) > 5 ELSE
151 END GENERATE ready_not_gen;
161 -- sfull WHEN Waddr_vect = Raddr_vect ELSE
162 -- '1';
163 full_almost <= '0' WHEN space_free > 4 ELSE '1';
164 full <= sfull;
165
166 -----------------------------------------------------------------------------
167 --
168 -----------------------------------------------------------------------------
169 space_busy <= length WHEN sfull = '1' ELSE
170 length + Waddr_vect - Raddr_vect WHEN Waddr_vect < Raddr_vect ELSE
171 Waddr_vect - Raddr_vect;
172
173 space_free <= length - space_busy;
174
152
175
153 END ARCHITECTURE;
176 END ARCHITECTURE;
154
177
@@ -1,3 +1,25
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe Pellion
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 -- jean-christophe.pellion@easii-ic.com
22 -------------------------------------------------------------------------------
1 LIBRARY IEEE;
23 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
24 USE IEEE.STD_LOGIC_1164.ALL;
3
25
@@ -13,6 +35,12 USE techmap.gencomp.ALL;
13 PACKAGE lpp_waveform_pkg IS
35 PACKAGE lpp_waveform_pkg IS
14
36
15 TYPE LPP_TYPE_ADDR_FIFO_WAVEFORM IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(6 DOWNTO 0);
37 TYPE LPP_TYPE_ADDR_FIFO_WAVEFORM IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(6 DOWNTO 0);
38
39 TYPE Data_Vector IS ARRAY (NATURAL RANGE <>,NATURAL RANGE <>) OF STD_LOGIC;
40
41 -----------------------------------------------------------------------------
42 -- SNAPSHOT
43 -----------------------------------------------------------------------------
16
44
17 COMPONENT lpp_waveform_snapshot
45 COMPONENT lpp_waveform_snapshot
18 GENERIC (
46 GENERIC (
@@ -48,158 +76,117 PACKAGE lpp_waveform_pkg IS
48
76
49 COMPONENT lpp_waveform_snapshot_controler
77 COMPONENT lpp_waveform_snapshot_controler
50 GENERIC (
78 GENERIC (
51 delta_snapshot_size : INTEGER;
79 delta_vector_size : INTEGER;
52 delta_f2_f0_size : INTEGER;
80 delta_vector_size_f0_2 : INTEGER);
53 delta_f2_f1_size : INTEGER);
54 PORT (
81 PORT (
55 clk : IN STD_LOGIC;
82 clk : IN STD_LOGIC;
56 rstn : IN STD_LOGIC;
83 rstn : IN STD_LOGIC;
57 run : IN STD_LOGIC;
84 reg_run : IN STD_LOGIC;
58 delta_snapshot : IN STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
85 reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
59 delta_f2_f1 : IN STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
86 reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
60 delta_f2_f0 : IN STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
87 reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
61 coarse_time_0 : IN STD_LOGIC;
88 reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
62 data_f0_in_valid : IN STD_LOGIC;
89 reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
63 data_f2_in_valid : IN STD_LOGIC;
90 reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
64 start_snapshot_f0 : OUT STD_LOGIC;
91 coarse_time : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
65 start_snapshot_f1 : OUT STD_LOGIC;
92 data_f0_valid : IN STD_LOGIC;
66 start_snapshot_f2 : OUT STD_LOGIC);
93 data_f2_valid : IN STD_LOGIC;
94 start_snapshot_f0 : OUT STD_LOGIC;
95 start_snapshot_f1 : OUT STD_LOGIC;
96 start_snapshot_f2 : OUT STD_LOGIC;
97 wfp_on : OUT STD_LOGIC);
67 END COMPONENT;
98 END COMPONENT;
68
99
69
100 -----------------------------------------------------------------------------
70
101 --
102 -----------------------------------------------------------------------------
71 COMPONENT lpp_waveform
103 COMPONENT lpp_waveform
72 GENERIC (
104 GENERIC (
73 hindex : INTEGER;
105 tech : INTEGER;
74 tech : INTEGER;
106 data_size : INTEGER;
75 data_size : INTEGER;
107 nb_data_by_buffer_size : INTEGER;
76 nb_burst_available_size : INTEGER;
108 nb_snapshot_param_size : INTEGER;
77 nb_snapshot_param_size : INTEGER;
109 delta_vector_size : INTEGER;
78 delta_snapshot_size : INTEGER;
110 delta_vector_size_f0_2 : INTEGER);
79 delta_f2_f0_size : INTEGER;
80 delta_f2_f1_size : INTEGER);
81 PORT (
111 PORT (
82 clk : IN STD_LOGIC;
112 clk : IN STD_LOGIC;
83 rstn : IN STD_LOGIC;
113 rstn : IN STD_LOGIC;
84 AHB_Master_In : IN AHB_Mst_In_Type;
114 reg_run : IN STD_LOGIC;
85 AHB_Master_Out : OUT AHB_Mst_Out_Type;
115 reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
86 coarse_time_0 : IN STD_LOGIC;
116 reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
87 delta_snapshot : IN STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
117 reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
88 delta_f2_f1 : IN STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
118 reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
89 delta_f2_f0 : IN STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
119 reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
90 enable_f0 : IN STD_LOGIC;
120 reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
91 enable_f1 : IN STD_LOGIC;
121 enable_f0 : IN STD_LOGIC;
92 enable_f2 : IN STD_LOGIC;
122 enable_f1 : IN STD_LOGIC;
93 enable_f3 : IN STD_LOGIC;
123 enable_f2 : IN STD_LOGIC;
94 burst_f0 : IN STD_LOGIC;
124 enable_f3 : IN STD_LOGIC;
95 burst_f1 : IN STD_LOGIC;
125 burst_f0 : IN STD_LOGIC;
96 burst_f2 : IN STD_LOGIC;
126 burst_f1 : IN STD_LOGIC;
97 run : IN STD_LOGIC;
127 burst_f2 : IN STD_LOGIC;
98 nb_burst_available : IN STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
128 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
99 nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
129 nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
100 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
130 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
101 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
131 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
102 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
132 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
103 status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
133 status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
104 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
134 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
105 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
135 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
106 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
136 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
107 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
137 data_f0_in_valid : IN STD_LOGIC;
108 data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
138 data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
109 data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
139 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
110 data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
140 data_f1_in_valid : IN STD_LOGIC;
111 data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
141 data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
112 data_f0_in_valid : IN STD_LOGIC;
142 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
113 data_f1_in_valid : IN STD_LOGIC;
143 data_f2_in_valid : IN STD_LOGIC;
114 data_f2_in_valid : IN STD_LOGIC;
144 data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
115 data_f3_in_valid : IN STD_LOGIC);
145 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
116 END COMPONENT;
146 data_f3_in_valid : IN STD_LOGIC;
117
147 data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
118 COMPONENT lpp_waveform_dma_send_Nword
148 data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
119 PORT (
149 data_f0_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
120 HCLK : IN STD_ULOGIC;
150 data_f0_data_out_valid : OUT STD_LOGIC;
121 HRESETn : IN STD_ULOGIC;
151 data_f0_data_out_valid_burst : OUT STD_LOGIC;
122 DMAIn : OUT DMA_In_Type;
152 data_f0_data_out_ren : IN STD_LOGIC;
123 DMAOut : IN DMA_OUt_Type;
153 data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
124 Nb_word_less1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
154 data_f1_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
125 send : IN STD_LOGIC;
155 data_f1_data_out_valid : OUT STD_LOGIC;
126 address : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
156 data_f1_data_out_valid_burst : OUT STD_LOGIC;
127 data : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
157 data_f1_data_out_ren : IN STD_LOGIC;
128 ren : OUT STD_LOGIC;
158 data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
129 send_ok : OUT STD_LOGIC;
159 data_f2_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
130 send_ko : OUT STD_LOGIC);
160 data_f2_data_out_valid : OUT STD_LOGIC;
161 data_f2_data_out_valid_burst : OUT STD_LOGIC;
162 data_f2_data_out_ren : IN STD_LOGIC;
163 data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
164 data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
165 data_f3_data_out_valid : OUT STD_LOGIC;
166 data_f3_data_out_valid_burst : OUT STD_LOGIC;
167 data_f3_data_out_ren : IN STD_LOGIC);
131 END COMPONENT;
168 END COMPONENT;
132
169
133 COMPONENT lpp_waveform_dma_selectaddress
170 COMPONENT lpp_waveform_dma_genvalid
134 GENERIC (
135 nb_burst_available_size : INTEGER);
136 PORT (
137 HCLK : IN STD_ULOGIC;
138 HRESETn : IN STD_ULOGIC;
139 run : IN STD_LOGIC;
140 enable : IN STD_LOGIC;
141 update : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
142 nb_burst_available : IN STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
143 addr_data_reg : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
144 addr_data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
145 status_full : OUT STD_LOGIC;
146 status_full_ack : IN STD_LOGIC;
147 status_full_err : OUT STD_LOGIC);
148 END COMPONENT;
149
150 COMPONENT lpp_waveform_dma_gen_valid
151 PORT (
171 PORT (
152 HCLK : IN STD_LOGIC;
172 HCLK : IN STD_LOGIC;
153 HRESETn : IN STD_LOGIC;
173 HRESETn : IN STD_LOGIC;
154 run : IN STD_LOGIC;
174 run : IN STD_LOGIC;
155 valid_in : IN STD_LOGIC;
175 valid_in : IN STD_LOGIC;
156 ack_in : IN STD_LOGIC;
176 ack_in : IN STD_LOGIC;
177 time_in : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
157 valid_out : OUT STD_LOGIC;
178 valid_out : OUT STD_LOGIC;
179 time_out : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
158 error : OUT STD_LOGIC);
180 error : OUT STD_LOGIC);
159 END COMPONENT;
181 END COMPONENT;
160
182
161 COMPONENT lpp_waveform_dma
183 -----------------------------------------------------------------------------
162 GENERIC (
184 -- FIFO
163 data_size : INTEGER;
185 -----------------------------------------------------------------------------
164 tech : INTEGER;
165 hindex : INTEGER;
166 nb_burst_available_size : INTEGER);
167 PORT (
168 HCLK : IN STD_ULOGIC;
169 HRESETn : IN STD_ULOGIC;
170 run : IN STD_LOGIC;
171 AHB_Master_In : IN AHB_Mst_In_Type;
172 AHB_Master_Out : OUT AHB_Mst_Out_Type;
173 enable : IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- todo
174 time_ready : IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- todo
175 data_ready : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
176 data : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
177 data_data_ren : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
178 data_time_ren : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
179 --data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
180 --data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
181 --data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
182 --data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
183 --data_f0_in_valid : IN STD_LOGIC;
184 --data_f1_in_valid : IN STD_LOGIC;
185 --data_f2_in_valid : IN STD_LOGIC;
186 --data_f3_in_valid : IN STD_LOGIC;
187 nb_burst_available : IN STD_LOGIC_VECTOR(nb_burst_available_size-1 DOWNTO 0);
188 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
189 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
190 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
191 -- status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
192 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
193 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
194 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
195 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
196 END COMPONENT;
197
198 COMPONENT lpp_waveform_fifo_ctrl
186 COMPONENT lpp_waveform_fifo_ctrl
199 GENERIC (
187 GENERIC (
200 offset : INTEGER;
188 offset : INTEGER;
201 length : INTEGER;
189 length : INTEGER);
202 enable_ready : STD_LOGIC);
203 PORT (
190 PORT (
204 clk : IN STD_LOGIC;
191 clk : IN STD_LOGIC;
205 rstn : IN STD_LOGIC;
192 rstn : IN STD_LOGIC;
@@ -210,48 +197,81 PACKAGE lpp_waveform_pkg IS
210 mem_we : OUT STD_LOGIC;
197 mem_we : OUT STD_LOGIC;
211 mem_addr_ren : out STD_LOGIC_VECTOR(6 DOWNTO 0);
198 mem_addr_ren : out STD_LOGIC_VECTOR(6 DOWNTO 0);
212 mem_addr_wen : out STD_LOGIC_VECTOR(6 DOWNTO 0);
199 mem_addr_wen : out STD_LOGIC_VECTOR(6 DOWNTO 0);
213 ready : OUT STD_LOGIC);
200 empty_almost : OUT STD_LOGIC;
201 empty : OUT STD_LOGIC;
202 full_almost : OUT STD_LOGIC;
203 full : OUT STD_LOGIC);
214 END COMPONENT;
204 END COMPONENT;
215
205
216 COMPONENT lpp_waveform_fifo_arbiter
206 COMPONENT lpp_waveform_fifo_arbiter
217 GENERIC (
207 GENERIC (
218 tech : INTEGER);
208 tech : INTEGER;
209 nb_data_by_buffer_size : INTEGER);
219 PORT (
210 PORT (
220 clk : IN STD_LOGIC;
211 clk : IN STD_LOGIC;
221 rstn : IN STD_LOGIC;
212 rstn : IN STD_LOGIC;
222 run : IN STD_LOGIC;
213 run : IN STD_LOGIC;
223 data_f0_valid : IN STD_LOGIC;
214 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size - 1 DOWNTO 0);
224 data_f1_valid : IN STD_LOGIC;
215 data_in_valid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
225 data_f2_valid : IN STD_LOGIC;
216 data_in_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
226 data_f3_valid : IN STD_LOGIC;
217 data_in : IN Data_Vector(3 DOWNTO 0, 95 DOWNTO 0);
227 data_valid_ack : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
218 time_in : IN Data_Vector(3 DOWNTO 0, 47 DOWNTO 0);
228 data_f0 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
219 data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
229 data_f1 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
220 data_out_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
230 data_f2 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
221 full : IN STD_LOGIC_VECTOR(3 DOWNTO 0));
231 data_f3 : IN STD_LOGIC_VECTOR(159 DOWNTO 0);
232 ready : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
233 time_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
234 data_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
235 data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
236 END COMPONENT;
222 END COMPONENT;
237
223
238 COMPONENT lpp_waveform_fifo
224 COMPONENT lpp_waveform_fifo
239 GENERIC (
225 GENERIC (
240 tech : INTEGER);
226 tech : INTEGER);
241 PORT (
227 PORT (
242 clk : IN STD_LOGIC;
228 clk : IN STD_LOGIC;
243 rstn : IN STD_LOGIC;
229 rstn : IN STD_LOGIC;
244 run : IN STD_LOGIC;
230 run : IN STD_LOGIC;
245 time_ready : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
231 empty_almost : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
246 data_ready : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
232 empty : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
247 time_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
233 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
248 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
234 rdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
249 rdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
235 full_almost : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
250 time_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
236 full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
251 data_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
237 data_wen : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
252 wdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
238 wdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0));
253 END COMPONENT;
239 END COMPONENT;
254
240
255
241 -----------------------------------------------------------------------------
242 -- GEN ADDRESS
243 -----------------------------------------------------------------------------
244 COMPONENT lpp_waveform_genaddress
245 GENERIC (
246 nb_data_by_buffer_size : INTEGER);
247 PORT (
248 clk : IN STD_LOGIC;
249 rstn : IN STD_LOGIC;
250 run : IN STD_LOGIC;
251 nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
252 addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
253 addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
254 addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
255 addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
256 empty : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
257 empty_almost : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
258 data_ren : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
259 status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
260 status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
261 status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
262 data_f0_data_out_valid_burst : OUT STD_LOGIC;
263 data_f1_data_out_valid_burst : OUT STD_LOGIC;
264 data_f2_data_out_valid_burst : OUT STD_LOGIC;
265 data_f3_data_out_valid_burst : OUT STD_LOGIC;
266 data_f0_data_out_valid : OUT STD_LOGIC;
267 data_f1_data_out_valid : OUT STD_LOGIC;
268 data_f2_data_out_valid : OUT STD_LOGIC;
269 data_f3_data_out_valid : OUT STD_LOGIC;
270 data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
271 data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
272 data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
273 data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
274 END COMPONENT;
275
256
276
257 END lpp_waveform_pkg;
277 END lpp_waveform_pkg;
@@ -1,128 +1,226
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Jean-christophe Pellion
20 -- Mail : jean-christophe.pellion@lpp.polytechnique.fr
21 -- jean-christophe.pellion@easii-ic.com
22 -------------------------------------------------------------------------------
1 LIBRARY IEEE;
23 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
24 USE IEEE.STD_LOGIC_1164.ALL;
3 USE ieee.numeric_std.ALL;
25 USE ieee.numeric_std.ALL;
4
26
27 LIBRARY lpp;
28 USE lpp.general_purpose.ALL;
29
5 ENTITY lpp_waveform_snapshot_controler IS
30 ENTITY lpp_waveform_snapshot_controler IS
6
31
7 GENERIC (
32 GENERIC (
8 delta_snapshot_size : INTEGER := 16;
33 delta_vector_size : INTEGER := 20;
9 delta_f2_f0_size : INTEGER := 10;
34 delta_vector_size_f0_2 : INTEGER := 3
10 delta_f2_f1_size : INTEGER := 10);
35 );
11
36
12 PORT (
37 PORT (
13 clk : IN STD_LOGIC;
38 clk : IN STD_LOGIC;
14 rstn : IN STD_LOGIC;
39 rstn : IN STD_LOGIC;
15 --
40 ---------------------------------------------------------------------------
16 run : IN STD_LOGIC;
41 --REGISTER CONTROL
17 --config
42 reg_run : IN STD_LOGIC;
18 delta_snapshot : IN STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
43 reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
19 delta_f2_f1 : IN STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
44 reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
20 delta_f2_f0 : IN STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
45 reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
21
46 reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
22 --input
47 reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
23 coarse_time_0 : IN STD_LOGIC;
48 reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
24 data_f0_in_valid : IN STD_LOGIC;
49 ---------------------------------------------------------------------------
25 data_f2_in_valid : IN STD_LOGIC;
50 -- INPUT
26 --output
51 coarse_time : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
27 start_snapshot_f0 : OUT STD_LOGIC;
52 data_f0_valid : IN STD_LOGIC;
28 start_snapshot_f1 : OUT STD_LOGIC;
53 data_f2_valid : IN STD_LOGIC;
29 start_snapshot_f2 : OUT STD_LOGIC
54 ---------------------------------------------------------------------------
55 -- OUTPUT
56 start_snapshot_f0 : OUT STD_LOGIC;
57 start_snapshot_f1 : OUT STD_LOGIC;
58 start_snapshot_f2 : OUT STD_LOGIC;
59 wfp_on : OUT STD_LOGIC
30 );
60 );
31
61
32 END lpp_waveform_snapshot_controler;
62 END lpp_waveform_snapshot_controler;
33
63
34 ARCHITECTURE beh OF lpp_waveform_snapshot_controler IS
64 ARCHITECTURE beh OF lpp_waveform_snapshot_controler IS
65 -----------------------------------------------------------------------------
66 -- WAVEFORM ON/OFF FSM
67 SIGNAL state_on : STD_LOGIC;
68 SIGNAL wfp_on_s : STD_LOGIC;
69 -----------------------------------------------------------------------------
70 -- StartSnapshot Generator for f2, f1 and f0_pre
71 SIGNAL start_snapshot_f0_pre : STD_LOGIC;
72 -- SIGNAL first_decount_s : STD_LOGIC;
73 SIGNAL first_decount : STD_LOGIC;
74 SIGNAL first_init : STD_LOGIC;
35 SIGNAL counter_delta_snapshot : INTEGER;
75 SIGNAL counter_delta_snapshot : INTEGER;
76 -----------------------------------------------------------------------------
77 -- StartSnapshot Generator for f0
36 SIGNAL counter_delta_f0 : INTEGER;
78 SIGNAL counter_delta_f0 : INTEGER;
79 SIGNAL send_start_snapshot_f0 : STD_LOGIC;
80 BEGIN -- beh
81 wfp_on <= wfp_on_s;
37
82
38 SIGNAL coarse_time_0_r : STD_LOGIC;
83 -----------------------------------------------------------------------------
39 SIGNAL start_snapshot_f2_temp : STD_LOGIC;
84 -- WAVEFORM ON/OFF FSM
40 SIGNAL start_snapshot_fothers_temp : STD_LOGIC;
85 -----------------------------------------------------------------------------
41 BEGIN -- beh
86 -- INPUT reg_run
42
87 -- coarse_time
43 PROCESS (clk, rstn)
88 -- reg_start_date
89 -- OUTPUT wfp_on_s
90 -----------------------------------------------------------------------------
91 waveform_on_off_fsm : PROCESS (clk, rstn)
44 BEGIN
92 BEGIN
45 IF rstn = '0' THEN
93 IF rstn = '0' THEN
46 start_snapshot_f0 <= '0';
94 state_on <= '0';
47 start_snapshot_f1 <= '0';
48 start_snapshot_f2 <= '0';
49 counter_delta_snapshot <= 0;
50 counter_delta_f0 <= 0;
51 coarse_time_0_r <= '0';
52 start_snapshot_f2_temp <= '0';
53 start_snapshot_fothers_temp <= '0';
54 ELSIF clk'EVENT AND clk = '1' THEN
95 ELSIF clk'EVENT AND clk = '1' THEN
55 IF run = '0' THEN
96 IF state_on = '1' THEN -- Waveform Picker ON
56 start_snapshot_f0 <= '0';
97 state_on <= reg_run;
57 start_snapshot_f1 <= '0';
98 ELSE -- Waveform Picker OFF
58 start_snapshot_f2 <= '0';
99 IF coarse_time = reg_start_date THEN
59 counter_delta_snapshot <= 0;
100 state_on <= reg_run;
60 counter_delta_f0 <= 0;
101 END IF;
61 coarse_time_0_r <= '0';
102 END IF;
62 start_snapshot_f2_temp <= '0';
103 END IF;
63 start_snapshot_fothers_temp <= '0';
104 END PROCESS waveform_on_off_fsm;
105 wfp_on_s <= state_on;
106 -----------------------------------------------------------------------------
107
108 -----------------------------------------------------------------------------
109 -- StartSnapshot Generator for f2, f1 and f0_pre
110 -----------------------------------------------------------------------------
111 -- INPUT wfp_on_s
112 -- reg_delta_snapshot
113 -- reg_delta_f0
114 -- reg_delta_f1
115 -- reg_delta_f2
116 -- data_f2_valid
117 -- OUTPUT start_snapshot_f0_pre
118 -- start_snapshot_f1
119 -- start_snapshot_f2
120 -----------------------------------------------------------------------------
121 --lpp_front_positive_detection_1 : lpp_front_positive_detection
122 -- PORT MAP (
123 -- clk => clk,
124 -- rstn => rstn,
125 -- sin => wfp_on_s,
126 -- sout => first_decount_s);
127
128 Decounter_Cyclic_DeltaSnapshot : PROCESS (clk, rstn)
129 BEGIN -- PROCESS Decounter_Cyclic_DeltaSnapshot
130 IF rstn = '0' THEN -- asynchronous reset (active low)
131 counter_delta_snapshot <= 0;
132 first_decount <= '0';
133 first_init <= '0';
134 start_snapshot_f0_pre <= '0';
135 start_snapshot_f1 <= '0';
136 start_snapshot_f2 <= '0';
137 ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge
138 IF wfp_on_s = '0' THEN
139 counter_delta_snapshot <= 0;
140 first_decount <= '1';
141 first_init <= '1';
142 start_snapshot_f0_pre <= '0';
143 start_snapshot_f1 <= '0';
144 start_snapshot_f2 <= '0';
64 ELSE
145 ELSE
65 IF counter_delta_snapshot = UNSIGNED(delta_snapshot) THEN
146 start_snapshot_f0_pre <= '0';
66 start_snapshot_f2_temp <= '1';
147 start_snapshot_f1 <= '0';
67 ELSE
148 start_snapshot_f2 <= '0';
68 start_snapshot_f2_temp <= '0';
149
69 END IF;
150 IF data_f2_valid = '1' THEN
70 -------------------------------------------------------------------------
151 IF first_init = '1' THEN
71 IF counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0' THEN
152 counter_delta_snapshot <= to_integer(UNSIGNED(reg_delta_f2));
72 start_snapshot_f2 <= '1';
153 first_init <= '0';
73 ELSE
74 start_snapshot_f2 <= '0';
75 END IF;
76 -------------------------------------------------------------------------
77 coarse_time_0_r <= coarse_time_0;
78 IF coarse_time_0 = NOT coarse_time_0_r THEN --AND coarse_time_0 = '1' THEN
79 IF counter_delta_snapshot = 0 THEN
80 counter_delta_snapshot <= to_integer(UNSIGNED(delta_snapshot));
81 ELSE
154 ELSE
82 counter_delta_snapshot <= counter_delta_snapshot - 1;
155 IF counter_delta_snapshot > 0 THEN
156 counter_delta_snapshot <= counter_delta_snapshot - 1;
157 ELSE
158 counter_delta_snapshot <= to_integer(UNSIGNED(reg_delta_snapshot));
159 first_decount <= '0';
160 END IF;
161
162 IF counter_delta_snapshot = to_integer(UNSIGNED(reg_delta_f0)) THEN
163 IF first_decount = '0' THEN
164 start_snapshot_f0_pre <= '1';
165 END IF;
166 END IF;
167
168 IF counter_delta_snapshot = to_integer(UNSIGNED(reg_delta_f1)) THEN
169 IF first_decount = '0' THEN
170 start_snapshot_f1 <= '1';
171 END IF;
172 END IF;
173
174 IF counter_delta_snapshot = 0 THEN
175 start_snapshot_f2 <= '1';
176 END IF;
83 END IF;
177 END IF;
84 END IF;
178 END IF;
179 END IF;
180 END IF;
181 END PROCESS Decounter_Cyclic_DeltaSnapshot;
182 -----------------------------------------------------------------------------
85
183
86
184
87 -------------------------------------------------------------------------
185 -----------------------------------------------------------------------------
88
186 -- StartSnapshot Generator for f0
89
187 -----------------------------------------------------------------------------
90
188 -- INPUT wfp_on_s
91 IF counter_delta_f0 = UNSIGNED(delta_f2_f1) THEN
189 -- start_snapshot_f0_pre
92 start_snapshot_f1 <= '1';
190 -- reg_delta_snapshot
93 ELSE
191 -- reg_delta_f0_2
94 start_snapshot_f1 <= '0';
192 -- data_f0_valid
95 END IF;
193 -- OUTPUT start_snapshot_f0
96
194 -----------------------------------------------------------------------------
97 IF counter_delta_f0 = 1 THEN --UNSIGNED(delta_f2_f0) THEN
195 Decounter_DeltaSnapshot_f0 : PROCESS (clk, rstn)
98 start_snapshot_f0 <= '1';
196 BEGIN -- PROCESS Decounter_Cyclic_DeltaSnapshot
99 ELSE
197 IF rstn = '0' THEN -- asynchronous reset (active low)
100 start_snapshot_f0 <= '0';
198 counter_delta_f0 <= 0;
101 END IF;
199 start_snapshot_f0 <= '0';
102
200 send_start_snapshot_f0 <= '0';
103 IF counter_delta_snapshot = UNSIGNED(delta_snapshot)
201 ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge
104 AND start_snapshot_f2_temp = '0'
202 start_snapshot_f0 <= '0';
105 THEN --
203 IF wfp_on_s = '0' THEN
106 start_snapshot_fothers_temp <= '1';
204 counter_delta_f0 <= 0;
107 ELSIF counter_delta_f0 > 0 THEN
205 send_start_snapshot_f0 <= '1';
108 start_snapshot_fothers_temp <= '0';
206 ELSE
109 END IF;
207 IF start_snapshot_f0_pre = '1' THEN
110
208 send_start_snapshot_f0 <= '0';
111
209 counter_delta_f0 <= to_integer(UNSIGNED(reg_delta_f0_2));
112 -------------------------------------------------------------------------
210 ELSIF data_f0_valid = '1' THEN
113 IF (start_snapshot_fothers_temp = '1' OR (counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0')) AND data_f2_in_valid = '1' THEN
211 IF counter_delta_f0 > 0 THEN
114 --counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0' THEN --
212 send_start_snapshot_f0 <= '0';
115 --counter_delta_snapshot = UNSIGNED(delta_snapshot) THEN
213 counter_delta_f0 <= counter_delta_f0 - 1;
116 counter_delta_f0 <= to_integer(UNSIGNED(delta_f2_f0)); --0;
214 ELSE
117 ELSE
215 IF send_start_snapshot_f0 = '0' THEN
118 IF ((counter_delta_f0 > 0) AND (data_f0_in_valid = '1')) THEN --<= UNSIGNED(delta_f2_f0) THEN
216 send_start_snapshot_f0 <= '1';
119 counter_delta_f0 <= counter_delta_f0 - 1; --counter_delta_f0 + 1;
217 start_snapshot_f0 <= '1';
218 END IF;
120 END IF;
219 END IF;
121 END IF;
220 END IF;
122 -------------------------------------------------------------------------
123
124 END IF;
221 END IF;
125 END IF;
222 END IF;
126 END PROCESS;
223 END PROCESS Decounter_DeltaSnapshot_f0;
224 -----------------------------------------------------------------------------
127
225
128 END beh;
226 END beh;
@@ -1,12 +1,10
1 lpp_waveform_pkg.vhd
1 lpp_waveform_pkg.vhd
2 lpp_waveform.vhd
2 lpp_waveform.vhd
3 lpp_waveform_burst.vhd
3 lpp_waveform_burst.vhd
4 lpp_waveform_dma.vhd
5 lpp_waveform_dma_genvalid.vhd
6 lpp_waveform_dma_selectaddress.vhd
7 lpp_waveform_dma_send_Nword.vhd
8 lpp_waveform_fifo.vhd
4 lpp_waveform_fifo.vhd
9 lpp_waveform_fifo_arbiter.vhd
5 lpp_waveform_fifo_arbiter.vhd
10 lpp_waveform_fifo_ctrl.vhd
6 lpp_waveform_fifo_ctrl.vhd
11 lpp_waveform_snapshot.vhd
7 lpp_waveform_snapshot.vhd
12 lpp_waveform_snapshot_controler.vhd
8 lpp_waveform_snapshot_controler.vhd
9 lpp_waveform_genaddress.vhd
10 lpp_waveform_dma_genvalid.vhd
General Comments 0
You need to be logged in to leave comments. Login now