文档库 最新最全的文档下载
当前位置:文档库 › 基于SOPC的自定义外设FIFO

基于SOPC的自定义外设FIFO

基于SOPC的自定义外设FIFO

刘 岩 王晓君

(河北科技大学 研究生学院)

摘 要:以Altera公司的FPGA芯片EP2C20Q208C8为例,详细介绍了在Quartus II 7.2的环境下,用SOPC Builder构建Nios软核时,自定义FIFO接口元件的方法。通过将采集到的电压信号,在数码管上显示的实验,实现FIFO寄存器与Nios CPU之间的通信。

关键词:现场可编程门阵列FPGA;Nios;先进先出;可编程片上系统Builder

Custom Peripheral FIFO Based on SOPC

Liu Yan Wang Xiaojun

(Graduate School of Translation, HeBei University of Science & Technology)Abstract:Taking Altera's FPGA chips, EP2C20Q208C8, as an example, the method for customizing FIF0 interface element is described in detail, which is based on Quartus II 7.2 environment, and when building a Nios soft-core with SOPC Builder. By the experiment that displays collected voltage signal on the digitrons, the communications between the FIFO register and Nios CPU are realized.

Key words:FPGA; Nios; FIFO; SOPC Builder

0 引言

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

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

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

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

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

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

(1)规划元件的硬件功能。若采用微控制器控制该元件,则规划访问该硬件的应用程序接口(API);

(2)在硬件和软件要求的基础上,定义一个恰当的接口(一般为Avalon Slave端口);

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

表1 典型的Avalon从接口信号

(4)单独验证元件的硬件功能;

(5)写用于描述寄存器的C头文件为软件定义硬件寄存器映像;

(6)写元件的驱动软件;

(7)把通过测试的源代码使用元件编辑器封装硬件HDL和软件文件,完成元件定制。

3 自定义FIFO接口的开发

3.1 硬件构建

3.1.1 接口模块的设计

根据FIFO的功能需要,该模块所需的Avalon总线输入信号为clk、reset_n、data、full、empty

信号,而模块输

电子元器件

Electronic Component & Device

出则为rdclk 、rdreq 、wrreq 信号。该接口模块定义了总线接口信号,作为顶层模块。

Avalon 总线接口设计文件的端口说明部分如下:

3.1.2 寄存器文件模块

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

3.1.3 行为模块

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

图1 FIFO接口仿真波形图

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,readdata 被指定为avalon_slave 类型,传输方向为output ,数据宽度为32,data 被指定为export 类型,传输方向为export ,数据宽度为32,等等。修改完之后,FIFO 的地址对齐方式选择动态地址对齐"Mermory(use dynamic bus sizing)"。时序设置也很重要,设置不当会造成数据的错误传输。系统FIFO 的读写时钟为50MHz ,周期为20ns ,设定建立时间为1ns ,将所有设置设置完之后进行保存。保存完之后在该工程目录下会出现FIFO_interface _hw.tcl 文件,FIFO 控制器接口就出现在左栏中,若想在其它工程中使用该控制器,最简单的方法是将FIFO_interface.vhd 、FIFO_interface_hw.tcl 在FIFO_interface_hw.tcl~

放在一个文

件夹里,并将此文件夹放在Quartus II 的安装目录的ip 文件夹中。

3.3 Nios CPU 模块

搭建好SOPC 框架之后,生成CPU 原理图模块如图2所示。其中第二部分就是FIFO 接口文件生成的模块图,包括输入信号(data 、empty 、full)和输出信号(rdclk 、rdreq 、wrreq)。两个PIO 接口con 和seg ,分别用作数码管的位选通和段选通。

图2 CPU原理图模块

4 软件设计

软件设计包括寄存器头文件、驱动软件及测试程序的设计。寄存器头文件FIFO_reg.h 定义了对FIFO 寄存器进行读写操作的宏。IORD 和IOWR 是硬件抽象层提供的两个访问寄存器的C 语言宏。下面代码是对FIFO 的数据寄存器、状态寄存器和控制寄存器进行读写操作的宏。

#define IORD_ALTERA_FIFO_data_reg(base) IORD(base,0)

#define IORD_ALTERA_FIFO_sta_reg(base) IORD(base,1)

#define IOWR_ALTERA_FIFO_ctrl_reg_DATA(base, data) IOWR(base,2,data)

驱动软件包括FIFO.h 和FIFO.c 文件。FIFO.h 定义了驱动函数的原型和常量,FIFO.c 则实现驱动函数的功能。FIFO.c 中定义了一个函数,实现将采集到的数据在数码管上显示的功能。例如采集到电压值为5V 电压时,数码管上显示5.00。

5 结束语

本文通过介绍基于SOPC 的自定义FIFO 接口的详细过程,用户可以在SOPC 设计环境下自定义任意接口控制器。定制元件是SOPC Builder 灵活性的重要体现,大大扩展了Nios II 系统的应用范围。本设计采用VHDL 语言编写SOPC 用户自定义逻辑模块,实现FIFO 接口控制器的设计,此模块已经成功地在FPGA 上实现数据采集模块与Nios CPU 之间的通信。通过创建元件配置向导定制FIFO 接口元件的方法,对定制元件的设计具有较好的借鉴作用。参考文献:

[1] 李兰英.Nios II 嵌入式软核SOPC 设计原理及应用[M]. 北京:北京航空航天大学出版社,2006.

[2] 潘松,黄继业,等.SOPC 技术实用教程[M].北京:清华 大学出版社,2005.

[3] 彭澄廉,等.挑战SOC--基于NIOS 的SOPC 设计与实践 [M].北京:清华大学出版社,2004.

[4] 田泽.嵌入式系统开发与应用[M ].北京:北京航空航 天大学出版社,2005.

[5] 孙恺,程世恒.Nios II 系统开发设计与应用实例[M].北

(下接75页)

最后下载至目标芯片EPM7032LC44-15,分配合理引脚,进行仿真。设计过程中调制阶段的基带信号,经调制仿真得到解调所需的输入信号。解调阶段对来自调制阶段得到的信号进行解调,所得解调信号即为原来调制基带信号,起到了调制解调的作用。整个设计过程采用VHDL 语言实现,设计灵活、修改方便,具有良好的可移植性及产品升级的系统性。

参考文献:

[1] 樊昌信,曹丽娜.通信原理[M].北京:国防工业出版 社,2007.3.

[2] 贾雅琼.基于FPGA的分频法FSK调制器的设计与实现

[D].湖南:湖南工学院电气与信息工程系,2007.3.

[3] 刘爱荣,王振成.EDA与CPLD开发应用简明教程[M]. 北京:清华大学出版社,2007.5.

[4] 郭颖娜.一种FSK信号调制解调电路的设计[J].现代电 子技术,2006,29(1):138-139.

[5] 陈华鸿.频移键控(FSK)及其最新应用[J].现代计算机. 2000(9):36-39.

作者简介:

刘家庆(1975-),工程师,主要研究方向:无线电监测、 频谱管理(上接77页)

京:北京航空航天大学出版社,2006.

作者简介:

刘岩,河北科技大学,在读研究生

手机:134********

电子信箱:zhoumoyingyuan123@https://www.wendangku.net/doc/2b10334721.html,

通信地址:河北省石家庄市裕华区体育南大街河北科技 大学新校区研究生学院10班(050018)

王晓君,河北科技大学,博士后

手机:137********

电子信箱:langchen123@https://www.wendangku.net/doc/2b10334721.html,

通信地址:河北省石家庄市裕华区体育南大街河北科技 大学新校区(050018)

相关文档
相关文档 最新文档