320 likes | 562 Views
第 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 指令集。
E N D
主要内容 本章是有关SOPC的深入设计,C2H、定制用户逻辑外设和定制用户指令是使用Nios II嵌入式软核处理器的SOPC系统的重要特性,用户还可以通过C2H、定制用户逻辑外设和定制用户指令来实现各种应用要求。
第8章 目录 8.1 定制Nios II用户指令 8.2 定制基于Avalon的用户外设 8.3 C2H编译器的使用
8.1 .1 用户定制指令 • 对时间要求严格的算法可定制指令,提高性能(如:FFT) 可扩展CPU指令集。 • 软件中比较费时间的运算(比如浮点乘除法,循环迭代等),通 过定制指令由硬件来实现,加速运算速度 。 扩展接口用户指令的结构框图
8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 1. 组合逻辑; 2. 多周期; 3. 扩展的: 4. 内部寄存器文件; 5. 外部接口;
8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 组合逻辑指令结构框图 多周期指令结构框图
8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 扩展指令结构框图 带内部寄存器的乘加指令结构框图
8.1 定制Nios II用户指令 8.1.2 定制指令体系结构的类型 扩展接口用户指令的结构框图
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中自带的定制指令。
8.1 定制Nios II用户指令 • 定制指令设计示例 在定制指令前,首先要正确的实现硬件逻辑功能,包括编写HDL文件和验证用户逻辑。 1.编写HDL文件 D:\altera\80\nios2eds\examples\verilog\c ustom_instruction_templates 2.验证用户逻辑功能 3.在SOPC Builder中添加HDL文件
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; }
8.3 Nios II C语言至硬件加速编译器(C2H)简介 NIOS II C-to-Hardware(C2H)加速编译器使得用户可以直接从ANSI C 源代码创建定制外设加速器。硬件加速器是在硬件中实现C函数的逻辑模块,通常可以将执行效率提高到一个数量级。使用C2H编译器,用户可以在以NIOS II 处理器为目标处理器的C程序中开发和调试一个算法,然后将C代码转化成在FPGA中实现的硬件加速器。
类似CPU+GPU。 • 专用硬件加速器,作为FPGA的定制协处理器,协助CPU同时处理多个数据。SOPC Builder含有一个向导,将加速逻辑和DMA通道引入系统。
8.3 Nios II C语言至硬件加速编译器(C2H)简介 • C2H的特点 1. 简单和易于使用 2. 快速的反复设计以找到最优的软硬件分配比例 3. 加速对性能影响大的代码 4. C2H编译器工作在函数级 5. 从C语法到硬件结构的一对一映射 6. 性能依赖存储器访问时间
8.3 Nios II C语言至硬件加速编译器(C2H)简介 • 适合C2H的C代码 包含相对小而简单的循环或是包含嵌套的循环; 对一组数据反复操作; • 不适合C2H的C代码 不能形成一个循环的代码; 包含C2H编译器不支持的语法,如浮点运算和递 归函数
8.3 Nios II C语言至硬件加速编译器(C2H)简介 • C2H是能够提升对时间性能要求较高的ANSI C函数的工具,它将这些函数转换为FPGA中的硬件加速器。 • C2H支持标准ANSI C代码,可加速实现多种应用程序,提高其运行效率,包括访问片内、外部存储器和外设等。 • C2H帮助Nios II用户以最少的资源占用来达到提高系统性能的目的。 • Nios II C2H编译器设计流程非常简单,编写好应用程序后,用户需要做的工作首先是分析软件代码,确定出现性能瓶颈的函数,然后在Nios II IDE中高亮显示所需的函数,右键单击加速便可以生成自动链接至软件流程的硬件加速器。
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; }
8.2 定制基于Avalon的用户外设 • 定制用户外设简介 • 一个典型元件定制的步骤如下: • 1.规划元件的硬件功能。 • 2.如将采用微控制器来控制该元件,则规划访问该硬件的应用程序接口(API)。 • 3.在硬件和软件要求的基础上,定义一个恰当的Avalon接口。 • 4.使用Verilog或VHDL来描述硬件逻辑。 • 5.单独验证元件的硬件功能。 • 6.写用于描述寄存器的C头文件来为软件定义硬件寄存器映像。 • 7.使用元件编辑器来封装硬件HDL和软件文件,得到一个元件。 • 8.将该元件集成到一个简单的NiosII系统中。
8.2 定制基于Avalon的用户外设 • 定制用户外设简介 • 一个典型元件定制的步骤如下: • 9.使用NiosII来测试寄存器级的访问是否正确。 • 10.如果以后将使用微控制器来访问该元件,就要写元件的驱动软件。 • 11.反复改进元件的硬件设计和软件驱,并使用元件编辑器来更新所做的修改。 • 12.建立一个完整的SOPC Builder system,里面含有一个或多个该元件。 • 13.执行系统级的验证,如果需要再进行改进。 • 14.完成元件定制,并分发给其它设计者。
8.2 定制基于Avalon的用户外设 • 定制用户外设简介 带Avalon Slave端口的典型元件组成框图
8.2 定制基于Avalon的用户外设 • PWM设计说明 • PWM输出一个占空比可调的方波。当一个周期11个时钟,高电平输出7个时钟时的PWM输出波形如下图所示。 PWM输出波形
8.2 定制基于Avalon的用户外设 • PWM设计说明 • 本实例的PWM是按下列要求设计的: • 1.任务逻辑按一个简单时钟进行同步操作。 • 2.任务逻辑使用32位计数器为PWM提供一个一定范围的周期和占空比,最大周期可设为232个clk。 • 3.可以使用微控制器(Nios II)来设置PWM的周期和占空比的值。因此要提供一个可对PWM寄存器进行读写的接口和控制逻辑。 • 4.定义寄存器来存储PWM周期和占空比的值。 • 5.微控制器可以通过控制寄存器的禁止位来关闭PWM输出。
8.2 定制基于Avalon的用户外设 • PWM设计说明 任务逻辑结构图
8.2 定制基于Avalon的用户外设 • PWM设计说明 表8.2 HAL数据类型定义
8.2 定制基于Avalon的用户外设 • PWM设计说明 表8.3 HAL数据类型定义
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。
8.2 定制基于Avalon的用户外设 • 4.在SOPC Builder中,点击Creat New Component…或选择【File】>>【New Component…】打开创建新元件向导 定制元件的介绍
8.2 定制基于Avalon的用户外设 • 5.选择HDL Files选项卡,点击 按钮打开添加文件窗口,将路径指向PWM设计文件所在的目录,如图8.5所示。逐一添加各文件,或按住键盘上的Ctrl键同时选中3个文件,然后按 一次完成添加。 添加硬件描述文件
8.2 定制基于Avalon的用户外设 6.添加完硬件文件后,HDL Files栏中可看到刚添加的3个文件。 添加完硬件文件后的窗口
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。
8.2 定制基于Avalon的用户外设 • 使用并验证新创建的PWM元件 设置信号 创建测试PWM的工程
8.2 定制基于Avalon的用户外设 • 手工修改创建的元件 例如修改读写信号的共享属性,找到read_n和write_n所在的位置,将“is_shared=0;”改为“is_shared=1;”即可,如右图所示。当然,如果不设置成共享,在FPGA内部将所有读信号(nOE)信号、写信号(nWE)各自通过与门相与后再输出也是可行的。 修改元件的读写信号共用