updates
This commit is contained in:
@@ -18,8 +18,30 @@ WAVEFORM_GEN_ADDR = 0x40053000
|
||||
NUM_RX = 2
|
||||
|
||||
|
||||
ADC_SAMPLE_RATE = 187.5e6
|
||||
DAC_SAMPLE_RATE = 187.5e6
|
||||
JESD204B = False
|
||||
BASEBAND_SAMPLE_RATE = 750e6
|
||||
TIMING_ENGINE_FREQ = BASEBAND_SAMPLE_RATE / 4
|
||||
# ADC_SAMPLE_RATE = 187.5e6
|
||||
# DAC_SAMPLE_RATE = 187.5e6
|
||||
f_dac = 9e9
|
||||
f_adc = 3e9
|
||||
|
||||
# ADC_SAMPLE_RATE = 225e6
|
||||
# DAC_SAMPLE_RATE = 225e6
|
||||
# f_dac = 10.8e9
|
||||
# f_adc = 3.6e9
|
||||
|
||||
# JESD204B = True
|
||||
# # ADC_SAMPLE_RATE = 250e6
|
||||
# # DAC_SAMPLE_RATE = 250e6
|
||||
# # f_dac = 12e9
|
||||
# # f_adc = 4e9
|
||||
# ADC_SAMPLE_RATE = 187.5e6
|
||||
# DAC_SAMPLE_RATE = 187.5e6
|
||||
# f_dac = 9e9
|
||||
# f_adc = 3e9
|
||||
|
||||
|
||||
|
||||
def form_chirp(pulsewidth, bw, sample_rate, win=None, ):
|
||||
|
||||
@@ -160,11 +182,32 @@ class RadarManager:
|
||||
|
||||
return resp.data
|
||||
|
||||
def ad9081_write_reg(self, address, data):
|
||||
# Form message
|
||||
msg = msg_types.WriteRegType(msg_id=msg_types.AD9081_REG_WRITE)
|
||||
msg.address = address
|
||||
msg.data = data
|
||||
|
||||
self.send_message(msg)
|
||||
return
|
||||
|
||||
def ad9081_read_reg(self, address):
|
||||
# Form message
|
||||
msg = msg_types.ReadRequestType(msg_id=msg_types.AD9081_REG_READ)
|
||||
msg.address = address
|
||||
self.send_message(msg, enable_ack=False, wait_for_ack=False)
|
||||
|
||||
# Get response
|
||||
recv_bytes, _ = self.get_response(ctypes.sizeof(msg_types.ReadResponseType))
|
||||
resp = msg_types.ReadResponseType.from_buffer_copy(recv_bytes)
|
||||
|
||||
return resp.data
|
||||
|
||||
def set_dac_nco(self, channel, frequency):
|
||||
# Form message
|
||||
msg = msg_types.DacNcoConfigType()
|
||||
msg.channel = channel
|
||||
msg.frequency = frequency
|
||||
msg.frequency = int(frequency)
|
||||
|
||||
self.send_message(msg)
|
||||
|
||||
@@ -174,7 +217,17 @@ class RadarManager:
|
||||
# Form message
|
||||
msg = msg_types.AdcNcoConfigType()
|
||||
msg.channel = channel
|
||||
msg.frequency = frequency
|
||||
msg.frequency = int(frequency)
|
||||
|
||||
self.send_message(msg)
|
||||
|
||||
return
|
||||
|
||||
def set_lane_mapping(self, lane_map):
|
||||
# Form message
|
||||
msg = msg_types.LaneMapType()
|
||||
for i in range(8):
|
||||
msg.lane_map[i] = lane_map[i]
|
||||
|
||||
self.send_message(msg)
|
||||
|
||||
@@ -249,8 +302,12 @@ class RadarManager:
|
||||
|
||||
def setup_rx(self, num_samples, start_sample):
|
||||
for i in range(NUM_RX):
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x4, num_samples >> 2)
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x8, start_sample >> 2)
|
||||
if JESD204B:
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x4, num_samples >> 1)
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x8, start_sample >> 1)
|
||||
else:
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x4, num_samples >> 2)
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x8, start_sample >> 2)
|
||||
|
||||
# Setup RX Strobe
|
||||
# self.axi_write_register(TIMING_ENGINE_ADDR + 0x88 + i * 8, start_sample >> 2)
|
||||
@@ -259,8 +316,12 @@ class RadarManager:
|
||||
self.axi_write_register(TIMING_ENGINE_ADDR + 0x88 + i * 8, 0x1FFFFFFF)
|
||||
|
||||
def setup_tx(self, num_samples, start_sample):
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x4, num_samples >> 2)
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x8, start_sample >> 2)
|
||||
if JESD204B:
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x4, num_samples >> 1)
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x8, start_sample >> 1)
|
||||
else:
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x4, num_samples >> 2)
|
||||
self.axi_write_register(WAVEFORM_GEN_ADDR + 0x8, start_sample >> 2)
|
||||
|
||||
# Setup TX Strobe
|
||||
# self.axi_write_register(TIMING_ENGINE_ADDR + 0x80, start_sample >> 2)
|
||||
@@ -298,21 +359,33 @@ class RadarManager:
|
||||
self.load_waveform(0, 1, 0.1, tx_num_samples)
|
||||
self.load_waveform(1, 1, 0.1, tx_num_samples)
|
||||
|
||||
num_samples_quant = int(self.packet_size / 4)
|
||||
if num_samples % num_samples_quant > 0:
|
||||
print('Packet Size Invalid')
|
||||
num_samples -= (num_samples % num_samples_quant)
|
||||
if num_samples == 0:
|
||||
num_samples = num_samples_quant
|
||||
print('Updated num samples to', num_samples)
|
||||
|
||||
rf_atten = [1, 2, 3, 4, 5, 6]
|
||||
self.setup_rf_attenuators(rf_atten)
|
||||
|
||||
# DAC at 5.25 GHz is in second nyquist
|
||||
# ADC would be in 3rd nyquist
|
||||
f_dac = 9e9
|
||||
f_adc = 3e9
|
||||
tx_lo = 5.25e9 % f_dac
|
||||
rx_lo = 5.25e9 % f_adc
|
||||
adc_nco = 5e9 % f_adc
|
||||
dac_nco = 5.001e9 % f_dac
|
||||
|
||||
# adc_nco = 2e9
|
||||
# adc_nyquist_zone = np.floor(adc_nco / (f_adc / 2))
|
||||
# adc_nco = adc_nco % f_adc
|
||||
# if adc_nyquist_zone % 2:
|
||||
# # In even nyquist
|
||||
# adc_nco -= f_adc
|
||||
|
||||
print(adc_nco)
|
||||
|
||||
for i in range(4):
|
||||
self.set_adc_nco(i, rx_lo)
|
||||
self.set_dac_nco(0, tx_lo)
|
||||
self.set_dac_nco(1, tx_lo)
|
||||
self.set_dac_nco(2, tx_lo + tx_lo_offset)
|
||||
self.set_dac_nco(3, tx_lo + rx_lo_offset)
|
||||
self.set_adc_nco(i, adc_nco)
|
||||
self.set_dac_nco(i, dac_nco)
|
||||
|
||||
self.setup_timing_engine(pri, num_pulses, inter_cpi)
|
||||
self.setup_rx(num_samples, start_sample)
|
||||
self.setup_tx(tx_num_samples, tx_start_sample)
|
||||
|
||||
Reference in New Issue
Block a user