def __init__(self, host, katcp_port=7147, boffile=None, connect=True, config=None): if config: if boffile: raise ValueError('Cannot specify "boffile" parameter if config is used') boffile = config['bitstream'] self.config = config FpgaHost.__init__( self, host, katcp_port=katcp_port, boffile=boffile, connect=connect) self.boffile = boffile self.sine_sources = AttributeContainer() self.noise_sources = AttributeContainer() self.pulsar_sources = AttributeContainer() self.outputs = AttributeContainer()
def get_system_information(self, filename=None, fpg_info=None): """Get system information and build D-engine sources""" FpgaHost.get_system_information(self, filename=filename, fpg_info=fpg_info) self.sine_sources.clear() self.noise_sources.clear() self.pulsar_sources.clear() self.outputs.clear() for reg in self.registers: sin_name = get_prefixed_name('freq_cwg', reg.name) noise_name = get_prefixed_name('scale_wng', reg.name) pulsar_name = get_prefixed_name('freq_pulsar', reg.name) output_scale_name = get_prefixed_name('scale_out', reg.name) if sin_name is not None: scale_reg_postfix = ( '_'+sin_name if reg.name.endswith('_'+sin_name) else sin_name) scale_reg = getattr(self.registers, 'scale_cwg' + scale_reg_postfix) repeat_en_reg_name = 'rpt_en_cwg' + scale_reg_postfix repeat_len_reg_name = 'rpt_length_cwg' + scale_reg_postfix repeat_en_reg = getattr(self.registers, repeat_en_reg_name, None) repeat_len_reg = getattr(self.registers, repeat_len_reg_name, None) repeat_len_field_name = 'cwg' + scale_reg_postfix + '_repeat_length' setattr(self.sine_sources, 'sin_'+ sin_name, SineSource( reg, scale_reg, sin_name, repeat_len_register=repeat_len_reg, repeat_en_register=repeat_en_reg, repeat_len_field_name=repeat_len_field_name)) elif noise_name is not None: setattr(self.noise_sources, 'noise_' + noise_name, NoiseSource(reg, noise_name)) elif pulsar_name is not None: scale_reg_postfix = ( '_'+pulsar_name if reg.name.endswith('_'+pulsar_name) else pulsar_name) scale_reg = getattr(self.registers, 'scale_pulsar' + scale_reg_postfix) setattr(self.pulsar_sources, 'pulsar_'+pulsar_name, PulsarSource( reg, scale_reg, pulsar_name)) elif output_scale_name is not None: # TEMP hack due to misnamed register if output_scale_name.startswith('arb'): continue setattr(self.outputs, 'out_' + output_scale_name, Output(output_scale_name, reg, self.registers.control))