多看一些example design之后,你就会发现都是熟悉的配方。
一、example design
首先打开example design,看看示例工程架构:
多看一些xilinx的example design之后,你就会发现都是熟悉的配方:
support是核心模块,包含了ip的例化、时钟及复位逻辑;重点理解。
frame_gen 是数据产生模块;
frame_check是数据接收检查模块;
support.v
support是核心模块,包含了ip的例化、时钟及复位逻辑;时钟和复位在前面文章已经介绍过了,就不再啰嗦;先看下support对外的端口信号:
module aurora_8b10b_0_support
(
// axi tx interface
input [15:0] s_axi_tx_tdata,
input [1:0] s_axi_tx_tkeep,
input s_axi_tx_tvalid,
input s_axi_tx_tlast,
output s_axi_tx_tready,
// axi rx interface
output [15:0] m_axi_rx_tdata,
output [1:0] m_axi_rx_tkeep,
output m_axi_rx_tvalid,
output m_axi_rx_tlast,
// gt serial i/o
input rxp,
input rxn,
output txp,
output txn,
// gt reference clock interface
input gt_refclk1_p,
input gt_refclk1_n,
// error detection interface
output frame_err,
output hard_err,
output soft_err,
// status
output lane_up,
output channel_up,
// system interface
output user_clk_out,
input gt_reset,
input reset,
input power_down,
input [2:0] loopback,
output tx_lock,
input init_clk_p,
input init_clk_n,
output init_clk_out,
output tx_resetdone_out,
output rx_resetdone_out,
output link_reset_out,
output sys_reset_out,
//drp ports
input drpclk_in,
input [8:0] drpaddr_in,
input drpen_in,
input [15:0] drpdi_in,
output drprdy_out,
output [15:0] drpdo_out,
input drpwe_in,
output pll_not_locked_out
);
首先是framing接口的发送及接收的端口信号,与上一篇我们介绍的一致;我们使用aurora ip,无非就是将需要发送的数据放到s_axi_tx_tdata数据总线上,从m_axi_rx_tdata数据总线上接收数据。有了这点认知后,理解就简单多了。接着是gt串行i/o,对应物理管脚。接着就是状态信号channel_up,channel_up信号拉高,表明链路建立成功可以进行正常数据收发。然后是一些时钟和复位信号,最后是drp动态重配置的相关信号。
继续看support对aurora 8b/10b的例化:
aurora_8b10b_0 aurora_8b10b_0_i
(
// axi tx interface
.s_axi_tx_tdata (s_axi_tx_tdata),
.s_axi_tx_tkeep (s_axi_tx_tkeep),
.s_axi_tx_tvalid (s_axi_tx_tvalid),
.s_axi_tx_tlast (s_axi_tx_tlast),
.s_axi_tx_tready (s_axi_tx_tready),
// axi rx interface
.m_axi_rx_tdata (m_axi_rx_tdata),
.m_axi_rx_tkeep (m_axi_rx_tkeep),
.m_axi_rx_tvalid (m_axi_rx_tvalid),
.m_axi_rx_tlast (m_axi_rx_tlast),
// gt serial i/o
.rxp (rxp),
.rxn (rxn),
.txp (txp),
.txn (txn),
// gt reference clock interface
.gt_refclk1 (gt_refclk1),
// error detection interface
.frame_err (frame_err),
// error detection interface
.hard_err (hard_err),
.soft_err (soft_err),
// status
.channel_up (channel_up),
.lane_up (lane_up),
// system interface
.user_clk (user_clk_i),
.sync_clk (sync_clk_i),
.reset (system_reset_i),
.power_down (power_down),
.loopback (loopback),
.gt_reset (gt_reset_i),
.tx_lock (tx_lock_i),
.init_clk_in (init_clk_i),
.pll_not_locked (pll_not_locked_i),
.tx_resetdone_out (tx_resetdone_i),
.rx_resetdone_out (rx_resetdone_i),
.link_reset_out (link_reset_i),
.drpclk_in (drpclk_i),
.drpaddr_in (drpaddr_in),
.drpen_in (drpen_in),
.drpdi_in (drpdi_in),
.drprdy_out (drprdy_out),
.drpdo_out (drpdo_out),
.drpwe_in (drpwe_in),
//_________________common ports _______________________________
// ------------------------- common block - qpll ports ------------------
.gt0_qplllock_in (gt0_qplllock_i),
.gt0_qpllrefclklost_in (gt0_qpllrefclklost_i),
.gt0_qpllreset_out (gt0_qpllreset_i),
.gt_qpllclk_quad1_in (gt_qpllclk_quad1_i ),
.gt_qpllrefclk_quad1_in (gt_qpllrefclk_quad1_i ),
.sys_reset_out (sys_reset_out),
.tx_out_clk (tx_out_clk_i)
);
啊这,突然觉得官方例程的注释已经很清楚了,再罗里吧嗦的介绍有点烦。
真不是笔者偷懒~ = =||
个人建议,把时钟复位理清楚,再按照framing接口时序,来设计数据的收发。基本上就能使用aurora搬砖了。
二、仿真
直接看仿真,清晰明了。
可以看到,还是熟悉的配方,仿真顶层还是例化了两个example实体,然后在tb顶层对其进行环回连接:
assign rxn_1_i = txn_2_i;
assign rxp_1_i = txp_2_i;
assign rxn_2_i = txn_1_i;
assign rxp_2_i = txp_1_i;
也就是说,aurora-2的发送管脚接到了aurora-1的接收管脚,那么aurora-2发送的数据必然与aurora-1接收到的数据是相等的;我们打开仿真,验证一下。
首先把相关信号拖到仿真,并设置group,便于归类查看:
根据推论,先看aurora-2发送的第一个数据:
如图所示:
tx_data = 16’he6d5; 只有一个数据,占了一个时钟周期(user_clk时钟域),所以tlast与tvalid都只是同时拉高了一个时钟周期。同时,tkeep = 2’h3;表明这个数据所有字节都是有效的。另外注意,数据是在valid和ready握手(同时有效)时发送的。
再看aurora-1接收的第一个数据:
如图所示:
当rx_tvalid有效时,rx_data = 16’he6d5;同时,tlast信号为1,表明这一次数据传输的接收完毕。rx_tkeep = 2’h3,表明数据全部字节有效。
通过对比可知,接收数据等于发送数据。验证成功。
接下来可以继续验证aurora-2发送的第二个数据与aurora-1接收的第一个数据;也可以验证aurora-1发送的数据与aurora-2接收的数据。这里就不再啰嗦了。
下一篇,我们基于aurora ip完成自己的数据收发。
六要素一体气象传感器特点介绍
一文详细了解无线网卡
铝合金激光焊接技术的特点是怎样的
打造制造强国的精密加工技术
常见电容器好坏的几种检测方法
Xilinx平台Aurora IP介绍(四)Example Design介绍
语音机器人会把人工给替换掉吗
英特尔与EMQ共同推出联合工业解决方案
基于Spartan-3 FPGA的DSP功能实现方案
PFC电流隔离采样电路的工作原理
标新立异价出售AgilentN5245A网络分析仪N5245A
光学影像业务保持快速增长,欧菲光 2020 年净利同比预增 59%-78%
环境光传感器的原理 环境光传感器的测试内容
中奖名单来了,快来看看有没有你
TVOC检测仪的维护保养方法
力特公司如何满足汽车产品的重要电路保护应用?
光学BGA返修台在实际操作中有何优势?
成都APP开发|成都APP开发公司
思特威于上交所成功上市,股价飞涨79.82%
中美双方有望走向和解,并不影响国内5G进程