MCU+CPLD 联合编程(案例描述)

1 min read 联合编程

MCU+CPLD 联合编程(概念及流程) > MCU+CPLD 联合编程(案例描述)

案例列表

  1. CPLD 控制 Pin 脚(LED 闪烁)
  2. MCU 通过 CPLD 控制 Pin 脚(LED 闪烁)
  3. MCU 通过寄存器方式操作 CPLD
  4. MCU 通过 AHB 转 APB 方式操作 CPLD 外设
  5. CPLD 实现一个简单的 UartTx 的外设
  6. DMA 在 CPLD 中的使用(以 ADC 为例)
  7. CPLD 中如何使用 RAM

一、CPLD 控制 Pin 脚(LED 闪烁)

功能描述:在 CPLD 里驱动两个 LED 灯的闪烁。MCU 部分屏蔽对 LED 的控制,由 CPLD 驱动。

操作步骤:

  1. VE 文件配置LED_D3 PIN_32:OUTPUT #LED2
  2. 建立 CPLD 工程:点击 prepare LOGIC 生成 logic 文件夹下的工程。
  3. 编写 Verilog 逻辑
    module led (
        input sysclk,
        output LED_D3,
        output LED_D2
    );
        reg [23:0] counter;
        always @(posedge sysclk) begin
            counter <= counter + 1;
        end
        assign LED_D3 = counter[23];
        assign LED_D2 = ~counter[23];
    endmodule
  4. 实例化模块:在 user_ip.v 中实例化 led 模块并关联 sysclk

二、MCU 通过 CPLD 控制 Pin 脚

功能描述:MCU 输出一个 GPIO 信号给 CPLD,CPLD 接收后输出到 Pin 脚驱动 LED。

VE 配置GPIO4_3 led_chn(MCU 信号到 CPLD)和 LED_D3 PIN_32:OUTPUT(CPLD 信号到 Pin)。

三、MCU 通过寄存器方式操作 CPLD

核心思路:利用 AHB 总线。MCU 作为 Master 发起读写,CPLD 作为 Slave 响应。CPLD 内部通过判断 haddrhwrite 信号来识别 MCU 的操作意图。

四、MCU 通过 AHB 转 APB 方式操作 CPLD 外设

优势:APB 总线时序更简单,适合低速外设。SDK 提供了 ahb2apb.v 转换模块,开发者只需关注 APB 端的 psel, penable, pwrite 等信号。

五、CPLD 实现一个 UartTx “外设”

实现逻辑:先 AHB 转 APB,然后实例化串口发送模块。MCU 写数据时 APB 接收并触发波形输出,读数据时返回串口状态(Busy/Idle)。

六、DMA 在 CPLD 中的使用

流程

  1. CPLD 准备好数据后触发 DMA 请求信号。
  2. MCU 的 DMA 控制器响应并从 CPLD 搬运数据到 RAM。
  3. 搬运完成后,DMA 给 CPLD 一个 Clear 信号,完成一次交互。

七、CPLD 中如何使用 RAM

  1. 自带 RAM:CPLD 内部有 4 个 M9K 块(共 4K Bytes),可在 Quartus 中直接创建 IP 使用。
  2. 共用 MCU RAM:通过修改 AgRV2K_mem.ld 限制 MCU 使用范围(如只用前 96K),将剩余的 32K 分配给 CPLD。CPLD 通过 AHB 总线访问 0x20018000 起始的地址。
这篇文档有帮助吗?