基于VC709构建FPGA开发学习平台(五)-光纤接口AuroraIP例化与仿真测试

文章详细描述了如何在top.v文件中例化EXAMPLE_DESIGNIP,涉及时钟复位设置、接口约束以及如何在Testbench中建立并运行仿真,观察模块工作状态。重点强调了复位信号的正确使用和模拟环境中的注意事项。
摘要由CSDN通过智能技术生成

一、 对EXAMPLE_DESIGN进行例化

前续文章分析过,对example_design提供正确的时钟和复位,其就具备了开始工作的条件,例化接口比较简单,在top.v中,顶层端口列表增加GT接口:

module top(
       ......
           // GTX Serial I/O
           input  wire  [0:0]    gt_rxp,
           input  wire  [0:0]    gt_rxn,
               
           output wire  [0:0]    gt_txp,
           output wire  [0:0]    gt_txn,
       ......
);

并对example design进行例化如下:

 aurora_64b66b_x1_exdes  u_aurora_64b66b_x1_exdes
 (
     .RESET          ( sys_rst ),
     // Error Detection Interface
     .HARD_ERR       ( HARD_ERR ),
     .SOFT_ERR       ( SOFT_ERR ),
     .DATA_ERR_COUNT ( DATA_ERR_COUNT ),
     // Status
     .LANE_UP        ( LANE_UP ),
     .CHANNEL_UP     ( CHANNEL_UP ),

     // System Interface
     .INIT_CLK       ( sys_clk_50m), 
     .PMA_INIT       ( sys_rst ),

     .DRP_CLK_IN     ( sys_clk_50m ),
     // GTX Reference Clock Interface
     .GTHQ3_P        ( si5324_in_p ),
     .GTHQ3_N        ( si5324_in_n ), 
     .RXP            ( gt_rxp[0] ),
     .RXN            ( gt_rxn[0] ),
     .TXP            ( gt_txp[0] ),
     .TXN            ( gt_txn[0] )
 

 );

例化说明:

1)IP EXAMPLE为用户接口提供了2个复位:RESET和PMA_INIT,其中,RESET用于复位逻辑部分,PMA_INIT用于复位GT;二者对于核来说,都是异步复位。 由sys_rst对二者进行控制。需要注意的是,参考时钟si5324_in_p/n需要等待IIC模块对SI5324芯片初始化完毕后才能产生,因此sys_rst的释放需要等待IIC模块工作结束后,再等待一段时间例如100ms后才释放,以免GTH在退出复位时其参考时钟未就绪,导致无法正常工作。Aurora IP建议当INIT_CLK和GT_REFCLK稳定后,一般先释放PMA_INIT,再释放RESET;但实测二者同时释放也没问题。

2)INIT_CLK和DRP_CLK为同一个50MHz的系统时钟,来源于FPGA片上DCM模块。

增加的约束为:

set_property PACKAGE_PIN AN6 [get_ports {gt_rxp[0]}]

二、建立Testbench文件

新建top_tb.v,内容如下:

`timescale 1ns/1ps 

 
module top_tb
();


reg             si5324_in; 
wire            si5324_in_p; 
wire            si5324_in_n; 

  

wire  [0:0]     gt_txp;
wire  [0:0]     gt_txn;

top dut(
        //--system clock in
  
       .si5324_in_p          ( si5324_in_p ),
       .si5324_in_n          ( si5324_in_n ),  

        ........ 
            
        // GTX Serial I/O
        .gt_rxp              ( gt_txp ),
        .gt_rxn              ( gt_txn ),
        
        .gt_txp              ( gt_txp ),
        .gt_txn              ( gt_txn )
       
);


initial
begin
    si5324_in = 1;
    forever #2.5   si5324_in = ~ si5324_in;
end


assign si5324_in_p = si5324_in;
assign si5324_in_n = ~si5324_in;



endmodule

注意到,提供200MHz参考时钟后,将gt_tx和gt_rx互联,仿真外部回环。

三、运行仿真并查看结果

将top_tb设置为仿真顶层文件,点击【Run simulation】,即可启动仿真。

仿真启动后,可以对感兴趣的模块的运行情况进行观察,如将frame_check和frame_gen的波形增加到窗口:

add wave sim:/top_tb/dut/u_aurora_64b66b_x1_exdes/core_traffic/frame_check_i/*
add wave sim:/top_tb/dut/u_aurora_64b66b_x1_exdes/core_traffic/frame_gen_i/*

运行:run 40us

在37.6us左右,CHANNEL_UP拉高,frame_gen退出复位状态,开始工作,产生数据;

在38.4us左右,frame_check接收到第一包数据,开始进行校验;

注意:1)仿真时GT_REFCLK为仿真产生的自由时钟,不存在SI5342的配置问题,因此需要认为IIC已经配置完毕,手动将RESET和PMA_INIT拉低,使example_design退出复位;

2)无法建立CHANNEL_UP,需要检查复位、GT_REFCLK时钟频率与IP设置是否一致、gt_txp/n与gt_rxp/n的连接关系;

继续RUN 300us后,frame_check中的DATA_ERR_COUNT信号一直为0,说明模块运行无误。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值