GT收发器PHY层设计(2)GT_module模块设计

文章目录

  • 前言
  • 一、设计框图
  • 二、例化IP核端口
  • 三、common_reset_i模块
  • 四、gt_usrclk_source模块
  • 五、IBUFDS_GTE2和gtwizard_0_common模块
  • 六、顶层模块gt_module
  • 总结

前言

根据官方的example design设计一个自定义协议的高速PHY设计

一、设计框图

在这里插入图片描述
设计思路及代码思路参考FPGA奇哥系列网课
IP核解析参考xilinx文档PG168 7 Series FPGAs Transceiver Wizard v3.6

二、例化IP核端口

即框图当中的gtwizard_0模块
所有端口含义都可以在PG168当中进行了解
需要特别关注的在代码里进行了简单的注释

gtwizard_0  gtwizard_0_i
(.sysclk_in                      (i_sysclk               ), //SYSCLK是一个自由运行的系统/板载时钟,用于驱动示例设计中的FPGA逻辑。当启用DRP接口时,DRP_CLK连接到示例设计中的SYSCLK。需要在XDC中对此时钟进行约束。.soft_reset_tx_in               (i_tx_rst               ), .soft_reset_rx_in               (i_rx_rst               ), .dont_reset_on_data_error_in    (0                      ), .gt0_tx_fsm_reset_done_out      (o_tx_done              ),.gt0_rx_fsm_reset_done_out      (),     .gt0_data_valid_in              (1                      ), .gt0_tx_mmcm_lock_in            (gt0_txmmcm_lock_i      ), .gt0_tx_mmcm_reset_out          (gt0_txmmcm_reset_i     ), .gt0_rx_mmcm_lock_in            (gt0_rxmmcm_lock_i      ),.gt0_rx_mmcm_reset_out          (gt0_rxmmcm_reset_i     ), .gt0_drpaddr_in                 (i_drpaddr              ),     .gt0_drpclk_in                  (i_sysclk               ),     .gt0_drpdi_in                   (i_drpdi                ),     .gt0_drpdo_out                  (o_drpdo                ),     .gt0_drpen_in                   (i_drpen                ),     .gt0_drprdy_out                 (o_drprdy               ),     .gt0_drpwe_in                   (i_drpwe                ),     .gt0_dmonitorout_out            (),     .gt0_loopback_in                (i_loopback             ),  .gt0_eyescanreset_in            (0                      ), .gt0_rxuserrdy_in               (1                      ),.gt0_eyescandataerror_out       (), .gt0_eyescantrigger_in          (0                      ),.gt0_rxclkcorcnt_out            (                       ),.gt0_rxusrclk_in                (gt0_rxusrclk_i         ), .gt0_rxusrclk2_in               (gt0_rxusrclk2_i        ), .gt0_rxdata_out                 (o_rx_data              ),//接收数据,位宽为IP配置的用户位宽.gt0_rxdisperr_out              (), .gt0_rxnotintable_out           (), .gt0_gtxrxp_in                  (i_gt_rx_p              ),//输入差分引脚    .gt0_gtxrxn_in                  (i_gt_rx_n              ),//输入差分引脚    .gt0_rxbyteisaligned_out        (o_rx_ByteAlign         ),//接收数据字节对齐指示信号.gt0_rxdfelpmreset_in           (0                      ), .gt0_rxmonitorout_out           (),     .gt0_rxmonitorsel_in            (0                      ), .gt0_rxoutclkfabric_out         (),     .gt0_gtrxreset_in               (i_rx_rst               ), .gt0_rxpmareset_in              (i_rx_rst               ), .gt0_rxpolarity_in              (i_rx_polarity          ), .gt0_rxcharisk_out              (o_rx_char              ),//标记接收的有效的8B/10BK字符。高位比特对应数据路径的高位字节。.gt0_rxresetdone_out            (o_rx_done              ), .gt0_txpostcursor_in            (i_txpostcursor         ), .gt0_txprecursor_in             (i_txpercursor          ), .gt0_gttxreset_in               (i_tx_rst               ), .gt0_txuserrdy_in               (1                      ), .gt0_txusrclk_in                (gt0_txusrclk_i         ), .gt0_txusrclk2_in               (gt0_txusrclk2_i        ), .gt0_txdiffctrl_in              (i_tx_diffctrl          ), .gt0_txdata_in                  (i_tx_data              ),//与接收同理 .gt0_gtxtxn_out                 (o_gt_tx_n              ),//与接收同理     .gt0_gtxtxp_out                 (o_gt_tx_p              ),//与接收同理     .gt0_txoutclk_out               (gt0_txoutclk_i         ), .gt0_txoutclkfabric_out         (),     .gt0_txoutclkpcs_out            (),     .gt0_txcharisk_in               (i_tx_char              ),//与接收同理  .gt0_txresetdone_out            (),     .gt0_txpolarity_in              (i_tx_polarity          ), .gt0_qplllock_in                (i_qplllock             ),.gt0_qpllrefclklost_in          (i_qpllrefclklost       ),.gt0_qpllreset_out              (w_gt_qpll_reset        ),.gt0_qplloutclk_in              (i_qplloutclk           ),.gt0_qplloutrefclk_in           (i_qplloutrefclk        ) 
);endmodule

三、common_reset_i模块

用于产生QPLL的复位信号

assign w_qpll_reset = w_commonreset | w_gt_qpll_reset   ;
gtwizard_0_common_reset # 
(.STABLE_CLOCK_PERIOD            (                       )    
)
common_reset_i
(    .STABLE_CLOCK                   (i_sysclk               ),           .SOFT_RESET                     (i_tx_rst               ),      .COMMON_RESET                   (w_commonreset          )          
);

四、gt_usrclk_source模块

用户时钟的产生模块,发送端和接收端的逻辑需要通过gt0_txusrclk2_igt0_rxusrclk2_i驱动。这里对示例工程里面的gt_usrclk_source进行了简单的修改,在原本的example design里,IBUFDS_GTE2原语被放到了gt_usrclk_source模块里,该模块就是用来将外部差分参考时钟转为单端时钟信号。在原本的gt_usrclk_source里,它将输入的外部差分参考时钟信号转化为单端后又从该模块输出了出去,所以完全可以直接放到顶层去。

gtwizard_0_GT_USRCLK_SOURCE gt_usrclk_source
(.GT0_TXUSRCLK_OUT           (gt0_txusrclk_i         ),.GT0_TXUSRCLK2_OUT          (gt0_txusrclk2_i        ),.GT0_TXOUTCLK_IN            (gt0_txoutclk_i         ),.GT0_TXCLK_LOCK_OUT         (gt0_txmmcm_lock_i      ),.GT0_TX_MMCM_RESET_IN       (gt0_txmmcm_reset_i     ),.GT0_RXUSRCLK_OUT           (gt0_rxusrclk_i         ),.GT0_RXUSRCLK2_OUT          (gt0_rxusrclk2_i        ),.GT0_RXCLK_LOCK_OUT         (gt0_rxmmcm_lock_i      ),.GT0_RX_MMCM_RESET_IN       (gt0_rxmmcm_reset_i     )
);  

五、IBUFDS_GTE2和gtwizard_0_common模块

gtwizard_0_common 就是QPLL,里面例化了一个GTXE2_COMMON原语
gtwizard_0_common 只需要例化一次,因为一个QUAD只有一个QPLL

IBUFDS_GTE2 IBUFDS_GTE2_u0  
(.O               (w_gtrefclk    ),.ODIV2           (),.CEB             (0),.I               (i_gtrefclk_p  ),.IB              (i_gtrefclk_n  )
);gtwizard_0_common #
(.WRAPPER_SIM_GTRESET_SPEEDUP(),.SIM_QPLLREFCLK_SEL         (3'b010)
)
common0_i
(.QPLLREFCLKSEL_IN           (3'b010             ),//参考时钟选择如下图所示,具体看自己的板卡接入了哪一路参考时钟.GTREFCLK0_IN               (0                  ),.GTREFCLK1_IN               (w_gtrefclk         ),.QPLLLOCK_OUT               (w_qplllock         ),.QPLLLOCKDETCLK_IN          (i_sysclk           ),.QPLLOUTCLK_OUT             (w_qplloutclk       ),.QPLLOUTREFCLK_OUT          (w_qplloutrefclk    ),.QPLLREFCLKLOST_OUT         (w_qpllrefclklost   ),    .QPLLRESET_IN               (w_qpllreset        ) 
);

在这里插入图片描述

六、顶层模块gt_module

在该模块里我们可以例化多个gt_channel模块,需要注意的一点是w_qpllreset信号只需要一个gt_channel的信号即可。

module gt_module(input                   i_sysclk                    ,input                   i_gtrefclk_p                ,input                   i_gtrefclk_n                ,input                   i_rx0_rst                   ,input                   i_tx0_rst                   ,output                  o_tx0_done                  ,output                  o_rx0_done                  ,input                   i_tx0_polarity              ,input  [3 :0]           i_tx0_diffctrl              ,input  [4 :0]           i_tx0postcursor             ,input  [4 :0]           i_tx0percursor              ,     input                   i_rx0_polarity              ,input  [2 :0]           i_loopback0                 ,input  [8 :0]           i_0_drpaddr                 , input                   i_0_drpclk                  ,input  [15:0]           i_0_drpdi                   , output [15:0]           o_0_drpdo                   , input                   i_0_drpen                   ,output                  o_0_drprdy                  , input                   i_0_drpwe                   ,output                  o_rx0_ByteAlign             ,output                  o_rx0_clk                   ,output [31:0]           o_rx0_data                  ,output [3 :0]           o_rx0_char                  ,output                  o_tx0_clk                   ,input  [31:0]           i_tx0_data                  ,input  [3 :0]           i_tx0_char                  ,input                   i_rx1_rst                   ,input                   i_tx1_rst                   ,output                  o_tx1_done                  ,output                  o_rx1_done                  ,input                   i_tx1_polarity              ,input  [3 :0]           i_tx1_diffctrl              ,input  [4 :0]           i_tx1postcursor             ,input  [4 :0]           i_tx1percursor              ,     input                   i_rx1_polarity              ,input  [2 :0]           i_loopback1                 ,input  [8 :0]           i_1_drpaddr                 , input                   i_1_drpclk                  ,input  [15:0]           i_1_drpdi                   , output [15:0]           o_1_drpdo                   , input                   i_1_drpen                   ,output                  o_1_drprdy                  , input                   i_1_drpwe                   ,output                  o_rx1_ByteAlign             ,output                  o_rx1_clk                   ,output [31:0]           o_rx1_data                  ,output [3 :0]           o_rx1_char                  ,output                  o_tx1_clk                   ,input  [31:0]           i_tx1_data                  ,input  [3 :0]           i_tx1_char                  ,output                  o_gt_tx0_p                  ,output                  o_gt_tx0_n                  ,input                   i_gt_rx0_p                  ,input                   i_gt_rx0_n                  ,output                  o_gt_tx1_p                  ,output                  o_gt_tx1_n                  ,input                   i_gt_rx1_p                  ,input                   i_gt_rx1_n                    
);wire    w_gtrefclk          ;wire    w_qplllock          ;
wire    w_qpllrefclklost    ;
wire    w_qpllreset         ;
wire    w_qplloutclk        ;
wire    w_qplloutrefclk     ;IBUFDS_GTE2 IBUFDS_GTE2_u0  
(.O               (w_gtrefclk    ),.ODIV2           (),.CEB             (0),.I               (i_gtrefclk_p  ),.IB              (i_gtrefclk_n  )
);gtwizard_0_common #
(.WRAPPER_SIM_GTRESET_SPEEDUP(),.SIM_QPLLREFCLK_SEL         (3'b010)
)
common0_i
(.QPLLREFCLKSEL_IN           (3'b010             ),//1:参考时钟0;2:参考时钟1 3:北时钟 4:南时钟.GTREFCLK0_IN               (0                  ),.GTREFCLK1_IN               (w_gtrefclk         ),.QPLLLOCK_OUT               (w_qplllock         ),.QPLLLOCKDETCLK_IN          (i_sysclk           ),.QPLLOUTCLK_OUT             (w_qplloutclk       ),.QPLLOUTREFCLK_OUT          (w_qplloutrefclk    ),.QPLLREFCLKLOST_OUT         (w_qpllrefclklost   ),    .QPLLRESET_IN               (w_qpllreset        ) 
);gt_channel gt_channel_u0(.i_sysclk                    (i_sysclk          ),.i_gtrefclk                  (w_gtrefclk        ),.i_rx_rst                    (i_rx0_rst         ),.i_tx_rst                    (i_tx0_rst         ),.o_tx_done                   (o_tx0_done        ),.o_rx_done                   (o_rx0_done        ),.i_tx_polarity               (i_tx0_polarity    ),.i_tx_diffctrl               (i_tx0_diffctrl    ),.i_txpostcursor              (i_tx0postcursor   ),.i_txpercursor               (i_tx0percursor    ),     .i_rx_polarity               (i_rx0_polarity    ),.i_loopback                  (i_loopback0       ),.i_drpaddr                   (i_0_drpaddr       ), .i_drpclk                    (i_0_drpclk        ),.i_drpdi                     (i_0_drpdi         ), .o_drpdo                     (o_0_drpdo         ), .i_drpen                     (i_0_drpen         ),.o_drprdy                    (o_0_drprdy        ), .i_drpwe                     (i_0_drpwe         ),.i_qplllock                  (w_qplllock        ), .i_qpllrefclklost            (w_qpllrefclklost  ), .o_qpllreset                 (w_qpllreset       ),.i_qplloutclk                (w_qplloutclk      ), .i_qplloutrefclk             (w_qplloutrefclk   ), .o_rx_ByteAlign              (o_rx0_ByteAlign   ),.o_rx_clk                    (o_rx0_clk         ),.o_rx_data                   (o_rx0_data        ),.o_rx_char                   (o_rx0_char        ),.o_tx_clk                    (o_tx0_clk         ),.i_tx_data                   (i_tx0_data        ),.i_tx_char                   (i_tx0_char        ),.o_gt_tx_p                   (o_gt_tx0_p        ),.o_gt_tx_n                   (o_gt_tx0_n        ),.i_gt_rx_p                   (i_gt_rx0_p        ),.i_gt_rx_n                   (i_gt_rx0_n        )
);gt_channel gt_channel_u1(.i_sysclk                    (i_sysclk          ),.i_gtrefclk                  (w_gtrefclk        ),.i_rx_rst                    (i_rx1_rst         ),.i_tx_rst                    (i_tx1_rst         ),.o_tx_done                   (o_tx1_done        ),.o_rx_done                   (o_rx1_done        ),.i_tx_polarity               (i_tx1_polarity    ),.i_tx_diffctrl               (i_tx1_diffctrl    ),.i_txpostcursor              (i_tx1postcursor   ),.i_txpercursor               (i_tx1percursor    ),     .i_rx_polarity               (i_rx1_polarity    ),.i_loopback                  (i_loopback1       ),.i_drpaddr                   (i_1_drpaddr       ), .i_drpclk                    (i_1_drpclk        ),.i_drpdi                     (i_1_drpdi         ), .o_drpdo                     (o_1_drpdo         ), .i_drpen                     (i_1_drpen         ),.o_drprdy                    (o_1_drprdy        ), .i_drpwe                     (i_1_drpwe         ),.i_qplllock                  (w_qplllock        ), .i_qpllrefclklost            (w_qpllrefclklost  ), .o_qpllreset                 (                  ),.i_qplloutclk                (w_qplloutclk      ), .i_qplloutrefclk             (w_qplloutrefclk   ), .o_rx_ByteAlign              (o_rx1_ByteAlign   ),.o_rx_clk                    (o_rx1_clk         ),.o_rx_data                   (o_rx1_data        ),.o_rx_char                   (o_rx1_char        ),.o_tx_clk                    (o_tx1_clk         ),.i_tx_data                   (i_tx1_data        ),.i_tx_char                   (i_tx1_char        ),.o_gt_tx_p                   (o_gt_tx1_p        ),.o_gt_tx_n                   (o_gt_tx1_n        ),.i_gt_rx_p                   (i_gt_rx1_p        ),.i_gt_rx_n                   (i_gt_rx1_n        )
);endmodule

总结

那么现在我们需要进行GT设计的时候,只需要正确配置时钟信号,然后控制输入输出数据以及K码指示信号等用户数据接口即可,需要例化多个GT channel的话就再gt_module当中例化多个gt_channel模块即可,不可以例化多次gt_module,因为gtwizard_0_common 包含在gt_module中,而gtwizard_0_common 只能例化一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于v114之后的chromedriver及存放路径

使用selenium调用浏览器时,我一直调用谷歌浏览器,可浏览器升级后,就会再次遇到以前遇到过的各种问题,诸如:1、怎么关闭浏览器更新;2、去哪儿下载chromedriver;3、114版本之后的驱动去哪儿下载&a…

【御控物联】JavaScript JSON结构转换(11):数组To数组——综合应用

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON数组 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

蓝桥杯真题:单词分析

import java.util.Scanner; //1:无需package //2: 类名必须Main, 不可修改 public class Main{public static void main(String[]args) {Scanner sannernew Scanner(System.in);String strsanner.nextLine();int []anew int [26];for(int i0;i<str.length();i) {a[str.charA…

记录几个常用命令

目录 一、查询历史命令 二、启动java容器 三、启动java容器并联通mysql容器 一、查询历史命令 # 查出所有"docker run"的历史命令 history | grep "docker run" 二、启动java容器 docker run -itd --name atcc-door -v /home/wwwroot/atcc-door:/hom…

基于蚁群算法的三维路径规划(matlab实现)

作品简介 1 理论基础 1.1 三维路径规划问题概述 三维路径规划指在已知三维地图中&#xff0c;规划出一条从出发点到目标点满足某项指标最优&#xff0c;并且避开了所有三维障碍物的三维最优路径。现有的路径规划算法中&#xff0c;大部分算法是在二维规划平面或准二维规划平面…

分享一种快速移植OpenHarmony Linux内核的方法

移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者&#xff0c;介绍一种借助三方芯片平台自带 Linux 内核的现有能力&#xff0c;快速移植 OpenHarmony 到三方芯片平台的方法。 移植到三方芯片平台的整体思路 内核态层和用户态层 为了更好的解释整个内核…

校园跑腿的含义是什么?大学里校园跑腿的特点有哪些?

校园跑腿是指校园内的一种学生间互助服务活动&#xff0c;即学生通过平台发布需求&#xff0c;由其他学生以跑腿的方式提供相应服务&#xff0c;以获取服务费。这种服务模式为需求者提供便利&#xff0c;同时也为提供服务的学生带来一定的收入。 大学里校园跑腿的特点主要有以…

六、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(2)

Rule #5 - If your work changes, your system should too. 准则五&#xff1a;如果你的工作变了&#xff0c;你的系统也应该改变。 For some, work will be consistent enough to not need major changes.You simply stick to the same system and you’ll get the results y…

【Spring】SpringBoot整合MybatisPlus的基本应用

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、MybatisPlus简介 先来看一下官方的简介吧。 MyBatis-Plus &#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为 简化开发、提高效率而生。Myb…

安卓Android 架构模式及UI布局设计

文章目录 一、Android UI 简介1.1 在手机UI设计中&#xff0c;坚持的原则是什么1.2 安卓中的架构模式1.2.1 MVC (Model-View-Controller)设计模式优缺点 1.2.2 MVP(Model-View-Presenter)设计模式MVP与MVC关系&#xff1a; 1.2.3 MVVM(Model—View—ViewModel ) 设计模式1.2.4 …

关于 C/C++ 1Z(17)开源项目 openppp2 协同程式切换工作流

下述为开源项目 openppp2&#xff08;github&#xff09;构建工作在 C/C 17 的 stackful 有栈协同程式的工作流切换示意图&#xff1a; 在 openppp2 之中采用人工手动方式管理协同程式之间的切换&#xff0c;每个中断过程只是保存线程栈信息&#xff08;如寄存器、当前#PC EIP&…

Deferred library xxx was not loaded

Deferred 延迟修饰词作用下的文件库尚未完成载入

总结jvm中GC机制(垃圾回收)

前言 本篇博客博主将介绍jvm中的GC机制&#xff0c;坐好板凳发车啦~~ 一.GC相关 1.1回收栈内存 对于虚拟机栈&#xff0c;本地方法栈这部分区域而言&#xff0c;其生命周期与相关线程相关&#xff0c;随线程而生&#xff0c;随线程而灭。并且这三个区域的内存分配与回收具有…

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程…

jnpf3.6私有化部署

文件内容 project web > 特别说明&#xff1a;源码、JDK、MySQL、Redis等安装或存放路径禁止包含中文、空格、特殊字符等## 一 技术栈- 主框架&#xff1a;Spring Boot Spring Framework - 持久层框架&#xff1a;MyBatis-Plus - 数据库连接池&#xff1a;Alibaba Druid -…

OpenCV与AI深度学习 | 实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | YOLOv8自定义数据集训练实现手势识别 (标注训练预测 保姆级教程) 0 导 读 本文将手把手教你用YoloV8训练自己的数据集并实现手势识别…

IDEA中连接SQLserver数据库(DataGrip相同连接)

IDEA中连接SQLserver数据库(DataGrip相同连接) 1. 打开IDEA-database组件 2. 新建SQL server连接 3. 填写信息进行连接 填写连接名称&#xff0c;连接主机IP&#xff0c;端口&#xff0c;默认端口1433&#xff0c;数据库用户名密码&#xff0c;默认数据库用户名是sa 第一次连接…

2024最新软件测试【测试理论+ 接口自动化测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

LLMs 可能在 2 年内彻底改变金融行业

在艾伦图灵研究所&#xff08;The Alan Turing Institute&#xff09;最新的一项研究中&#xff0c;我们看到了大型语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;的一种可能性。它有望通过检测欺诈行为、生成财务洞察以及自动化客户服务&#xff0c;…

Java的编程之旅44——学生信息管理系统

目录 1.MVC设计模式初探 文件结构的搭建 2.Student类用来初始化学生信息 3.主函数里的两个功能 1.调用初始化学生信息的功能 2.输出欢迎界面功能 4.Global类中方法的编写 5.StuPage类&#xff0c;StuCtrl类&#xff0c;StuModel类中方法的编写 1.查询功能 selStu方法的…