diff --git a/rfsoc_eval_nco/rfsoc_eval_nco.runs/impl_1/system_top.bit b/rfsoc_eval_nco/rfsoc_eval_nco.runs/impl_1/system_top.bit
index 462be98..3bb7e86 100644
--- a/rfsoc_eval_nco/rfsoc_eval_nco.runs/impl_1/system_top.bit
+++ b/rfsoc_eval_nco/rfsoc_eval_nco.runs/impl_1/system_top.bit
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:57dbd0074971dc9f4a588b27e4a89aa7621934349d8e1606558feeb404041c1a
+oid sha256:c2892a491d0b87e56c5e5eebb481fb4e3516aad76e231e439ecf239a7e93120e
size 34437474
diff --git a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/ip/ila_hop/ila_hop.xci b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/ip/ila_hop/ila_hop.xci
index b12887f..ca69cb9 100644
--- a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/ip/ila_hop/ila_hop.xci
+++ b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/ip/ila_hop/ila_hop.xci
@@ -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" } ],
diff --git a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/new/system_top.v b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/new/system_top.v
index b0431b1..517fda6 100644
--- a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/new/system_top.v
+++ b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/sources_1/new/system_top.v
@@ -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;
diff --git a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/utils_1/imports/synth_1/system_top.dcp b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/utils_1/imports/synth_1/system_top.dcp
index 7edab66..793c41e 100644
--- a/rfsoc_eval_nco/rfsoc_eval_nco.srcs/utils_1/imports/synth_1/system_top.dcp
+++ b/rfsoc_eval_nco/rfsoc_eval_nco.srcs/utils_1/imports/synth_1/system_top.dcp
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:76da1e268fe1f0b28cb10d08cb8216e5fa6c80c6044bd08b2753d65a209e9508
-size 491575
+oid sha256:ce9573a9949e386d7ebf696ca5c74bee9d41243fc72274cce5aff54b88ab3007
+size 493167
diff --git a/rfsoc_eval_nco/rfsoc_eval_nco.xpr b/rfsoc_eval_nco/rfsoc_eval_nco.xpr
index 3502ced..df4fce2 100644
--- a/rfsoc_eval_nco/rfsoc_eval_nco.xpr
+++ b/rfsoc_eval_nco/rfsoc_eval_nco.xpr
@@ -66,13 +66,13 @@
-
-
-
+
+
+
-
-
-
+
+
+
diff --git a/rfsoc_eval_nco/system_top.xsa b/rfsoc_eval_nco/system_top.xsa
index 625d3a3..abb73f9 100644
--- a/rfsoc_eval_nco/system_top.xsa
+++ b/rfsoc_eval_nco/system_top.xsa
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1a156a3fd3cc5ee7272767f374f056b5bfbefbe4ba50283e838636b5207d88e8
-size 2918654
+oid sha256:17850daafe95f98a02d871228b066a87ad56ac9355dc9990e7bee1da6aacc40e
+size 3007129
diff --git a/rfsoc_eval_nco/vitis_classic_autobuild/source/config/app_config.h b/rfsoc_eval_nco/vitis_classic_autobuild/source/config/app_config.h
index f9cc1e4..08f77dc 100644
--- a/rfsoc_eval_nco/vitis_classic_autobuild/source/config/app_config.h
+++ b/rfsoc_eval_nco/vitis_classic_autobuild/source/config/app_config.h
@@ -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
diff --git a/rfsoc_eval_nco/vitis_classic_autobuild/source/hwconfig.c b/rfsoc_eval_nco/vitis_classic_autobuild/source/hwconfig.c
index 4121ef9..b9370a2 100644
--- a/rfsoc_eval_nco/vitis_classic_autobuild/source/hwconfig.c
+++ b/rfsoc_eval_nco/vitis_classic_autobuild/source/hwconfig.c
@@ -18,6 +18,7 @@
// Standard
#include
#include
+#include
// 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