[转载].怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?
2012-05-30 15:52
531 查看
1 硬件部分
1.1 Avalon-MM接口(读作:阿窝龙妹妹接口)
Avalon Memory-Mapped接口,简称为 Avalon-MM接口,用于在存储映射系统中描述主从元件(component)的读/写接口。图1.1 Amy_S_lcd12864 IP与System Interconnect Fabric的连线框图
图1.2 某带有Amy_S_lcd12864 IP的Avalon系统框图
1.2 从设备读写时序
请参考手册《Avalon Interface Specification》,此处略去。1.3 HDL模块及说明
[b]1.3.1 模块介绍[/b]表1.1 Amy_S_lcd12864 IP的HDL源代码模块介绍
文件名称 | 功能描述 |
Amy_S_lcd12864_avalon_interface.v | Amy_S_lcd12864 Avalon接口文件 |
注:本文所涉及verilog代码,是按照Verilog 2001规范编写的。Avalon信号类型命名参考图1.3。
图1.3 Naming Convention for Avalon Signal Type
[b]1.3.2.1 Amy_S_lcd12864_avalon_interface.v[/b]
/*-----版权声明-----
ST7920的E、RW和RS都是单向的,而DATA总线是双向的;故在此处nios既需要写数据给ST7920,又需要从ST7920读数据。
从42行到68行,即nios向ST7920写数据。注意,谁给nios写数据呢?请看图1.4。
图1.4 NII、nios cpu和ST7920通信框图
从70行到90行,是nios从ST7920读数据。由于只有DATA总线需要读,其他的管脚就不写了,呵呵。
从93行到108行,是对DATA双向总线的处理。读或写只是简单由Avalon的读、写信号来控制的。这个技巧是我从open-cores里面的基于wishbone总线的IIC从设备的IP上学到的。注意:ST7920是低速设备,此处只做简单处理;高速设备请大家自行斟酌。
还有一点需要说明,chipselect在Nios II 9.0之后就不是必须的信号,此处加上,只为和以前的版本兼容。
2 软件部分
表2.1 Amy_S_lcd12864 IP的C源代码模块介绍文件名称 | 功能描述 |
Amy_S_lcd12864.h | Amy_S_lcd12864 的C头文件 |
Amy_S_lcd12864.c | Amy_S_lcd12864 的C源文件 |
2.1 C头文件
[b]2.1.1 Amy_S_lcd12864.h[/b]/*-----版权声明-----
[b]2.1.2 一些说明[/b]
最后面的那个</io.h>是发布博客的时候带出来的,不属于头文件。
从28行到37行,是根据SOPC Builder设置编写的lcd12864的基地址,需要system.h的支持。注:system.h就是和SOPC Builder设置一一对应的;当在NII中建立工程时,system.h就根据sopcinfo(Nios II 9.1 Software Build Tools for Eclipse使用,不是Nios II 9.1 IDE)文件自动生产。
第40行到第53行,是自己编写的一些宏,这个叫Register Map(寄存器映射),以前都是单独放在一个头文件里(如xxx_regs.h)。由于NII 9.1貌似不支持HAL的自动初始化(我研究的结果是不行,不知道Altera公司有没有相关的变动声明),因此就没有向8.1那样书写HAL。注意,0、1~3是OFFSET(偏移地址),请参考HDL代码编写。
从56行到69行,是一些管脚操作的宏,这样写,主要是方便移植。大家也可以不写寄存器映射,直接写管脚操作的宏也行,注意替换哟。
实际上大家也可以使用ARM方式的寄存器访问方式,譬如
?
下面的几行和各种MCU大同小异。
2.2 C源文件
[b]2.2.1 Amy_S_lcd12864.c[/b]?
呵呵,这个就不说明了,大家自己看。
3 使用举例
注意:9.1环境。3.1 在SOPC Builder中添加组件
从File-New Component..打开Component Editor,单击HDL Files标签,添加所编写的HDL文件。如图3.1所示。图3.1 添加HDL文件
由于所编写的HDL完全是按照规范的,因此直接单击Component Wizard即可,编写IP信息,如图3.2所示。
图3.2 编写IP信息
单击Finish,IP添加成功,如图3.3所示。
图3.4 添加成功后的IP
3.2 在SOPC Builder中例化
这个就不多说了,直接上图,请看图3.5。图3.5 例化后的IP 1
注意lcd12864是随便起的名字哟,只要不叫IP的名字(Ams_S_lcd12864)就行。
图3.6 例化后的IP 2
3.3 在Nios II中的使用范例
先将Amy_S_lcd12864.h和Amy_S_lcd12864.c拷贝到软件工程内。[b]3.3.1 使用范例main.c[/b]
?
最后面的那个</string.h>是发布博客的时候带出来的,不属于头文件。
3.4 使用效果
图3.7 Amy_S_lcd12864 IP使用效果
4 参考资料
1.李兰英等.Nios II嵌入式软核SOPC设计原理及应用.北京航空航天大学出版社.20062.周立功等.SOPC嵌入式系统实验教程(一).北京航空航天大学出版社.2006
3.蔡伟刚.Nios II软件架构解析.西安电子科技大学出版社.2007
4.Altera Handbook.Quartus II Handbook Volume4: SOPC Builder.2009
5.Altera Handbook.Avalon Interface Specifications.2009
6.Altera Handbook.HAL API Reference.2009
7.Altera Website.Avalon Component Interfaces Supported in the Component Editor Version 7.2 and Later
8.Altera Website..Examples of Changes to Typical Avalon Interfaces for the Component Editor Version 7.2 and Later
9. 小時不識月.七段数码管动态显示IP的研究及设计.(Nios II)(SOPC Builder).2009
相关文章推荐
- [原创].怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?
- 怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?.[Nios II][下]
- 怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?.[Nios II][上]
- 怎样制作一个简单ip,以方便在Quartus II和Nios II中使用?.[Nios II][中]
- 转载:怎样定制的Avalon接口IP,以供Nios II使用
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第二部分
- 使用cocos2d和box2d制作一个简单的弹射游戏 第一部分
- 使用JavaScript制作一个简单的计数器的方法
- [原创].怎样定制SRAM的Avalon接口IP,以供Nios II使用
- 怎样用HTML5 Canvas制作一个简单的游戏
- 1.使用UISearchController制作一个简单的本地搜索应用
- 通过制作一个简单的时钟学习WPF中DispatcherTimer的使用 Level 100
- 怎样用delphi制作一个IPhunter(独孤剑客的IP猎人)
- 使用Unity制作一个简单的聊天室
- 详细介绍附代码:使用jquery,和php文件构建一个简单的在线聊天室,通过ip显示googlemap
- Web基础入门(表格)-使用表格嵌套的形式制作一个简单的网页布局
- 使用AngularJS制作一个简单的RSS阅读器的教程
- 怎样用delphi制作一个IPhunter(独孤剑客的IP猎人)
- 通过制作一个简单的时钟学习WPF中DispatcherTimer的使用 Level 100
- 自己制作一个链表用来存储列表信息,并查找当前id信息,找上一条信息,下一条信息(信息浏览的时候方便使用)