多看一些example design之后,你就會(huì)發(fā)現(xiàn)都是熟悉的配方。
一、Example Design
首先打開(kāi)example design,看看示例工程架構(gòu):

多看一些xilinx的example design之后,你就會(huì)發(fā)現(xiàn)都是熟悉的配方:
support是核心模塊,包含了IP的例化、時(shí)鐘及復(fù)位邏輯;重點(diǎn)理解。
frame_gen 是數(shù)據(jù)產(chǎn)生模塊;
frame_check是數(shù)據(jù)接收檢查模塊;
support.v
support是核心模塊,包含了IP的例化、時(shí)鐘及復(fù)位邏輯;時(shí)鐘和復(fù)位在前面文章已經(jīng)介紹過(guò)了,就不再啰嗦;先看下support對(duì)外的端口信號(hào):
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接口的發(fā)送及接收的端口信號(hào),與上一篇我們介紹的一致;我們使用Aurora IP,無(wú)非就是將需要發(fā)送的數(shù)據(jù)放到s_axi_tx_tdata數(shù)據(jù)總線上,從m_axi_rx_tdata數(shù)據(jù)總線上接收數(shù)據(jù)。有了這點(diǎn)認(rèn)知后,理解就簡(jiǎn)單多了。接著是GT串行I/O,對(duì)應(yīng)物理管腳。接著就是狀態(tài)信號(hào)channel_up,channel_up信號(hào)拉高,表明鏈路建立成功可以進(jìn)行正常數(shù)據(jù)收發(fā)。然后是一些時(shí)鐘和復(fù)位信號(hào),最后是DRP動(dòng)態(tài)重配置的相關(guān)信號(hào)。
繼續(xù)看support對(duì)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)
);
啊這,突然覺(jué)得官方例程的注釋已經(jīng)很清楚了,再羅里吧嗦的介紹有點(diǎn)煩。
真不是筆者偷懶~ = =||
個(gè)人建議,把時(shí)鐘復(fù)位理清楚,再按照f(shuō)raming接口時(shí)序,來(lái)設(shè)計(jì)數(shù)據(jù)的收發(fā)?;旧暇湍苁褂肁urora搬磚了。
二、仿真
直接看仿真,清晰明了。

可以看到,還是熟悉的配方,仿真頂層還是例化了兩個(gè)example實(shí)體,然后在TB頂層對(duì)其進(jìn)行環(huán)回連接:
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;
也就是說(shuō),Aurora-2的發(fā)送管腳接到了Aurora-1的接收管腳,那么Aurora-2發(fā)送的數(shù)據(jù)必然與Aurora-1接收到的數(shù)據(jù)是相等的;我們打開(kāi)仿真,驗(yàn)證一下。
首先把相關(guān)信號(hào)拖到仿真,并設(shè)置group,便于歸類查看:

根據(jù)推論,先看Aurora-2發(fā)送的第一個(gè)數(shù)據(jù):

如圖所示:
tx_data = 16’he6d5; 只有一個(gè)數(shù)據(jù),占了一個(gè)時(shí)鐘周期(user_clk時(shí)鐘域),所以tlast與tvalid都只是同時(shí)拉高了一個(gè)時(shí)鐘周期。同時(shí),tkeep = 2’h3;表明這個(gè)數(shù)據(jù)所有字節(jié)都是有效的。另外注意,數(shù)據(jù)是在valid和ready握手(同時(shí)有效)時(shí)發(fā)送的。
再看Aurora-1接收的第一個(gè)數(shù)據(jù):

如圖所示:
當(dāng)rx_tvalid有效時(shí),rx_data = 16’he6d5;同時(shí),tlast信號(hào)為1,表明這一次數(shù)據(jù)傳輸?shù)慕邮胀戤?。rx_tkeep = 2’h3,表明數(shù)據(jù)全部字節(jié)有效。
通過(guò)對(duì)比可知,接收數(shù)據(jù)等于發(fā)送數(shù)據(jù)。驗(yàn)證成功。
接下來(lái)可以繼續(xù)驗(yàn)證Aurora-2發(fā)送的第二個(gè)數(shù)據(jù)與Aurora-1接收的第一個(gè)數(shù)據(jù);也可以驗(yàn)證Aurora-1發(fā)送的數(shù)據(jù)與Aurora-2接收的數(shù)據(jù)。這里就不再啰嗦了。
下一篇,我們基于Aurora IP完成自己的數(shù)據(jù)收發(fā)。
審核編輯:湯梓紅
-
AURORA
+關(guān)注
關(guān)注
0文章
25瀏覽量
5730
發(fā)布評(píng)論請(qǐng)先 登錄
使用Aurora 6466b協(xié)議實(shí)現(xiàn)AMD UltraScale+ FPGA與AMD Versal自適應(yīng)SoC的對(duì)接
Xilinx FPGA串行通信協(xié)議介紹
Aurora接口的核心特點(diǎn)和應(yīng)用場(chǎng)景
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)23:UVM驗(yàn)證平臺(tái)
【六岳微LY-F335開(kāi)發(fā)板試用體驗(yàn)】介紹、環(huán)境搭建、工程測(cè)試
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)18:UVM驗(yàn)證平臺(tái)
芯片制造的四大工藝介紹
光庭信息SOME/IP平臺(tái)融合解決方案介紹
Xilinx Shift RAM IP概述和主要功能
燦芯半導(dǎo)體受邀參加IP-SoC Silicon Valley 2025
詳解Xilinx的10G PCS PMA IP
Xilinx平臺(tái)Aurora IP介紹(四)Example Design介紹
評(píng)論