Aurora接口使用说明.docx

上传人:b****3 文档编号:2225188 上传时间:2022-10-28 格式:DOCX 页数:15 大小:1.33MB
下载 相关 举报
Aurora接口使用说明.docx_第1页
第1页 / 共15页
Aurora接口使用说明.docx_第2页
第2页 / 共15页
Aurora接口使用说明.docx_第3页
第3页 / 共15页
Aurora接口使用说明.docx_第4页
第4页 / 共15页
Aurora接口使用说明.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Aurora接口使用说明.docx

《Aurora接口使用说明.docx》由会员分享,可在线阅读,更多相关《Aurora接口使用说明.docx(15页珍藏版)》请在冰豆网上搜索。

Aurora接口使用说明.docx

Aurora接口使用说明

在AMC-2C667X平台上使用FPGA的Aurora接口说明

声明:

本文档仅面向初学者。

1、针对平台用的V6芯片型号新建一个ISE工程,工程中加入AuroraIP核,IP核的设置如下(当然也可以选择其他设置,以下均是针对本测试设置而言)

图1

主要参数:

lanes-通道数,即使用的GTX收发器个数

Lanewidth:

aurora核与用户接口的数据位宽(一般可选2B或者4B)

Lanerate:

Aurora核的对外通信速率,由于采用8B/10B编码,实际有效速率要乘以0.8。

GTREFCLK:

GTX参考时钟频率

采用全双工,流水通信模式。

详细请参考Aurora的UG。

好了,最后一页了,这IP核设置够简单吧!

(一共才两页好伐…),让你选择GTX位置

图2

平台上的V6片子一共有6组GTXQUAD,每个QUAD有4个GTX,选择一个GTX与平台

的SFP+F2相连,平台说明书写清楚了,是MGT_113_1,就是它了。

生成了这个核以后,核的文件夹下会多出一堆文件,这就是XILINX给你的一个示例工程

-exampledesign.

图3

接下来就可以仿真啦。

仿真:

你可以直接使用它提供的testbench仿真,没问题。

但是有更简单的方法,其实

你仿真只是为了看看它的时序,看看你加的东西对不对,因为只要你加对了,仿真一定

通过。

那么简单的方法呢?

打开modelsim,不要告诉我你没装,或者装了没有关联ISE仿真库,那你得先把这个问

题解决了再说。

好了之后,新建一个modelsim工程(file-new…)在你之前那堆文件的

/simulation/functional文件夹下,看图说话~

图4

下一个界面叫你createnewfiles啥的直接close。

然后你就在modelsim命令窗口轻轻地

敲了一行命令:

dosimulate_mti.do

这个simulate_mti.do就是人家已经仿真好的仿真文件,就在那个文件夹里,意思就是我

仿好了,你拿去用吧,看看就好,没什么技术含量。

Soitbegins:

图5

当然敲了这个命令你的modelsim可能会报错,多半是因为XILINX环境变量的设置问题,

去XX找下答案。

编译通过了之后过了一会,就出现了这个界面:

图5

请务必点否,否则你百忙了…

然后如果出现了最终的仿真波形,那么恭喜你成功了!

图6

当然你也可以让仿真多持续一段时间,怎么弄呢?

你需要自己去改它的testbench。

作为一个使用快速使用该IP的文档,我只告诉你我们需要关注的信号无非这么几个,下

图中黑的信号:

图7

简单吧!

上面的五个信号就是用户接口信号,下面的几个是系统接口信号,你要做的就

是写个模块产生数据然后送到Aurora核当中,所以请重点关注那几个用户接口信号及其

时序。

这几个信号什么意思怎么用?

参考UG。

________________________________华丽丽的分割线_____________________________

2、接下来是重点,请至少先读了下Aurora的UserGuide。

综合实现:

下面你要做的就是,针对它重新新建一个工程,然后把那堆文件夹内的所

有.v(hd)和.ucf文件都包含就去,结果就是一个可编译的可用的东西,这些东西没看懂?

其实我也没看懂,没关系。

当然有些地方你需要改动,慢慢往下看。

这个工程建立以后就是这样的:

图8

当然,chipscope的那几个核是我手动添加的方便查看信号而已,你要是牛逼,能直接保

证对就不用加了。

要使用那几个核,上图右侧有个参数叫USE_CHIPSCOPE要设置为1。

接下来看看这个工程的大体结构:

Aurora_module_i:

以源代码的形式给了你Aurora核的实现,与在这里直接添加一个Aurora

IP核一样一样的…是为了方便你修改其中的某些参数。

如果不是大神,请不要肆意修改

它。

Standard_cc_module_i:

时钟补偿模块,用来给通信双方进行时钟补偿,因为这个协议对

时钟要求很高,两端的时钟频偏在100个ppm内都可以补偿回来,时钟同步嘛~

Frame_gen_i/frame_check_i:

用户接口端程序,你要写用户程序可以参考它对Aurora用户

接口的操作方式,其实很简单,UG里面有一个用户接口时序。

其他的不说了自己看吧。

然后你就需要考虑修改ucf文件了,要针对你的片子和平台,这个一开始不熟的话有点

头痛的…下面是我跑通的ucf,给你的参考价值只在于它的管脚锁定:

##UCFgeneratedforxc6vlx240t-ff1759-2device##

#125.0MHzGTXReferenceclockconstraint

NET"GTXQ1_left_i"TNM_NET=GT_REFCLK;

TIMESPECTS_GTXQ1_LEFT_I=PERIOD"GT_REFCLK"125.0MHzHIGH50%;

#UserClockConstraint:

basedonthelinerate(2.0Gbps)andlanewidth(2-Byte)

NET"user_clk_i"TNM_NET=USER_CLK;

TIMESPECTS_USER_CLK_I=PERIOD"USER_CLK"100.0MHzHIGH50%;

#MGT113REFCLK1

NETGTXQ1_PLOC=AD8|IOSTANDARD=LVDS_25|DIFF_TERM=TRUE|PERIOD=8ns

PRIORITY0;

NET"GTXQ1_N"DIFF_TERM="TRUE";

NET"GTXQ1_N"IOSTANDARD=LVDS_25;

NET"GTXQ1_N"LOC=AD7;

#DiffINITClockConstraint

#RefClocksforFPGA1-100M//mustlowerthanrefclkofGTX

NET"INIT_CLK_P"DIFF_TERM="TRUE";

NET"INIT_CLK_P"PERIOD=10ns;

NET"INIT_CLK_P"IOSTANDARD=LVDS_25;

NET"INIT_CLK_P"LOC=J42;

NET"INIT_CLK_N"DIFF_TERM="TRUE";

NET"INIT_CLK_N"IOSTANDARD=LVDS_25;

NET"INIT_CLK_N"LOC=K42;

#100MHzboardClockConstraint

NET"reset_logic_i/init_clk_i"TNM_NET=INIT_CLK;

TIMESPECTS_INIT_CLK=PERIOD"INIT_CLK"10nsHIGH50%;

TIMESPEC"TS_TIG1"=FROM"INIT_CLK"TO"USER_CLK"TIG;

NETGT_RESET_INLOC=AD31;

//NETRESETPULLUP;

//NET"RESET"LOC=P28;

//NETLEDLOC=N28;

#ErrorsIndicators

NETHARD_ERRLOC=N28;#LED2_FPGA0

NETSOFT_ERRLOC=P28;#LED3

#ChannelandLaneupIndicators

NETCHANNEL_UPLOC=K33;#LED0

NETLANE_UPLOC=K32;#LED1

//NETclk_dis_outLOC=L32;#LED7

#GTLocation-MGT_113_1

INSTaurora_module_i/gtx_wrapper_i/GTXE1_INST/gtxe1_iLOC=GTXE1_X0Y5;

#TX/RXlocation

NETRXPLOC=AF3;#MGT_113_1,connectedtoSFP+F2

NETRXNLOC=AF4;

NETTXPLOC=AJ1;

NETTXNLOC=AJ2;

很好很强大有木有!

我当时调这个的时候就没个人直接给我个ucf…

然后程序中还有些地方需要改动,慢慢往下看。

看见ucf文件中关于复位的部分没有?

就是这段:

NETGT_RESET_INLOC=AD31;

//NETRESETPULLUP;

//NET"RESET"LOC=P28;

//NET"GT_RESET_IN"LOC=N28;

注释的部分就是它原本生成的东西,把两个复位信号RESET和GT_RESET_IN分别约束到两个按键上来复位,这个复位按照UG上的说明还有一定的时序要求,但是一般这样约束都不会有问题,比如XILINX官方板子这样约束是没问题的。

但是我们的平台就不行了,为什么?

因为没有按键!

它不是个开发板啊……

然后我尝试过另外的复位方法:

写个小程序定时复位,还有就是通过chipscope的虚拟IO口核VIO给Aurora施加复位信号,均无果而终。

那么为什么要把GT_RESET_IN约束到AD31那个管脚上呢?

首先解释下我是这样弄的:

wireF1_F0_WARM_RESET;

assignF1_F0_WARM_RESET=!

GT_RESET_IN;

aurora_125m_RESET_LOGICreset_logic_i

.RESET(F1_F0_WARM_RESET),

.USER_CLK(user_clk_i),

.INIT_CLK_P(INIT_CLK_P),

.INIT_CLK_N(INIT_CLK_N),

.GT_RESET_IN(F1_F0_WARM_RESET),

.TX_LOCK_IN(tx_lock_i),

.PLL_NOT_LOCKED(pll_not_locked_i),

.SYSTEM_RESET(system_reset_i),

.GT_RESET_OUT(gt_reset_i)

);

也就是说,把reset_logic这个模块(为啥是它?

因为它的作用就是对输入的复位信号进行时钟去抖和时序纠正然后把输出的复位供给其他模块使用)的两个复位信号—RESET和GT_RESET_IN连到了同一根信号上,即F1_F0_WARM_RESET,而它是连接到AD31管脚连接进来的复位信号的取反信号上。

AD31这个管脚连接到了平台上FPGA1给FPGA0热复位的信号上,因此它连接的是一个复位信号,而取反只是为了将低有效转为高有效而已,因为Aurora中的模块都是用高电平有效复位。

就这么一个复位问题,不知道耗了我多少宝贵时间啊~

复位的问题解决了,时钟呢?

约束文件中有这么几段:

#125.0MHzGTXReferenceclockconstraint

NET"GTXQ1_left_i"TNM_NET=GT_REFCLK;

TIMESPECTS_GTXQ1_LEFT_I=PERIOD"GT_REFCLK"125.0MHzHIGH50%;

#UserClockConstraint:

basedonthelinera

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1