我正在使用Zynq板,其中创建了自定义AXI 4 lite从属外围设备,然后从IP存储库中添加了该外围设备。并在vivado中创建了可综合的自定义IP(正弦波IP),并且还编写了一个C代码来读取此IP输出(我想从寄存器中读取数据)。但是它以某种方式显示出差异。而不是我的期望。
[我在此附上屏幕截图和我的C代码。但是从长远来看,它显示了一些垃圾内存状态。这里,我期待正弦波输出。 (以数字形式)请,关于我可能在哪里出错或在C代码中遗漏了什么,建议我纠正或建议。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9lQ3NtUC5wbmcifQ==” alt =“在此处输入图像描述”>
#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;
}
}
开始:您从不会初始化baseaddr
,而是使用它来读取。
而且我也不能说,因为我不知道如何验证您的地址正确。通常,您应该使用xparameters.h文件中的定义,Xilinx板级软件包程序会将它们放在其中。我看不到这种情况。
我有些怀疑,因为我所有的Xilinx AXI地址都以0x800开头...但是那可能是因为我使用的是其他FPGA。