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

时间:2014-05-13 09:20:18

标签: c vhdl xilinx uart microblaze

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

我收到了这样的字节,

while(1) {
   Recvd_Byte = XUartLite_RecvByte(0x40600000);
}

我已经在我的VHDL代码中实现了fifo。 system.xmp和fifo都是我顶层模块下的组件。

如何在C代码中访问此Recvd_Byte并传递给VHDL中的fifo(fifo_wr_data)。

请帮帮我。我是微博的新手。

2 个答案:

答案 0 :(得分:0)

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

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

you can use commands 
Xil_Out8(0x40600004);
Xil_Out16(0x40600004);
Xil_Out32(0x40600004); 

或者也可以将数据写入下一个字节,使用命令

Xil_Out8(0x40600001);

//尝试在问题中提供更多详细信息。

//我们可以更好地帮助您。

答案 1 :(得分:0)

您可以在EDK中添加新的GPIO外设。然后使用GPIO将Recvd_Byte写入micrlaze外的信号。所以:

  1. 打开EDK。
  2. 添加GPIO外设。 [本指令的图像] [1]

  3. 映射地址后,我建议将GPIO_IO_O设为外部地址。 [本指令的图像] [2]

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

  5. 这是一个通过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]:https://i.stack.imgur.com/fr0iG.png   [2]:https://i.stack.imgur.com/kAnCK.png