学习不能稀里糊涂,要学会多思考,发散式学习以及总结:
FPGA作为一种器件,只是实现目的的一种方法,过度追求实现的技术细节(用hdl还是hls,用啥芯片,用啥接口)容易只见树木不见森林。工具软件的用法也好,器件的架构也好,语言孰优孰劣的争论也罢。工程应用里大概更多应该去考虑适合的实现方式,现在software define network/flash/xxx,已然大势所趋,算法是纲,纲举目张。是因为在实现上需要有流水线,多路并行,快速部署的目的所以考虑使用FPGA,而不是为了使用而使用。
不管实现目的的方法是FPGA还是DSP甚至是GPU,这些都是工具,工程师的核心竞争力除了在于熟练地掌握开发的技巧。更重要的在于信号与系统、数字信号处理、图像处理之类的让你了解算法、优化算法的基石;以及数字电路、微机原理、处理器体系结构这些让你了解为什么这些工具要这样设计,要这样发展的课程(系统学习一点体系结构,那么这些数据级并行、指令级并行、线程级并行的处理器就不再陌生了)工程师应该顶天(了解应用,了解算法)也应该立地(了解工具,掌握技巧)。
——引用某个大佬的话,作为学习共勉
简单来说就是:FPGA是工具用来搬砖,更多的知识在FPGA之外
一、 IP核接口介绍
根据此系列的文章(一)以太网知识补给和文章(二)IP核配置,本次设计的逻辑框架如下,User Logic是需要我们编写代码,1G/2.5G Ethernet是我们配置的IP核,它们之间通过GMII接口通信;Transceiver也是IP核内部用来并转串的连接方式,最后GBIC or SFP为FPGA外部连接的PHY芯片,它们之间通过GT收发器接口通信(高速接口)。
FPGA程序是我们着重编写的是User Logic这一块,IP核会用接口就行,本章将先讲一下我们在(二)中配置的IP核后生成的接口。
gig_ethernet_pcs_pma_0 your_instance_name (
//GT高速收发器的差分时钟
.gtrefclk_p(gt_clk_p), // input wire gtrefclk_p 125 MHz差分参考时钟。由外部直接接入,时钟质量高
.gtrefclk_n(gt_clk_n), // input wire gtrefclk_n 125 MHz差分参考时钟。
//以下两个IP输出的125Mhz参考时钟未用到
.gtrefclk_out(), // output wire gtrefclk_out
.gtrefclk_bufg_out(), // output wire gtrefclk_bufg_out
//GT高速收发器的接口,FPGA外接接口,与外部的光口SFP进行通信(IP核配置1000BASEX)
.txn(o_txn), // output wire txn 差分串型高速GT收发器数据接口
.txp(o_txp), // output wire txp 从PMA到PMD的串行传输的差分
.rxn(i_rxn), // input wire rxn 从PMD到PMA的串行传输的差分
.rxp(i_rxp), // input wire rxp
.independent_clock_bufg(i_independent_clock_bufg), // input wire independent_clock_bufg 一个独立的时钟源,用作IDELAYCTRL(如果存在)和主GT收发器复位逻辑的参考时钟,200Mhz。
//以下信号为IP核输出信号(选择性使用)
.userclk_out(), // output wire userclk_out 62.5Mhz
.userclk2_out(o_userclk2_125), // output wire userclk2_out 用户时钟(125M),GMII接口的时钟源,IP配置的时候采用txoutclk,gmii的收发均采用此时钟,
.rxuserclk_out(), // output wire rxuserclk_out 62.5Mhz
.rxuserclk2_out(), // output wire rxuserclk2_out 62.5Mhz。 IP配置的时候采用rxoutclk时,此接口输出125Mhz,例程的gmii收采用此时钟,发采用userclk2_out
.resetdone(), // output wire resetdone 最好使用同一个时钟源作为收发的时钟,所以IP的gmii时钟源采用txoutclk。
.pma_reset_out(), // output wire pma_reset_out
.mmcm_locked_out(), // output wire mmcm_locked_out
//用户端(客户端MAC层)接口,通过GMII接口与以太网IP核进行数据通信,从客户端(MAC层)发送给PMA
.gmii_txd(i_gmii_txd), // input wire [7 : 0] gmii_txd 发送数据
.gmii_tx_en(i_gmii_tx_en), // input wire gmii_tx_en 发送数据使能
.gmii_tx_er(i_gmii_tx_er), // input wire gmii_tx_er 发送数据错误使能
.gmii_rxd(o_gmii_rxd), // output wire [7 : 0] gmii_rxd 接收数据
.gmii_rx_dv(o_gmii_rx_dv), // output wire gmii_rx_dv 接收数据使能
.gmii_rx_er(o_gmii_rx_er), // output wire gmii_rx_er 接收数据错误使能
.gmii_isolate(), // output wire gmii_isolate 不需要
.configuration_vector(5'b00010), // input wire [4 : 0] 用于配置IP核状态,00010为内循环(仿真使用),00000为正常外接(与其他设备通信使用)
.status_vector(o_status_vector), // output wire [15 : 0] status_vector 最低位判断链路状态,0位为1表示以太网链路建立,为0则未建立建立链路
.reset(i_sys_rst), // input wire reset IP核的复位信号。高电平有效
.signal_detect(1'b1), // input wire signal_detect 逻辑1指示正确检测光学模块;直接拉高即可
//一下两个为gt引出来PLL产生的时钟,不需要用
.gt0_qplloutclk_out(), // output wire gt0_qplloutclk_out
.gt0_qplloutrefclk_out() // output wire gt0_qplloutrefclk_out
);
以上是设置完IP后生成的接口以及注释。
简单总结下学习IP核时候的要点:
1、 通过对应IP的文档进行接口学习,如何找到相应的文档,可以参考以下文章:
vivado的DocNav学习;FPGA芯片外挂DDR个数_FPGA_青年的博客-CSDN博客
2、 还可以通过打开IP核的官方列子进行学习,例子中用到的接口讲解也有帮助:
3、 输入(input)接口必须需要接入信号,输出(output)接口选择性的使用,在使用接口的时候,多关注这几个信号:数据,使能,时钟,复位,以及配置(回环测试还是外接)和状态(链路状态)这些接口。
二、 框架搭建
本次设计我们只做仿真,因此需要配置回环模式即将configuration_vector接口配置为(5’b00010),相当于将TXP与RXP相连,TXN和RXN相连。
数据发送:将产生的数据,使能在同一时钟下发送出去;
写FIFO:数据产生用的是一个时钟,将数据发送给以太网IP核,采用的是GMII接口,因此需要使用GMII的时钟,才能将数据送入IP核,再做并转串通过GT收发器送出数据给外部。FIFO的作用:异步时钟,不同位数间转换。
以太网IP:将数据链路层(MAC层)组帧的数据,通过GMII接口发送给PMA层(属于PHY层中一层),再通过内部并转串的方式,将数据通过GT高速收发器进行数据收发。
数据接收和读FIFO同理。
我们之前看到的都是MAC->PHY->RJ45,采用的不是高速接口(例如Tri Mode Ethernet MAC IP核),它的MAC层就是FPGA。但是在这里使用的1G/2.5G Ethernet以太网IP核采用的是GT高速收发器是串型接口,它是将PHY层中的PMA层放在FPGA中,此时的FPGA相当于是MAC层+PMA层。关于这部分知识,大家可以参考以下文章:
添加链接描FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(二)——IP学习使用_FPGA_青年的博客-CSDN博客述
FPGA平台以太网学习:MAC与PHY间通信_FPGA_青年的博客-CSDN博客
下一节,将会做实例仿真。文章来源:https://www.toymoban.com/news/detail-484262.html
记录美好学习,从总结开始;💪文章来源地址https://www.toymoban.com/news/detail-484262.html
到了这里,关于FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!