记录-QuartuesⅡ-Qsys自定义数码管IP过程以及遇到的源文件路径问题

一 概述

NiosII 是一个嵌入式软核处理器,除了可以根据需要任意添加已经提供的各种外设外,用
户还可以通过定制自定义 IP 核的方式来满足各种应用需求。本文按照 开拓者Nios II开发指南_V1.2来学习如何自定义数码管IP 核。

二 步骤

1.编写源文件

Avalon总线包括地址、数据、指令总线,与之相对应,寄存器也有数据、指令寄存器以及自身的地址号。数据寄存器和指令寄存器配合完成向功能模块的一个具体功能通知。最终达到用户通过Avalon总线对寄存器进行读写以实现某几种功能的效果。
一个典型的 IP 核的硬件逻辑由以下三个功能模块组成:
◆ 接口文件:作为顶层模块,定义总线接口信号;
segled_controller.v
◆ 寄存器文件:完成该 IP 核与外部信号进行通信,有了寄存器文件,用户就可以通过 Avalon 接口采用基地址+地址偏移量的方式来访问组件内部各寄存器。
segled_register.v
◆ 硬件逻辑文件:实现 IP 核的硬件功能;
segled_logic.v
rtl图

2.Qsys生成_hw.tcl文件

Qsys 软件菜单栏中的【FileNew Component…】或者如下图处直接双击:

在这里插入图片描述
填写IP核资料:名称、显示名称、IP组…
其中,IP组可选择已存在的或自定义,本文自定义MyIp。
在这里插入图片描述
添加硬件逻辑源文件,顶层文件需注意别弄错。编译,若有错误则根据错误信息返回QuartuesⅡ修改,无误继续。
在这里插入图片描述
默认除clk信号外全部属于avalon slave总线信号,需要人为添加信号类型:Conduit、Reset Input
在这里插入图片描述
将rst_n 放入reset_sink信号类型中,sel 和seg led放入conduit信号类型中。但是仍存在报错,原因是部分信号的Signal Type未修改或重复,进行下图操作
在这里插入图片描述
在这里插入图片描述
仍有一个Error,意思是总线信号未指定复位信号,在下图中的下拉框中选择。完成后无错误,点击finish并save, ok。注意记住_hw.tcl文件保存位置。
在这里插入图片描述
回到Qsys可以看到产生了新的MyIp组,内有自定义的IP核segled_controller。
在这里插入图片描述

3.仿写寄存器头文件_regs.h和驱动底层.h头文件

为了以后的使用方便,我们就需要给该 IP 核添加寄存器头文件和底层驱动文件,首先我们需要做的是在\MyIp\segled 文件夹中创建两个新文件夹,一个为 HAL 文件夹,另一个为 inc 文件夹。
在\MyIp\segled\inc 文件夹下 segled_controller_regs.h 文件,在\MyIp\segled\HAL\inc 文件夹 segled_controller.h 文件。
下面为 segled_controller_regs.h的代码。四个宏定义代表了四个寄存器,以及各自的偏移地址号0-3。
待学习:具体怎样自定义呢?怎样调用呢?

1 #ifndef __SEGLED_CONTROLLER_REGS_H__
2 #define __SEGLED_CONTROLLER_REGS_H__
3 
4 #include <io.h>
5 
6 //Data register 
7 #define IOWR_AVALON_SEGLED_DATA(base,data) IOWR(base, 0, data)
8 //Control register1
9 #define IOWR_AVALON_SEGLED_DOT(base,data) IOWR(base, 1, data)
10 //Control register2
11 #define IOWR_AVALON_SEGLED_SIGN(base,data) IOWR(base, 2, data)
12 //Control register3
13 #define IOWR_AVALON_SEGLED_EN(base,data) IOWR(base, 3, data)
14
15 #endif

下面为 segled_controller.h的代码。可以在第 12~15 行声明函数。
待学习:具体怎样自定义呢?怎样调用呢?

1 #ifndef __SEGLED_CONTROLLER_H__
2 #define __SEGLED_CONTROLLER_H__
3 
4 #include "system.h"
5 #include "alt_types.h"
6 #include "segled_controller_regs.h"
7 
8 #ifdef __cplusplus
9 extern "C"
10 {
11 #endif /* __cplusplus */
12 
13 
14 /* function station */
15
16 #ifdef __cplusplus
17 }
18 #endif /* __cplusplus */
19
20 #endif /* __SEGLED_CONTROLLER_H__ */

4.仿写_sw.tcl 文件

编写完了寄存器头文件和驱动底层头文件,也就到了 LED IP 核定制的最后一步,创建_sw.tcl 文件,_sw.tcl 文件同_hw.tcl 文件一样都是利用 Tcl 语言编写的
参考的是 altera_avalon_pio_sw.tcl 文件中的代码来编写的,在该代码中,比较重要的也就两处,第一处是第 21 行代码,该代码是取消用来将我们的数码管 IP 核添加至 alt_sys_init()函数中进行自动初始化。第二处是第 30 和 31 行,该代码是用来关联我们编写的寄存器头文件和底层驱动文件。
待续

三 路径问题

_hw.tcl文件有两种自动存放方式:1.工程路径下;2.软件安装目录下。

  • 1.工程路径下
    • QuartuesⅡ新建/打开工程;
    • 工程所在文件夹内新建一个segled文件夹,用于专门存放数码管IP核的源文件;
    • 步骤2生成的_hw.tcl文件会自动保存在工程所在目录下,本例中为./par/_hw.tcl;
  • 2.软件安装目录下
    • QuartuesⅡ不添加任何工程,直接打开Qsys工具;
    • QuartuesⅡ软件安装目录下ip文件夹内新建文件夹/MyIp/segled,用于存放本文自定义IP核的所有相关文件;
    • 步骤2生成的_hw.tcl文件会自动保存在软件安装目录下,本例中为./intelFPGA/17.1;
  • 3.移动 _hw.tcl文件位置后需做的修改
    • 为便于管理_hw.tcl文件移动到/MyIp/segled目录下,打开_hw.tcl修改file sets中的源文件相对路径,如下图所示,否则使用IP核时无模块接口,如下图;
      Alt
      在这里插入图片描述
      -最终文件夹内容如下:
      /MyIp/segled/hdl存放源文件、
      /MyIp/segled/HAL/inc存放驱动底层.h头文件、
      /MyIp/segled/inc存放寄存器头文件_regs.h、
      /MyIp/segled存放_hw.tcl文件、_sw.tcl文件;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值