桂林景区网站建设策划方案,wordpress数据库恢复,东莞网络营销,河南省建设厅注册中心网站首页文章目录 前言一、系统设计1、系统模块框图2、系统涉及到的模块1、时钟2、nios2_qsys3、片内存储#xff08;onchip_rom、onchip_ram#xff09;4、串行通信#xff08;jtag_uart#xff09;5、System ID#xff08;sysid_qsys#xff09; 二、硬件设计1、创建Qsys2、重命… 文章目录 前言一、系统设计1、系统模块框图2、系统涉及到的模块1、时钟2、nios2_qsys3、片内存储onchip_rom、onchip_ram4、串行通信jtag_uart5、System IDsysid_qsys 二、硬件设计1、创建Qsys2、重命名IP核连线3、集成 Qsys 系统4、顶层文件实例化5、编译下载操作 三、软件设计四、下载验证五、总结六、参考资料 前言 环境 1、Quartus18.0 2、vscode 3、板子型号原子哥开拓者2(EP4CE10F17C8) 要求 通过Nios输出Hello world! 一、系统设计
1、系统模块框图 Nios II 处理器通过 Avalon 总线与 ROM 和RAM 连接其中 Avalon 总线用来传输指令与数据。除此之外Qsys 系统还提供了一个 JTAG 接口供用户下载和调试程序。 2、系统涉及到的模块
1、时钟 clk IP 核的全称是 Clock Source在这里设定我们整个系统的工作时钟频率。 2、nios2_qsys 这是我们之前对Qsys介绍时了解到这是整个Qsys的控制中心起着分配中断、管理地址、调度内存等主要的控制作用相当于大脑的低位吧通过Avalon与外界进行通信。 3、片内存储onchip_rom、onchip_ram 这里我们创建了两个片内存储器ROM和RAM。这两个片内存储器都是利用FPGA的片上存储资源进行实现除了用于存储指令和数据外还是程序的运行空间。需要注意的是ROM的实现在FPGA内部并没有专用的ROM资源我们通过对 RAM 赋初值并始终保持该值使其变得只读从而实现片内 ROM只读存储器。 4、串行通信jtag_uart JTAG UART IP 核使用 JTAG 接口来实现上位机与 Qsys 系统之间的串行通信。JTAG UART IP 核为用户提供了 Avalon-MM 接口映射屏蔽了复杂的 JTAG 接口协议。 5、System IDsysid_qsys System ID IP核是一个具有Avalon接口的只读设备它给每个Nios II系统生成一个唯一的标识符ID并将其写入 System ID 核的寄存器中。编译器和用户可以利用该 IP 核来验证编译后的可执行程序与配置到FPGA 中的硬件环境是否匹配。如果可执行程序中的 ID 与 FPGA 中 System ID 核所存储的 ID 不一致那么程序在运行时可能会出错 二、硬件设计
在开始Qsys系统设计之前我们需要先根据我们的芯片型号创建Quartus 工程这里前面已经介绍过这里不在赘述。不同的是我们需要多创建一个qsys文件夹下面新建hardware 和 software 文件夹分别存放 qsys设计的硬件部分和软件部分。然后我们需要在prj文件夹下新建一个ipcore 文件夹用于存放 Quartus II 工程 IP 核。
1、创建Qsys
点击tools-platfrom Desiger进入设计界面 修改时钟频率为100M 修改为100MHZ并点击finish完成否则修改失败。 添加Nios II IP 核 双击Nios II IP 核进入配置界面 这里我们保持默认选择“Nios II/f‖内核“报错我们后面再进行解决点击finish。 添加成功 添加片内存储ROM IP核 同样双击进入配置界面 我们需要将其设置为ROM(只读)大小设置为10240为10KB其余默认。 同样的方法配置RAM 将“Type”选项设置为“RAMWritable”然后将“Total memory size”修改为“20480”也就是 20KB。其他的选项保持默认设置最后点击 Finish 添加 JTAG UART IP 核 这里保持默认 添加 System ID IP 核 这里保持默认点击finish
2、重命名IP核连线 为了方便我们的理解以及后面的软件程序中可能会使用到所以我们尽量重命名为简单易理解的名字。 右击点击rename重命名 修改过后的名称 连线将IP核进行连接 连接时用鼠标点击“Connections‖一栏中相应的结点连接后各结点处的空心圆会变成实心的点同时相应的连线由浅灰色变成黑色。 将复位信号与时钟信号接入到各IP核下 数据主端口―data_master‖和指令主端口―instruction_master‖的连线 注意 这两个端口的连线遵循以下规则数据主端口与所有的外设 IP 核连接而指令主端口只连接存储器 IP 核。 连接“jtag_debug_module_reset‖信号 注意 在连完线后我们需要在“IRQ”一栏将 jtag_uart IP 核的中断信号与 Nios II 处理器连接起来。在连接中断的时候Qsys 会自动为中断分配一个优先级。 双击Nios II IP核设置复位地址和异常地址 这个时候finish会报错我们先设置一下下面的自动分配 设置基地址分配 设置完了以后之前的爆红就会消失然后可以finish,Generate生成Qsys 系统了。生成过程
3、集成 Qsys 系统
将Qsys生成的.qip文件添加到工程 配置Pll锁相环 这里因为我们前面设计Qsys系统时配置的是100Mhz,所以这里我们需要创建一个PLL IP 核实现二倍频这里由于前面文章已经介绍过就不在赘述。 IP核简介及PLL_IP核的调用
4、顶层文件实例化
打开我们的Qsys设计界面在Qsys文件夹找到qsys文件打开 自动生成Qsys系统例化代码 但是这里不知道咋的不能生成那没事我们自己例化顶层模块例化完放到rtl文件夹中并添加到工程里设置为顶层文件。 module qsys_hello_world(input sys_clk, //晶振时钟50Mhzinput sys_rst_n //按键复位低电平有效);//wire definewire clk_100m; //Qsys 系统时钟100Mhz//例化 pll IP 核pll u_pll(.inclk0 (sys_clk),.c0 (clk_100m));//例化 Qsys 系统hello u_qsys(.clk_clk (clk_100m),.reset_reset_n (sys_rst_n));endmodule5、编译下载操作 Assignment→Device: 将未使用的引脚设置为高阻输入 将“Value‖一栏全部设置为 ―Use as regular I/O” 下面就是分析综合然后分配引脚全编译 编译通过下一部分是软件的设计阶段。 三、软件设计 点击Toos下的Nios II SBT for Eclipse 修改工作空间到 software 文件夹 点击ok进入后选择file→New→Nios II Application and BSP from Template用于新建Nios II工程 设置Nios II工程 系统默认帮我们创建一个BSP(板级支持包)、保持默认、点击finish 点击finish完成过后我们会发现左边增加了两个文件 点击c/c的点c文件修改输出内容并保存 右击hello_world选择Build Project进行编译
报错 解决 选中hello_world_bsp右击进行下面操作
添加勾选 enable_reduced_device_drivers BSP 为处理器的外设提供了两个版本的驱动库一种是执行速度快但代码量比较大的版本另一种是封装小的版本。默认使用的是代码量大的版本 这里通过 enable_reduced_device_drivers 选项来选择封装小的版本从而减少代码量。enalbe_small_c_library完整的 ANSI C 标准库通常不适用于嵌入式系统BSP 提供了一系列经过裁剪的 ANSI C 标准库占用资源比较少我们可以通过【enalbe_small_c_library】选项来选择精简的 ANSI C 标准库。 取消勾选 enable_c_plus_plus 我们使用 C 语言来编写软件程序因此不需要使能 C。 enable_clean_exit 当选中该选项时系统库在主函数 main()返回时会调用 exit()。调用 exit()时首先会清理 I/O 的缓冲区然后再调用_exit()。当不选中该选项时系统库会只调用_exit()这样将会节省程序空间。对于嵌入式系统程序来说一般都不会从 main()返回所以可以不勾选该选项。 然后我们先点击Generate再exit。
编译整个工程 编译成功
四、下载验证 这里我们需要下载两个文件先下载sof再下载elf。这里我们只介绍elf文件的下载。 右击我们的工程名—run as—Nios II Hardware 如果一步成功那么你的控制台就会打印成功否则跳出下面弹窗。 提示我们找不到与Nios II硬件系统的连接 如果你这一步成功那么你的控制台就会打印成功否则跳出下面弹窗。 上面这个问题博主寻找了许久也没有发现问题或者解决方法丢弃了几天在周末打开时他又行了真是玄学如果有友友了解的可以在评论区发表一下想法一起学习。 在下载完成之后控制台会输出相应信息 五、总结
总结的话就一句话杀猪焉用牛刀哈这里我们在实现简单输出时发现我们的步骤稍显复杂这里的话为了方便我们后续的查看步骤博主这里写的较为详细。在后面大的一些工程的话就能体会到Nios的魅力了。大家在配置的时候要细心尤其连线那里加油最近在搞DHT11的温湿度读取和基于openvino的车牌识别敬请期待。
六、参考资料
以上资料均来自正点原子的教学视频或开拓者2开发教程原子官方 源码https://github.com/no1jiangjiang/Nios_hello