Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在microblaze和vhdl之间进行通信?_C_Vhdl_Xilinx_Uart_Microblaze - Fatal编程技术网

如何在microblaze和vhdl之间进行通信?

如何在microblaze和vhdl之间进行通信?,c,vhdl,xilinx,uart,microblaze,C,Vhdl,Xilinx,Uart,Microblaze,我正在microblaze xilinx 13.1中实现UART。我想将rx值存储在fifo中,fifo是使用VHDL中的xilinx ipcore实现的 我收到的字节是这样的 while(1) { Recvd_Byte = XUartLite_RecvByte(0x40600000); } 我已经在VHDL代码中实现了fifo。system.xmp和fifo都是我的顶层模块下的组件 如何在C代码中访问这个Recvd_字节并在VHDL中传递给fifo(fifo_wr_数据) 请帮帮我。我

我正在microblaze xilinx 13.1中实现UART。我想将rx值存储在fifo中,fifo是使用VHDL中的xilinx ipcore实现的

我收到的字节是这样的

while(1) {
   Recvd_Byte = XUartLite_RecvByte(0x40600000);
}
我已经在VHDL代码中实现了fifo。system.xmp和fifo都是我的顶层模块下的组件

如何在C代码中访问这个Recvd_字节并在VHDL中传递给fifo(fifo_wr_数据)


请帮帮我。我对microblaze不熟悉。

要将数据写入fpga中的寄存器,xil_io.h中有一些函数。 地址可以在xparameters.h中看到 要写入数据的寄存器的地址是什么

默认情况下,IP核心有32个寄存器,您从0x40600000读取数据; 即slv_reg0; 假设slv_reg1是免费的,那么您可以在它的地址写入数据。 下一个寄存器将位于地址0x40600004; //假设寄存器的宽度为32位

you can use commands 
Xil_Out8(0x40600004);
Xil_Out16(0x40600004);
Xil_Out32(0x40600004); 
或者也可以使用命令将数据写入下一个字节

Xil_Out8(0x40600001);
//试着在问题中提供更多细节


//我们可以以更好的方式帮助您。

您可以在EDK中添加新的GPIO外围设备。然后使用GPIO将Recvd_字节写入微LAZE外部的信号中。因此:

  • 打开EDK
  • 添加GPIO外围设备。 [本说明图片][1]

  • 映射完地址后,我建议将GPIO____O设置为仅外部。 [本说明图片][2]

  • 生成网表后。将硬件设计导出到SDK

  • 这是一个通过GPIO在Microblaze之外发送数据的简单代码:

    #include "xparameters.h"
    #include "xgpio.h"
    
    XGpio Gpio;
    
    int main (void){
    ...
    int Status;
    Status = XGpio_Initialize(&Gpio, XPAR_XPS_GPIO_0_DEVICE_ID);
    XGpio_SetDataDirection(&Gpio, 1, 0x00000000);
    XGpio_DiscreteWrite(&Gpio, 1,Recvd_Byte );
    ...
    return 0;
    }
    
    [1] : [2] :


  • 为什么你需要一个硬件FIFO,你不能在你的C代码中实现一个缓冲区吗?这很重要,这也是可能的。但是,每当收到选通信号时,来自fifo(8位)的数据都应该发送到连接到fpga的其他设备。在这种情况下,这是怎么回事。我已经在VHDL中实现了这一点。您的FIFO是如何连接到Microblaze(FSL、AXI、PLB、OPB?)的?它是如何使用AXI连接的