news 2026/6/5 2:52:25

紫光PGL22G FPGA上跑Cortex-M1软核?手把手带你搞定Keil工程配置与bin文件生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
紫光PGL22G FPGA上跑Cortex-M1软核?手把手带你搞定Keil工程配置与bin文件生成

紫光PGL22G FPGA上构建Cortex-M1软核系统的全流程实战指南

1. 开发环境搭建与工具链配置

在开始紫光PGL22G FPGA上的Cortex-M1软核开发前,我们需要完成开发环境的搭建。与常见的STM32开发不同,FPGA软核开发需要同时处理硬件描述和软件编程两个维度。

必备工具清单:

  • Keil MDK开发环境(推荐V5.15及以上版本)
  • ARM CMSIS软件包(5.6.0版本)
  • 紫光PDS开发工具(2020.3版本)
  • 官方评估板支持包(包含RTL设计和示例工程)

环境配置中的几个关键点需要注意:

  1. 安装路径避免中文字符和空格
  2. CMSIS软件包需通过Keil的Pack Installer获取
  3. PDS工具需要正确的license配置

提示:建议保持工具版本与官方测试环境一致,可减少兼容性问题

工具安装完成后,项目目录结构应如下所示:

pgr_FPGA_Cortex-M1_eval/ ├── rtl_design/ │ └── pgr_ARM_Cortex_M1_PGL22_324_eval/ └── software_design/ ├── boot/ └── module_design/

2. Keil工程配置详解

2.1 工程架构解析

打开示例LED工程(位于software_design/module_design/Cortex-M1_led),我们会发现其工程结构与常规ARM工程存在显著差异:

  1. 启动文件:使用专用的startup_Cortex-M1.s汇编文件
  2. 链接脚本:通过Keil的Target选项直接配置,而非独立的ld文件
  3. 外设库:基于CMSIS封装了针对FPGA的特定驱动

2.2 存储器地址配置

Cortex-M1软核的存储器配置是开发中的第一个关键点。根据是否使用Cache,存在两种配置模式:

配置类型ROM地址RAM地址备注
无Cache0x00000000 (ITCM)0x20000000 (DTCM)直接访问模式
有Cache0x10000000 (ICACHE)0x30000000 (DCACHE)推荐配置

在Keil的Target选项中,我们需要设置:

IROM1: 0x10000000, Size: 0x1000000 IRAM1: 0x30000000, Size: 0x100000

注意:ICACHE指令起始地址必须为0x10000000,DCACHE数据起始地址必须为0x30000000,超出映射范围会导致运行错误

2.3 二进制文件生成配置

FPGA软核开发需要生成特定格式的二进制文件,这通过Keil的User选项卡配置:

  1. Run #1命令
fromelf.exe --bin -o cortex_M1_led.bin .\Objects\cortex_M1_led.axf
  1. Run #2命令
make_hex.exe cortex_M1_led.bin

关键点说明:

  • fromelf工具路径需指向本地Keil安装目录
  • Run #2生成的ITCM文件在应用工程中实际不会使用
  • 最终需要的只是Run #1生成的.bin文件

3. 程序烧录与硬件调试

3.1 文件转换流程

紫光PGL22G FPGA的程序烧录需要将多个文件合并转换为特定格式:

  1. sbit文件:FPGA配置比特流
  2. bin文件:应用程序二进制
  3. sfc文件:最终烧录到Flash的组合文件

转换参数示例:

Flash型号: W25Q128Q sbit起始地址: 0x00000000 bin起始地址: 0x000C0000 读模式: SPI X4, 24-bit address

3.2 烧录步骤

  1. 连接JTAG调试器与开发板
  2. 在PDS工具中执行Boundary Scan识别设备
  3. 选择生成的sfc文件进行编程
  4. 等待Flash编程完成(约1-2分钟)

3.3 串口调试

烧录完成后,可通过串口观察程序输出:

  • 波特率:115200
  • 数据位:8
  • 停止位:1
  • 无校验

典型的成功输出如下:

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

4. 仿真与调试技巧

4.1 无Boot仿真方法

为加速开发周期,可以采用跳过Bootloader的仿真方式:

  1. 修改应用工程的Run #2命令:
make_hex128.exe cortex_M1_demo.bin
  1. 生成三个关键文件:

    • mem_addr.dat
    • mem_data.dat
    • mem_used.dat
  2. 将这些文件复制到RTL工程的Simulation目录

4.2 Modelsim仿真配置

仿真环境搭建步骤:

  1. 编译Pango仿真库(约需2分钟)
  2. 拷贝usim文件夹到仿真目录
  3. 运行sim.bat启动仿真

常见问题解决:

** Error: (vish-42) Unsupported ModelSim library format...

→ 重新编译仿真库即可解决

4.3 波形分析技巧

在仿真波形中重点关注:

  1. HADDR信号:查看指令执行地址
  2. HWDATA信号:观察数据变化
  3. GPIO输出:验证外设行为

例如,当程序向0x70001000地址写入数据时,可以在波形中看到HADDR和HWDATA的对应变化。

5. 高级开发技巧

5.1 系统时钟配置

Cortex-M1软核默认使用DDR的axi_clk0作为系统时钟。如需改用外部PLL时钟,需修改RTL代码:

// 在cm1_option_defs.v中取消注释 #define UNCACHE

5.2 外设驱动开发

开发新外设驱动时需注意:

  1. 在cm1_option_defs.v中启用对应模块
  2. 正确配置GPIO复用功能
  3. 处理时钟域交叉问题

以I2C驱动EEPROM为例:

// 修改页大小定义 #define I2C_PageSize 16 // 确保数据长度小于页大小 #define DATA_LEN 10

5.3 网络功能配置

评估板的网络接口需配置以下参数:

MAC地址配置:

#define MAC_ADDR0 0x00 #define MAC_ADDR1 0x0A #define MAC_ADDR2 0x35 #define MAC_ADDR3 0x01 #define MAC_ADDR4 0xFE #define MAC_ADDR5 0xC0

IP地址配置:

#define IP_ADDR0 192 #define IP_ADDR1 168 #define IP_ADDR2 0 #define IP_ADDR3 2

6. 性能优化建议

6.1 Cache优化策略

  1. ICACHE配置
    • 建议大小:16-32KB
    • 关联度:4-way
  2. DCACHE配置
    • 写回模式优于写通
    • 合理使用Cache预取

6.2 存储器访问优化

关键技巧:

  • 将频繁访问的数据放入DTCM
  • 大数据块使用DMA传输
  • 对齐内存访问(4字节边界)

6.3 编译优化选项

Keil中的推荐优化设置:

  1. Optimization Level: -O2
  2. One ELF Section per Function: Enabled
  3. Strict ANSI C: Disabled

在项目开发中,我遇到过一个典型的性能问题:当启用Cache后,某些外设寄存器访问出现异常。最终发现是因为没有正确配置Cache的Non-cacheable区域。通过在代码中关键位置添加内存屏障指令__DSB()解决了这个问题。

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

从概念到产品:基于快马平台快速开发热词管理仪表盘实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个热词实战应用项目,例如一个简易的热词信息管理仪表盘。核心功能要求:一个后端服务,用于管理热词相关的数据条目,支持增删…

作者头像 李华
网站建设 2026/6/5 2:48:12

别再只用SGD了!用PyTorch的RMSProp优化器解决梯度震荡,附代码对比实验

深度学习优化器实战:用PyTorch的RMSProp驯服梯度震荡在深度学习的训练过程中,我们经常会遇到一个令人头疼的问题:模型参数更新时出现剧烈的震荡,导致收敛缓慢甚至完全无法收敛。这种震荡往往源于不同参数梯度量级的巨大差异。今天…

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

从“冰”到“火”:Softmax温度系数T如何改变模型认知世界的粒度?

Softmax温度系数T:模型认知世界的“显微镜”与“广角镜”想象一下,当你用显微镜观察细胞时,每个细节都清晰锐利;而当你切换到广角镜头拍摄风景时,视野变得开阔但细节模糊。在机器学习的世界里,Softmax温度系…

作者头像 李华
网站建设 2026/6/5 2:44:56

Bobst 704-1108-01输入输出模块

Bobst 704-1108-01输入输出模块是Bobst设备控制系统与现场信号之间的桥梁,负责采集传感器信号并输出执行指令,是自动化逻辑闭环的关键环节。产品特点采用光电隔离设计,有效隔离高低压信号专为Bobst 704-1108-01信号架构匹配每路通道均配有独立…

作者头像 李华
网站建设 2026/6/5 2:43:28

彻底移除Windows Defender:释放系统性能的终极指南

彻底移除Windows Defender:释放系统性能的终极指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/win…

作者头像 李华