基于SOPC的自定义外设FIFO

2011-02-15 12:56:25来源: 互联网

引言

随着微电子技术和半导体工业的不断发展,数字技术已进入片上系统时代。从而又发展了SOPC(可编程片上系统),SOPC是Altera 公司提供的片上可编程系统解决方案。Nios嵌入式处理器是Altera公司推出的软核CPU,提供给用户,并在Altera的FPGA上实现优化,用于 SOPC集成并在FPGA上实现,提高了系统的灵活性和扩大范围。

定义外设是SOPC系统灵活性的重要体现,是SOPC系统中极其重要的一种设计方法。在大量的数据常需要处理时,利用自定义外设由具体的硬件来实现,可以极大程度地提高系统运行的速度,同时便于系统的模块化与集成化,是SOPC系统设计的重中之重。定制的用户外设能够以“硬件加速器”的形式实现各种各样用户要求的功能。

1 定制Avalon总线型FIFO接口元件

由于选用的AD采样速率非常高,并且只由时钟控制端控制,因此设计时在AD采集模块和Nios CPU之间加一个FIFO存储器,从系统外部接口送来的数据先在FIFO中缓存,然后将数据读入SDRAM,在片上进行数据处理。整个流程在FPGA平台上采用SOPC方法实现。在SOPC Builder中只有厂商提供的片上FIFO接口控制器,没有外部使用的FIFO接口控制器核,因此需要用户自定义FIFO接口控制器,这样才能满足系统外围电路的应用要求。文中采用创建元件配置向导定制FIFO接口元件的方法。

2 用户自定义IP核的开发流程

自定义外设作为NiosII软核处理器超强灵活性的体现,它的开发要遵循一定的规律。一个用户自定义外设必须用硬件描述语言来描述硬件的逻辑。用户自定义IP按照对Avalon总线操作的不同可分为Avalon Master、Avalon Slaver和Avalon Streaming外设。由于Avalon Master和Avalon Streaming外设的开发比Avalon Slave外设要复杂,所以用户开发的外设大部分为Avalon Slave外设,但是开发流程是一样的。典型的Avalon外设的开发步骤如下:

(1)规划元件的硬件功能。若采用微控制器控制该元件,则规划访问该硬件的应用程序接口(API);
(2)在硬件和软件要求的基础上,定义一个恰当的接口(一般为Avalon Slave端口);
(3)使用硬件描述语言描述硬件逻辑。一个典型元件的硬件架构一般由接口模块、寄存器文件模块和行为模块3部分组成。接口模块作为顶层模块,定义总线接口信号;寄存器文件模块完成该元件与外部信号的通信,提供访问与控制元件的逻辑界面;行为模块实现元件的硬件功能。片上总线Avalon从端口的信号都不是必须的,一个典型的Avalon从端口所包含的信号如表1所示。

(4)单独验证元件的硬件功能;
(5)写用于描述寄存器的C头文件为软件定义硬件寄存器映像;
(6)写元件的驱动软件;
(7)把通过测试的源代码使用元件编辑器封装硬件HDL和软件文件,完成元件定制。

3 自定义FIFO接口的开发

3.1 硬件构建

3.1.1 接口模块的设计

根据FIFO的功能需要,该模块所需的Avalon总线输入信号为clk、reset n、data、full、empty信号,而模块输出则为rdclk、rdreq、wrreq信号。该接口模块定义了总线接口信号,作为顶层模块。
Avalon总线接口设计文件的端口说明部分如下:


3.1.2 寄存器文件模块

寄存器文件模块实现与外部信号的通信,提供了访问与控制元件界面。在寄存器文件中,Avalon总线的地址信号有两位,00表示读取数据寄存器,O1表示读取状态寄存器,10表示写控制寄存器,address的11保留。在片选和读信号的控制下,分别读数据寄存器和状态寄存器。在片选和写信号的控制下,向控制寄存器写入数据。

3.1.3 行为模块

行为模块实现元件的硬件功能,当写请求(wrreq)信号有效时,向数据寄存器中写入数据,当读请求(rdreq)信号有效时,读取数据寄存器中的数据。在QuartusⅡ7.2环境下,基于EP2C20Q240C8器件的FIFO接口的仿真波形如图1所示。


3.2 FIFO接口模块的添加

在Quartus II工程中打开SOPC Builder,在SOPC Builder界面的左栏中点击Create new component打开创建元件向导,弹出Component Editor,在HDL Files选项卡中添加HDL文件(FIFO interface.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,分别用作数码管的位选通和段选通。

 

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接口元件的方法,对定制元件的设计具有较好的借鉴作用。

关键字:定义  外设

编辑:小来 引用地址:http://www.eeworld.com.cn/FPGA/2011/0215/article_1836.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
定义
外设

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved