基于FPGA实现的自适应三速以太网

一、三速以太网

千兆以太网PHY芯片是适配百兆和十兆的,十兆就不管了,我们的设计只适应千兆和百兆。
在这里插入图片描述
根据上图,我们是可以获取当前主机网口的速率信息的。

always@(posedge w_rxc_bufr)
beginif(w_rec_valid == 'd0) beginro_speed <= w_rec_data[2:1];ro_link  <= w_rec_data[0];end else beginro_speed <= ro_speed;ro_link  <= ro_link ;end
end

千兆网的设计我们前面的章节介绍的很详细了,至于百兆,主要区别就在于时钟速率从125Mhz变为了25Mhz,双沿采样变为单沿采样,所以我们只需要在ODDR和IDDR使用的时候注意单沿问题即可。
对于接收数据而言,上下沿采样到的数据是一样的,也就是说一次收到的数据高四位和低四位一样,完整的8bit数据需要前一拍数据后一拍数据拼接

always@(posedge w_rxc_bufr)
beginif(i_speed1000)ro_rec_data <= w_rec_data;else ro_rec_data <= {w_rec_data[3:0],ro_rec_data[7:4]};
end

对于发送数据而言,r_tx_cnt_10_100信号是1bit的,不断在01变化,相当于一个时钟指示信号,通过这样的方式实现单沿传输,一个时钟只传输4bit,在下一个时钟再去传输延迟一拍数据的高4bit,这是因为用户进来的数据是8bit的。

genvar txd_i;
generate for(txd_i = 0 ;txd_i < 4 ; txd_i = txd_i + 1)
beginassign w_send_d1[txd_i] = i_speed1000 ? i_send_data[txd_i]     :  r_tx_cnt_10_100 == 0 ? i_send_data[txd_i] : ri_send_data[txd_i + 4];assign w_send_d2[txd_i] = i_speed1000 ? i_send_data[txd_i + 4] : r_tx_cnt_10_100 == 0 ? i_send_data[txd_i] : ri_send_data[txd_i + 4];ODDR #(.DDR_CLK_EDGE    ("OPPOSITE_EDGE"       ),.INIT            (1'b0                  ),.SRTYPE          ("SYNC"                ) ) ODDR_u (.Q               (o_txd[txd_i]          ),  .C               (w_txc                 ),.CE              (1                     ),.D1              (w_send_d1[txd_i]      ),    .D2              (w_send_d2[txd_i]      ),    .R               (0                     ),.S               (0                     ) );
end
endgenerate

二、上板效果

网口速率在这里更改
在这里插入图片描述
wireshark抓包和网络调试助手回环检测,一切正常

在这里插入图片描述
VIVADO上板通过ILA抓包:数据与发送数据一致
注:JTAG进行抓信号时,ILA频率要大于JTAG频率2.5倍,对于千兆而言不用管,但是抓百兆数据信号时,要调整一下JTAG的时钟频率!!

在这里插入图片描述

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

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

相关文章

虚拟DOM和真实DOM的区别

虚拟DOM&#xff08;Virtual DOM&#xff09;、DOM&#xff08;Real DOM&#xff09;是前端开发中常用的两种概念。 什么是真实DOM&#xff1f; ​ 真实DOM是浏览器中实际存在的DOM结构&#xff0c;它由浏览器解析HTML生成&#xff0c;并且直接与浏览器交互。当页面中的数据发…

【scala】使用gradle和scala构建springboot程序

零、版本说明: springboot: 2.7.18 使用log4j2&#xff0c;不使用springboot自带的logback scala版本&#xff1a;2.11 jackson版本&#xff1a;2.16.0 一、依赖&#xff1a; buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("…

什么是数据湖

什么是数据湖 数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建至关重要。关于什么是数据湖?有不同的定义。 Wikipedia…

北京WordPress建站公司

北京wordpress建站&#xff0c;就找北京wordpress建站公司 http://wordpress.zhanyes.com/beijing

【VSCode】解决远程配置jupyter notebook始终无法搜到kernel

问题 jupyter kernel一直无法选择&#xff0c;总是出现如下提示。反复点install/enable没有用处。 解决 首先确认Python Interpreter是否能正常选择。可能出现终端可以搜到conda env但vscode command palette中不显示的问题。如果不显示&#xff0c;尝试手动enable Python ex…

Oracle清理闪回日志

关于闪回日志的说明&#xff1a; 一旦关闭闪回&#xff0c;flashback recovery area中的闪回日志将自动全部删除 闪回日志在出现空间压力的情况下&#xff0c;oracle会自动删除闪回日志&#xff0c;否则有可能导致无法闪回到指定的时间点 参考文档&#xff1a; NOTE:305817.1…

Unity 切换场景前的进度条效果

废话不多说上代码&#xff0c;欢迎对 Unity有兴趣的伙伴一起探讨学习。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using TMPro;// 创建一个名为JDT的MonoBehaviour脚本&am…

20232831 2023-2024-2 《网络攻防实践》第4次作业

目录 20232831 2023-2024-2 《网络攻防实践》第4次作业1.实验内容2.实验过程&#xff08;1&#xff09;ARP缓存欺骗攻击&#xff08;2&#xff09;ICMP重定向攻击&#xff08;3&#xff09;SYN Flood攻击&#xff08;4&#xff09;TCP RST攻击&#xff08;5&#xff09;TCP会话…

设计模式---单例模式

目录 一、五种单例模式的实现方式 1.饿汉模式 2.饿汉枚举类型 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 二、JDK 中单例的体现 一、五种单例模式的实现方式 1.饿汉模式 public class Singleton1 implements Serializable {private Singleton1() {if (INSTANCE ! null) {thro…

R语言使用dietaryindex包计算NHANES数据多种营养指数(2)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法&#xff0c;将饮食摄入数据标准化为基于指数的饮食模式&#xff0c;从而能够评估流行病学和临床研究中对这些模式的遵守情况&#xff0c;从而促进精准营养。 该软件…

C/C++中重载函数取地址的方法

目录 1.现象 2.指定参数取函数地址 3.利用Qt的类QOverload 1.现象 函数重载在C/C编码中是非常常见的&#xff0c;但是我们在std::bind或std::function绑定函数地址的时候&#xff0c;直接取地址&#xff0c;程序编译就会报错&#xff0c;示例如下&#xff1a; class CFunc1…

【C++】map set

文章目录 1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set 的介绍3.1.2 set 的使用 3.2 map3.2.1 map 的介绍3.2.2 map 的使用 3.3 multiset3.3.1 multuset 的介绍3.3.2 multiset 的使用 3.4 multimap3.4.1 multimap 的介绍3.4.2 multimap 的使用 1. 关联式容器…

Docker安装xxl-job并整合到SpringBoot项目

1. 创建数据库 执行如下SQL语句创建相关表 CREATE database if NOT EXISTS xxl_job default character set utf8mb4 collate utf8mb4_general_ci; use xxl_job;SET NAMES utf8mb4; CREATE TABLE xxl_job_info (id int(11) NOT NULL AUTO_INCREMENT,job_group int(11) NOT NUL…

深入Python元编程:从基础到实践

一、引言 Python的元编程是一种强大的技术&#xff0c;允许程序员在运行时修改或扩展程序的行为。通过元编程&#xff0c;你可以控制类的创建、修改类的行为、操作函数和类等对象&#xff0c;甚至创建新的语法结构。这篇文章将引导你走进Python元编程的世界&#xff0c;从基础…

PyCharm代码一键格式化

前言 每次写完代码&#xff0c;就看见很多警告&#xff0c;乍一看还以为我又写了什么bug&#xff0c;原来是提示&#xff0c;啊放心了。可是我可见不得这些东西&#xff0c;因为代码里都是红红的下划线&#xff0c;好像在圈圈点点。。。 代码格式化 于是利用PyCharm里的快捷…

数据仓库——维度表特性

企业信息化工厂 数据集市中的一致性&#xff0c;由于企业信息化工厂的数据集市是从集成仓库中获得信息的&#xff0c;因此至少从维度建模的角度来看&#xff0c;一致性维护的问题减少了。尽管合并不同数据源的问题依然在&#xff0c;但是负担主要在设计者身上。尽管压力降低了…

【Go】六、函数

文章目录 1、函数的定义2、内存分析3、注意点4、函数数据类型5、自定义数据类型&#xff08;起别名&#xff09;6、支持对返回值命名 1、函数的定义 语法&#xff1a; func 函数名&#xff08;形参列表)&#xff08;返回值类型列表&#xff09;{执行语句..return 返回值列…

mac系统使用经验

mac安装brew brew是macos下的一个包管理工具&#xff0c;类似与centos的yum&#xff0c;ubuntu的apt-get等。 自动脚本(全部国内地址)&#xff08;在Mac os终端中复制粘贴回车下面这句话) /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/H…

PHP实现单列内容快速查重与去重

应用场景:excel一列内容比如身份证号&#xff0c;可能有重复的&#xff0c; 则用此工具快速查询那些重复及显示去重后内容。 使用&#xff1a;粘贴一列数据&#xff0c;然后提交发送。 <?php $tm "单列查重去重(粘贴Excel中1列内容查重)!";function tipx($str…

无人驾驶矿卡整体解决方案(5g物联网通信方案)

​无人驾驶矿卡是智能矿山的重要组成部分,通过远程操控替代人工驾驶,可以显著提高采矿效率和作业安全性。但要实现无人驾驶矿卡,需要依赖于可靠高效的通信网络,来传输现场视频、控制指令和运行数据。以下是某大型煤矿在部署无人驾驶矿卡时,所采用的星创易联物联网整体解决方案。…