博客首页 | 排行榜 |

KiKi的博客

FPGA工程实践,欢迎互相学习和交流,yq000cn at gmail.com

个人档案
博文分类
在EDK下如何设计三态inout端口  2010-08-05 20:04

 在Xilinx的EDK下,Platform generator是不直接支持三态的inout端口的。意思说我在设计中定义了三态的inout端口,如果不经过特殊的配置话,是无法综合的。

例如:

我需要在总线上添加一个外围设备,该设备是通过IIC来配置板间设备,如CH7301(DVI输出芯片),AD9980(8bit 显示接口芯片)。这个时候我得定义IIC的两个接口:SCL和SDA;

一般的三态inout端口在VHDL下可以这样定义:

signal SCL : inout std_logic;
signal SDA : inout std_logic;
…..
SCL <= SCL_PAD_O when (SCL_OE='0’) else ‘Z’;        -- ‘Z’必须大写,
SDA <= SDA_PAD_O when(SDA_OE=‘0’) else ‘Z’;
SCL_PAD_I <= SCL;
SDA_PAD_I <= SDA;

 

SCL 

图1. SCL三态端口

 SDA

图2.SDA三态端口

上面的定义在ISE工程下没有问题,会综合可以得到如图3的原理图。但是在EDK工程下需要做一定的修改。

首先在顶层中定义如下端口(以VHDL为例):

SDA_PAD_I           : in  std_logic;
SDA_PAD_O         : out std_logic;
SDA_OE              : out std_logic;
SCL_PAD_I          : in  std_logic;
SCL_PAD_O        : out std_logic;
SCL_EN             : out std_logic;

最终这6个逻辑上的端口需要定义到2个三态的INOUT端口上,那应该如何修改呢?这个时候就需要*.mpd文件,即Microprocessor Peripheral Description文件(详见参考2)。

自定义的IP core会在生成一个pcores 目录,下面一般有/data,/hdl,/netlist,*.mpd文件会在/data目录下面,需要添加的内容如下:

PORT SDA_PAD_I = "", DIR = I
PORT SDA_PAD_O = "", DIR = O
PORT SDA_OE = "", DIR = O
PORT SCL_PAD_I = "", DIR = I
PORT SCL_PAD_O = "", DIR = O
PORT SCL_PAD_T = "", DIR = O
PORT SDA = "", DIR = IO, THREE_STATE = TRUE, TRI_I = SDA_PAD_I, TRI_O = SDA_PAD_O, TRI_T = SDA_OE, ENABLE=SINGLE
PORT SCL = "", DIR = IO, THREE_STATE = TRUE, TRI_I = SCLK_PAD_I, TRI_O = SCL_PAD_O, TRI_T = SCLK_OE, ENABLE=SINGLE

然后将SDA和SCL端口设置为external port,即跟FPGA外部相连,最后的综合得到的物理端口为SDA和SCL,就是三态inout端口了。如图3 所示。

image

图3. 三态端口的BUF原理图

Ref:

  1. Problems about Tri-state INOUT ports in user-created peripheral with virtex5
  2. Platform Specification Fotmat Reference Manual, Xilinx

类别:Xilinx FPGA development |
上一篇:基于Xilinx FPGA 分形显示视频 | 下一篇:Digilent上海实习开始
以下网友评论只代表其个人观点,不代表本网站的观点或立场