SOPC教学笔记04——Flash固化
FLASH固化
学习Flash固化的方法,掌握NiosII应用程序固化到开发板上EPCS配置芯片中的方法。Flash固化可以实现开发板掉电后可以从EPCS配置芯片启动应用程序。
一、为什么要学习Flash固化
在上节课的《 流水灯》的训练中我们的操作是:
- 下载配置文件,配置文件的后缀名是 “.sof”,配置文件是在 Quartus Programmer 里下载。
- 下载执行文件,执行文件的后缀名是“.elf”,执行文件是下载到外部的SDRAM 里运行。
在之前的操作中,我们发现开发板断电之后,FPGA内部的配置文件和执行文件都会丢失,需要我们重新下载。所以我们要考虑如何将配置文件和执行文件固化到开发板上,每次上电后不用重新下载可以直接运行。
二、配置内核
- 新建文件夹,我们命名为“epcs_boot”
- 新建工程,保存路径就是我们新建的文件夹
- 在工程中,新建原理图
- 在原理图中,打开“platform”,建立Qsys系统,命名为kernel
- 修改时钟频率为100MHz
- 选择CPU:系统自带的nios
- 添加Sdram控制器,连接
- 数据和指令控制
- 外放wire接口
- 连接时钟
- 添加sysid
- 连接时钟
- 连接控制
- 添加pio
- 连接时钟
- 连接数据管理
- 外放接口
- 添加epcs flash,查找窗口输入epcs,找到"EPCS Serila Flash Controller", 选择后点击添加,属性保持默认设置。
- 双击 epcs_flash_external,外放接口
- 连接时钟
- 连接数据端口
- 连接命令端口
- 锁定Sdram的地址,System->Assign Bass Address,自动分配地址
- System->Create Global Reset Network,自动完成复位端口连接
- 在"IRQ"标签栏下点击"Avalon_Memory_Mapped_Salve"和 IRQ 的连接点就会为"epcs_flash"核添加一个中断号
- 修改NiosII的配置界面,配置复位向量(Reset Venctor)和异常向量(Exception Venctor),复位向量为epcs_flash,异常向量(Exception Venctor)为sdram.s1。
- 复位向量修改为epcs_flash,就需要从flash中复位,读取程序
- FPGA将执行程序从flash中拷贝到sdram,程序才可以正常执行,所以异常向量(Exception Venctor)依然选择sdram.s1
- 生产Qsys系统,点击"Generation"标签栏中 Generate HDL…按钮生成 Qsys 系统。
三、设置锁相环PLL
- 搜索“ALTPLL”ip核,输出文件的描述语言选择verilog HDL,锁相环命名PLL
- 输入时钟选择与开发板一致的时钟——50MHz
- 芯片的速度等级选择为8
- 设置输入和输出选项,均不选择
- 一直不做修改,选择Next
- 设置clk0的输出频率为100MHz
- 使能clk1的输出频率,输出频率为100MHz,时钟相移调节角度为-70~-120之间,一般写-75不会出错
- 一直不修改,选择Next
- 选择输出实例化模板文件
四、系统配置
- Assignments->Settings…,选择 Files,再点击右边的浏览按钮
- 找到kernel.qip 文件后打开
- 点击 Add 按钮
- 点击 OK 完成
- Assignments->Device…->Device and Pin Options…按钮
- 修改 Dual-Purpose Pins 为 Use as regular I/O
- 设置 Voltage 里的 I/O 电压为 3.3-V LVTTL,因为在开发板中的 IO 口使用的是3.3V 的电压。点击 OK 完成
五、设置硬件平台的连接关系
- 把锁相环和内核连接起来
- 添加输入输出接口
- 分配引脚
- 编译
六、编写执行程序
选择菜单 Tool->Nios II Software Build Tools for Eclipse,
选择 epcs_boot 目录下的 software 目录
选择菜单 File->New->Nios II Application and BSP from Template
在 SOPC Informaction File name 栏中点击浏览按钮选择 kernel.sopcinfo 文件, 在 Project name 处输入项目名称 led_test,选择项目的模版 hello_world。
添加main文件夹,把hello_world.c的名字修改为main.c,并拖到main文件夹中
将上节课流水灯的程序代码复制到main.c中
选择Build Project,编译项目
在窗口中出现编译成功的信息,就好,如果有错误,先修改错误
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 擦除,编程,读取和校验的步骤,烧写完成
开发板重新上电,观察开发板是不是可以正常使用
SOPC教学笔记04——Flash固化相关推荐
- SOPC教学笔记01——绪论
绪论 一.SOC和SOPC SOC CPU(内核):RISC V,ARM(Cotext.A)-- 硅基 自己根据需要去设计外设:通信(CAN.UART.IIC.SPI--).存储器--.ADC.DMA ...
- Linux实战教学笔记13:定时任务补充
第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...
- Linux实战教学笔记13-定时任务补充
第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...
- NIOS II程序Flash固化
目录 NIOS II 程序flash固化 第一部分 EPCS flash固化 第二部分 CFI Flash程序固化 NIOS II 程序flash固化 这两天尝试着NIOS II程序固化,遇到很多问题 ...
- Linux实战教学笔记16:磁盘原理
第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...
- 取得 Git 仓库 —— Git 学习笔记 04
取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...
- SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】
Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...
- Spring-学习笔记04【Spring的常用注解】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
最新文章
- QQ验证码识别源代码(C#/NET1.1)
- 洛谷——P1102 A-B数对
- kettle读取json文件并读取数据_Labview打开Excel文件读取数据
- idea GsonFormat插件使用报错 StringIndexOutOfBoundsException: begin 0, end -1, length 9
- ElasticSearch重启之后shard未分配问题的解决
- python转义引号的作用_python传到前端的数据,双引号被转义的问题
- VirtualBox配置
- linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法
- C++解析(31):自定义内存管理(完)
- 复制和粘贴文本时剥离格式的5种方法(MacWindows)
- python 回溯法 子集树模板 系列 —— 17、找零问题
- 【裴礼文数学分析】例1.2.1
- loj10102 旅游航道
- python爬取虾米音乐_【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜...
- 算法学习 - 拼接成最大的数字
- ACM大量习题题库及建议培养计划
- 5G聚合路由器助力无人机监控盲区打好疫情阻击战
- sinon.js基础使用教程---单元测试
- 软件测试学习(基础篇)— —第5天:JS基础
- Vue3+TS使用element-plus 动态Icon图标
热门文章
- 宝塔连接服务器失败问题
- 华为设备web登录,安全连接失败问题解决办法
- pos机顾显java控制打印内容_Delphi下POS机控制钱箱,客显,打印机,小票打印
- 树莓派学习笔记——wiringPi简介、安装和管脚说明
- linux交互式进程初始化失败怎么办,登录进程初始化失败交互式登录进程初始化失败的解决办法...
- 《Activiti 深入BPM工作流》---如何创建ProcessEngine工作流引擎?
- linux ion 分配地址,Android ION内存分配
- 河师大拼团项目总结2.0
- 实体店经营的3步锁客裂变
- 计算机专业考研电路原理,2019电子信息工程考研方向_电路与系统专业解读