30 DEVICE: uhal device identifier
31 IDS: id(s) of the target endpoint(s).
34 lDevice = obj.mConnectionManager.getDevice(str(device))
36 lDevice.setTimeoutPeriod(obj.mTimeout)
39 echo(
'Created HSI device')
40 lTopDesign = lDevice.getNode(
'')
41 lBoardInfo = toolbox.readSubNodes(lDevice.getNode(
'io.config'),
False)
44 if lBoardInfo[
'board_type'].value()
in kLibrarySupportedBoards
and lBoardInfo[
'design_type'].value()
in kLibrarySupportedDesigns:
45 lTopDesign.validate_firmware_version()
47 echo(lDevice.getNode(
'io').get_hardware_info())
49 secho(
"Failed to retrieve hardware information! I2C issue? Initial board reset needed?", fg=
'yellow')
51 secho(
"Error: {}".format(e), fg=
'red')
54 obj.mEndpoint = lDevice.getNode(
'endpoint0')
55 obj.mTopDesign = lDevice.getNode(
'')
56 obj.mHSI = obj.mTopDesign.get_hsi_node()
84def enable(ctx, obj, action, partition, address):
86 Activate the timing endpoint in the hsi design. Left in for compatibility reasons
90 lEndpoint = obj.mEndpoint
96 lEndpoint.enable(address=address,partition=partition)
97 elif action ==
'reset':
98 lEndpoint.reset(address=address,partition=partition)
106@hsi.command('configure', short_help="Configure the HSI block for running")
109@click.option('--src', '-s', type=click.IntRange(0x0,0x1), help=
'Source of HSI data,; 0: hardware; 1: timestamp (emulation mode)', default=0)
110@click.option('--re-mask', '-r', type=click.IntRange(0,0xffffffff), help=
'Rising edge mask', default=0)
111@click.option('--fe-mask', '-f', type=click.IntRange(0,0xffffffff), help=
'Falling edge mask', default=0)
112@click.option('--inv-mask', '-i', type=click.IntRange(0,0xffffffff), help=
'Invert mask', default=0)
113@click.option('--rate', type=float, help='Random trigger rate [Hz] on bit 0 in emulation mode', default=1)
114def configure(ctx, obj, src, re_mask, fe_mask, inv_mask, rate):
116 Configure the hsi in the hsi wrapper block.
119 lDevice = obj.mDevice
121 lTopDesign = obj.mTopDesign
124 lTopDesign.configure_hsi(src, re_mask, fe_mask, inv_mask, rate)
126 secho(
"HSI configured", fg=
'green')
134@hsi.command('start', short_help='Start the hsi triggering and the writing events into buffer.')
179def read(ctx, obj, readall, continuous, print_out, read_period, save, file_name):
181 Read the content of the endpoint master readout buffer.
183 lDevice = obj.mDevice
188 secho(
"[INFO] Starting HSI data readout", fg=
'green')
189 if not (save
or print_out):
190 secho(
'[WARNING] you have chosen to neither save or print the HSI data', fg=
'yellow')
193 h5_file_name = datetime.now().strftime(
"hsi_data_%d_%m_%Y_%H_%M_%S.hdf5")
194 if file_name
is not None:
195 h5_file_name=file_name
197 f = h5py.File(h5_file_name,
"w")
198 hsi_dataset = f.create_dataset(
"hsi_frames", (0,7), maxshape=(
None, 7), chunks=
True, dtype=
'u4')
200 if file_name
is not None:
201 secho(
'[WARNING] You have provided a file name but chosen not to save the readout data', fg=
'yellow')
206 hsi_words = lHSI.read_data_buffer(n_words,
False,
False)
207 n_hsi_events = len(hsi_words) // kHSIWordsNumber
210 hsi_dataset_start_index=hsi_dataset.shape[0]
211 hsi_dataset.resize(hsi_dataset_start_index+n_hsi_events, axis=0)
213 if (len(hsi_words) % kHSIWordsNumber == 0
and hsi_words.size() > 0):
215 for i
in range(0,n_hsi_events):
216 start_index = i * kHSIWordsNumber
217 end_index = start_index + kHSIWordsNumber
218 raw_event=hsi_words[start_index:end_index]
220 header = raw_event[0]
221 ts_low = raw_event[1]
222 ts_high = raw_event[2]
224 trigger = raw_event[4]
226 ts = ts_low | (ts_high << 32)
229 counter = header & 0x0000ffff
231 if (header >> 16) != 0xaa00:
232 secho(
"[ERROR] Invalid HSIEventHeader", fg=
'red')
236 secho(
"[ERROR] Invalid HSIEvent timestamp", fg=
'red')
239 delta_ticks=ts-last_ts
245 print(f
"[INFO] got event: {counter} ts: {ts} signals: {data} delta ts: {delta_ticks}")
247 read_events=read_events+1
249 hsi_dataset[hsi_dataset_start_index+i,0]=(0x1 << 6) | 0x1
250 hsi_dataset[hsi_dataset_start_index+i,1]=ts_low
251 hsi_dataset[hsi_dataset_start_index+i,2]=ts_high
252 hsi_dataset[hsi_dataset_start_index+i,3]=data
253 hsi_dataset[hsi_dataset_start_index+i,4]=0x0
254 hsi_dataset[hsi_dataset_start_index+i,5]=trigger
255 hsi_dataset[hsi_dataset_start_index+i,6]=counter
257 elif len(hsi_words) != 0:
258 secho(f
"[ERROR] unexpected n words {len(hsi_words)}", fg=
'red')
260 secho(f
"[INFO] Stopping HSI data readout after {read_events} events", fg=
'green')
262 time.sleep(read_period*1e-3)
266 echo(lHSI.get_data_buffer_table(readall,
False))
read(ctx, obj, readall, continuous, print_out, read_period, save, file_name)