【SoC FPGA】HPS启动过程

Intel SOC FPGA启动流程 SOC FOGA 阅读详情

SoC HPS启动流程

HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 2 个阶段软件。预加载器如果找到下一个阶段软件,那么对其执行。预加载器和接下来的引导阶段 ( 如果存在 )统称为用户软件。用户软件位于 HPS 的外部并且由用户提供。引导 ROM 代码仅知道预加载器,但不知道接下来任何可能存在的引导阶段。

当处理器从复位(比如上电)释放并且CPU执行内部引导ROM(Boot ROM)中的复位异常处理代码时(通过指定复位向量指定Boot ROM区域实现自动执行Boot ROM),HPS开始进行引导;当引导ROM(Boot ROM)中的代码跳到引导软件的下一个阶段时,引导程序结束。引导软件的下一个阶段被称为预加载器,预加载器可以定制并且通常存储在HPS外部的基于闪存的非易失性存储器。
图1 典型引导流程
处理器可以从以下资源进行引导:

  • NAND闪存
  • SD/MMC闪存
  • Quad SPI闪存
  • FPGA内核逻辑

Boot ROM

Boot ROM是HPS内核上一段ROM中固化的可执行程序,作用是系统复位之后,执行引导preloader并且将CPU使用权交给preloader进行后续工作的过程。
Boot ROM完成的具体工作还有:

  • 使能指令缓存,branch predictor,浮点单元,NEON 向量单元
  • 设定看门狗定时器,Boot ROM保留适用
  • 根据CLKSEL设定配置MainPLL和外设PLL
  • 根据BOOTSEL设定配置I/O引脚的复用(此处只是完成了QSPI or SPI Flash or SD/MMC controller 的引脚的复用,更多的引脚的复用需要根据preloader才能够完成设定)
  • 初始化FLASH Controller 到默认设置

图2 Boot ROM执行过程
Boot ROM引导的preloader来源分为3类:

  1. 片上RAM热启动(对应图2框图①)
    如果之前执行过一次preloader,preloader会留在on-chip RAM中,按下热复位按键后,会首先选择从on-chip RAM启动,此过程具有最高优先级,但是从on-chip RAM 启动时会对遗留的preloader代码进行CRC校验(具体是否校验用户可以通过warmramgrp配置决定),校验成功才会执行。这样做防止了用户对on-chip RAM里的内容进行更改!如校验失败,会选择从Flash中启动preloader(对应图2框图③)。
  2. 从FPGA部分冷启动(对应图2框图②)
    此方式具有第二优先级,如果用户设定了bootsel从FPGA启动,则会等待FPGA配置成功(通过FPGA manager获取FPGA的状态),HPS会通过 HPS-to-FPGA bridge执行位于 0xC0000000(相对于HPS-to-FPGAbridge偏移地址为0)的memory中的指令。
  3. 从FLASH存储器冷启动(对应图2框图④)
    如果在找不到preloader的话,则会检验FPGA处的回调镜像(callback image),等待复位。对应图2框图⑤、⑥。
    说明:
    (1)只有冷启动才会选择从FPGA 引导
    (2)不论热启动还是FPGA冷启动,如不成功都会进入到了红色框的QSPI启动中
    (3)图2框图②中的yes 和 no 由bootsel 决定,图2框图③、④中最后具体是使用哪个FLASH存储器也由bootsel管脚决定。
    补充:
    (1)以上的冷、热分别表示上电时和已上电。
    (2)从断电状态到上电自动产生的复位成为冷复位,冷复位用英文表示Restart。已经通电的情况下给一个复位信号称为热复位,热复位用英文表示Reset。
    (3)热启动和冷启动区别:从断电到上电启动成为冷启动;上电的状态下重启系统成为热启动。
    (4)热复位和热启动区别:二者既有相同之处又有不同之处,不同在于热复位是复位相关存储器,热启动是重新启动相关设备。

Preloader

preloader(预加载器)的命名相对于BootLoader,其作用类似于PC主板上的BIOS,BIOS在系统启动之前控制着主板上的硬件设备,引导系统启动程序。preloader在HPS中完成的功能主要有系统时钟配置、引脚的复用配置、存储器初始化以及引导用户软件,下一步用户软件可以直接是用户的baremental 程序,也可以不需要bootloader的系统程序,如ucos,或者是操作系统的引导程序,如u-boot(开源引导加载器)。

预加载器被允许从 HPS 可用的任何器件加载下一个阶段引导软件。典型源头包括含有预加载器的同一闪存器件,一个不同的闪存器件或一个如 EMAC 的通信接口。

引导加载器:引导加载器加载操作系统并且将软件控制传递到操作系统。

HPS启动过程中三大典型用户软件架构:
(1)preloader+baremental code
(2)preloader+无bootloader的操作系统(如ucos)+用户定义软件
(3)preloader+bootloader code(如u-boot)+操作系统(如linux)+用户定义软件

preloader具体完成的工作:

  • 初始化SDRAM接口
  • 配置 remap 寄存器,把on-chip RAM 映射至地址0x0,异常会被preloader处理
  • on-chip RAM 可以被读写,初始地址从0x0对齐
  • 通过scan manager配置HPS I/O
  • 通过system manager配置引脚复用
  • 通过clock manager配置HPS时钟
  • 初始化包含了下一阶段启动代码的FLASH控制器(NAND, SD/MMC, or quad SPI)
  • 启动下一阶段或者将用户代码引导入SDRAM,并把CPU控制权交至下一段代码

Boot Loader

Boot loader(系统引导程序),操作系统内核运行之前运行的一段程序。它首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针等;然后把操作系统内核从flash区拷贝带ram区,并跳转到内核的入口,将系统的控制权交给操作系统,从此系统的运行和Boot loader再无任何关系。

BootLoader启动方式:

大多数BootLoader都有两种操作模式:启动加载模式和下载模式,BootLoader的组最终目的都是启动内核。

1.启动加载模式(boot loading)
上电后,BootLoader从板子的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户介入。这种模式是BootLoader的正常工作模式,产品发布时候,BootLoader就工作在这种模式下。

2.下载模式(down loading)
这种模式下,开发人员使用各种命令,通过串口连接或者网络连接从主机上下载文件,将他们直接放在内存运行或者烧入flash类固态存储设备中。以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。

参考文章:
https://blog.youkuaiyun.com/qq_51118175/article/details/122052285
http://m.eeworld.com.cn/bbs_thread-454675-1-1.html

SoC FPGA 开发流程 阅读详情

相关推荐

Agilex 5 SoC FPGA开发:基于GHRD打通FPGA到HPS中断链路完整实操

在SoC FPGA嵌入式系统设计中,CPU与FPGA协同工作离不开高效的中断机制,而FPGA侧产生的事件如何准确送达HPS处理器的GIC中断控制器,是许多开发者绕不开的工程问题。理解FPGA-to-HPS中断路由原理,掌握从硬件配置到软件适配的完整链路,是提升系统实时性和可靠性的关键技术能力。该能力广泛应用于工业控制、边缘计算、高速数据采集等场景中,尤其在需要软硬件协同处理的异构计算平台中更为关键。基于Intel官方的GHRD(黄金硬件参考设计)工程进行修改,可以借助已验证的时钟、存储与启动路径,将开发重点

weixin_29163797的博客 223

SOC FPGA之HPS模型设计(一)

建立HPS硬件模型有两种方式,一种是在GHRD中添加或修改,另外一种是从0开始搭建HPS,本文从0开始搭建一个HPS硬件平台

STATEABC的博客 3733

DE1-SoC实战指南:从Qsys到Preloader的SoC FPGA开发全流程解析

本文详细解析了基于DE1-SoC开发板的SoC FPGA全流程开发,从硬件系统构建到软件引导与驱动。核心内容包括使用Qsys(Platform Designer)搭建片上系统,生成并配置关键的Preloader与设备树,以及最终在Linux环境下通过内存映射或内核驱动控制FPGA外设的实战方法。指南旨在帮助开发者高效整合FPGA与ARM处理器,实现软硬件协同设计。

weixin_29214199的博客 350

FPGA中的HPS

使用轻量级HPS-to-FPGA桥接器连接需要由HPS控制的IP(轻量级HPS到FPGA桥接器允许HPS中的主设备访问SoC器件的FPGA部分中的内存映射控制的从端口。 通常,只有HPS内部的MPU访问此桥接器才能执行对FPGA中外设的控制和状态寄存器访问。) 不要将轻量级HPS-to-FPGA桥用于FPGA存储器。 而是将HPS-to-FPGA桥用于存储器。HPS-to-FPGA桥接器旨在...

whocarea的博客 4785

SoC FPGA中断通路配置:在Platform Designer中连接FPGA-to-HPS中断

中断是嵌入式系统中CPU与外部事件交互的核心机制。在SoC FPGA平台上,FPGA逻辑产生的中断信号需要经过硬件连线进入ARM处理器集成的GIC中断控制器,再由Linux内核映射为IRQ号,驱动才能通过request_irq正确响应。然而很多开发者在调试时只关注驱动代码,却忽略了Quartus工程中FPGA-to-HPS中断接口的使能与连接,导致中断链路在物理层就断开了。本文以Agilex 5 SoC FPGA的官方GHRD工程为基线,讲解如何在Platform Designer中打开FPGA-to-HP

weixin_29174141的博客 130

DE1-SoC异构SoC开发实战:从Cyclone V架构到HPS与FPGA协同设计

FPGA与ARM异构SoC将硬核处理器与可编程逻辑集成于单芯片,通过高带宽互联实现软硬件协同。其原理是HPS运行操作系统,FPGA处理定制逻辑,借助桥接接口共享数据。技术价值在于兼顾灵活性与性能,适用于嵌入式视觉、工业控制等场景。以DE1-SoC为例,基于Cyclone V SoC芯片,开发者需掌握配置模式、时钟约束、System Builder生成引脚,并实现HPS通过轻量桥控制FPGA外设,最终固化到EPCS128。

weixin_29172201的博客 152

关于HPS和FPGA之间的桥接学习笔记(一)

关于HPS和FPGA之间的桥接学习笔记(一) 为了实现FPGA和HPS之间的存储器共享和数据传输,Altera SoC FPGA提供了两种方式用于FPGA和HPS通信。分别是FPGA to SDRAM和AXI bridge。 FPGA to SDRAM接口是HPS内部的SDRAM控制器提供给FPGA访问HPS内存的接口,AXI bridge是FPGA和HPS之间数据交互的接口,包括f2h、...

Clara_D的博客 5795

DE1-SoC 开发实战:从硬件原理图到 HPS-FPGA 异构配置

在嵌入式系统开发中,FPGA 与 SoC 的异构架构正成为高性能计算的关键。其核心原理在于通过 AXI 总线实现处理器与可编程逻辑的协同,从而提升系统灵活性与带宽。技术价值体现在硬件加速与软件控制的深度融合,广泛应用于图像采集、视频通路等场景。掌握存储器映射与寄存器配置是基础,而引脚约束与跨时钟域处理则确保稳定运行。本文以 DE1-SoC 为例,深入解析硬件原理图与开发手册,助你避开常见陷阱,高效实现 HPS-FPGA 协同设计。

weixin_29174013的博客 262

HPS SoC和FPGA联合使用例程

本教程演示了如何使用HPS/ARM与FPGA进行通信。我们将为DE10标准开发板介绍如何根据官方的DE10_Standard_GHRD工程开发出自己的My_GRHD工程。之后,我们会在My_GHRD工程上运行我们自己改造过后的HPS_FPGA_LED应用程序。该应用程序会控制连接到DE10标准开发板上FPGA部分的A的10个LED灯闪烁。其中,LEDR0将会通过闪烁模拟板子的心跳,LEDR1-8将会按照一定频率进行左移右移循环闪烁60次,LEDR9将会在LEDR1-8的每一次循环后闪烁一次。例程中HPS通过

sking的博客 4332

FPGA和HPS同时控制某一个输入或输出

de1-soc上FPGA和HPS可以通信,FPGA的外设可以由FPGA自己控制,而HPS也可以通过AXI bridge控制FPGA的外设。soc中如果让FPGA和HPS同时控制某一个输入或输出会不会出现矛盾?

SAP公司间采购后台配置及前台操作详解

公司间采购后台配置及前台操作详解 SAP 实施中公司间交易几乎每个项目都会有此业务需求,比如内地很多公司都会在香港设置贸易型子公司。通过香港公司接单,然后转内地公司生产,或内地公司通过香港公司采购进口原材料,这些业务必然会涉及到公司间交易,下面我将详细说明下SAP是如何实现这种业务场景的,供大家参考。 配置前必须前台先创建公司间供应商主数据和客户主数据 1. 创建相应的客户主数据 功能说明 公司间...

weixin_40672823的博客 1万+

基于Cyclone5 SoC的工业控制器开发实战:从设计到量产

SoC(片上系统)将ARM处理器与FPGA逻辑集成在单芯片内,通过片内高速总线互联,解决了传统多芯片方案中处理器与逻辑间通信延迟高、数据搬运开销大的问题。其核心价值在于同时提供Linux软件生态和可定制硬件逻辑,适用于EtherCAT从站、高精度运动控制等对实时性有严苛要求的工业控制场景。基于Cyclone5 SoC的量产实践表明,从方案选型、电源时序、DDR布线到U-Boot定制与设备树适配,每个环节都决定产品稳定性。本文以实际项目为主线,分享软硬件协同设计、启动优化及量产测试的踩坑经验,为正在选型SoC

weixin_31887307的博客 170

ATR2660:卫星导航高增益低噪声放大器芯片数据手册

中国BDS(北斗卫星导航系统),美国的GPS,俄罗斯的GLONASS和欧盟的GALILEO导航系统应用而专门设计。芯片支持3.3V至5V宽电源供电。采用2级放大器的结构设计,具有28dB高增益和0.85dB的低噪声系数。支持BDS、GPS、GALILEO、GLONASS等L。典型功率增益:30dB@5V;典型输入P1dB:-18dBm@3.3V;典型工作电流:12.7mA@3.3V;宽供电电压范围:3.3V~5V;典型噪声系数:0.85dB;频段的多个卫星导航系统;ATR2660是一颗。

YHPsophie的博客 561

【SoC FPGA学习】十一、基于 Linux 应用程序的 HPS 在线配置 FPGA

在众多的嵌入式系统应用中, 有一类应用可能需要根据不同的应用场景,动态的更改 FPGA 内部的逻辑设计, 以适配不同的工作环境。 例如在一个数据采集系统中,连接不同型号的模拟数据采集卡, 其所需要的 FPGA 接口逻辑以及内部的数据变换处理逻辑都有可能不同。不同性能的 ADC 芯片其所能工作的采样率不一样, 即所需的接口时钟频率不一样,而在 FPGA 中针对高速时钟信号希望动态修改频率,传统的方案只能使用多路时钟切换电路, 或者使用PLL 动态重配置方案。 而基于 SoC FPGA 的在系统重配置 FPGA

悟已往之不谏 知来者之可追 3644

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3007

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3007

SOC FPGA之HPS模型设计(二)

Quartus工程经过全编译后会产生Handoff文件夹、SOPCINFO文件、SVD文件,通过信息交换文件Handoff文件生成Preloader镜像文件,通过.sopcinfo文件生成设备树

STATEABC的博客 1548

5. SAP UI5 视图控制器(Controller)初探

本教程的前一个步骤也就是第四个步骤,我们了解了 SAP UI5 XML 视图的使用方法。在该步骤里,我们在 XML 视图里声明了一个 Text 控件实例,该控件位于 sap.m 这个命名空间内。 本步骤会继续接触 SAP UI5 MVC 框架中三大基石的另一块:C - Controller,即控制器。 先看看本步骤完成之后,我们得到的 SAP UI5 应用能实现一个什么样的效果。 访问如下 url: http://localhost:8080/webapp/index.html 能看到一个 Say Hell

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4595

【 Intel/Altera FPGA技术实战 】Stratix 10 SOC 系统 Boot 概述(五)

摘要:本文详细介绍了Stratix 10 SoC两种启动模式及其系统架构的实现。针对JTAG加载时出现的SOF文件不完整问题,指出需要将SOF文件与HPS FSBL文件打包生成HPS SOF文件。文章对比分析了不同启动模式的6阶段流程、4种系统架构及其适用场景,建议优先选择HPS Boot First模式,并推荐采用Boo系统架构D(SDM侧QSPI Flash + HPS侧SD/eMMC/NAND)以获得最佳兼容性。最后强调需根据所选架构生成对应启动文件并正确部署。

Grit.tl的博客 1383

【论文解读--Xdog】新型电驱式四足机器人研制与测试

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人体型大小和驱动方式的比较二、四足机器人设计一些重要的结论三、系统控制框架四、系统硬件框架五、力位混合控制(阻抗控制)六、侧向平衡控制(和VMC如出一辙)七、电机驱动系统研制(FOC磁场定向控制)总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对新型电驱式四足机器人研制与测试做个简单的介绍,具体内容后续再更,其他模块可以参

qq_35635374的博客 3726

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

由preloader从QSPI配置CYCLONE V FPGA/CycloneV_HPS从QSPI Flash启动实现过程

cyclone v fpga可以由preloader从QSPI读取,并通过FPGAMANAGER进行配置。FPGA文件需要使用rbf fppX16格式,可以使用压缩格式。这种配置方式可以使preloader提前将FPGA配置好,在启动vxworks系统前,使自己开发FPGA部分提前进入配置,方便软件调试自己开发的FPGA模块。我的QSPI大小为32M,主要用于存放preloader,param,v...

爱她就要努力 1773

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DE1-SoC软件实验(三)—— HPS控制FPGA端的LED,实现流水灯的效果

我们将quartus生成的sof文件下载到开发板,采用串口终端调试软件putty 以实现在开发板上运行Linux系统,并通过命令找到我们所需要的可执行文件,修改权限并执行,至此,即可在开发板上看到实验效果。

H19981118的博客 3050

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【教程】Agilex 5 SoC 的两种启动模式的开发演示(一)(FPGA Configuration First)

本文介绍了Agilex5 SoC FPGA的两种启动模式:FPGA优先配置模式(FPGA Configuration First)和HPS优先启动模式(HPS Boot First)。前者先完成FPGA配置再启动HPS,后者则先启动HPS再配置FPGA。文章详细对比了两种模式的特点和适用场景,并提供了在DE25-Nano开发板上的具体实现步骤,包括环境配置、固件烧录和启动验证流程。通过实际演示验证了FPGA优先模式下Linux系统启动时FPGA已就绪的工作状态。

weixin_47841246的博客 262

【SoC FPGA学习】八、从零开始体验一把为 HPS 添加外设,以 UART 外设为例

在本系列教程中 《【SoC FPGA学习】二、SoC FPGA硬件初探,基础扫盲 》一节中的2.5小结简单介绍了一下 SOC FPGA添加timer外设的方法,但是此外设并没有实际的引出脚,并且在那篇文章的介绍中也并没有实际的跑进来timer,这一节我们就拿UART外设为例,从来开始了解添加 SOC FPGA 外设并使用起来的全部流程! 本节将通过完全手把手的形式介绍如何修改AC501_SoC_GHRD工程文件,通过在 Platform Designer(原 Qsys)加一个 Altera UART 外设

悟已往之不谏 知来者之可追 5762
上一篇: 【C语言】结构体内存对齐机制详解
下一篇: 【FPGA】Quartus18.1打包封装网表文件(.qxp)详细教程
白码王子小张
博客等级 码龄7年 6665粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值