Anatoliy Chigirinskiy 11 mesiacov pred
rodič
commit
821467186c
3 zmenil súbory, kde vykonal 181 pridanie a 33 odobranie
  1. 3 0
      .gitignore
  2. 82 1
      Devices/lmk04821.h
  3. 96 32
      main.c

+ 3 - 0
.gitignore

@@ -2,3 +2,6 @@
 out/
 CMakePresets.json
 build/
+
+/cmake-build-debug-remote-host/.cmake/api/v1/reply/cmakeFiles-v1-6b5a041faa2b8215aaca.json
+/cmake-build-debug-remote-host/.cmake/api/v1/reply/index-2024-11-15T02-52-29-0308.json

+ 82 - 1
Devices/lmk04821.h

@@ -7,9 +7,90 @@
 #include <stdio.h>
 #include "pci.h"
 
-#define     LMK_COUNT   129
+#define     LMK_COUNT         129
+#define     LMK_TOTAL_COUNT   131
+
+/* Header for the BochV3 FPGA */
+
+/* 1-MOSI */
+/* Device ID's */
+#define DEVICE_ID_BITP                18
+#define DEVICE_ID_BITM                (0x1F << DEVICE_ID_BITP)
+
+#define DEVICE_ID_LMK_A               0x0
+#define DEVICE_ID_LMK_B               0x1
+#define DEVICE_ID_CP2444              0x2
+#define DEVICE_ID_HUB_TFE             0x3
+#define DEVICE_ID_FLASH               0x4
+
+/* Word Counter */
+#define MOSI1_WORD_NUM_BITP         1
+#define MOSI1_WORD_NUM_BITM         (1FFFF << MOSI1_WORD_NUM_BITP)
+
+
+/* 4-MOSI */
+#define   CTRL_COLD_PART_BITP       18
+#define   CTRL_COLD_PART_BITM       (0xF << CTRL_COLD_PART_BITP)
+
+#define TFE_2B_BITP                17
+#define TFE_2B_BITM                (0x1 << TFE_2B_BITP)
+#define TFE_4B_BITP                15
+#define TFE_4B_BITM                (0x3 << TFE_4B_BITP)
+#define TFE_7B_BITP                13
+#define TFE_7B_BITM                (0x3 << TFE_7B_BITP)
+#define TFE_6B_BITP                11
+#define TFE_6B_BITM                (0x3 << TFE_6B_BITP)
+
+#define BOCHV3_MODE_BITP           23
+#define BOCHV3_MODE_BITM           (0x1 << BOCHV3_MODE_BITP)
+#define BOCHV3_TERM_BITP           0
+#define BOCHV3_TERM_BITM           (0x1 << BOCHV3_TERM_BITP)
+
+#define BOCHV3_MODE_4MOSI              (0x1 << BOCHV3_MODE_BITP)
+#define BOCHV3_MODE_1M0SI              (0x0 << BOCHV3_MODE_BITP)
+#define BOCHV3_TERM_ON                 (0x1 << BOCHV3_TERM_BITP)
+/* Header for the Cp2444v1 FPGA */
+
+/* 1-MOSI */
+
+/* Device ID's */
+#define DEVICE_ID_SW_P1_           0x0
+#define DEVICE_ID_ATT_P1           0x1
+#define DEVICE_ID_ATT_P2           0x2
+#define DEVICE_ID_ATT_P3           0x3
+#define DEVICE_ID_ATT_P4           0x4
+#define DEVICE_ID_GPIO             0x5
+
+#define CP2444v1_MODE_BITP         23
+#define CP2444v1_MODE_BITM         (0x1 << CP2444v1_MODE_BITP)
+#define CP2444v1_TERM_BITP         0
+#define CP2444v1_TERM_BITM         (0x1 << CP2444v1_TERM_BITP)
+
+#define ENUM_CP2444v1_MODE_4MOSI            (0x1 << CP2444v1_MODE_BITP)
+#define ENUN_CP2444v1_MODE_1M0SI            (0x0 << CP2444v1_MODE_BITP)
+
+#define ENUM_CP2444v1_TERM_ON               (0x1 << CP2444v1_TERM_BITP)
+
+#define CP2444v1_GPIO_BITP         22
+#define CP2444v1_GPIO_BITM         (0x1 << CP2444v1_GPIO_BITP)
+#define CP2444v1_SW_P1_BITP        21
+#define CP2444v1_SW_P1_BITM        (0x1 << CP2444v1_SW_P1_BITP)
+#define CP2444v1_ATT_P1_BITP       20
+#define CP2444v1_ATT_P1_BITM       (0x1 << CP2444v1_ATT_P1_BITP)
+#define CP2444v1_ATT_P2_BITP       19
+#define CP2444v1_ATT_P2_BITM       (0x1 << CP2444v1_ATT_P2_BITP)
+#define CP2444v1_ATT_P3_BITP       18
+#define CP2444v1_ATT_P3_BITM       (0x1 << CP2444v1_ATT_P3_BITP)
+#define CP2444v1_ATT_P4_BITP       17
+#define CP2444v1_ATT_P4_BITM       (0x1 << CP2444v1_ATT_P4_BITP)
+
+#define  CP2444v1_QSPI_MAX_WORD_NUM  0x6
 
 void lmk04821_a_init(reg_addr_pci* pci_bar_1);
 void lmk04821_b_init(reg_addr_pci* pci_bar_1);
 
+void lmk04821_a_init_boch_v3(reg_addr_pci* pci_bar_1);
+void lmk04821_b_init_boch_v3(reg_addr_pci* pci_bar_1);
+void cp2444_test(reg_addr_pci* pci_bar_1);
+
 #endif //LMK04821_H

+ 96 - 32
main.c

@@ -28,6 +28,23 @@
 #define REQUESTED_MEMORY_SIZE  		0x1000
 #define REQUESTED_MEMORY_SIZE_DMA	0x10000
 #define BUFF_SIZE			   		2048
+#define STREAM_SIZE                                     (STREAM_WORDS<<3)
+/* 64'hdeadbeefdeadbeef */
+#define TAIL_MAGIC                              0xdeadbeefdeadbeef
+#define HEAD_MAGIC                              ~TAIL_MAGIC
+#define SIZE_POS                                0
+#define SIZE_MASK                               (0xFFFFFFFFUL << SIZE_POS)
+#define INCR_POS                                32
+#define INCR_MASK                               (0xFFFFFFFFUL << INCR_POS)
+#define ADDR_POS                                0
+/* 64 bit address */
+#define ADDR_MASK                               (0xFFFFFFFFFFFFFFFFUL << ADDR_POS)
+/* ADDRESSES */
+#define SYNTH_LO_ADDR                           (0x00001000 << ADDR_POS)
+#define SYNTH_RF1_ADDR                          (0x00000000 << ADDR_POS)
+#define BLOCK_LO_ADDR                           (0x00002000 << ADDR_POS)
+#define BOCH_ADDR                               (0x00003000 << ADDR_POS)
+#define CTRL_CP_ADDR                            (0x00004000 << ADDR_POS)
 #define SERVER_PORT 				5025
 #define BACKLOG 					10
 
@@ -159,39 +176,86 @@ int main(int argc, char *argv[])
     lmx2594_init(pci_bar_1);
 
 	usleep(1000);
-	char *user_buffer = (char *) malloc(BUFF_SIZE);
-	char *user_buffer_read = (char *) malloc(BUFF_SIZE);
-
-	for (int i = 0; i < BUFF_SIZE; i++) {
-		/*fill the buffer with random data*/
-		user_buffer[i] = (char) (rand() % 256);
-	}
-
-	rc = write_to_buffer (filename_dma, dma_fd, user_buffer, BUFF_SIZE, 0);
-	if (rc < 0) {
-		fprintf(stderr, "write_to_buffer failed\n");
-		return 1;
-	}
-	/*wait for data to be written*/ 
-	usleep(5);
-	rv = read_from_buffer (filename_dma, dma_fd, user_buffer_read, BUFF_SIZE, 0);
-	if (rv < 0) {
-		fprintf(stderr, "read_from_buffer failed\n");
-		return 1;
-	}
-	/*Check if the user buffer and the read buffer are the same*/
-	if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
-		fprintf(stderr, "Data mismatch\n");
-		return 1;
-	}
-	else {
-		fprintf(stderr, "Data match\n");
-	}
-
-	free(user_buffer);
-    free(user_buffer_read);
-
 
+        uint64_t *user_buffer = (uint64_t *) malloc(BUFF_SIZE);
+        uint64_t *user_buffer_read = (uint64_t *) malloc(BUFF_SIZE);
+        uint64_t *addr_buffer = (uint64_t *) malloc(BUFF_SIZE);
+        addr_buffer[0] = SYNTH_LO_ADDR;
+        addr_buffer[1] = SYNTH_LO_ADDR;
+        addr_buffer[2] = BLOCK_LO_ADDR;
+        addr_buffer[3] = BOCH_ADDR;
+        addr_buffer[4] = CTRL_CP_ADDR;
+      /* Iterate over the addresses */
+        for (int i = 0; i < 5; i++) {
+            user_buffer[0] = HEAD_MAGIC;
+            user_buffer[1] = (0 << INCR_POS) | ((uint32_t) (BUFF_SIZE - (4 << 3)) << SIZE_POS);
+            user_buffer[2] = addr_buffer[i];
+            for (int j = 3; j < (BUFF_SIZE >> 3) - 1; j++) {
+                user_buffer[j] = j;
+            }
+            /* tail magic */
+            user_buffer[(BUFF_SIZE >> 3) - 1 ] = TAIL_MAGIC;
+            /* show the buffer */
+            for (int j = 0; j < (BUFF_SIZE >> 3); j++) {
+                fprintf(stderr, "0x%016lx\n", user_buffer[j]);
+            }
+
+            rc = write_to_buffer(filename_dma, dma_fd, (void *) user_buffer, BUFF_SIZE, 0);
+            if (rc < 0) {
+              fprintf(stderr, "write_to_buffer failed\n");
+              return 1;
+            }
+
+//            rv = read_from_buffer(filename_dma, dma_fd, (void *) user_buffer_read, BUFF_SIZE, 0);
+//            if (rv < 0) {
+//              fprintf(stderr, "read_from_buffer failed\n");
+//              return 1;
+//            }
+//
+//            /* Check if the user buffer and the read buffer are the same */
+//            if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
+//              fprintf(stderr, "Data mismatch\n");
+//              return 1;
+//            } else {
+//              fprintf(stderr, "Data match\n");
+//            }
+        }
+//        user_buffer[0] = HEAD_MAGIC;
+//        user_buffer[1] = (0 << INCR_POS) | ((uint32_t) 0x10 << SIZE_POS);
+//        user_buffer[2] = SYNTH_LO_ADDR;
+//        for (int i = 3; i < (BUFF_SIZE >> 3) - 1; i++) {
+//            user_buffer[i] = i;
+//        }
+//        /* tail magic */
+//        user_buffer[(BUFF_SIZE >> 3) - 1 ] = TAIL_MAGIC;
+//        /* show the buffer */
+//        for (int i = 0; i < (BUFF_SIZE >> 3); i++) {
+//            fprintf(stderr, "0x%016lx\n", user_buffer[i]);
+//        }
+//
+//        rc = write_to_buffer(filename_dma, dma_fd, (void *) user_buffer, BUFF_SIZE, 0);
+//        if (rc < 0) {
+//          fprintf(stderr, "write_to_buffer failed\n");
+//          return 1;
+//        }
+//
+//        rv = read_from_buffer(filename_dma, dma_fd, (void *) user_buffer_read, BUFF_SIZE, 0);
+//        if (rv < 0) {
+//          fprintf(stderr, "read_from_buffer failed\n");
+//          return 1;
+//        }
+//
+//        /* Check if the user buffer and the read buffer are the same */
+//        if (memcmp(user_buffer, user_buffer_read, BUFF_SIZE) != 0) {
+//          fprintf(stderr, "Data mismatch\n");
+//          return 1;
+//        } else {
+//          fprintf(stderr, "Data match\n");
+//        }
+
+        free(user_buffer);
+        free(user_buffer_read);
+        free(addr_buffer);
 	usleep(1000);
 	// Установка режима SPI
 	uint32_t cfg_reg = get_cfg_reg();