万兆以太网MAC设计(1)10G PCS PMA IP核使用

文章目录

  • 一、设计框图
  • 二、模块设计
  • 三、IP核配置
  • 四、上板验证
  • 五、总结

一、设计框图

关于GT高速接口的设计一贯作风,万兆以太网同样如此,只不过这里将复位逻辑和时钟逻辑放到了同一个文件ten_gig_eth_pcs_pma_0_shared_clock_and_reset当中。如果是从第一篇高速接口设计看到现在,应该很熟悉了。
在这里插入图片描述

二、模块设计

ten_gig_eth_pcs_pma_0_shared_clock_and_reset模块将输入的用户复位信号i_rst进行同步然后产生相应的复位信号给到IP核,同时也根据IP核输出的txoutclk产生一系列用户时钟,与之前的高速接口设计不同的是,万兆以太网的用户时钟不再是txusrclk2,而是coreclk

module TEN_GIG_ETH_PCSPMA(input               i_gt_refclk             ,input               i_sys_clk               ,input               i_rst                   ,input               i_qplllock              ,input               i_qplloutclk            ,input               i_qplloutrefclk         ,output              o_qpllreset             ,output              txp                     ,output              txn                     ,input               rxp                     ,input               rxn                     ,input               i_sim_speedup_control   ,output              o_xgmii_clk             ,   input  [63 : 0]     i_xgmii_txd             ,input  [7  : 0]     i_xgmii_txc             ,output [63 : 0]     o_xgmii_rxd             ,output [7  : 0]     o_xgmii_rxc             ,output              o_block_sync            ,output              o_rst_done              ,output              o_pma_link              ,output              o_pcs_rx_link           ,output              o_tx_disable            
);wire                coreclk                 ;
wire                txusrclk                ;
wire                txusrclk2               ;
wire                txoutclk                ;
wire                areset_coreclk          ;
wire                gttxreset               ;
wire                gtrxreset               ;
wire                txuserrdy               ;
wire                reset_counter_done      ;
(* MARK_DEBUG = "TRUE" *)wire                tx_resetdone            ;
(* MARK_DEBUG = "TRUE" *)wire                rx_resetdone            ;wire [7 :0]         core_status             ;
wire [447:0]        status_vector           ;
wire [535:0]        configuration_vector    ;
wire                drp_req                 ;assign o_xgmii_clk      = coreclk;
assign o_block_sync     = core_status[0];
assign o_rst_done       = tx_resetdone & rx_resetdone;
assign o_pma_link       = status_vector[18];
assign o_pcs_rx_link    = status_vector[226];
assign configuration_vector[399:384] = 16'h4C4B;
assign configuration_vector[535:400] = 136'd0;
assign configuration_vector[383:1]   = 384'd0;
assign configuration_vector[0:0]     = 0;//PMA LOOPBACKten_gig_eth_pcs_pma_0_shared_clock_and_reset ten_gig_eth_pcs_pma_shared_clock_reset_block
(.areset                 (i_rst              ),.refclk                 (i_gt_refclk        ),.coreclk                (coreclk            ),.txoutclk               (txoutclk           ),.qplllock               (i_qplllock         ),.areset_coreclk         (areset_coreclk     ),.gttxreset              (gttxreset          ),.gtrxreset              (gtrxreset          ),.txuserrdy              (txuserrdy          ),.txusrclk               (txusrclk           ),.txusrclk2              (txusrclk2          ),.qpllreset              (o_qpllreset        ),.reset_counter_done     (reset_counter_done )
);ten_gig_eth_pcs_pma_0 ten_gig_eth_pcs_pma_u0 (.rxrecclk_out           (                       ),  // output wire rxrecclk_out.coreclk                (coreclk                ),  // input wire coreclk.dclk                   (i_sys_clk              ),  // input wire dclk.txusrclk               (txusrclk               ),  // input wire txusrclk.txusrclk2              (txusrclk2              ),  // input wire txusrclk2.areset                 (i_rst                  ),  // input wire areset.txoutclk               (txoutclk               ),  // output wire txoutclk.areset_coreclk         (areset_coreclk         ),  // input wire areset_coreclk.gttxreset              (gttxreset              ),  // input wire gttxreset.gtrxreset              (gtrxreset              ),  // input wire gtrxreset.txuserrdy              (txuserrdy              ),  // input wire txuserrdy.qplllock               (i_qplllock             ),  // input wire qplllock.qplloutclk             (i_qplloutclk           ),  // input wire qplloutclk.qplloutrefclk          (i_qplloutrefclk        ),  // input wire qplloutrefclk.reset_counter_done     (reset_counter_done     ),  // input wire reset_counter_done.txp                    (txp                    ),  // output wire txp.txn                    (txn                    ),  // output wire txn.rxp                    (rxp                    ),  // input wire rxp.rxn                    (rxn                    ),  // input wire rxn.sim_speedup_control    (i_sim_speedup_control  ),  // input wire sim_speedup_control.xgmii_txd              (i_xgmii_txd            ),  // input wire [63 : 0] xgmii_txd.xgmii_txc              (i_xgmii_txc            ),  // input wire [7 : 0] xgmii_txc.xgmii_rxd              (o_xgmii_rxd            ),  // output wire [63 : 0] xgmii_rxd.xgmii_rxc              (o_xgmii_rxc            ),  // output wire [7 : 0] xgmii_rxc.configuration_vector   (configuration_vector   ),  // input wire [535 : 0] configuration_vector.status_vector          (status_vector          ),  // output wire [447 : 0] status_vector.core_status            (core_status            ),  // output wire [7 : 0] core_status.tx_resetdone           (tx_resetdone           ),  // output wire tx_resetdone.rx_resetdone           (rx_resetdone           ),  // output wire rx_resetdone.signal_detect          (1                      ),  // input wire signal_detect.tx_fault               (0                      ),  // input wire tx_fault.drp_req                (drp_req                ),  // output wire drp_req.drp_gnt                (drp_req                ),  // input wire drp_gnt.drp_den_o              (                       ),  // output wire drp_den_o.drp_dwe_o              (                       ),  // output wire drp_dwe_o.drp_daddr_o            (                       ),  // output wire [15 : 0] drp_daddr_o.drp_di_o               (                       ),  // output wire [15 : 0] drp_di_o.drp_drdy_o             (                       ),  // output wire drp_drdy_o.drp_drpdo_o            (                       ),  // output wire [15 : 0] drp_drpdo_o.drp_den_i              (0                      ),  // input wire drp_den_i.drp_dwe_i              (0                      ),  // input wire drp_dwe_i.drp_daddr_i            (0                      ),  // input wire [15 : 0] drp_daddr_i.drp_di_i               (0                      ),  // input wire [15 : 0] drp_di_i.drp_drdy_i             (0                      ),  // input wire drp_drdy_i.drp_drpdo_i            (0                      ),  // input wire [15 : 0] drp_drpdo_i.tx_disable             (o_tx_disable           ),  // output wire tx_disable.pma_pmd_type           (3'b101                 )   // input wire [2 : 0] pma_pmd_type
);endmodule

三、IP核配置

整个IP核配置页面和使用都非常简单。难点在于后续基于此IP核进行万兆以太网MAC层的设计,该部分内容将在后续更新。
在这里插入图片描述

四、上板验证

这里写的用户逻辑很简单,我们不做关注,后续会进行完整的设计,这里主要看主机网卡发送过来的数据是否正常。
大家需要准备一张万兆网卡,与FPGA进行连接。
在这里插入图片描述

在这里插入图片描述

五、总结

初步打通了万兆以太网高速接口,后续将基于此进行完整的MAC层设计。

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

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

相关文章

软考中级之数据库系统工程师笔记总结(三)操作系统

作者:Maynor 博客之星大数据领域Top1,GitHub项目awesome-chatgpt-project作者, 腾讯云TDSQL-C数据库开发者, 全网技术矩阵粉丝7w 公众号:Maynor996随着信息技术的飞速发展,数据库已成为现代企业和组织不可或缺的数据管理工具。对于许多专业人…

刷代码随想录有感(34):前k个高频元素

本题代码涉及到了多个陌生概念&#xff0c;题干如下&#xff1a; 代码; class Solution { public:class mycomparison{//自定义规则&#xff0c;使优先队列可以自动排序public:bool operator()(pair<int, int> & lhs, pair<int, int> & rhs){return lhs.s…

如何把车卖出去,什么营销最靠谱!

之前我看过雷军的《小米创业思考》&#xff0c;在书中他一直在强调互联网思维&#xff0c;这是一种非常好的思考模式&#xff0c;不仅限于互联网产品&#xff0c;在这次卖车上也一样展现的淋漓尽致。 营销一样需要被设计。提到&#xff0c;不少设计师首先想到的是做运营海报&am…

Zabbix监控Windows

1.在虚拟机中安装zabbix 安装系统一直托不进虚拟机中&#xff1b;因为没安装Tools组件 点击虚拟机&#xff0c;选择安装VMware Tools 2.配置zabbix

探索R语言的无限魅力,通晓数据可视化之道,助力科研之路!

本书特色 1.全面覆盖&#xff1a;本书从R语言的基础知识开始&#xff0c;逐步深入到科研绘图的高级技巧&#xff0c;为读者提供了一站式的科研绘图学习体验。 2.案例丰富&#xff1a;通过大量的实际案例&#xff0c;展示了R语言在科研绘图和学术图表绘制中的具体应用&#xf…

【办公类-22-03】20240417 UIBOT模拟上传获取流量券,并删除内容

背景需求&#xff1a; 为了获得CSDN每天两张的流量券&#xff0c;我每天都绞尽脑汁制作2个上传博文。 最近要育婴师考试和单位里的各类任务&#xff0c;我实在没有精力写代码了&#xff0c;于是我试试&#xff0c;能不能“假装”上传足够的篇数&#xff0c;先将每周的流量券都…

python-程序流程控制

目录 1、三元表达式 2、for 循环 3、while 循环 4、迭代遍历 1、三元表达式 python 支持从列表中挑选对象 用法&#xff1a; a [x,y][z] 如果 z 为真&#xff0c;将 y 赋值给 a&#xff0c;如果 z 为假&#xff0c;则将 x 赋值给 a 。 示例代码&#xff1a; x 1 a …

秋招之路 面经

这里参考一位很厉害的前辈所分享的他的嵌入式软件工程师秋招之路&#xff0c;自己详细的读了一下他的经历以及他的分享的秋招面试和项目经验的总结。 我的嵌入式软件工程师秋招之路&#xff08;文末送福利&#xff09;_嵌入式软件工程师 刷leetcode-CSDN博客 如何在面试中介绍…

HR系统采购之POC如何验证系统有效性

朋友公司要上HR系统项目&#xff0c;现在考虑是否要POC&#xff0c;因为之前接触比较少&#xff0c;想取取经。正好之前也算参与过一些企业级系统选型&#xff0c;正好整理一篇聊聊企业采购系统软件中POC有什么作用&#xff1f;怎么做&#xff1f;要注意什么&#xff1f; 一、…

IEEE顶刊!影响因子逐年攀升!同领域IEEE-Trans,仅47天录用!

&#xff08;一&#xff09;期刊简介概况 【期刊类型】计算机医学类SCIE&EI 【出版社】IEEE出版社 【期刊概况】IF&#xff1a;7.0-8.0&#xff0c;JCR1区&#xff0c;中科院2区TOP 【版面类型】正刊&#xff0c;仅10篇版面 【预警情况】2020-2024年无预警记录 【收录…

护网行动 | 蓝队应急响应流程概述

了解蓝队应急响应的流程 应急响应通常是指为了应对各种意外事件发生前所做的准备&#xff0c;以及在意外事件发生后所采取的措施。 网络安全应急响应是指对已经发生或可能发送的安全事件进行监控、分析、协调、处理、保护资产安全。 网络安全应急响应主要是为了让人们对网络安全…

JS-33-jQuery02-选择器

一、单个选择器 选择器是jQuery的核心。 一个选择器写出来类似$(#dom-id)。 美元符号定义 jQuery 为什么jQuery要发明选择器&#xff1f;回顾一下DOM操作中我们经常使用的代码&#xff1a; // 按ID查找&#xff1a; var a document.getElementById(dom-id);// 按tag查找&am…