高云FPGA – 远程升级原理

目录
1.1 简介
1.2 高云fpga升级原理
1.3 比特流加载测试
1.4 多bit流启动功能实现远程升级
1.5 逻辑SPI读写flash

1.1 简介
在嵌入式设备远程维护的背景下,实现FPGA固件的安全、可靠升级成为关键需求。在近期项目中,我们成功实施了高云FPGA的远程升级方案。本文旨在梳理和分享其核心的升级原理,希望能为有类似需求的开发者提供一份实用的参考。
本文章主要介绍以下三方面内容,高云fpga升级原理,比特流加载测试,逻辑SPI读写flash。

1.2 高云fpga升级原理

在这里插入图片描述

上图是高云fpga升级流程示意图。
上图展示了高云FPGA的远程升级流程。该方案支持多比特流启动,系统可从两个用户比特流(Multiboot Bitstream 1 和 2)中选择一个运行。其核心优势在于安全冗余机制:当任一用户比特流加载或运行失败时,FPGA将自动回退至绝对可靠的“黄金比特流”,确保设备始终能恢复至可工作的基础状态。

1.3 比特流加载测试
根据高云fpga升级流程。我可以做一个最简单的测试,就是通过高云软件将Multoboot_Bitstream1下载到flash的0地址,将Golden Bitstream下载到flash的Golden_Address,这样fpga上电会运行Multoboot_Bitstream1。当我人为破坏掉Multoboot_Bitstream1(或者擦除掉Multoboot_Bitstream1),再次上电就会发现fpga会运行Golden Bitstream,通过这种方式可以验证高云fpga的bit流加载功能。例如我的Multoboot_Bitstream1是update_led。Golden Bitstream的bit流是golden_led, Golden_Address为0X800000。

在这里插入图片描述


在这里插入图片描述

Goden Bitstream这里有一个坑,在高云fpga中,Golden Address的位置是有默认值的,在下载程序的这个位置可以读到Golden Address的地址 。

点击Read可以读到当前Golden Address的默认地址,这个地址的每一位只能把0写成1, 不能由1变成0。因此这个地址只能改的比默认值更大。fpga出厂时把这个值设置到了0X800000,的位置,(这个地址刚好就是8M的flash), 因此使用8M的flash就将golden Bitstream下载到Golden_Address这个位置,我也是将8M flash换成16M的才测试成功。

在这里插入图片描述


1.4 多bit流启动功能实现远程升级
由于我使用的spi flash是8M, 无法使用golden Bitstream。这种情况下也可以使用高云fpga 的多bit流启动功能实现升级的功能。
根据高云fpga的升级原理,可以将Multoboot_Bitstream1作为稳定的bit流,在Multoboot_Bitstream1中启动Multoboot_Bitstream2。这种情况需要在Multoboot_Bitstream1中配置Multoboot_Bitstream2的加载地址。并且将Multoboot_Bitstream2下载到Multoboot_Bitstream1配置的地址的位置。
例如将Multoboot_Bitstream2的启动地址设置为0X400000。需要在Multoboot_Bitstream1的配置页面做如下配置后再次编译。

更改Multoboot_Bitstream1的地址配置后, 重新编译, 将Multoboot_Bitstream1下载至flash的0X000000地址(fpga上电默认从0X000000地址启动), 将将Multoboot_Bitstream2下载至0X400000。在Multoboot_Bitstream1中发送Reboot指令便可以跳转到Multoboot_Bitstream2。
那么什么是Reboot指令呢?
有2中方法
(1) 外部拉低Reconfig_n引脚。
(2) 通过jtag模拟master SPI时序发送重配置指令。

在这里插入图片描述


第二种模拟jtag方式有点复杂, 不过后来测试发现,Reconfig_n可以配置为输出,使用内部逻辑可以将 Reconfig_n拉低,这样做就简单多了。这样只需要在Multoboot_Bitstream1中拉低Reconfig_n就可以跳转到Multoboot_Bitstream2了。
但是使用这种方式做远程升级功能会有个问题,如果Multoboot_Bitstream2有问题的话fpga就会死机(如果没有golden_ Bitstream),不会自动跳转到Multoboot_Bitstream1。这样就需要在外部做开关或者由单片机控制选择是否Multoboot_Bitstream1启动后直接跳转到Multoboot_Bitstream2。

1.5 逻辑SPI读写flash
上一章验证了高云FPGA 的固件加载功能。这里介绍下高云fpga如何操作spi flash,在逻辑中调用flash的spi引脚,在Place & Route过程中会报如下错误。

在这里插入图片描述


这是因为程序复用了fpga芯片的专用功能引脚,需要在高云软件中配置复用这些引脚功能。fpga即可通过逻辑操作flash。

在这里插入图片描述


在这里插入图片描述


此后,系统便可基于已建立的用户协议和SPI通信接口,对Flash中的比特流进行更新,从而实现固件升级。

Read more

用闲置Mac Mini部署OpenClaw(moltbot)实现你的专属金融AI分析师

用闲置Mac Mini部署OpenClaw(moltbot)实现你的专属金融AI分析师

在数字时代,每个人都需要一个24小时在线的智能工作伙伴。如果你恰好有一台闲置的Mac Mini,只需几个小时,就能将它变身为一个具备专业金融分析能力的AI助手。本文将手把手带你完成整个部署过程,让你拥有一个能对话、能分析、能监控的私人数字员工。 一、为什么选择Mac Mini+OpenClaw? 核心优势对比 传统方式Mac Mini+OpenClaw方案需要购买云服务器,持续付费利用闲置硬件,零额外硬件成本数据存储在第三方平台数据完全私有,存储在本地功能固定,难以定制可通过技能商店无限扩展功能需要专业技术维护一次性部署,长期稳定运行 特别是对于金融从业者、投资者以及对市场信息敏感的用户,这个方案能提供: * 7×24小时市场监控与预警 * 自然语言驱动的专业分析 * 完全私有的数据环境 * 可扩展的金融工具集成 二、完整部署流程图 graph A[开始部署] --> B{选择设备方案}; B --> C[闲置Mac Mini]; B --> D[

Skill 构建指南:从零打造 AI 智能体扩展包

Skill 构建指南:从零打造 AI 智能体扩展包 引言 在人工智能时代,如何让智能体具备更强的专业能力和更丰富的工作流程?答案就是 Skill——一种为智能体设计的能力扩展包。本文将详细介绍如何从零开始构建符合规范的 Skill,让你的创意变成可分发的工具。 什么是 Skill? 核心定位 Skill 是被智能体加载和执行的能力扩展包,而非独立运行的应用程序。 执行模式 * Skill 在智能体的会话上下文中被动态加载 * 智能体读取 SKILL.md 的指导,调用 scripts/ 中的脚本,参考 references/ 中的文档 * Skill 的所有交互都通过智能体与用户的对话完成 Skill 提供的能力 * ✅ 专门工作流程(多步骤程序与条件逻辑) * ✅ 工具集成(文件格式与 API 的使用方式) * ✅ 领域专家知识(公司或系统特有的架构与逻辑) * ✅ 打包资源(脚本、参考、资产) Skill

手机也能跑大模型?QNN框架实战:从零部署LLaMA-7B到Android的完整避坑指南

手机也能跑大模型?QNN框架实战:从零部署LLaMA-7B到Android的完整避坑指南 最近在跟几个做移动端AI应用的朋友聊天,大家普遍有个痛点:现在大模型这么火,但一提到在手机上本地运行,第一反应就是“不可能”——内存不够、算力太弱、延迟太高。这让我想起几年前做移动端图像识别,也是从“这玩意儿能在手机上跑?”的质疑开始的。现在,随着端侧推理框架的成熟,特别是像QNN(Qualcomm Neural Network SDK)这类专门为移动和边缘设备优化的工具链出现,让手机本地运行一个7B甚至13B参数的大语言模型,已经从“技术演示”变成了“工程可实现”的目标。 这篇文章,我想从一个移动端开发者的实际视角出发,抛开那些泛泛而谈的API介绍,聚焦于一个核心问题:如何把一个像LLaMA-7B这样的“大家伙”,真正塞进一部普通的Android手机里,并且让它能流畅地跟你对话? 这个过程远不止是调用几个接口那么简单,你会遇到模型裁剪、内存峰值管理、Vulkan加速适配、量化精度权衡等一系列具体而微的“坑”。我会结合自己最近一次将LLaMA-7B-INT8模型部署到小米13上的完整实战记录,