基于SOPC的自定义外设FIFO
3.1.3 行为模块
行为模块实现元件的硬件功能,当写请求(wrreq)信号有效时,向数据寄存器中写入数据,当读请求(rdreq)信号有效时,读取数据寄存器中的数据。在QuartusⅡ7.2环境下,基于EP2C20Q240C8器件的FIFO接口的仿真波形如图1所示。
![d.jpg](http://m.amcfsurvey.com/editerupload/fetch/20131127/195146_2_0.jpg)
3.2FIFO接口模块的添加
在Quartus II工程中打开SOPCBuilder,在SOPCBuilder界面的左栏中点击Create new component打开创建元件向导,弹出Component Editor,在HDL Files选项卡中添加HDL文件(FIFOinterface.vhd),并将其设置为顶层模块。在Signals选项卡中出现FIFO interface中定义的信号。若出现红色字体表示错误,需要将其接口类型修改一下,如reset n被指定为clock类型,传输方向为input,数据宽度为1,read-data被指定为avalon_slave类型,传输方向为output,数据宽度为32,data被指定为export类型,传输方向为export,数据宽度为32,等等。修改完之后,FIFO的地址对齐方式选择动态地址对齐Mermory(use dynamic bussizing)。时序设置也很重要,设置不当会造成数据的错误传输。系统FIFO的读写时钟为50MHz,周期为20ns,设定建立时间为 1ns,将所有设置设置完之后进行保存。保存完之后在该工程目录下会出现FIFO_interface_hw.tcl文件,FIFO控制器接口就出现在左栏中,若想在其它工程中使用该控制器,最简单的方法是将FIFO_inter-face.vhd、FIFO interface hw.tcl在FIFO interface hw.tcl~放在一个文件夹里,并将此文件夹放在QuartusⅡ的安装目录的ip文件夹中。
3.3 Nios CPU模块
搭建好SOPC框架之后,生成CPU原理图模块如图2所示。其中第二部分就是FIFO接口文件生成的模块图,包括输入信号(data、 empty、full)和输出信号(rdclk、rdreq、wrreq)。两个PIO接口con和seg,分别用作数码管的位选通和段选通。
![c.JPG](http://m.amcfsurvey.com/editerupload/fetch/20131127/195146_2_1.jpg)
4 软件设计
软件设计包括寄存器头文件、驱动软件及测试程序的设计。寄存器头文件FIFO reg.h定义了对FIFO进行读写操作的宏。IORD和IOWR是硬件抽象层提供的两个访问寄存器的C语言宏。下面代码是对FIFO的数据寄存器、状态寄存器和控制寄存器进行读写操作的宏。
驱动软件包括FIFO.h和FIFO.c文件。FIFO.h定义了驱动函数的原型和常量,FIFO.c则实现驱动函数的功能。FIFO.c中定义了一个函数,实现将采集到的数据在数码管上显示的功能。例如采集到电压值为5V电压时,数码管上显示5.00。
5 结束语
本文通过介绍基于SOPC的自定义FIFO接口的详细过程,用户可以在SOPC设计环境下自定义任意接口控制器。定制元件是SOPC Builder灵活性的重要体现,大大扩展了NiosⅡ系统的应用范围。本设计采用VHDL语言编写SOPC用户自定义逻辑模块,实现FIFO接口控制器的设计,此模块已经成功地在FFGA上实现数据采集模块与Nios CPU之间的通信。通过创建元件配置向导定制FIFO接口元件的方法,对定制元件的设计具有较好的借鉴作用。
本文引用地址://m.amcfsurvey.com/article/195146.htm
评论