FPGA中双向端口IO的研究

上传人:夏** 文档编号:558914862 上传时间:2023-09-03 格式:DOC 页数:13 大小:172KB
返回 下载 相关 举报
FPGA中双向端口IO的研究_第1页
第1页 / 共13页
FPGA中双向端口IO的研究_第2页
第2页 / 共13页
FPGA中双向端口IO的研究_第3页
第3页 / 共13页
FPGA中双向端口IO的研究_第4页
第4页 / 共13页
FPGA中双向端口IO的研究_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《FPGA中双向端口IO的研究》由会员分享,可在线阅读,更多相关《FPGA中双向端口IO的研究(13页珍藏版)》请在金锄头文库上搜索。

1、FPGA 中双向端口I/O的研究 字体大小: 小 中 大 作者:莫海永 张申科 来源: 日期:2007-03-07 点击:1039 摘要:针对现场可编程门阵列(FPGA)芯片的特点,研究 FPGA 中双向端口I/O 的设计,同时给出仿真初始化双向端口I/O 的方法。 采用这种双向端口的设计方法,选用 Xilinx 的Spartan2E 芯片 设计一个多通道图像信号处理系统。引言 FPGA 是现场可编程门 阵 列 的 缩 写,它 是 在PAL,GAL 及 EPLD 等可编程器件的基础上发展起 来的。FPGA 具有速度快、密 度 高、功 耗 小 的 特点。 采用 FPGA 芯片进行专用集成电路设计

2、,既可以解决定制电路缺乏灵活性的不足,又可以通过相关的软 硬件环境掌握芯片的最终功能,提高一次设计的成功 率,所以,目前 FPGA 在电子设计中已被广 泛使用。 同时,由于 FPGA 经常要和外部存储器及 CPU 进行数据输入输出交换,而利用双向端口的设计来进行数据交换可以成倍地节省各自的引脚资源。 双向端口顾名思义是一种既可以作为输入端口 接收数据,也可以作为输出端口发出数据,它对数据 的操作是双向的。 比如某个设计需要一个 16 位的 数据输入口和一个16 位的数据输出口,并且数据输 入和输出不会同时发生。 如果数据输入口和输出口 分别设计则需要32根数据线,而用双向端口来设计,则只需要1

3、6 根数据线,这样就节省了16 根数据 线引脚。由于现在的大多数资料对双向端口的设计介绍很少,本文给出 FPGA 中双向端口的设计原理和方法,以及仿真和初始化双向端口的方法,同时选用Xilinx的Spartan2E 芯片进行实际应用。1、 FPGA 中双向端口的设计原理和Verilog硬件语言程序设计 首先介绍双向端口在 FPGA 内部硬件资源是怎样实现的。 在 FPGA 中 它是通过对三态门控制来实现双向端口的,比如在 Xilinx 的Spartan2E 中 的图例(如图1 所示): 图1 双向端口的硬件图 当z=0 时,上面输出的管子开通,此时数据可以从上面的管子中输出,这时双向端口就作为

4、输出口;当z=1 时,上面的管子被置为高阻态,数据不能从上面的管子输出,此时数据只可以从下面的管子由外向内输入,这时的双向端口是输入口。限于篇幅,我们做一个简单的模型来说明双向 端口的设计。下面我们用 Verilog 硬件语言进行双向端口的程序设计,为了看出双向端口分别作为输入端口和输出端口的功能,我们的模块分别定义一个数据输入口 din 和一个数据输出口 dout,一个三态门选通信号 z,触发 时钟 clk,还有双向端口 dinout。 我们设数据为8 位宽。 图2为该模块图:图2 定义的模块图 输入口din 定义:input 7:0 din;当双向端口 dinout作为输出口时,我们从 d

5、in 端口输入数据到模块中,让数据从dinout口出来。 输出口 dout定义:output 7:0 dout;当双向端口dinout作为输入口时,我们让数据从dinout口 输入,从输出口dout输出。 双向端口dinout定义:inout7:0 dinout;三态门选通信号z:input z; 当z=1 时,把三态门置为高阻态,这时 dinout 作为输入口用;当z=0 时,开通三态门,这时 dinout 作为输出口用。 三态门控制语句为: asigndinout=(!z)?din_reg:8bz; 总的完整程序如下: module dinout(din,z,clk,dout,dinout

6、); input 7:0 din;input z; input clk; output7:0 dout;inout 7:0 dinout; reg 7:0 dout; reg 7:0 dinreg; asign dinout= (!z)?din_reg:8bz; always (posedge clk)begin if(!z) din_reg=din; else dout=dinout;end Endmodule 2、 仿真及初始化双向端口 下面我们对上述程序进行时序仿真。 这里我们选用的 FPGA 芯片为 Xilinx 的 Spartan2E 系列,型 号为 xc2s300e-7pq208,

7、在ISE Foundation6.1 软件中综合及布局布线,并用 Modelsim Simulator进行时序仿真。 当双向端口dinout作为输出口时,我们不需要 对它进行初始化,只要开通三态门。 我们设定在200ns后,让数 据10,11,12,13,14,15,16,17,18,19,20 依次从 din 口输入,然后用20ns的采样时钟从dinout口输出。 它的测试仿真顶层模块为timescale 1ns/1ps module dinoutest(); reg 7:0 din;reg z;reg clk; wire 7:0 dout; wire 7:0 dinout; integer

8、 i; dinout uut(.din(din),.z(z),.clk(clk),.dout(dout),.dinout(dinout); always #10clk=clk; initial begin din = 0; z = 0; clk = 0; # 200 din=10; for(i=0;i10;i=i+1) #20 din=din+1; end endmodule该仿真的时序图如图3 所示:可以看出这时双向端口 dinout作为输出口, 输出从din 输入口输入到模块中的数据。当双向端口dinout作为输入口时,我们需要对它进行初始化赋值,此时关闭三态门。 而对双向端 口的初始化赋

9、值,如果把它跟一般的输入口一样直接赋 值 给它,则会出错,因为在定义它的时候是wire型了,而 不是reg 型。 在许多 Verilog 书籍和参考资料中,有关双向端口的初始化赋值介绍的很少。这里需要 用到一个force 命令,用来给dinout 输入赋值。 我 们设定在200ns 后,让数据20,19,18,17,16,15,14,13,12,11,10 从dinout口输入模块,然后用 20ns的采样时钟从输出口 dout输 出。以下是它的仿真顶层模块timescale 1ns/1ps module dinoutest(); reg 7:0din;reg z;reg clk; wire 7

10、:0 dout; wire 7:0 dinout; integeri; dinoutuut(.din(din),.z(z),.clk(clk),.dout(dout),.dinout(dinout); always #10clk= clk; initial beginz = 1; clk = 0; force dinout=20;# 200 for (i=0;i10;i=i+1)#20 force dinout=dinout-1;end endmodule该仿真的时序图如图4 所示: 图4 双向端口作为输入口时的时序仿真 可以看出这时双向端口 dinout作为输入口,数 据从dinout口 输

11、入模块,然后从输出口dout完整地输出来。3 、实际应用 这种双向端口设计方法已被我们用到目前开发 的一个多通道图象捕获和显示控制系统中。 在该系 统中,FPGA 接收从两个图像传感器传来的数字视频信号,然后根据CPU的命令对这两路视频信号进行四种显示模式的组合操作。FPGA 将处理好的 信号存到外部存储器中。如果LCD显示信号来了, FPGA 从外部存储器中取数据给LCD显示。如果CPU 想要对某一帧图像数据进行图象识别操作,可 以经过 FPGA 从外部存储器中把该帧图象数据取下来。 其中 LCD 的时钟频率为 6M,FPGA 对外部存储器及 CPU 数据 操作的时钟频率为 24M,并且LC

12、D显示操作优先级最 高。在这个系统中用到了两个双向端口,一个是FPGA 与CPU的数据交换, 另一个是FPGA与外部存储器之间的数据交换,他们都是16 位的数据交换,由于用了双向端口,节省了32个引脚资源,同时优化了器件的选择和整体设计,降低了成本。 图 5为多通道图象捕获和显示控制系统的框图。图5 应用双向端口的多通道图象捕获和显示控制系统4、结论 由于现在 FPGA 设计和外部存储器或 CPU 数据交换的频繁运用,以及引脚资源有限,而使用双向端口设计可以成倍的节省数据引脚线,所以设计好FPGA 的双向端口至关重要。 在设计 FPGA 中的双向端口时应注意两点:其一,要用三态门的控制来 处理

13、实现双向端口;其二,要分别指定双向端口作为输出口和输入口时,对外部对象的数据操作。FPGA管脚分配需要考虑的因素 字体大小: 小 中 大 作者: 来源: 日期:2007-01-30 点击:814 在芯片的研发环节,FPGA验证是其中的重要的组成部分,如何有效的利用 FPGA 的资源,管脚分配也是必须考虑的一个重要问题。一般较好的方法是在综合过程中通过时序的一些约束让对应的工具自动分配,但是从研发的时间段上来考虑这种方法往往是不可取的,RTL验证与验证板设计必须是同步进行的,在验证代码出来时验证的单板也必须设计完毕,也就是管脚的分配也必须在设计代码出来之前完成。所以,管脚的分配更多的将是依赖人,

14、而非工具,这个时候就更需要考虑各方面的因素。 综合起来主要考虑以下的几个方面: 1、 FPGA所承载逻辑的信号流向。 IC 验证中所选用的 FPGA一般逻辑容量都非常大,外部的管脚数量也相当的丰富,这个时候就必须考虑到 PCB 设计时的布线的难度,如果管脚的分配不合理,那么有可能在PCB 设计时出现大量的交叉的信号线,这给布线带来很大的困难,甚至走不通,或者是即便是布线走通了,也有可能由于外部的延时过大而不满足时序方面的要求。所以在管脚分配前对 FPGA工作的环境要相当的熟悉,要对其中的信号来自哪里去向何方非常的清楚,这就按照连线最短的原则将对应的信号分配到与外部器件连线最近的 BANK 中。

15、 2、 掌握 FPGA 内部 BANK 的分配的情况。 现在 FPGA 内部都分成几个区域,每个区域中可用的 I/O 管脚数量各不相同。在 IC 验证中都是采用了ALTERA 与XILINX系列的FPGA ,这两个厂商的FPGA中内部BANK的分配有一定的差异,这可以在设计中查阅相关的手册。下面与 ALTERA 中 Stratix II系列的 FPGA内部 BANK 的分配为例来进行说明。 图中详细说明了 FPGA 内部 BANK 的分配情况和每个 BANK 中所支持的 I/O标准。根据 FPGA中内部 BANK 的分配的情况,同时结合图 1 中信号的流向也就可以大体固定FPGA在单板中的方向,同时按照就近的原

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号