当前课程知识点:现代电子系统设计 > 第九章 SOPC系统设计 > 9.6 Nios II 软件设计 > 9.6 Nios II 软件设计
下面我们讲第九章第六节
Nios II软件设计
首先来看一下Nios II的软件结构
那么我们在第五章
了解了微处理器它的软件结构
那Nios II的软件结构呢
实际上跟它也是一样的
如果我们编写的应用程序不是很复杂
不需要操作系统的话
那么这时候它的软件结构
就是在硬件的基础上是这个样子
首先有一个硬件抽象层
然后上面再是应用程序
那么这时候对这种结构的话呢
这个硬件抽象层
实际上就是一个设备驱动
就是针对不同设备 有一些驱动的接口
那由于一般的微处理器
它的设备的驱动
是由这个微处理器的厂商提供
一般是这样子
而对于FPGA里头的
这个Nios II微处理器呢
那么它的外接的设备的接口
可能没有提供
那这时候呢 我们就需要自己来设计
设备的驱动
那怎么样来设计一个设备的驱动呢
我们以一个LCD的驱动为例
来看它怎么设计
这个LCD呢 我们采用一个LCD1602
它是一个字符型的显示器
然后它可以显示两行的字符
每行显示16个字符
在它的左上角 有一些控制信号引脚
那么我们画出它的示意图来
在它的左上角 有一些控制信号
那我们要控制这个LCD的话
实际上就是通过这些信号
去进行控制的
下面我们来看一下它的设计的流程
首先呢 我们要通过verilog语言
编写一个LCD的驱动的模块
叫LCD Driver.v
这个模块的功能呢
主要是实现对LCD的控制
也就是实现这个命令和数据的写入
以及判断它是否在忙的状态
然后这个模块编辑好了以后呢
因为LCD是需要通过Avalone总线
来控制的
这时候我们还要给它
添加Avalone总线的这个接口
这时候我们就可以
再编写一个顶层的模块
叫LCD Module
那这个模块呢
在实现LCD Driver的这个实例化
然后再给它添加Avalone总线的接口
就可以了
那这样的话就可以把这个设备
添加到SOPC系统里头去
所以接下来
我们在Quartus的Qsys下面
完成这个SOPC的设计
那我们就需要添加LCD的这个模块
实际上就是要把这两个文件
也就是子模块LCD Driver
和顶层模块LCD Module
这两个文件呢 添加到Qsys下面
然后设计一个自定义的LCD模块
然后再组成一个SOPC系统
最后把这个SOPC系统的文件
下载到FPGA中去
接下来呢 就需要通过软件
来实现对LCD的控制
那首先呢 要实现对LCD的控制呢
我们可以通过一些驱动函数去实现
那这时候我们要设计这个函数
那也就是说要设计函数
来实现对LCD的一些操作
比方说对它复位
比方说清除它的写入的信息
比如说要在指定的位置
去显示一个字符的信息等
那这样编写完这些函数以后呢
我们就把它放到一个文件
叫LCD1602_Qsys.c这个文件里头去
也就是后缀为.c的这个文件里
然后我们再从这个文件里头
把编写的这些函数的名字抽取出来
然后放在一个.h文件里头
进行函数的声明
最后我们在Eclipse里头
进行软件开发的时候
我们编写C语言的main函数
然后调用这些刚才的LCD的控制函数
就可以对LCD进行控制和显示了
这是它的整个的开发流程
接下来我们再说一下它的详细的流程
首先设计这个LCD_Driver.v这个模块
LCD它有一些控制信号
首先第一个控制信号就是寄存器选择
RS信号 那么这个信号呢 是告诉LCD
接下来输入的这个信息是控制信息
还是要显示的数据信息
第二个信号是读写信号RW
第三个信号是使能信号E
也就是Enable
然后接下来的八个信号
是数据信号D0到D7
我们在设计控制模块的时候呢
就是要实现这些控制信号
对LCD的控制
所以这个模块首先它的右边
会有刚才说的这些控制的信息
比如说RS RW 使能信号EN
还有数据DATA
另外呢 我们还要给顶层模块
提供一个调用的接口
也就是实例化的这个接口
这个接口呢 有一些信息
比如说iCLK 时钟信息
还有就是复位信息
另外还有输入的iRS信息
还有就是启动iSTart信息
另外还有数据信息
以及这个LCD是否在忙的信息
oDone信息
其实从这些信号的前面
有的有一个i的字母 是表示输入信号
有一个o的字母呢 表示是输出的信号
这是LCD Driver模块的设计
接下来就可以设计这个顶层模块了
顶层模块
主要是要给这个LCD的模块呢
添加一个Avalon接口
那么这个顶层模块呢
可以是这样子来设计
它有三组信息 第一组信息呢
就是一个输入的时钟和复位的信息
前面添加了三个字母CSI
表示是输入信息
然后第二组信息呢 是输出的信息
也就是这个顶层模块
去控制LCD子模块的输出的信息
也就是刚才的这个LCD控制的那些信息
最后第三组信息
就是这个Avalon总线接口的信息
那这个Avalon接口呢
采用的是Avalon-MM接口
而且是一个从接口
那么它主要有以下几个信号
第一个是片选信号 第二个是地址信号
第三个是读信号 第四个是读的数据
第五个是写信号 第六个是写的数据
那么这个Avalon从接口是通过这个地址
来对它进行数据的读和写
从而来控制这个LCD模块
那这时候呢
这个LCD它的模块就设计完成了
接下来在Qsys里头
我们要添加LCD的元件
然后设计一个SOPC的系统
这时候呢 是在这个Qsys的界面上面
点击Catalog
选择它的New Component来实现的
那我们来看一下这个界面
在左上角的IP Catalog里头
点击New Component
就弹出这个中间的对话框
然后在这个对话框里头呢
就可以添加新的元件LCD了
在添加的时候有四个选项卡
要进行信息填写
那下面我们针对这四个选项卡
来逐一地进行说明
第一个选项卡呢
就是要选择这个元件的类型
实际上就是要修改这个元件的名称
修改成你想要的这个LCD的名称
第二个就是要添加
刚才设计的那两个.v文件
就是一个子模块 LCD_Driver
和这个顶层模块LCD_Module
这两个文件
之后呢 就要指明哪个文件是顶层文件
那这时候呢
应该选择LCD_Module.v这个文件
接下来就对这两个文件进行编译
实际上是
然后它是叫分析综合的文件
那编译以后两个文件没有问题以后
那编译就成功了
接下来呢
还需要对它的信号和接口进行检查
主要是要检查clock和reset
这两个信号是否正确
最后就可以把LCD这个元件
添加到SOPC系统里头
然后每一个元件都会有一个地址段
这个地址段有一个起始的基地址
和一个结束的地址
最后我们就可以产生这个SOPC系统了
下面我们来看一下
添加LCD以后的系统的内部结构
那我们可以看到 这个LCD添加进去了
然后在它的右边给它分配了基地址
和结束的地址
那么添加完LCD硬件以后呢
然后产生这个SOPC系统
最后我们要在Quartus里头
对这个SOPC系统进行实例化
实例化的时候呢
我们看到这个红框中这一段代码
就是对LCD进行实例化
底下有两个信号是没有用到的信号
大家可以不用管它
实例化以后 然后最后产生SOPC系统
下载到FPGA中
我们就可以进行软件编程了
在软件编程的时候呢
我们主要就是通过C语言
去对LCD进行控制
那这时候呢
我们可以通过LCD的一些函数去进行控制
所以我们接下来第一步呢
就可以编辑一些子函数
把这些子函数
放到一个后缀是.c的文件里头
这些函数包括复位 清除显示的信息
以及在指定位置显示字符等函数
接下来呢 我们就要把这些函数的名字
放到一个.h的头文件里头去
定义这个头文件
然后我们就可以把这个头文件
再包含在这个main函数中
然后在main函数中
就可以调用这个子函数来控制LCD了
下面我们看一下这个main函数
在main函数中
我们包含了后缀是.h的这个头文件
另外 我们通过两行代码
然后在它的显示器的第一行和第二行
分别显示信息
最后 这个结果是显示的信息
感谢您的观看
-课程简介
-1.1 电子系统简介
-1.2 现代电子系统举例
-1.3 现代电子系统的组成
-1.4 现代电子系统设计方法
-第一章 作业
-2.1 传感器定义
-2.2 传感器的分类和性能指标
-2.3 常用传感器介绍
-2.4 常用执行器介绍
-第二章 作业
-3.1 模拟信号处理简介
-3.2 信号放大和隔离电路
-3.3 滤波电路
--3.3 滤波电路
-3.4 运算电路(一)
-3.5 运算电路(二)
-3.6 电压比较器
-3.7 功率放大电路
-3.8 模-数转换器
-3.9 数-模转换器
-第三章 作业
-4.1 直流电源简介
-4.2 线性稳压电源
-4.3 开关稳压电源
-第四章 作业
-5.1 微处理器简介
-5.2 微处理器和片上系统的发展历程
-5.3 微处理器分类
-5.4 微处理器和片上系统举例
-5.5 微处理器和片上系统硬件结构
-5.6 外围接口和设备
-5.7 嵌入式软件开发方法
-5.8 嵌入式操作系统
-5.9 外围设备应用程序开发简介
-第五章 作业
-6.1 TM4C123 简介
-6.2 TM4C123 实验板
-6.3 TM4C123 软件开发
-6.4 TM4C123 实验举例
-第六章 作业
-7.1 PSoC简介
-7.2 PSoC实验板
-7.3 PSoC软件开发
-7.4 PSoC实验举例
-第七章 作业
-8.1 FPGA简介
-8.2 FPGA的发展趋势
-8.3 FPGA的特点
-8.4 FPGA的结构
-8.5 FPGA结构举例
-8.6 FPGA设计工具和方法
-8.7 QuartusⅡ集成开发环境
-8.8 DE2-115实验平台简介
-8.9 Verilog硬件设计语言
-- 8.9.8 设计仿真
-8.10 数字电路设计与仿真举例
-第八章 作业
-9.1 SOPC简介
-9.2 Nios II 微处理器简介
-9.3 Avalone总线简介
-9.4 SOPC设计方法简介
-9.5 SOPC设计举例
-- 9.5.1 设计内容
-9.6 Nios II 软件设计
-第九章 作业
-10.1 实验内容与要求
-10.2 实验设备与器材
-10.3 注意事项与调试方法
-10.4 实验结果展示
-第十章 作业
-期末考试
--期末考试