Невозможно прочитать данные из настраиваемого периферийного регистра AXI

Я работаю с платой Zynq, на которой создается пользовательское ведомое периферийное устройство AXI 4 lite, а затем добавляется из репозитория IP. И создал синтезируемый настраиваемый IP-адрес в vivado (который является IP-синусоидальной волной), а также написал код C для чтения этого вывода IP (я хочу прочитать данные из регистра). Но как-то это показывает различие. вместо того, что я ожидал.

Здесь я прилагаю снимок экрана и свой код для этого. Но в тератерме показывает какое-то состояние мусорной памяти. Здесь я ожидаю синусоидального сигнала. (В цифровой форме) Пожалуйста, предложите мне исправление или предложение о том, где я мог ошибиться или что я пропустил в коде C.

введите описание изображения здесь

#include "xil_printf.h"
#include "xil_io.h"
#include "xparameters.h"
#include "xil_types.h"
#include "xparameters_ps.h"


#include <stdio.h>
//Definitions for peripheral  MYIPINETHREE_0 //
#define XPAR_ MYIPINETHREE_0_DEVICE_ID 0
#define XPAR_ MYIPINETHREE_0_S00_AXI_BASEADDR 0x43C00000
#define XPAR_ MYIPINETHREE_0_S00_AXI_HIGHADDR 0x43C0FFFF

int main(){
    u32 baseaddr;
    int sine, sinephase, enable,reg ;
    while (1)
    {
    xil_printf("start of ip test\r");

    if (enable == 1)
                    reg = 0xFFFFFFFF;
        else
                reg = 0x00000000;
     Xil_Out32(0x43C00000, 32 );
sine = Xil_In32(baseaddr+4);

    xil_printf("\r state: %d", sine);
     Xil_Out32(0x43C00000, 32);
     sinephase = Xil_In32(baseaddr+4);
        xil_printf("\r state: %d", sinephase);
    return 0;
}
}

person okk    schedule 22.01.2020    source источник


Ответы (2)


Для начала: вы никогда не инициализируете baseaddr, а используете его для чтения.

Также я не могу сказать, потому что понятия не имею, как проверить правильность ваших адресов. Обычно вы должны использовать определения из вашего файла xparameters.h, куда их помещает программа пакета платы Xilinx. Я не думаю, что здесь происходит такое.

Я несколько подозрительно настроен, так как все мои адреса Xilinx AXI начинаются с 0x800 ... но тогда это может быть связано с тем, что я использую другую FPGA.

person Oldfart    schedule 22.01.2020
comment
Просто для информации: адресное пространство зависит от используемого AXI Master. Вы можете увидеть макет адреса, если взглянете на адресное пространство в справочное руководство. Таким образом, адресное пространство 0x40000000 нормально для AXI master 0. - person Kampi; 27.01.2020

Пожалуйста, добавьте макет платы или дополнительную информацию. Вы должны использовать адреса из xparameters.h вместо того, чтобы жестко указывать их в исходном коде. Адресное пространство зависит от вашего главного интерфейса AXI.

person Kampi    schedule 27.01.2020