2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_unsigned.all;
5 use ieee.numeric_std.all;
8 -- Entities within lx_rocon
10 package lx_rocon_pkg is
13 component irc_register
18 a0, b0 : in std_logic;
19 index0 : in std_logic;
21 data_in : in std_logic;
22 data_out : out std_logic_vector(31 downto 0);
23 ce : in std_logic_vector(1 downto 0);
41 value : out std_logic_vector((width-1) downto 0)
51 a0, b0 : in std_logic;
52 index0 : in std_logic;
54 a_rise : out std_logic;
55 a_fall : out std_logic;
56 b_rise : out std_logic;
57 b_fall : out std_logic;
59 qcount : out std_logic_vector (31 downto 0);
60 qcount_index : out std_logic_vector (31 downto 0);
61 ab_event : out std_logic;
62 ab_error : out std_logic
77 -- D sampler (filtered)
88 --------------------------------------------------------------------------------
90 --------------------------------------------------------------------------------
92 component lx_rocon_tumbl
95 IMEM_ABITS_g : positive := 12;
96 DMEM_ABITS_g : positive := 12;
98 USE_HW_MUL_g : boolean := true;
99 USE_BARREL_g : boolean := true;
100 COMPATIBILITY_MODE_g : boolean := false
104 clk_i : in std_logic;
105 rst_i : in std_logic;
106 halt_i : in std_logic;
107 int_i : in std_logic;
108 trace_i : in std_logic;
109 trace_kick_i : in std_logic;
110 pc_o : out std_logic_vector(31 downto 0);
111 halted_o : out std_logic;
112 halt_code_o : out std_logic_vector(4 downto 0);
113 imem_clk : in std_logic;
114 imem_en : in std_logic;
115 imem_we : in std_logic_vector(3 downto 0);
116 imem_addr : in std_logic_vector(8 downto 0);
117 imem_din : in std_logic_vector(31 downto 0);
118 imem_dout : out std_logic_vector(31 downto 0);
119 dmem_clk : in std_logic;
120 dmem_en : in std_logic;
121 dmem_we : in std_logic_vector(3 downto 0);
122 dmem_addr : in std_logic_vector(9 downto 0);
123 dmem_din : in std_logic_vector(31 downto 0);
124 dmem_dout : out std_logic_vector(31 downto 0);
125 XMEMB_sel_o : out std_logic;
126 XMEMB_i : in DMEMB2CORE_Type;
127 XMEMB_o : out CORE2DMEMB_Type;
128 bad_op_o : out std_logic
132 component lx_rocon_imem
135 clk_i : in std_logic;
137 adr_i : in std_logic_vector(10 downto 2);
138 dat_o : out std_logic_vector(31 downto 0);
139 clk_m : in std_logic;
141 we_m : in std_logic_vector(3 downto 0);
142 addr_m : in std_logic_vector(8 downto 0);
143 din_m : in std_logic_vector(31 downto 0);
144 dout_m : out std_logic_vector(31 downto 0)
149 component lx_rocon_dmem
152 clk_i : in std_logic;
154 adr_i : in std_logic_vector(11 downto 2);
155 wre_i : in std_logic;
156 bsel_i : in std_logic_vector(3 downto 0);
157 dat_i : in std_logic_vector(31 downto 0);
158 dat_o : out std_logic_vector(31 downto 0);
159 clk_m : in std_logic;
161 we_m : in std_logic_vector(3 downto 0);
162 addr_m : in std_logic_vector(9 downto 0);
163 din_m : in std_logic_vector(31 downto 0);
164 dout_m : out std_logic_vector(31 downto 0)
168 component lx_rocon_gprf_abd
171 clk_i : in std_logic;
172 rst_i : in std_logic;
173 clken_i : in std_logic;
174 ID2GPRF_i : in ID2GPRF_Type;
175 MEM_WRB_i : in WRB_Type;
176 GPRF2EX_o : out GPRF2EX_Type
180 --------------------------------------------------------------------------------
182 --------------------------------------------------------------------------------
184 -- Calibration read register
185 component calibration_read_register
188 id : std_logic_vector(31 downto 0)
192 data_out : out std_logic_vector(31 downto 0);
198 -- Calibration write register
199 component calibration_write_register
203 reset : in std_logic;
205 data_in : in std_logic_vector(31 downto 0);
206 data_out : out std_logic_vector(31 downto 0);
208 bls : in std_logic_vector(3 downto 0);
213 -- Calibration interconnect
214 component bus_calibration
218 reset : in std_logic;
220 address : in std_logic_vector(1 downto 0);
221 data_in : in std_logic_vector(31 downto 0);
222 data_out : out std_logic_vector(31 downto 0);
224 bls : in std_logic_vector(3 downto 0);
234 reset : in std_logic;
236 address : in std_logic_vector(3 downto 0);
239 data_in : in std_logic;
240 data_out : out std_logic_vector(31 downto 0);
246 irc1_a : in std_logic;
247 irc1_b : in std_logic;
248 irc1_index : in std_logic;
249 irc1_mark : in std_logic;
251 irc2_a : in std_logic;
252 irc2_b : in std_logic;
253 irc2_index : in std_logic;
254 irc2_mark : in std_logic;
256 irc3_a : in std_logic;
257 irc3_b : in std_logic;
258 irc3_index : in std_logic;
259 irc3_mark : in std_logic;
261 irc4_a : in std_logic;
262 irc4_b : in std_logic;
263 irc4_index : in std_logic;
264 irc4_mark : in std_logic
272 reset : in std_logic;
275 data_out : out std_logic_vector(31 downto 0);
281 -- Tumbl interconnect
285 clk_100m : in std_logic;
286 clk_50m : in std_logic;
288 reset : in std_logic;
290 bls : in std_logic_vector(3 downto 0);
291 address : in std_logic_vector(11 downto 0);
292 data_in : in std_logic_vector(31 downto 0);
293 data_out : out std_logic_vector(31 downto 0);
295 XMEMB_sel_o : out std_logic;
296 XMEMB_i : in DMEMB2CORE_Type;
297 XMEMB_o : out CORE2DMEMB_Type
301 --------------------------------------------------------------------------------
303 --------------------------------------------------------------------------------
305 component xilinx_dualport_bram
308 byte_width : positive := 8;
309 address_width : positive := 8;
310 we_width : positive := 4
317 wea : in std_logic_vector((we_width-1) downto 0);
318 addra : in std_logic_vector((address_width-1) downto 0);
319 dina : in std_logic_vector(((byte_width*we_width)-1) downto 0);
320 douta : out std_logic_vector(((byte_width*we_width)-1) downto 0);
324 web : in std_logic_vector((we_width-1) downto 0);
325 addrb : in std_logic_vector((address_width-1) downto 0);
326 dinb : in std_logic_vector(((byte_width*we_width)-1) downto 0);
327 doutb : out std_logic_vector(((byte_width*we_width)-1) downto 0)
333 package body lx_rocon_pkg is