news 2026/6/5 4:33:22

紫光PGL22G FPGA上跑Cortex-M1软核?手把手带你从Keil工程到烧录Flash完整走一遍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
紫光PGL22G FPGA上跑Cortex-M1软核?手把手带你从Keil工程到烧录Flash完整走一遍

紫光PGL22G FPGA上实现Cortex-M1软核开发的完整实战指南

在嵌入式开发领域,FPGA与ARM Cortex-M系列处理器的结合正开辟出一条全新的技术路径。紫光同创的PGL22G FPGA搭载Cortex-M1软核解决方案,为开发者提供了灵活可定制的嵌入式系统开发平台。本文将带领您从零开始,完整走通在紫光FPGA上实现Cortex-M1软核开发的整个流程,涵盖环境搭建、工程配置、程序烧录到最终验证的全套实践步骤。

1. 开发环境准备与工程初始化

1.1 必备工具与材料清单

在开始实际操作前,我们需要确保所有开发工具和材料准备就绪。以下是经过验证的推荐配置清单:

  • 开发工具

    • Keil MDK开发环境(建议V5.15.0版本)
    • ARM CMSIS软件包(5.6.0版本)
    • PDS开发工具(2020.3版本)
  • 硬件资源

    • 紫光PGL22G开发板
    • JTAG调试器(如J-Link或板载调试器)
    • USB转串口模块(用于调试输出)
  • 工程文件

    • pgr_FPGA_Cortex_M1_PGL22_324_eval.rar(官方评估板设计)
    • pgr_FPGA_Cortex-M1_eval_v1_2.rar(配套软件资源)

提示:所有文件路径应避免使用中文和空格,这是避免后续编译问题的关键前提。

1.2 工程目录结构配置

解压下载的资源包后,需要按照特定结构组织工程目录:

pgr_FPGA_Cortex-M1_eval/ ├── rtl_design/ │ └── pgr_ARM_Cortex_M1_PGL22_324_eval/ # 核心RTL设计 └── software_design/ ├── boot/ # 引导程序 └── module_design/ # 应用模块设计

这种结构确保了工具链能够正确找到所有依赖文件。特别需要注意的是,pgr_ARM_Cortex_M1_PGL22_324_eval文件夹必须放置在rtl_design目录下,这是PDS工程预期的默认位置。

2. Keil工程配置与应用程序编译

2.1 创建LED控制工程

LED闪烁是最基础的硬件验证程序,我们将以此为例演示完整的开发流程。在software_design/module_design/Cortex-M1_led/PROJECT目录下,可以找到预配置的Keil工程文件cortex_M1_led.uvprojx

打开工程后,首先需要检查目标设备设置:

Target Device: ARMCM1

这个设置表明我们使用的是ARM Cortex-M1核心,而不是常见的Cortex-M3或M4。这是整个工程配置的基础。

2.2 存储器地址配置关键

Cortex-M1软核在PGL22G FPGA上的存储器映射有两种模式:

模式类型ROM地址RAM地址特点描述
无Cache0x000000000x20000000直接访问ITCM/DTCM
有Cache0x100000000x30000000通过ICACHE/DCACHE访问

我们的工程采用带Cache的配置,因此需要在Keil的Target选项中设置:

  • IROM1

    • Start: 0x10000000
    • Size: 0x1000000 (16MB)
  • IRAM1

    • Start: 0x30000000
    • Size: 0x100000 (1MB)

注意:ICACHE指令起始地址必须配置为0x10000000,DCACHE数据起始地址必须为0x30000000,这是由硬件架构决定的固定映射关系。

2.3 生成二进制文件的配置技巧

为了将Keil编译输出的AXF文件转换为可直接烧录的BIN格式,需要在User配置中添加以下命令:

Run #1: D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o cortex_M1_led.bin .\Objects\cortex_M1_led.axf Run #2: make_hex.exe cortex_M1_led.bin

这里有几个关键点需要注意:

  1. fromelf.exe路径需要根据实际Keil安装位置调整
  2. Run #1负责生成应用工程的BIN文件
  3. Run #2是为引导工程生成ITCM文件(本示例中直接使用官方提供的预编译文件)

2.4 编译与输出验证

完成上述配置后,点击Keil工具栏的"Rebuild All"按钮开始编译。成功编译后,在工程目录的PROJECT文件夹下应该能看到生成的cortex_M1_led.bin文件。

为确保生成的BIN文件有效,可以检查其大小是否合理(通常LED示例程序应该在几KB到几十KB之间)。将生成的BIN文件复制到PDS工程的pnr/generate_bitstream目录下,为后续的烧录步骤做好准备。

3. PDS工程配置与比特流生成

3.1 打开官方参考设计

rtl_design/pgr_ARM_Cortex_M1_PGL22_324_eval/pnr目录下,找到并打开ARM_M1_SoC_Top.pds工程文件。这是官方提供的完整SoC设计,包含了Cortex-M1软核、外设控制器和存储器接口等所有必要组件。

首次打开工程时,PDS需要一些时间解析和加载所有设计文件。在工程完全加载后,您将看到完整的设计层次结构:

ARM_M1_SoC_Top ├── Cortex_M1_wrapper ├── DDR3_controller ├── GPIO_controller └── System_interconnect

3.2 生成比特流文件

在PDS界面左侧的Flow面板中,右键点击"Generate Bitstream"选项,选择"Rerun All"开始综合和实现过程。这个过程可能需要较长时间(通常在5-15分钟之间,取决于电脑性能)。

比特流生成过程中有几个关键阶段需要关注:

  1. 综合(Synthesis):将RTL代码转换为门级网表
  2. 布局布线(Place & Route):在FPGA物理资源上实现设计
  3. 时序收敛(Timing Closure):确保设计满足所有时序要求
  4. 比特流生成(Bitstream Generation):产生可配置FPGA的最终文件

提示:如果遇到时序违例警告,可以尝试调整PDS的布局布线策略或优化RTL代码。

成功生成比特流后,会在generate_bitstream目录下产生m1_soc_top.sbit文件,这是可以直接下载到FPGA的配置文件。

4. 程序烧录与硬件验证

4.1 连接开发板硬件

在烧录程序前,需要正确连接开发板:

  1. 使用JTAG接口连接开发板与电脑
  2. 确保开发板供电正常(通常通过USB或外部电源)
  3. 连接串口调试工具(如CP2102等USB转串口芯片)

硬件连接示意图:

[PC] -- JTAG --> [开发板] -- UART -->

4.2 转换文件格式

PGL22G FPGA支持两种程序存储方式:

文件格式存储位置掉电保持特点
.sbitFPGA直接配置,速度快
.sfcFlash持久存储,启动加载

我们需要将.sbit文件与应用程序的.bin文件合并转换为.sfc格式。在PDS中选择"Operations"→"Convert File",配置如下参数:

  • Flash型号:W25Q128Q(根据实际板载Flash选择)
  • sbit文件:起始地址0x00000000
  • bin文件:起始地址0x000C0000,使能加载

点击OK后,工具会自动生成最终的.sfc文件,包含了FPGA配置和应用程序代码。

4.3 烧录Flash与验证

通过PDS的编程界面完成Flash烧录:

  1. 进入"Configuration"界面
  2. 执行"Boundary Scan"识别JTAG链
  3. 右键选择"Scan outer Flash"识别外部Flash器件
  4. 选择生成的.sfc文件进行编程

烧录完成后,重启开发板,通过串口终端(波特率115200)应该能看到如下启动信息:

PANGO Cortex-M1 Start Run... JEDEC id = 0xEF4018

同时,开发板上的LED应该开始有规律地闪烁,这表明我们的Cortex-M1软核已经成功运行应用程序。

5. 深入理解与进阶调试

5.1 软核启动流程解析

Cortex-M1在PGL22G上的完整启动过程可分为三个阶段:

  1. FPGA配置阶段:上电后,FPGA从Flash加载配置比特流
  2. Bootloader阶段:ITCM中的引导程序将应用程序从Flash复制到DDR
  3. 应用程序阶段:CPU跳转到DDR中的应用程序开始执行

这种设计使得应用程序可以很大(受DDR容量限制,而非片上存储器限制),同时保持了启动的灵活性。

5.2 常见问题排查指南

在实际开发中,可能会遇到以下典型问题:

  • 编译错误

    • 检查Keil的ARMCC编译器版本
    • 确认CMSIS包版本匹配
    • 验证所有文件路径无中文和空格
  • 烧录失败

    • 确认JTAG连接可靠
    • 检查Flash型号选择是否正确
    • 验证供电稳定充足
  • 程序不运行

    • 检查串口是否有启动输出
    • 确认.bin文件烧录地址正确
    • 验证复位电路工作正常

5.3 性能优化建议

为了获得更好的Cortex-M1软核性能,可以考虑以下优化方向:

  1. Cache配置优化

    • 调整ICACHE/DCACHE大小
    • 优化内存访问模式
  2. 时钟系统优化

    • 提高系统时钟频率
    • 优化时钟分配网络
  3. 存储器接口优化

    • 使用突发传输模式
    • 合理设置存储器时序参数

通过本文的实践,我们不仅完成了基础的LED控制程序,还建立了完整的紫光FPGA Cortex-M1开发流程。这套方法同样适用于更复杂的应用开发,如传感器接口、通信协议实现等。在实际项目中,建议先从官方示例工程入手,逐步增加自定义功能模块,这种渐进式的开发方式能有效降低初期开发风险。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 4:33:21

模板驱动文档自动化:从填空题到智能装配线

1. 项目概述:用模板把文档生产变成“填空题”你有没有过这种体验:每周要交三份客户方案,每份结构雷同——封面、目录、痛点分析、解决方案、报价页、服务承诺——但每次都要从零新建Word、手动调格式、复制粘贴旧内容、反复检查页眉页脚是否错…

作者头像 李华
网站建设 2026/6/5 4:33:21

【字节跳动】巨量引擎第二层内核 纯工业级机密参数301-500条

301. 全网流量采样精准占比:5.8%深度报文检测极限超时:125ms应用层特征匹配标准字节:368Byte异常会话智能建模窗口:7分30秒用户行为向量精细衰减系数:0.912风控特征全维度融合区间:0~1.08风险分值自然递减速…

作者头像 李华
网站建设 2026/6/5 4:29:55

单卡RTX 4090微调20B多语言大模型做推理训练实战

1. 项目概述:为什么要在本地跑一个20B参数的开源大模型做多语言推理训练“Teaching OpenAI’s GPT-OSS 20B Model Multilingual Reasoning Ability: A Hands-On Guide with RTX 4090”——这个标题里藏着三个关键事实:第一,它不是调用API&…

作者头像 李华
网站建设 2026/6/5 4:27:07

终极Forza Mods AIO指南:免费解锁极限竞速FH4/FH5完整修改功能

终极Forza Mods AIO指南:免费解锁极限竞速FH4/FH5完整修改功能 【免费下载链接】Forza-Mods-AIO Free and open-source FH4 & FH5 mod tool 项目地址: https://gitcode.com/gh_mirrors/fo/Forza-Mods-AIO Forza Mods AIO是一款免费开源的极限竞速地平线4…

作者头像 李华
网站建设 2026/6/5 4:27:01

MATLAB无参考图像质量打分工具:含特征提取、校准与预训练模型

本文还有配套的精品资源,点击获取 简介:直接运行就能给图片打质量分的MATLAB工具包,不需要原始清晰图做对比。核心功能包括:用feature_extract.m提取DCT系数分布、局部对比度、模糊度等手工特征;SSQA_by_f.m和SSEQ.…

作者头像 李华