DE2-115 以太网通信之一88E1111网卡接收PC数据
想利用手头上的DE2-115 写一个关于以太网通信的驱动,经过了这么多天的实验调试终于有了一些认识。
1、我在观察网卡发送数据与接收数据的过程中发现,我从fpga上的一个网卡发送数据,然后另一个网卡接收数据,接收到的数据前面会有55h这8bit的数据。我从PC上发送数据,用fpga上的网卡接收数据,那么在接收到的数据前面会有55h,55h,55h,55h,55h,55h,55h,5dh这64bit的数据。那么如果55h这8bit数据是PHY发送时自动添加那么从PC上接收到的最后应该是55而不应该是5d。那么只能是网卡在接收的时候自动添加的55h这8bit位。那剩下的56bit应该是自己添加在数据中发送的。
2、我用signaltap ii设置的采样频率是50Mh,而数据的带宽是100Mhz。当我用小兵以太网测试仪设置的发送频率为1000000/次时,发现siganltap ii 中rx_data的数据很久才会变化,其余时刻都是零,但是用led通过对接收数据进行观察时就符合发送的频率,那么signal tap ii 很长时间观察不到数据的情景应该和时钟的设置有关。
3、有一段时间我从PC上发送数据,然后fpga上接收的数据,一段数据的个别位发生错误。等我把板子上两个phy的配置都设置正确时。就能正确的接收数据了。
4、signaltap 接收到的PC数据高四位与第四位颠倒,比如说如果发送的数据是56h 75h 83h 那么接收到的数据就是65h 57h 38h。说明数据在发送的过程中高先发送低四位后发送高四位。
5、88E1111 采用100M ,全双工 能从Pc接收数据的寄存器设置。
a、PHY的物理地址为10000,板子连接JP1的23.
b、读寄存器以及写寄存器。读寄存器主要是为了观察PHY配置是否正确。在调试的过程中正确的读寄存器非常重要。
代码如下
if(flag) begin
case(mdc_num)
:begin RST_N<=;mdio_reg<=mdio_reg+;if(mdio_reg&'hffffffff==32'hffffffff) begin RST_N<=; mdc_num<=;end
else mdc_num<=;end
:begin mdio_reg<='hffff_ffff__585a__0000_ffff_ffff;mdc_num<=2;end //选择page0 copper
:begin mdc_count<=mdc_count+;
if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end
else begin mdc_num<=;mdc_count<=;end end
:begin mdio_reg<='hffff_ffff__5812_0101_ffff_ffff;mdc_num<=6;end //4 100full duplex,802.3
:begin mdc_count<=mdc_count+; if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end
else begin mdc_num<=;mdc_count<=;end end
:begin mdio_reg<='hffff_ffff__5826__0400_ffff_ffff;mdc_num<=10;end //9自动主从,multi port device
:begin mdc_count<=mdc_count+; if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end else begin mdc_num<=;mdc_count<=;end end
:begin mdio_reg<='hffff_ffff__5842__0068_ffff_ffff;mdc_num<=14;end //16 power up
:begin mdc_count<=mdc_count+; if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end else begin mdc_num<=;mdc_count<=;end end
2 :begin mdio_reg<='hffff_ffff__5852_9051_ffff_ffff;mdc_num<=18;end //9051
:begin mdc_count<=mdc_count+;if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end else begin mdc_num<=;mdc_count<=;end end
:begin mdio_reg<='hffff_ffff__5802_a100_ffff_ffff;mdc_num<=20;end
:begin mdc_count<=mdc_count+; if(mdc_count<)begin mdio<=mdio_reg[]; wr_rd<=;mdio_reg<=mdio_reg<<;mdc_num<=;end else begin mdc_num<=;mdc_count<= ;end end
:begin mdc_count<=mdc_count+;if(mdc_count<)begin mdio<='b1; wr_rd<=1;mdc_num<=21;end
else begin flag<=;wr_rd<=;end end
endcase end
else
begin case(timenum)
:begin mdio_reg<='b11111111111111111111111111111111_01101000010001z1_zzzzzzzzzzzzzzzz_11111111111111111111111111111111;timenum<=1;wr_rd<=1;mdc_count<=0;end
:begin mdc_count<=mdc_count+; if(mdc_count<)begin mdio<=mdio_reg[]; mdio_reg<=mdio_reg<<;timenum<=;end else begin wr_rd<=;timenum<=;end end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;timenum<=;end
:begin data1[]<=mdio_in;mdc_count<=;timenum<=;end
:begin mdc_count<=mdc_count+;wr_rd<=;mdio<=;if(mdc_count=='h3f)mdc_count<=0;timenum<=0; end
endcase end
DE2-115 以太网通信之一88E1111网卡接收PC数据的更多相关文章
- ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 第39章 ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- S7-200系列PLC与WINCC以太网通信CP243i的实例
S7-200系列PLC与WINCC以太网通信CP243i的实例 ----选用大连德嘉国际电子www.dl-winbest.cn的CP243i作为连接S7-200的PPI口转以太网RJ45的接口转换器. ...
- AB PLC与西门子S7-1200以太网通信
前言:在项目实际应用中,经常会遇到两个不同厂家的PLC需要互联进行通信交换数据,由于各自的通信协议有所不同,实现起来的难度较大,通常的做法是借助第三方的网关.本文介绍的是AB PLC与西门子S7-12 ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- C语言实现ifconfig获取网卡接收和发送流量统计
在Windows下我们可以利用ipconfig命令获取网卡的相关信息,在Linux下命令是ifconfig 我们可以获取的信息更为丰富,其中包括网卡接收和发送的流量,用C语言实现这个命令并不是一件简单 ...
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...
- 微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理
1.WXML 页面代码 <!--index.wxml--> <view class="container"> <view class="us ...
随机推荐
- Tokitsukaze and Duel CodeForces - 1191E (博弈论)
大意: 给定01串, 两人轮流操作, Tokitsukaze先手. 每次操作可以选择长为$k$的区间, 全部替换为$0$或$1$, 若替换后同色则赢. 求最后结果. 先判断第一步是否能直接赢, 不能的 ...
- 移动端 H5 上拉刷新,下拉加载
http://www.mescroll.com/api.html#options 这里有几个重要的设置 1.down 下不启用下拉刷新是因为再手机端有默认的下拉刷新,会冲突,待解决 2.up 中的 a ...
- Java代理模式示例程序
Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...
- 字蛛webfont 安装及使用方法
先安装nodejs和git,比如放在D:/nodejs/ 文件夹 cmd 进入该文件夹,安装npm install express 安装 npm install font-spider -g 安装 ...
- 关于Objective C的私有函数
(1)很多从其他语言(例如C++)转到objective c的初学者,往往会问到一个问题,如何定义类的私有函数?这里的“私有函数”指的是,某个函数只能在类的内部使用,不能在类的外部,或者派生类内部使用 ...
- 如何对SAP Leonardo上的机器学习模型进行重新训练
Jerry之前的两篇文章介绍了如何通过Restful API的方式,消费SAP Leonardo上预先训练好的机器学习模型: 如何在Web应用里消费SAP Leonardo的机器学习API 部署在SA ...
- 阿里P7告诉你什么是java并发包、线程池、锁
并发包 java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序. 同步容器 同步容器只有包括Ve ...
- log:日志处理模块
为了更好的跟踪程序,我们通常都会使用日志,当然在golang中也提供了相应的模块. 基本使用 可以直接通过log来调用格式化输出的方法. package main import "log&q ...
- 2.数码相框-编码(ASCII/GB2312/Unicode)介绍
转载:https://www.cnblogs.com/lifexy/p/8485634.html 在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Uni ...
- 第一课 IP通信
我们的专业课:<IP通信>开课了. 在第一节课,我们初步了解了关于通信的知识,涨了知识,下面我就说一下第一节课所学所感. 在学习这门课的时候,需要我们认真预习,认真听课, ...