MCU+CPLD 联合编程(概念及流程) > MCU+CPLD 联合编程(案例描述)
案例列表
- CPLD 控制 Pin 脚(LED 闪烁)
- MCU 通过 CPLD 控制 Pin 脚(LED 闪烁)
- MCU 通过寄存器方式操作 CPLD
- MCU 通过 AHB 转 APB 方式操作 CPLD 外设
- CPLD 实现一个简单的 UartTx 的外设
- DMA 在 CPLD 中的使用(以 ADC 为例)
- CPLD 中如何使用 RAM
一、CPLD 控制 Pin 脚(LED 闪烁)
功能描述:在 CPLD 里驱动两个 LED 灯的闪烁。MCU 部分屏蔽对 LED 的控制,由 CPLD 驱动。
操作步骤:
- VE 文件配置:
LED_D3 PIN_32:OUTPUT #LED2 - 建立 CPLD 工程:点击
prepare LOGIC生成logic文件夹下的工程。 - 编写 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 - 实例化模块:在
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 内部通过判断 haddr 和 hwrite 信号来识别 MCU 的操作意图。
四、MCU 通过 AHB 转 APB 方式操作 CPLD 外设
优势:APB 总线时序更简单,适合低速外设。SDK 提供了 ahb2apb.v 转换模块,开发者只需关注 APB 端的 psel, penable, pwrite 等信号。
五、CPLD 实现一个 UartTx “外设”
实现逻辑:先 AHB 转 APB,然后实例化串口发送模块。MCU 写数据时 APB 接收并触发波形输出,读数据时返回串口状态(Busy/Idle)。
六、DMA 在 CPLD 中的使用
流程:
- CPLD 准备好数据后触发 DMA 请求信号。
- MCU 的 DMA 控制器响应并从 CPLD 搬运数据到 RAM。
- 搬运完成后,DMA 给 CPLD 一个 Clear 信号,完成一次交互。
七、CPLD 中如何使用 RAM
- 自带 RAM:CPLD 内部有 4 个 M9K 块(共 4K Bytes),可在 Quartus 中直接创建 IP 使用。
- 共用 MCU RAM:通过修改
AgRV2K_mem.ld限制 MCU 使用范围(如只用前 96K),将剩余的 32K 分配给 CPLD。CPLD 通过 AHB 总线访问0x20018000起始的地址。