RGMII 接口是常见的以太网通信接口,主要用于 MAC 和 PHY 之间的通信,支持10/100/1000Mbps 三种通信速率。本文主要介绍 RGMII 接口定义及其在 1000Mbps 速率下的时序规范。
目录
RGMII 由 GMII (Gigabit Media Independent Interface) 简化演变而来,意为 Reduced GMII,是常见的以太网 MAC 和 PHY 之间的通信接口,优点是比 GMII 减少了近一半的管脚,节约设计成本。
RGMII 支持 10/100/1000Mbps 三种通信速率,接口定义如下:
| 序号 | 名称 | 方向 | 说明 |
| 1 | RXC | PHY -> MAC | 接收通道时钟信号,10/100/1000Mbps 模式频率分别为 2.5M/25M/125MHz |
| 2 | RX_CTL | 接收通道控制信号 | |
| 3 | RXD[3:0] | 接收通道数据信号 | |
| 4 | TXC | MAC -> PHY | 发送通道时钟信号,10/100/1000Mbps 模式频率分别为 2.5M/25M/125MHz |
| 5 | TX_CTL | 发送通道控制信号 | |
| 6 | TXD[3:0] | 发送通道数据信号 |
在 10/100Mbps 模式下,TXD[3:0] 和 RXD[3:0] 采用单边沿传输方式。在 1000Mbps 模式下,TXD[3:0] 和 RXD[3:0] 采用双边沿传输方式。对于发送通道,TXC 上升沿传输 TXD[3:0] 和 TXEN;TXC 下降沿传输 TXD[7:4] 和 TXERR(即 TX_EN xor TX_ER)。

对于接收通道,RXC 上升沿传输 RXD[3:0] 和 RX_DV;RXC 下降沿传输 RXD[7:4] 和 RXERR(即 RX_DV xor RX_ER)。


RGMII 接口时序在时钟和数据边沿对齐的条件下进行规范。在 Transmitter 端,时钟边沿与数据边沿的偏差为 ±500ps,建立/保持时间不少于1.2ns;在 Receiver 端,时钟边沿对数据边沿的延迟介于 1.0 ~ 2.6ns 之间(典型值为 1.8ns),建立/保持时间则不少于 1.0ns.
在 1000Mbps 模式下,时钟周期为 8±0.8 ns,占空比为 50±5%,上升/下降时间(20-80% 电压)不超过 0.75ns.

在 RGMII v2.0 之前的规范中,Receiver 端时钟延迟由 PCB 布线实现,附加延迟值大于 1.5 ns 且小于 2.0 ns,称为 Original RGMII.

在 RGMII v2.0 中,Receiver 端时钟延迟可以由 Transmitter 端设备实现,称为 RGMII-ID(Internal Delay,意为内部延迟)。带有内部延迟功能的设备仍需遵守 RGMII Timing Specifics.
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
我正在为毕业设计开发GEM,TravisCI构建不断失败。这是我在Travis上的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218构建错误是:$bundleexecrakerakeaborted!Don'tknowhowtobuildtask'default'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in`eval'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
我有几个跳过的规范。Pending:(Failureslistedhereareexpectedanddonotaffectyoursuite'sstatus)1)...#Notyetimplemented#./spec/requests/request_spec.rb:22如何抑制未决规范的输出? 最佳答案 您可以添加以下配置选项以从运行中过滤掉所有待处理的规范:RSpec.configuredo|config|config.filter_run_excludingskip:trueend此外,here是一个更详细的抑制输出的建议
我正在构建Rails应用程序并使用RSpec制定测试。我为我正在创建的名为current_link_to的方法编写了测试。此方法应该检查当前页面是否对应于我传递给它的路径,并将current类添加到生成的链接中,以防它匹配。这是规范:require"spec_helper"describeApplicationHelperdodescribe"#current_link_to"dolet(:name){"Products"}let(:path){products_path}let(:rendered){current_link_to(name,path)}context"whenthe
tl;dr:跳到最后一段最近一直在尝试使用RSpec的requestspecs做一些更有针对性的测试。我的测试主要是这样的:通用cucumber功能规范,即用户转到带有评论的帖子,对评论点赞,作者获得积分modelspecs当模型实际上具有某些功能时,即User#upvote(comment)controllerspecs我在其中stub了大部分内容,只是试图确保代码按照我期望的方式运行viewspecs当View中有一些复杂的东西时,例如仅在用户尚未投票时呈现upvote链接,这些被stub为好吧问题是当我有一些导致错误的特定场景时,一切似乎都在我无法重现它的模型/View层中工作。
我有33个规范以大约5秒的速度运行,以这种速度运行会导致测试套件变慢。我追踪到请求规范(4秒以上),因为模型规范只用了一小部分时间。我已经检查过,我的请求规范没有任何过于复杂或不必要的东西,所以我不知道该去哪里让它们更快,而不是只在推送代码之前运行它们以确保一切正常.加快请求规范的最佳方法是什么? 最佳答案 我使用Spork来加速我的测试。它保持整个环境加载以赢得时间。看看这个博客:http://ykyuen.wordpress.com/2010/12/14/rails-running-rspec-with-spork-test-s
我在使用instance_double时遇到间歇性测试失败。我有一个包含4个规范的文件。这是来源:require'rails_helper'describeSubmitPostdobefore(:each)do@post=instance_double('Post')allow(@post).toreceive(:submitted_at=)endcontext'onsuccess'dobefore(:each)doallow(@post).toreceive(:save).and_return(true)@result=SubmitPost.call(post:@post)endit