This commit is contained in:
2025-05-20 20:33:12 -05:00
parent 8a1a6ea770
commit fcb291590b
104 changed files with 63299 additions and 45045 deletions

View File

@@ -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)