fix: 调整跳频逻辑,增加nco update req持续时间;调整频点生成方式

This commit is contained in:
2024-11-08 15:48:25 +08:00
parent 775590f3f7
commit 814724c417
8 changed files with 123 additions and 111 deletions
Binary file not shown.
@@ -2039,7 +2039,7 @@
"C_PROBE17_WIDTH": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE16_WIDTH": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE15_WIDTH": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE14_WIDTH": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE14_WIDTH": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE13_WIDTH": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE12_WIDTH": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE11_WIDTH": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
@@ -2054,7 +2054,7 @@
"C_PROBE2_WIDTH": [ { "value": "32", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE1_WIDTH": [ { "value": "32", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE0_WIDTH": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_DATA_DEPTH": [ { "value": "16384", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_DATA_DEPTH": [ { "value": "32768", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_NUM_OF_PROBES": [ { "value": "14", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_XLNX_HW_PROBE_INFO": [ { "value": "DEFAULT", "resolve_type": "user", "usage": "all" } ],
"Component_Name": [ { "value": "ila_hop", "resolve_type": "user", "usage": "all" } ],
@@ -3082,7 +3082,7 @@
"C_PROBE17_MU_CNT": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE16_MU_CNT": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE15_MU_CNT": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE14_MU_CNT": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE14_MU_CNT": [ { "value": "2", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE13_MU_CNT": [ { "value": "2", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE12_MU_CNT": [ { "value": "2", "resolve_type": "user", "format": "long", "usage": "all" } ],
"C_PROBE11_MU_CNT": [ { "value": "2", "resolve_type": "user", "format": "long", "usage": "all" } ],
@@ -3135,7 +3135,7 @@
"C_NUM_MONITOR_SLOTS": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_ENABLE_ILA_AXI_MON": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_NUM_OF_PROBES": [ { "value": "14", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_DATA_DEPTH": [ { "value": "16384", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_DATA_DEPTH": [ { "value": "32768", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MAJOR_VERSION": [ { "value": "2024", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MINOR_VERSION": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_BUILD_REVISION": [ { "value": "0", "format": "long", "usage": "all" } ],
@@ -5220,7 +5220,7 @@
"C_PROBE11_MU_CNT": [ { "value": "2", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE12_MU_CNT": [ { "value": "2", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE13_MU_CNT": [ { "value": "2", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE14_MU_CNT": [ { "value": "1", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE14_MU_CNT": [ { "value": "2", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE15_MU_CNT": [ { "value": "1", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE16_MU_CNT": [ { "value": "1", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
"C_PROBE17_MU_CNT": [ { "value": "1", "resolve_type": "dependent", "format": "long", "usage": "all" } ],
@@ -862,7 +862,7 @@ always @(posedge ps_clk_100m) begin
// increase addr when hopping is enabled, otherwise get hop freq number
if (vio_hop_en) begin
if (hop_cnt == 'b0) begin
hop_ram_addr <= (hop_ram_addr < hop_freq_num) ? hop_ram_addr + 1'b1 : 1'b1;
hop_ram_addr <= (hop_ram_addr < (hop_freq_num << 3)) ? hop_ram_addr + 48'd8 : 48'd8;
end
end
else begin
@@ -879,13 +879,18 @@ always @(posedge ps_clk_100m) begin
// get hop frequency
if (vio_hop_en) begin
nco_freq <= (hop_cnt == 1'b1) ? hop_ram_dout[0 +: 48] : nco_freq;
// hop_cnt == 0, hop_ram_addr++
// hop_cnt == 1, read ram data
// hop_cnt == 2, ram data valid
nco_freq <= (hop_cnt == 32'd2) ? hop_ram_dout[0 +: 48] : nco_freq;
end
else begin
nco_freq <= {vio_hop_freq,32'b0};
end
if (vio_hop_en) begin
nco_update_req <= (hop_cnt == 2'd2) ? 1'b1 : 1'b0;
// hop_cnt == 3, frequency valid
// hop_cnt == 4, hold for another extra clock cycle for safe capture
nco_update_req <= ((hop_cnt == 32'd3) || (hop_cnt == 32'd4)) ? 1'b1 : 1'b0;
end
else begin
nco_update_req <= (vio_hop_trig_d & ~vio_hop_trig) ? 1'b1 : 1'b0;
+6 -6
View File
@@ -66,13 +66,13 @@
<Option Name="WTVcsLaunchSim" Val="0"/>
<Option Name="WTRivieraLaunchSim" Val="0"/>
<Option Name="WTActivehdlLaunchSim" Val="0"/>
<Option Name="WTXSimExportSim" Val="125"/>
<Option Name="WTModelSimExportSim" Val="125"/>
<Option Name="WTQuestaExportSim" Val="125"/>
<Option Name="WTXSimExportSim" Val="127"/>
<Option Name="WTModelSimExportSim" Val="127"/>
<Option Name="WTQuestaExportSim" Val="127"/>
<Option Name="WTIesExportSim" Val="0"/>
<Option Name="WTVcsExportSim" Val="125"/>
<Option Name="WTRivieraExportSim" Val="125"/>
<Option Name="WTActivehdlExportSim" Val="125"/>
<Option Name="WTVcsExportSim" Val="127"/>
<Option Name="WTRivieraExportSim" Val="127"/>
<Option Name="WTActivehdlExportSim" Val="127"/>
<Option Name="GenerateIPUpgradeLog" Val="TRUE"/>
<Option Name="XSimRadix" Val="hex"/>
<Option Name="XSimTimeUnit" Val="ns"/>
Binary file not shown.
@@ -94,15 +94,15 @@
#endif
#define LMK04828
#define LMX2594_ADC
#define LMX2594_DAC
#define AD9528
//#define LMX2594_ADC
//#define LMX2594_DAC
//#define AD9528
#define AD9361_REG
#define AD9361_API
//#define AD9361_REG
//#define AD9361_API
#define AD9653
#define AD9694
//#define AD9653
//#define AD9694
// AD9361 Configuration
#define SPI_INTERFACE_SPI_ENGINE
@@ -18,6 +18,7 @@
// Standard
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
// Xilinx
#include "xgpiops.h"
#include "drivers/axi_core/spi_engine/spi_engine.h"
@@ -839,9 +840,9 @@ int32_t Hardware_Init(void)
int32_t Status;
// gpio initialization
Status = Hardware_GpioInit(&Gpio, AD9361_GPIO_DEVICE_ID);
Status = Hardware_GpioInit(&Gpio, AD9361_GPIO_DEVICE_ID);
#ifdef RFSOC
#ifdef RFSOC
// rf data converter initialization
Status |= Hardware_RFdcInit(&RFdc, RFDC_DEVICE_ID);
#endif
@@ -882,36 +883,6 @@ int32_t Hardware_Init(void)
#ifdef AD9694
Status |= Hardware_AD9694Init(ad9694_inst, &ad9694_default_init_param);
#endif
XBram freqHopBram;
XBram_Config *xbramConfigPtr;
xbramConfigPtr = XBram_LookupConfig(HOP_DEVICE_ID);
Status = XBram_CfgInitialize(&freqHopBram, xbramConfigPtr,
xbramConfigPtr->CtrlBaseAddress);
if(Status != SUCCESS) {
DBG_ERROR("");
}
Status = XBram_SelfTest(&freqHopBram, 0x00);
if(Status != SUCCESS) {
DBG_ERROR("");
}
uint64_t array[128];
uint64_t min_freq = 2800;
uint64_t max_freq = 4400;
uint64_t freq_num = 201;
uint64_t freq_step = (max_freq-min_freq)/(freq_num-1);
array[0] = freq_num;
for (int ii = 1; ii < freq_num; ii++)
{
array[ii] = min_freq + ii*freq_step;
}
size_t word_len = freqHopBram.Config.DataWidth/sizeof(uint64_t);
size_t array_len = sizeof(array);
size_t array_len_aligned = (array_len + word_len - 1) / word_len * word_len;
memcpy(freqHopBram.Config.MemBaseAddress, array, array_len_aligned);
#ifdef RFSOC
/*
@@ -928,31 +899,31 @@ int32_t Hardware_Init(void)
*
*/
// // get & set mixer settings
// XRFdc_Mixer_Settings Mixer_Settings_DAC;
//
// // 3th channel
// Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, &Mixer_Settings_DAC);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
//
// Mixer_Settings_DAC.Freq = 1500;
//
// Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, &Mixer_Settings_DAC);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
//
// mdelay(100);
//
// Status = XRFdc_UpdateEvent(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
// get & set mixer settings
XRFdc_Mixer_Settings Mixer_Settings_DAC;
// 3rd channel
Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
XRFDC_BLK_ID0, &Mixer_Settings_DAC);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Mixer_Settings_DAC.Freq = 500;
Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
XRFDC_BLK_ID0, &Mixer_Settings_DAC);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
mdelay(100);
Status = XRFdc_UpdateEvent(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
/*
* ADC Mapping:
@@ -962,38 +933,74 @@ int32_t Hardware_Init(void)
* 3 (VIN1_01) 225 (XRFDC_TILE_ID1) ADC 0 (XRFDC_BLK_ID0)
* 4 (VIN1_23) 225 (XRFDC_TILE_ID1) ADC 1 (XRFDC_BLK_ID1)
* 5 (VIN2_01) 226 (XRFDC_TILE_ID2) ADC 0 (XRFDC_BLK_ID0)
* 6 (VIN2_23) 227 (XRFDC_TILE_ID2) ADC 1 (XRFDC_BLK_ID1)
* 7 (VIN3_01) 224 (XRFDC_TILE_ID0) ADC 0 (XRFDC_BLK_ID0)
* 6 (VIN2_23) 226 (XRFDC_TILE_ID2) ADC 1 (XRFDC_BLK_ID1)
* 7 (VIN3_01) 227 (XRFDC_TILE_ID3) ADC 0 (XRFDC_BLK_ID0)
* 8 (VIN3_23) 227 (XRFDC_TILE_ID3) ADC 1 (XRFDC_BLK_ID1)
*
*/
// // get & set mixer settings
// XRFdc_Mixer_Settings Mixer_Settings_ADC;
//
// // 3rd channel
// Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, &Mixer_Settings_ADC);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
//
// Mixer_Settings_ADC.Freq = 1500;
// Mixer_Settings_ADC.EventSource = XRFDC_EVNT_SRC_TILE;
//
// Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, &Mixer_Settings_ADC);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
//
// mdelay(100);
//
// Status = XRFdc_UpdateEvent(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
// XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
// if (Status != XST_SUCCESS) {
// return XST_FAILURE;
// }
// get & set mixer settings
XRFdc_Mixer_Settings Mixer_Settings_ADC;
// 7th channel
Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
XRFDC_BLK_ID0, &Mixer_Settings_ADC);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Mixer_Settings_ADC.Freq = 500;
Mixer_Settings_ADC.EventSource = XRFDC_EVNT_SRC_TILE;
Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
XRFDC_BLK_ID0, &Mixer_Settings_ADC);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
mdelay(100);
Status = XRFdc_UpdateEvent(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
// hop ram
XBram freqHopBram;
XBram_Config *xbramConfigPtr;
xbramConfigPtr = XBram_LookupConfig(HOP_DEVICE_ID);
Status = XBram_CfgInitialize(&freqHopBram, xbramConfigPtr,
xbramConfigPtr->CtrlBaseAddress);
if(Status != SUCCESS) {
DBG_ERROR("");
}
Status = XBram_SelfTest(&freqHopBram, 0x00);
if(Status != SUCCESS) {
DBG_ERROR("");
}
uint64_t array[1024];
double min_freq = 500;
double max_freq = 2100;
double freq_step = 50;
uint64_t total_freq_num = (uint64_t)(floor((max_freq-min_freq)/freq_step)+1);
uint64_t hop_freq_num = (uint64_t)(floor((total_freq_num-1)/2)*3);
array[0] = hop_freq_num;
for (int ii = 0; ii < hop_freq_num/3; ii++)
{
array[3*ii + 1] = (uint64_t)(min_freq/4800*pow(2,48));
array[3*ii + 2] = (uint64_t)((min_freq + (2*ii+1)*freq_step)/4800*pow(2,48));
array[3*ii + 3] = (uint64_t)((min_freq + (2*ii+2)*freq_step)/4800*pow(2,48));
}
size_t word_len = freqHopBram.Config.DataWidth/sizeof(uint64_t);
size_t array_len = sizeof(array);
size_t array_len_aligned = (array_len + word_len - 1) / word_len * word_len;
memcpy(freqHopBram.Config.MemBaseAddress, array, array_len_aligned);
#endif