FLASH固化

学习Flash固化的方法,掌握NiosII应用程序固化到开发板上EPCS配置芯片中的方法。Flash固化可以实现开发板掉电后可以从EPCS配置芯片启动应用程序。

一、为什么要学习Flash固化

在上节课的《 流水灯》的训练中我们的操作是:

  1. 下载配置文件,配置文件的后缀名是 “.sof”,配置文件是在 Quartus Programmer 里下载。
  2. 下载执行文件,执行文件的后缀名是“.elf”,执行文件是下载到外部的SDRAM 里运行。

在之前的操作中,我们发现开发板断电之后,FPGA内部的配置文件和执行文件都会丢失,需要我们重新下载。所以我们要考虑如何将配置文件和执行文件固化到开发板上,每次上电后不用重新下载可以直接运行。

二、配置内核

  1. 新建文件夹,我们命名为“epcs_boot”
  2. 新建工程,保存路径就是我们新建的文件夹
  3. 在工程中,新建原理图
  4. 在原理图中,打开“platform”,建立Qsys系统,命名为kernel
  5. 修改时钟频率为100MHz
  6. 选择CPU:系统自带的nios
  7. 添加Sdram控制器,连接
    • 数据和指令控制
    • 外放wire接口
    • 连接时钟
  8. 添加sysid
    • 连接时钟
    • 连接控制
  9. 添加pio
    • 连接时钟
    • 连接数据管理
    • 外放接口
  10. 添加epcs flash,查找窗口输入epcs,找到"EPCS Serila Flash Controller", 选择后点击添加,属性保持默认设置。
    • 双击 epcs_flash_external,外放接口
    • 连接时钟
    • 连接数据端口
    • 连接命令端口
  11. 锁定Sdram的地址,System->Assign Bass Address,自动分配地址
  12. System->Create Global Reset Network,自动完成复位端口连接
  13. 在"IRQ"标签栏下点击"Avalon_Memory_Mapped_Salve"和 IRQ 的连接点就会为"epcs_flash"核添加一个中断号
  14. 修改NiosII的配置界面,配置复位向量(Reset Venctor)和异常向量(Exception Venctor),复位向量为epcs_flash,异常向量(Exception Venctor)为sdram.s1。
    • 复位向量修改为epcs_flash,就需要从flash中复位,读取程序
    • FPGA将执行程序从flash中拷贝到sdram,程序才可以正常执行,所以异常向量(Exception Venctor)依然选择sdram.s1
  15. 生产Qsys系统,点击"Generation"标签栏中 Generate HDL…按钮生成 Qsys 系统。

三、设置锁相环PLL

  1. 搜索“ALTPLL”ip核,输出文件的描述语言选择verilog HDL,锁相环命名PLL
  2. 输入时钟选择与开发板一致的时钟——50MHz
  3. 芯片的速度等级选择为8
  4. 设置输入和输出选项,均不选择
  5. 一直不做修改,选择Next
  6. 设置clk0的输出频率为100MHz
  7. 使能clk1的输出频率,输出频率为100MHz,时钟相移调节角度为-70~-120之间,一般写-75不会出错
  8. 一直不修改,选择Next
  9. 选择输出实例化模板文件

四、系统配置

  1. Assignments->Settings…,选择 Files,再点击右边的浏览按钮
  2. 找到kernel.qip 文件后打开
  3. 点击 Add 按钮
  4. 点击 OK 完成
  5. Assignments->Device…->Device and Pin Options…按钮
  6. 修改 Dual-Purpose Pins 为 Use as regular I/O
  7. 设置 Voltage 里的 I/O 电压为 3.3-V LVTTL,因为在开发板中的 IO 口使用的是3.3V 的电压。点击 OK 完成

五、设置硬件平台的连接关系

  1. 把锁相环和内核连接起来
  2. 添加输入输出接口
  3. 分配引脚
  4. 编译

六、编写执行程序

  1. 选择菜单 Tool->Nios II Software Build Tools for Eclipse,

    选择 epcs_boot 目录下的 software 目录

  2. 选择菜单 File->New->Nios II Application and BSP from Template

  3. 在 SOPC Informaction File name 栏中点击浏览按钮选择 kernel.sopcinfo 文件, 在 Project name 处输入项目名称 led_test,选择项目的模版 hello_world。

  4. 添加main文件夹,把hello_world.c的名字修改为main.c,并拖到main文件夹中

  5. 将上节课流水灯的程序代码复制到main.c中

  6. 选择Build Project,编译项目

  7. 在窗口中出现编译成功的信息,就好,如果有错误,先修改错误

  8. EPCS FLASH 固化

    • 下载配置文件“xxxx.sof”文件到FPGA中
    • Nios II->Flash Programer, 打开 Nios II Flash Programmer 界面
    • 选择 File->New…, 在 New Flash Programmer Settings File 对话框中的 SOPCInformation File name 这项选择项目目录下的 kernel.sopcinfo。
    • 点击 Nios II Flash Programmer 界面中的 Connections…按钮,弹出 Hardware Connections 的连接信息框。说明硬件连接正常,按 close 退回 Nios II Flash Programmer 界面。
    • 点击 Add…按钮添加 epcs_boot 目录下的output_files 目录下的“xxxx.sof”文件
    • 点击 Add…按钮继续添加 nois 的应用程序 led_test.elf 文件
    • 点击 Start 按钮开始烧写 EPCS FLASH
    • 通过短暂的 FLASH 擦除,编程,读取和校验的步骤,烧写完成
  9. 开发板重新上电,观察开发板是不是可以正常使用

SOPC教学笔记04——Flash固化相关推荐

  1. SOPC教学笔记01——绪论

    绪论 一.SOC和SOPC SOC CPU(内核):RISC V,ARM(Cotext.A)-- 硅基 自己根据需要去设计外设:通信(CAN.UART.IIC.SPI--).存储器--.ADC.DMA ...

  2. Linux实战教学笔记13:定时任务补充

    第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...

  3. Linux实战教学笔记13-定时任务补充

    第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...

  4. NIOS II程序Flash固化

    目录 NIOS II 程序flash固化 第一部分 EPCS flash固化 第二部分 CFI Flash程序固化 NIOS II 程序flash固化 这两天尝试着NIOS II程序固化,遇到很多问题 ...

  5. Linux实战教学笔记16:磁盘原理

    第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...

  6. 取得 Git 仓库 —— Git 学习笔记 04

    取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...

  7. SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】

    Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...

  8. Spring-学习笔记04【Spring的常用注解】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  9. MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

最新文章

  1. QQ验证码识别源代码(C#/NET1.1)
  2. 洛谷——P1102 A-B数对
  3. kettle读取json文件并读取数据_Labview打开Excel文件读取数据
  4. idea GsonFormat插件使用报错 StringIndexOutOfBoundsException: begin 0, end -1, length 9
  5. ElasticSearch重启之后shard未分配问题的解决
  6. python转义引号的作用_python传到前端的数据,双引号被转义的问题
  7. VirtualBox配置
  8. linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法
  9. C++解析(31):自定义内存管理(完)
  10. 复制和粘贴文本时剥离格式的5种方法(MacWindows)
  11. python 回溯法 子集树模板 系列 —— 17、找零问题
  12. 【裴礼文数学分析】例1.2.1
  13. loj10102 旅游航道
  14. python爬取虾米音乐_【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜...
  15. 算法学习 - 拼接成最大的数字
  16. ACM大量习题题库及建议培养计划
  17. 5G聚合路由器助力无人机监控盲区打好疫情阻击战
  18. sinon.js基础使用教程---单元测试
  19. 软件测试学习(基础篇)— —第5天:JS基础
  20. Vue3+TS使用element-plus 动态Icon图标

热门文章

  1. 宝塔连接服务器失败问题
  2. 华为设备web登录,安全连接失败问题解决办法
  3. pos机顾显java控制打印内容_Delphi下POS机控制钱箱,客显,打印机,小票打印
  4. 树莓派学习笔记——wiringPi简介、安装和管脚说明
  5. linux交互式进程初始化失败怎么办,登录进程初始化失败交互式登录进程初始化失败的解决办法...
  6. 《Activiti 深入BPM工作流》---如何创建ProcessEngine工作流引擎?
  7. linux ion 分配地址,Android ION内存分配
  8. 河师大拼团项目总结2.0
  9. 实体店经营的3步锁客裂变
  10. 计算机专业考研电路原理,2019电子信息工程考研方向_电路与系统专业解读