【问题标题】:How to communicate beteen microblaze and vhdl?如何在 microblaze 和 vhdl 之间进行交流?
【发布时间】:2014-05-13 09:20:18
【问题描述】:

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

我收到这样的字节,

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

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

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

请帮助我。我是 microblaze 的新手。

【问题讨论】:

  • 为什么需要硬件FIFO,不能在C代码中实现缓冲区吗?
  • @meaning-matters,这也是可能的。 but whenever a strobe signal comes data from fifo(8 bit) should be sent to some other devices which is connected to fpga.在这种情况下,这怎么可能。我已经在 VHDL 中实现了这个
  • 您的 FIFO 如何连接到 Microblaze(FSL、AXI、PLB、OPB?)
  • 它使用 AXI 连接

标签: c vhdl xilinx uart microblaze


【解决方案1】:

要将数据写入 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);

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

// 我们可以为您提供更好的帮助。

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2012-04-09
      • 2020-02-08
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      相关资源
      最近更新 更多