version number and reverified data recording rate
This commit is contained in:
@@ -185,6 +185,7 @@ void DataRecorder::write_data() {
|
|||||||
|
|
||||||
// A chunk is ready write it out
|
// A chunk is ready write it out
|
||||||
int cnt = write(out_fd, &(data_buffer[buffer_ind]), WRITE_CHUNK_SIZE);
|
int cnt = write(out_fd, &(data_buffer[buffer_ind]), WRITE_CHUNK_SIZE);
|
||||||
|
total_bytes += cnt;
|
||||||
if (cnt < 0)
|
if (cnt < 0)
|
||||||
{
|
{
|
||||||
printf("File write error!\n");
|
printf("File write error!\n");
|
||||||
|
|||||||
Binary file not shown.
@@ -10,6 +10,7 @@ import numpy as np
|
|||||||
import data_structures as msg_types
|
import data_structures as msg_types
|
||||||
from data_structures import CpiHeader
|
from data_structures import CpiHeader
|
||||||
|
|
||||||
|
UTIL_REG_ADDR = 0x40050000
|
||||||
TIMING_ENGINE_ADDR = 0x40051000
|
TIMING_ENGINE_ADDR = 0x40051000
|
||||||
DIG_RX_ADDR = 0x20000000
|
DIG_RX_ADDR = 0x20000000
|
||||||
DIG_RX_STRIDE = 0x10000
|
DIG_RX_STRIDE = 0x10000
|
||||||
@@ -66,6 +67,7 @@ class RadarManager:
|
|||||||
self.CONNECTED = False
|
self.CONNECTED = False
|
||||||
|
|
||||||
self.connect()
|
self.connect()
|
||||||
|
self.get_fpga_datecode()
|
||||||
|
|
||||||
# Update UDP packet size
|
# Update UDP packet size
|
||||||
self.packet_size = 4096
|
self.packet_size = 4096
|
||||||
@@ -259,6 +261,17 @@ class RadarManager:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def update_ip_address(self, ip, mask, gw, port):
|
||||||
|
ip = ipaddress.IPv4Address(ip)
|
||||||
|
mask = ipaddress.IPv4Address(mask)
|
||||||
|
gw = ipaddress.IPv4Address(gw)
|
||||||
|
data = bytes(np.array([ip, mask, gw, port], dtype=np.uint32))
|
||||||
|
self.config_flash_write(0xf00000, data)
|
||||||
|
|
||||||
|
def get_fpga_datecode(self):
|
||||||
|
datecode = self.axi_read_register(UTIL_REG_ADDR + 0x114)
|
||||||
|
timecode = self.axi_read_register(UTIL_REG_ADDR + 0x118)
|
||||||
|
print('FPGA Datestamp %x_%x' % (datecode, timecode))
|
||||||
|
|
||||||
def load_waveform(self, ch, amp, bw, pw):
|
def load_waveform(self, ch, amp, bw, pw):
|
||||||
# addr = 0x0010000 + 0x0010000 * ch
|
# addr = 0x0010000 + 0x0010000 * ch
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from data_recorder import DataRecorder
|
|||||||
|
|
||||||
# Note that increases the size of rmem_max in the linux kernel improves performance for data recording
|
# Note that increases the size of rmem_max in the linux kernel improves performance for data recording
|
||||||
# this can be done witht the following terminal command
|
# this can be done witht the following terminal command
|
||||||
# sudo sysctl -w net.core.rmem_max=1048576
|
# sudo sysctl -w net.core.rmem_max=41918464
|
||||||
|
|
||||||
def db20(x):
|
def db20(x):
|
||||||
return 20*np.log10(np.abs(x))
|
return 20*np.log10(np.abs(x))
|
||||||
@@ -29,7 +29,7 @@ def db20n(x):
|
|||||||
def main():
|
def main():
|
||||||
print('Hello')
|
print('Hello')
|
||||||
|
|
||||||
radar = radar_manager.RadarManager(host='192.168.1.201', port=5002)
|
radar = radar_manager.RadarManager(host='192.168.1.200', port=5001)
|
||||||
|
|
||||||
clk = radar_manager.TIMING_ENGINE_FREQ
|
clk = radar_manager.TIMING_ENGINE_FREQ
|
||||||
|
|
||||||
@@ -42,15 +42,6 @@ def main():
|
|||||||
radar.ad9081_write_reg(0x0A0A, 0x60)
|
radar.ad9081_write_reg(0x0A0A, 0x60)
|
||||||
print(hex(radar.ad9081_read_reg(0x0A0A)))
|
print(hex(radar.ad9081_read_reg(0x0A0A)))
|
||||||
|
|
||||||
# Program Config Flash IP Address
|
|
||||||
ip = ipaddress.IPv4Address('192.168.1.201')
|
|
||||||
mask = ipaddress.IPv4Address('255.255.255.0')
|
|
||||||
gw = ipaddress.IPv4Address('192.168.1.1')
|
|
||||||
port = 5002
|
|
||||||
data = bytes(np.array([ip, mask, gw, port], dtype=np.uint32))
|
|
||||||
radar.config_flash_write(0xf00000, data)
|
|
||||||
|
|
||||||
|
|
||||||
# CPI Parameters (timing values are in clk ticks)
|
# CPI Parameters (timing values are in clk ticks)
|
||||||
num_pulses = 128
|
num_pulses = 128
|
||||||
# Should be multiple of udp packet size, currently 4096 bytes, or 1024 samples
|
# Should be multiple of udp packet size, currently 4096 bytes, or 1024 samples
|
||||||
@@ -66,6 +57,7 @@ def main():
|
|||||||
inter_cpi = 20000
|
inter_cpi = 20000
|
||||||
tx_lo_offset = 10e6
|
tx_lo_offset = 10e6
|
||||||
rx_lo_offset = 0
|
rx_lo_offset = 0
|
||||||
|
test_duration = 60
|
||||||
|
|
||||||
pri_float = pri / clk
|
pri_float = pri / clk
|
||||||
|
|
||||||
@@ -85,7 +77,7 @@ def main():
|
|||||||
print('Start Running')
|
print('Start Running')
|
||||||
radar.start_running()
|
radar.start_running()
|
||||||
# Let it run for a bit
|
# Let it run for a bit
|
||||||
time.sleep(60)
|
time.sleep(test_duration)
|
||||||
# Stop running
|
# Stop running
|
||||||
radar.stop_running()
|
radar.stop_running()
|
||||||
# Stop the data recorder
|
# Stop the data recorder
|
||||||
|
|||||||
25
python/update_ip.py
Executable file
25
python/update_ip.py
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
import numpy as np
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
|
import radar_manager
|
||||||
|
|
||||||
|
# This scrip updates the IP address stored in the configuration flash chip on the FPGA board
|
||||||
|
# After running this script the FPGA must be power cycled for the new IP to take effect
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print('Updating IP Address')
|
||||||
|
|
||||||
|
radar = radar_manager.RadarManager(host='192.168.1.200', port=5001)
|
||||||
|
|
||||||
|
# Program Config Flash IP Address
|
||||||
|
ip = '192.168.1.200'
|
||||||
|
mask = '255.255.255.0'
|
||||||
|
gw = '192.168.1.1'
|
||||||
|
port = 5001
|
||||||
|
radar.update_ip_address(ip, mask, gw, port)
|
||||||
|
|
||||||
|
print('Updating IP Address Complete')
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
main()
|
||||||
@@ -132,6 +132,11 @@ module top #
|
|||||||
output wire resetb
|
output wire resetb
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
parameter DATE_CODE = 32'h0000_0000;
|
||||||
|
parameter TIME_CODE = 32'h0000_0000;
|
||||||
|
|
||||||
|
|
||||||
wire mdio_mdio_i;
|
wire mdio_mdio_i;
|
||||||
wire mdio_mdio_o;
|
wire mdio_mdio_o;
|
||||||
wire mdio_mdio_t;
|
wire mdio_mdio_t;
|
||||||
@@ -753,6 +758,8 @@ module top #
|
|||||||
.gpi(gpi),
|
.gpi(gpi),
|
||||||
.packet_size(packet_size),
|
.packet_size(packet_size),
|
||||||
.fan_pwm(fan_pwm),
|
.fan_pwm(fan_pwm),
|
||||||
|
.datecode(DATE_CODE),
|
||||||
|
.timecode(TIME_CODE),
|
||||||
|
|
||||||
.tx0_rf_attn_sin(tx0_rf_attn_sin),
|
.tx0_rf_attn_sin(tx0_rf_attn_sin),
|
||||||
.tx0_rf_attn_clk(tx0_rf_attn_clk),
|
.tx0_rf_attn_clk(tx0_rf_attn_clk),
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ module util_reg #
|
|||||||
input wire [31:0] gpi,
|
input wire [31:0] gpi,
|
||||||
output wire [15:0] packet_size,
|
output wire [15:0] packet_size,
|
||||||
output wire fan_pwm,
|
output wire fan_pwm,
|
||||||
|
input wire [31:0] datecode,
|
||||||
|
input wire [31:0] timecode,
|
||||||
|
|
||||||
output wire tx0_rf_attn_sin, //ADRF5730
|
output wire tx0_rf_attn_sin, //ADRF5730
|
||||||
output wire tx0_rf_attn_clk, //ADRF5730
|
output wire tx0_rf_attn_clk, //ADRF5730
|
||||||
@@ -203,7 +205,11 @@ always @ (posedge ctrl_if.clk) begin
|
|||||||
if (raddr[11:0] == 'h10C)
|
if (raddr[11:0] == 'h10C)
|
||||||
rdata <= reg_spi_clk_div;
|
rdata <= reg_spi_clk_div;
|
||||||
if (raddr[11:0] == 'h110)
|
if (raddr[11:0] == 'h110)
|
||||||
rdata <= {28'b0000000, 2'b00, spi_active, le_active};
|
rdata <= {28'b0000000, 2'b00, spi_active, le_active};
|
||||||
|
if (raddr[11:0] == 'h114)
|
||||||
|
rdata <= datecode;
|
||||||
|
if (raddr[11:0] == 'h118)
|
||||||
|
rdata <= timecode;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -564,6 +564,14 @@
|
|||||||
<Attr Name="AutoDcp" Val="1"/>
|
<Attr Name="AutoDcp" Val="1"/>
|
||||||
</FileInfo>
|
</FileInfo>
|
||||||
</File>
|
</File>
|
||||||
|
<File Path="$PSRCDIR/set_build_date.tcl">
|
||||||
|
<FileInfo>
|
||||||
|
<Attr Name="UsedIn" Val="synthesis"/>
|
||||||
|
<Attr Name="UsedIn" Val="implementation"/>
|
||||||
|
<Attr Name="UsedIn" Val="simulation"/>
|
||||||
|
<Attr Name="UsedInSteps" Val="synth_1;SYNTH_DESIGN;TCL.PRE"/>
|
||||||
|
</FileInfo>
|
||||||
|
</File>
|
||||||
<Config>
|
<Config>
|
||||||
<Option Name="TopAutoSet" Val="TRUE"/>
|
<Option Name="TopAutoSet" Val="TRUE"/>
|
||||||
</Config>
|
</Config>
|
||||||
@@ -763,8 +771,10 @@
|
|||||||
<Runs Version="1" Minor="19">
|
<Runs Version="1" Minor="19">
|
||||||
<Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xcku040-ffva1156-2-i" ConstrsSet="constrs_1" Description="Vivado Synthesis Defaults" AutoIncrementalCheckpoint="true" IncrementalCheckpoint="$PSRCDIR/utils_1/imports/synth_1/top.dcp" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/synth_1" IncludeInArchive="true" IsChild="false" AutoIncrementalDir="$PSRCDIR/utils_1/imports/synth_1" AutoRQSDir="$PSRCDIR/utils_1/imports/synth_1">
|
<Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xcku040-ffva1156-2-i" ConstrsSet="constrs_1" Description="Vivado Synthesis Defaults" AutoIncrementalCheckpoint="true" IncrementalCheckpoint="$PSRCDIR/utils_1/imports/synth_1/top.dcp" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/synth_1" IncludeInArchive="true" IsChild="false" AutoIncrementalDir="$PSRCDIR/utils_1/imports/synth_1" AutoRQSDir="$PSRCDIR/utils_1/imports/synth_1">
|
||||||
<Strategy Version="1" Minor="2">
|
<Strategy Version="1" Minor="2">
|
||||||
<StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2022"/>
|
<StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2022">
|
||||||
<Step Id="synth_design"/>
|
<Desc>Vivado Synthesis Defaults</Desc>
|
||||||
|
</StratHandle>
|
||||||
|
<Step Id="synth_design" PreStepTclHook="$PSRCDIR/set_build_date.tcl"/>
|
||||||
</Strategy>
|
</Strategy>
|
||||||
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/>
|
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/>
|
||||||
<ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2022"/>
|
<ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2022"/>
|
||||||
@@ -893,7 +903,9 @@
|
|||||||
</Run>
|
</Run>
|
||||||
<Run Id="impl_1" Type="Ft2:EntireDesign" Part="xcku040-ffva1156-2-i" ConstrsSet="constrs_1" Description="Default settings for Implementation." AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/impl_1" SynthRun="synth_1" IncludeInArchive="true" IsChild="false" GenFullBitstream="true" AutoIncrementalDir="$PSRCDIR/utils_1/imports/impl_1" AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1">
|
<Run Id="impl_1" Type="Ft2:EntireDesign" Part="xcku040-ffva1156-2-i" ConstrsSet="constrs_1" Description="Default settings for Implementation." AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/impl_1" SynthRun="synth_1" IncludeInArchive="true" IsChild="false" GenFullBitstream="true" AutoIncrementalDir="$PSRCDIR/utils_1/imports/impl_1" AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1">
|
||||||
<Strategy Version="1" Minor="2">
|
<Strategy Version="1" Minor="2">
|
||||||
<StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2022"/>
|
<StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2022">
|
||||||
|
<Desc>Default settings for Implementation.</Desc>
|
||||||
|
</StratHandle>
|
||||||
<Step Id="init_design"/>
|
<Step Id="init_design"/>
|
||||||
<Step Id="opt_design"/>
|
<Step Id="opt_design"/>
|
||||||
<Step Id="power_opt_design"/>
|
<Step Id="power_opt_design"/>
|
||||||
|
|||||||
@@ -70,18 +70,27 @@ int32_t ad9081_hal_log_write(void *user_data, int32_t log_type, const char *comm
|
|||||||
char log_msg[MAX_LOG_LINE_LENGTH] = {0};
|
char log_msg[MAX_LOG_LINE_LENGTH] = {0};
|
||||||
const char *log_type_str;
|
const char *log_type_str;
|
||||||
|
|
||||||
|
int enable_log = 0;
|
||||||
|
|
||||||
log_type_str = "MESSAGE:";
|
log_type_str = "MESSAGE:";
|
||||||
if ((log_type & ADI_CMS_LOG_WARN) > 0)
|
if ((log_type & ADI_CMS_LOG_WARN) > 0) {
|
||||||
|
enable_log = 1;
|
||||||
log_type_str = "WARNING:";
|
log_type_str = "WARNING:";
|
||||||
if ((log_type & ADI_CMS_LOG_ERR) > 0)
|
}
|
||||||
|
if ((log_type & ADI_CMS_LOG_ERR) > 0) {
|
||||||
|
enable_log = 1;
|
||||||
log_type_str = "ERROR :";
|
log_type_str = "ERROR :";
|
||||||
|
}
|
||||||
|
|
||||||
err = snprintf(log_msg + strlen(log_msg), MAX_LOG_LINE_LENGTH, "%s ", log_type_str);
|
err = snprintf(log_msg + strlen(log_msg), MAX_LOG_LINE_LENGTH, "%s ", log_type_str);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return API_CMS_ERROR_LOG_WRITE;
|
return API_CMS_ERROR_LOG_WRITE;
|
||||||
if (vsprintf(log_msg + strlen(log_msg), comment, argp) < 0)
|
if (vsprintf(log_msg + strlen(log_msg), comment, argp) < 0)
|
||||||
return API_CMS_ERROR_LOG_WRITE;
|
return API_CMS_ERROR_LOG_WRITE;
|
||||||
xil_printf("%s\r\n", log_msg);
|
|
||||||
|
if (enable_log) {
|
||||||
|
xil_printf("%s\r\n", log_msg);
|
||||||
|
}
|
||||||
// if (fprintf(g_log_fd, "%s\n", log_msg) < 0)
|
// if (fprintf(g_log_fd, "%s\n", log_msg) < 0)
|
||||||
// return API_CMS_ERROR_LOG_WRITE;
|
// return API_CMS_ERROR_LOG_WRITE;
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ void main_task( void *pvParameters ) {
|
|||||||
xPortInstallInterruptHandler(XPAR_MICROBLAZE_0_AXI_INTC_SYSTEM_PPS_INTR, (XInterruptHandler) pps_irq_handler, (void *)0);
|
xPortInstallInterruptHandler(XPAR_MICROBLAZE_0_AXI_INTC_SYSTEM_PPS_INTR, (XInterruptHandler) pps_irq_handler, (void *)0);
|
||||||
vPortEnableInterrupt(XPAR_MICROBLAZE_0_AXI_INTC_SYSTEM_PPS_INTR);
|
vPortEnableInterrupt(XPAR_MICROBLAZE_0_AXI_INTC_SYSTEM_PPS_INTR);
|
||||||
|
|
||||||
// setup_data_converter();
|
setup_data_converter();
|
||||||
|
|
||||||
// config_flash_sector_erase(CONFIG_BASE_ADDRESS);
|
// config_flash_sector_erase(CONFIG_BASE_ADDRESS);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user