1 / 32

第 8 章 Nios II 系统高级开发技术

第 8 章 Nios II 系统高级开发技术. 主要内容. 本章是有关 SOPC 的深入设计, C2H 、定制用户逻辑外设和定制用户指令是使用 Nios II 嵌入式软核处理器的 SOPC 系统的重要特性,用户还可以通过 C2H 、定制用户逻辑外设和定制用户指令来实现各种应用要求。. 第 8 章 目录. 8.1 定制 Nios II 用户指令 8.2 定制基于 Avalon 的用户外设 8.3 C2H 编译器的使用. 8.1 .1 用户定制指令 对时间要求严格的算法可定制指令,提高性能 ( 如 :FFT) 可扩展 CPU 指令集。

Download Presentation

第 8 章 Nios II 系统高级开发技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 Nios II系统高级开发技术

  2. 主要内容 本章是有关SOPC的深入设计,C2H、定制用户逻辑外设和定制用户指令是使用Nios II嵌入式软核处理器的SOPC系统的重要特性,用户还可以通过C2H、定制用户逻辑外设和定制用户指令来实现各种应用要求。

  3. 第8章 目录 8.1 定制Nios II用户指令 8.2 定制基于Avalon的用户外设 8.3 C2H编译器的使用

  4. 8.1 .1 用户定制指令 • 对时间要求严格的算法可定制指令,提高性能(如:FFT) 可扩展CPU指令集。 • 软件中比较费时间的运算(比如浮点乘除法,循环迭代等),通 过定制指令由硬件来实现,加速运算速度 。 扩展接口用户指令的结构框图

  5. 8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 1. 组合逻辑; 2. 多周期; 3. 扩展的: 4. 内部寄存器文件; 5. 外部接口;

  6. 8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 组合逻辑指令结构框图 多周期指令结构框图

  7. 8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 扩展指令结构框图 带内部寄存器的乘加指令结构框图

  8. 8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 扩展接口用户指令的结构框图

  9. 8.1 定制Nios II用户指令 8.1.3 定制指令实现方式 定制指令支持多种设计文件,包括:Verilog HDL, VHDL, EDIF netlist file, Quartus II Block Design File (.bdf), 和Verilog Quartus Mapping File (.vqm)。 具体实现方法有: 1.导入HDL文件实现定制指令; 2.通过DSP Builder实现定制指令加速模块; 3.直接使用SOPC Builder中自带的定制指令。

  10. 8.1 定制Nios II用户指令 • 定制指令设计示例 在定制指令前,首先要正确的实现硬件逻辑功能,包括编写HDL文件和验证用户逻辑。 1.编写HDL文件 D:\altera\80\nios2eds\examples\verilog\c ustom_instruction_templates 2.验证用户逻辑功能 3.在SOPC Builder中添加HDL文件

  11. int main (void) __attribute__ ((weak, alias ("alt_main"))); #pragmano_custom_fmuls #pragmano_custom_fadds #pragmano_custom_fsubs #pragmano_custom_fdivs void delay (void) { float a, b, z; alt_u32 i; a = 2008.620; b = 123.45678; z = 0; for (i=0;i<5000;i++) { z += a*146.134761f/b; a++; } return; }

  12. 8.3 Nios II C语言至硬件加速编译器(C2H)简介 NIOS II C-to-Hardware(C2H)加速编译器使得用户可以直接从ANSI C 源代码创建定制外设加速器。硬件加速器是在硬件中实现C函数的逻辑模块,通常可以将执行效率提高到一个数量级。使用C2H编译器,用户可以在以NIOS II 处理器为目标处理器的C程序中开发和调试一个算法,然后将C代码转化成在FPGA中实现的硬件加速器。

  13. 类似CPU+GPU。 • 专用硬件加速器,作为FPGA的定制协处理器,协助CPU同时处理多个数据。SOPC Builder含有一个向导,将加速逻辑和DMA通道引入系统。

  14. 8.3 Nios II C语言至硬件加速编译器(C2H)简介 • C2H的特点 1. 简单和易于使用 2. 快速的反复设计以找到最优的软硬件分配比例 3. 加速对性能影响大的代码 4. C2H编译器工作在函数级 5. 从C语法到硬件结构的一对一映射 6. 性能依赖存储器访问时间

  15. 8.3 Nios II C语言至硬件加速编译器(C2H)简介 • 适合C2H的C代码 包含相对小而简单的循环或是包含嵌套的循环; 对一组数据反复操作; • 不适合C2H的C代码 不能形成一个循环的代码; 包含C2H编译器不支持的语法,如浮点运算和递 归函数

  16. 8.3 Nios II C语言至硬件加速编译器(C2H)简介 • C2H是能够提升对时间性能要求较高的ANSI C函数的工具,它将这些函数转换为FPGA中的硬件加速器。 • C2H支持标准ANSI C代码,可加速实现多种应用程序,提高其运行效率,包括访问片内、外部存储器和外设等。 • C2H帮助Nios II用户以最少的资源占用来达到提高系统性能的目的。 • Nios II C2H编译器设计流程非常简单,编写好应用程序后,用户需要做的工作首先是分析软件代码,确定出现性能瓶颈的函数,然后在Nios II IDE中高亮显示所需的函数,右键单击加速便可以生成自动链接至软件流程的硬件加速器。

  17. int main (void) __attribute__ ((weak, alias ("alt_main"))); voiddelay (void) { alt_u32 i=0, j=0; while (i<200000) i++; while (j<200000) j++; return; }

  18. 8.2 定制基于Avalon的用户外设 • 定制用户外设简介 • 一个典型元件定制的步骤如下: • 1.规划元件的硬件功能。 • 2.如将采用微控制器来控制该元件,则规划访问该硬件的应用程序接口(API)。 • 3.在硬件和软件要求的基础上,定义一个恰当的Avalon接口。 • 4.使用Verilog或VHDL来描述硬件逻辑。 • 5.单独验证元件的硬件功能。 • 6.写用于描述寄存器的C头文件来为软件定义硬件寄存器映像。 • 7.使用元件编辑器来封装硬件HDL和软件文件,得到一个元件。 • 8.将该元件集成到一个简单的NiosII系统中。

  19. 8.2 定制基于Avalon的用户外设 • 定制用户外设简介 • 一个典型元件定制的步骤如下: • 9.使用NiosII来测试寄存器级的访问是否正确。 • 10.如果以后将使用微控制器来访问该元件,就要写元件的驱动软件。 • 11.反复改进元件的硬件设计和软件驱,并使用元件编辑器来更新所做的修改。 • 12.建立一个完整的SOPC Builder system,里面含有一个或多个该元件。 • 13.执行系统级的验证,如果需要再进行改进。 • 14.完成元件定制,并分发给其它设计者。

  20. 8.2 定制基于Avalon的用户外设 • 定制用户外设简介 带Avalon Slave端口的典型元件组成框图

  21. 8.2 定制基于Avalon的用户外设 • PWM设计说明 • PWM输出一个占空比可调的方波。当一个周期11个时钟,高电平输出7个时钟时的PWM输出波形如下图所示。 PWM输出波形

  22. 8.2 定制基于Avalon的用户外设 • PWM设计说明 • 本实例的PWM是按下列要求设计的: • 1.任务逻辑按一个简单时钟进行同步操作。 • 2.任务逻辑使用32位计数器为PWM提供一个一定范围的周期和占空比,最大周期可设为232个clk。 • 3.可以使用微控制器(Nios II)来设置PWM的周期和占空比的值。因此要提供一个可对PWM寄存器进行读写的接口和控制逻辑。 • 4.定义寄存器来存储PWM周期和占空比的值。 • 5.微控制器可以通过控制寄存器的禁止位来关闭PWM输出。

  23. 8.2 定制基于Avalon的用户外设 • PWM设计说明 任务逻辑结构图

  24. 8.2 定制基于Avalon的用户外设 • PWM设计说明 表8.2 HAL数据类型定义

  25. 8.2 定制基于Avalon的用户外设 • PWM设计说明 表8.3 HAL数据类型定义

  26. 8.2 定制基于Avalon的用户外设 • 将PWM设计封装为SOPC Builder元件 • 将PWM设计文件封装为SOPC Builder元件执行以下步骤: • 1.将下载得到的PWM设计文件拷贝到硬盘任意目录中,但是文件夹名称不能为中文。本实例拷贝到F:\sopc\example。 • 2.打开一个Quartus II工程,本例为SmartSOPC_standard_1c6_pwm。这里,打开工程的目的只是为了打开SOPC Builder而已。 • 3.在Quartus II中,从【Tools】>>【SOPC Builder】打开SOPC Builder。

  27. 8.2 定制基于Avalon的用户外设 • 4.在SOPC Builder中,点击Creat New Component…或选择【File】>>【New Component…】打开创建新元件向导 定制元件的介绍

  28. 8.2 定制基于Avalon的用户外设 • 5.选择HDL Files选项卡,点击 按钮打开添加文件窗口,将路径指向PWM设计文件所在的目录,如图8.5所示。逐一添加各文件,或按住键盘上的Ctrl键同时选中3个文件,然后按 一次完成添加。 添加硬件描述文件

  29. 8.2 定制基于Avalon的用户外设 6.添加完硬件文件后,HDL Files栏中可看到刚添加的3个文件。 添加完硬件文件后的窗口

  30. 8.2 定制基于Avalon的用户外设 7. 选择Signals选项卡,进行信号的设置。 8.选择Interfaces选项卡,修改Avalon Slave的名称为control_slave. 9.选择SW Files选项卡打开添加文件对话框,将路径指向软件文件所在的文件夹。 10.选择Component Wizard选项卡。 11.可以单击Preview the Wizard 按钮进行预览。 12.关闭预览窗口,单击Finish按钮,弹出一个消息框,告诉设计者元件存放的路径,创建了哪些文件等。 13、在SOPC Builder中左边的可用元件列表中,将产生一个User Logic的新组,在下面出现刚才创建的元件pwm_avalon_interface。

  31. 8.2 定制基于Avalon的用户外设 • 使用并验证新创建的PWM元件 设置信号 创建测试PWM的工程

  32. 8.2 定制基于Avalon的用户外设 • 手工修改创建的元件 例如修改读写信号的共享属性,找到read_n和write_n所在的位置,将“is_shared=0;”改为“is_shared=1;”即可,如右图所示。当然,如果不设置成共享,在FPGA内部将所有读信号(nOE)信号、写信号(nWE)各自通过与门相与后再输出也是可行的。 修改元件的读写信号共用

More Related