来源:嵌入式在线 作者:山城棒棒儿军 发布时间:2009-09-22 12:29:31

Nios Development Board Reference Manual, Stratix II Edition

在使用Nios II SDK Shell试运行./restore_my_flash时,发现restore_my_flash会区分目录名的大小写,因此使用Nios II SDKShell时最好注意大小写一致。

  restore_my_flash.pl为perl脚本,可以直接修改后直接执行。

  restore_my_flash不能正常取得命令行参数,但这不影响恢复出厂设置的操作,因为restore_my_flash可以不依靠命令行参数来 执行。

  最好不要移动NiosII的安装目录,例如restore_my_flash就会从目录名中提取内容生成需要的文件名。

  恢复出厂设置需 要.sof和.flash两个文件,估计.sof用于生成最小的nios系统,以便将.flash文件下载到Flash中。 (restore_my_flash提示使用J24 JTAG连接器,该连接器是用于配置StratixII器件的。)


Creating Multiprocessor NiosII Systems Tutorial

在standard设计的基础上修改了Nios II系统,又添加了两个Nios II处理器及各自的定时器、共享互斥锁、消息缓冲区。编译、运行和调试了hello_world_multi程序。

  SOPC Builder中设置的NiosII的Reset和Exception地址很重要;

  QuartusII生成的编程文件中包含有NiosII处理器的 复位地址;

  NiosII IDE的编译会生成绝对地址的代码和数据;

  NiosII IDE通过NiosII处理器中的jtag_debug_module重定向程序的执行地址;

  上电或复位后,NiosII处理器从复位地址(通常指 向Flash)处执行Boot Loader,将程序拷贝到Ram中并在Ram中执行;

  Exception地址确定了程序拷贝到Ram中的位置,Exception地址的低位总是 0x20,NiosII处理器跳转到Ram执行时先执行低位地址为0x00的指令(用于初始化指令cache),之后执行低位地址为0x20处的系统启动代码。

  Nios II多处理器设计的注意点:

  不支持SMP(对称多处理),只支持不对称的(每个处理器执行不同的程序);

  处理器之间可以不共享资源;

  同一程序存储器中的各处理器的代码空间不能重合(通过Reset和Exception地址实现);

  共享数据存储器最好用硬件共享互斥锁 结合软件操作的方式来实现,不支持纯硬件的共享方式(如果软件不使用硬件互斥锁,仍然会有访问冲突),纯软件的共享方式有使用限制并且较复杂;

  软件 共享互斥锁只适用于同一处理器的不同进程之间共享资源;

  Nios II HAL library不支持共享外设(涉及中断处理、外设输入数据的处理等),Altera建议由固定的处理器管理相应的外设,其他处理器要使用该外设可以通过 消息缓冲区的方式;

  不同于单处理器设计,多处理器设计一定要明确规定每个组件的总线连接点;

  只要由不同的处理器访问,两个组件可以有相同的地址;

  由设计人员保证各处理器使用的代码空间是足够的、不发生覆盖的;

  多处理器的软件的运行、调试可以一起或分别启动、终止,NiosII 5.0暂不支持一起暂停、再继续,“一起”不是“同时”。

Nios II Flash Programmer User Guide

Quartus II的Programmer只支持FPGA和配置器件;

  Flash Programmer只支持CFI接口的Flash或EPCS配置器件,但可烧入配置文件、软件代码和任意数据;

  使用Flash Programmer需要生成Target Board及生成Flash Programmer可编程逻辑设计,并在实际项目SOPC Builder流程中指定该Target Board;

  Boot-Copier Program是Nios II IDE自带的,当软件代码位于Flash或EPCS中时由Flash Programmer自行使用,不同的是对Flash而言Boot-Copier Program放在Flash中,对EPCS而言Boot-Copier Program放在EPCS serial flash controller包含的on-chip ROM中;

  上电或复位时,Nios II从Boot-Copier Program开始执行(不论是Flash或EPCS),这要求SOPC Builder流程中指定复位地址为Flash或EPCS serial flash controller。


Simulating Nios II Embedded Processor Designs

仿真NiosII设计包括三种方式:“NiosII IDE Debugger + Signal Tap II + 物理板”的软硬件联调方式;“NiosII IDE Debugger +指令集仿真器ISS”的软件调试方式(ISS可对部分组件建模);使用ModelSim-Altera进行的RTL级的功能仿真方式(可以调试处理器及其 外设之间的交互情况)。本文针对RTL级仿真方式。

  存储器的初始化:含有软件代码的存储器都应被初始化,不论是片上还是片外存储器;软件代码相关的存储器初始化文件由NiosII IDE编译软件时生成。

  JTAG UART和PIO在SOPC Builder中都可设置仿真选项,ModelSim-Altera还可根据仿真选项调出UART交互终端窗口。

  需要在SOPC Builder中设置ModelSim的路径和使能Simulation,之后SOPC Builder会生成仿真用的ModelSim项目文件、ModelSim宏命令、UART等组件的初始化文件。

  需要在Nios II IDE中为System Library属性打开“ModelSim only,no hardware support”开关,这样在编译软件时才会生成代码相关的存储器初始化文件,但生成的代码不含启动代码(指令和数据Cache没有初始化、BSS段也不清除),以便加速仿真。因此,如果要下载代码到硬件板,必须关掉“ModelSim only,no hardware support”开关并且重编译,以便生成完整的代码。

  在Nios II IDE中以NiosII ModelSim方式运行(需设置ModelSim的路径),将使ModelSim编译setup_sim.do并接管后续的仿真运行工作。

  较重要的ModelSim宏(SOPC Builder生成):s、w、jtag_uart_drive。

  一定要从Nios II IDE运行ModelSim,jtag_uart_drive宏才能正常运行。其他仿真步骤都可单独使用ModelSim打开该项目,在执行完setup_sim.do后运行。

  应该可以在SOPC Builder生成TestBench文件后修改该文件,以便进行Nios II和片上其他逻辑的联合仿真。(因为是SOPC Builder生成的TestBench文件,并没有在Quartus II中生成,所以不一定是完整的片上设计的TestBench文件。)


NIOS和NIOS II都使用了Avalon总线,这是一种交换式架构的片内总线;

  该总线形式和PCI、ISA等板间互连总线的最大区别在于:主从设备之间有紧密耦合关系。Avalon总线架构中,由硬件设计人员通过SOPC Builder规定互连的主从设备(包括数据、控制信号、片选、地址的互连),不连接的设备之间是互相看不到的。

  每个Avalon主设备端有多路复用器,用来从多个从设备的数据总线中选择当前要访问的数据——这也是“交换”的含义所在。可见多路复用器的接口引 线相当多,这只能在连线资源丰富的FPGA内实现。所以说,Avalon总线架构是适用FPGA设计的。片外的交换式总线也有,但都是串行接口的,主要是 为了降低PCB布线难度,如:PCI Express、以太网等。由于,Avalon总线架构中所有设备没有实现全互连,也就不存在“全交换”。但即使这样,不同的主设备访问不同的从设备也是 可以同时的、并发的。

  每个Avalon从设备都有仲裁器,仲裁各主设备的访问,确保访问周期的完整性和正确性。我们可以认为访问周期是“原子”的,即不被其他主设备破坏的。

  软件对共享资源的访问,通常要求一个序列的多个访问不能被其他CPU打断,这不是“原子”级的访问周期设计能保证的,这也是SOPC Builder中提供了硬件共享互斥锁的由来。

  各CPU上运行的软件都可对某个硬件共享互斥锁进行SET和TEST操作,以争取对资源的占用能力。由于对硬件共享互斥锁的访问周期是“原子”,所以硬件共享互斥锁能保证多CPU设计中软件级别的共享资源互斥访问。

  NIOS II设计的灵活性是我感兴趣的主要原因。只要有足够的逻辑资源余量,NIOS II的设计是可以不断更新的,设计人员不用为自己的设计能力、CPU版本的升级担心,这放开了我们的“思维”约束。

工程师的NIOS II学习笔记(转)相关推荐

  1. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  2. Android工程师进阶34讲学习笔记

    最近发现一个技术提升的平台,很多课程对于技术提升都多有益处,很多是实际上的项目实战并对底层原理讲解透彻.前几个月已经学习完了<Android 工程师进阶 34 讲>,现在重学一遍并做些总结 ...

  3. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  4. 编程开发学习笔记之程序员如何用1年时间获得3年成长(图)

    2019独角兽企业重金招聘Python工程师标准>>> 编程开发学习笔记之程序员如何用1年时间获得3年成长(图) 前言 这世界存在这么一个银行,你一出生,就自动享有这家银行为你开设的 ...

  5. 【连载】【FPGA黑金开发板】NIOS II那些事儿--硬件开发(一)

     声明:本文为原创作品,版权归黑金动力社区(http://www.heijin.org)所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 前言 从今天开始,NIO ...

  6. [笔记].如何使用Nios II的中断:PIO中断与定时器中断

    引子 定时器中断,我以前在艾米电子论坛发帖讨论过:PIO中断我在博客里也讨论过,最近发现以前的总结有一点小错误.于是结合我最近玩触摸屏的一点点心得,写篇博文. 软硬件环境 硬件:艾米电子EP2C8核心 ...

  7. 网易微专业之《前端开发工程师》学习笔记(1)

    何为网易微专业? 微专业是由网易云课堂联合各领域知名专家,以就业为导向,精心打造的职业培训方案. 按要求完成学习,考试通过可获得专业认定证书,令你求职或加薪多一份独特优势. 一个微专业包含了多门必修课 ...

  8. 简单入门——深度学习笔记(Part II)

    更多深度文章,请关注:https://yq.aliyun.com/cloud 作者介绍:Deepak Shah Deepak Shah毕业于德克萨斯奥斯汀分校,徒步旅行爱好者,目前是深度学习\数据科学 ...

  9. (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇

    目录 一.网络层的定义 二.IPv4数据报 三.IPv4 (一)分类依据 (二)IP地址分类 (三)网络.主机号位数 (四)特殊IP地址 四.划分子网 五.子网掩码 (一)默认子网掩码 (二)VLSM ...

最新文章

  1. 制作OpenStack上使用的CentOS系统镜像
  2. 采样方法---吉布斯采样
  3. Android mediaRecorder框架简述(一)
  4. 【C++ Primer | 19】控制内存分配
  5. angularJs中的发送请求例子
  6. CSS里各种垂直水平居中方式的基础用法
  7. VBA-批量删除文本框内容(用类实现)
  8. c语言校车管理系统,交运智慧驾培管理系统
  9. 关于在WIN10中使用照片查看器的问题
  10. TusharePro快速入门
  11. 图解TCP/IP之半双工全双工通信
  12. git pull 报错 Your local changes would be overwritten by merge. Commit, stash or revert them to procee
  13. vue-devtools安装教程 附各种常见错误处理(图标不显示 图标显示控制台没用Vue选项卡)
  14. 小白推荐系统扫盲记——数据分析
  15. Codeforces Round #127 (Div. 1) B. Guess That Car! 扫描线
  16. 计算机链接手机网络游戏,怎么用手机玩Wegame电脑游戏 Wegame手机玩电脑游戏方法分享...
  17. Android11(30)/Android10(29)分区存储-存储访问框架(SAF)
  18. Android 自己收集的开源项目和文章集合
  19. 玩不死你校内农场种地助手
  20. UnityGUI系统之锚点与中心点

热门文章

  1. Linux里的21的理解
  2. 专访驭势科技吴甘沙:无人驾驶硝烟弥漫,“创造”才有未来|封面人物
  3. 【NOIP考前模拟赛】纯数学方法推导——旅行者问题
  4. firefox-Developer开发者站点——关于Object.create()新方法的介绍
  5. 【原创】erlang 模块之 epmd
  6. 某公司故障分析案例(实战案例)
  7. textarea里的回车和换行符与json里的回车和换行符
  8. JQuery中的API--操作DOM
  9. c语言作业查询,C语言作业3
  10. json java的set函数,JsonConfig的jsonConfig.setExcludes的用法