当前位置: 首页 > news >正文

扬中网站网站建设深圳住房与建设网站

扬中网站网站建设,深圳住房与建设网站,百度的特点和优势,京东网站的建设与发展前景在之前的章节中,笔者就UDP、ICMP、IP、ARP、MAC层以及巨型帧等做了详细介绍以及代码实现及仿真,从本章节开始,笔者将就各个模块组合在一起,实现UDP协议栈的整体收发,在实现模块的整体组合之前,还需要考虑一…

在之前的章节中,笔者就UDP、ICMP、IP、ARP、MAC层以及巨型帧等做了详细介绍以及代码实现及仿真,从本章节开始,笔者将就各个模块组合在一起,实现UDP协议栈的整体收发,在实现模块的整体组合之前,还需要考虑一个问题:
UDP(传输层) 和 ICMP(网络层) 层级不同。
IP(网络层) 和 ARP(网络接口层) 层级不同。
ARP 是网络接口层协议,直接作用于以太网帧;IP 和 ICMP 是网络层协议,负责逻辑寻址与控制。
但UDP和ICMP的报文均封装在IP数据包中。在一个协议栈中,IP收发器只有一个,当FPGA的ICMP报文和UDP报文同时要进行发送时,则必需要缓存其中一个数据报文,等待另一个数据报文传输完毕,再进行缓存数据报文的发送,以及当UDP报文和ICMP报文缓存区存在有效载荷时,提示上一级,暂缓数据的发送,避免多帧数据,造成缓存的混乱,整体实现的缓存代码,起始是比较简单的,没有涉及太过复杂的处理,UDP和ICMP都有对应的数据缓存FIFO,且二者是不混合使用的,所以处理逻辑简单,同理IP报文和ARP报文也是如此,而在FPGA端,起始ICMP报文和ARP报文的发送量是远远少于UDP报文的,同理也少于IP报文,所以报文的仲裁处理是较为简单的。
如下图所示,是仲裁处理代码的工作示意框图
在这里插入图片描述
在数据缓存区,由两个FIFO组成,一个是数据报文,另一个FIFO则是缓存本帧的数据长度以及报文类型,因为这是一个通用的仲裁处理,不考虑是在仲裁UDP/ICMP还是IP/ARP。所以报文类型无法通过A包缓存区和B包缓存器进行直接判定。
例化FIFO如下面代码所示,分别例化A、B组即可

FIFO_8X256 FIFO_8X256_UA (.clk            (i_clk              ),.din            (ri_data_A          ),.wr_en          (ri_valid_A         ),.rd_en          (r_fifo_rden_A      ),.dout           (w_fifo_dout_A      ),.full           (),  .empty          (w_fifo_empty_A     )
);FIFO_32X16 FIFO_32X16_UA (.clk            (i_clk              ),.din            ({ri_type_A,ri_len_A}),.wr_en          (ri_valid_A         ),.rd_en          (w_type_rd_A        ),.dout           (w_type_len_A       ),.full           (),  .empty          ()
);

关于仲裁比较简单,当判断某一个缓存区的空心号为低时,则标记指示信号、如下面代码所示

always@(posedge i_clk,posedge i_rst)
beginif(i_rst)r_arbiter <= 2'b00;else if(ro_trans_last)r_arbiter <= 2'b00;else if(!w_fifo_empty_A && r_arbiter == 2'b00 && r_cnt == 'd10)r_arbiter <= 2'b01;else if(!w_fifo_empty_B && r_arbiter == 2'b00 && r_cnt == 'd10)r_arbiter <= 2'b11;
end

即根据指示信号的具体值,判断读取哪一个缓存区,而ro_trans_last标志着该缓冲区本次读取完毕的的指示信号为ro_trans_last,即当最后一个数据输出给下一级模块,则表示本次仲裁读取完毕。关于输出trans总线,根据读取的是哪一个缓冲区,进行FIFO数据数据的复制即可,以及类型、长度、都从FIFO中对读取,而ro_trans_last拉高则是在本次读取的数据长度等于FIOF中缓存的本帧数据长度信息确定。
而r_cnt变量,是对两帧数据的输出进行一定间隔处理,降低处理压力,后续会根据实际情况进行间隔处理。
关于流程图中的Frame_refuse,即帧拒绝信号,指示上一级模块,暂时不要进行数据的发送,
其判定逻辑为A、B缓冲区都存在有效载荷,如下代码所示

always@(posedge i_clk,posedge i_rst)
beginif(i_rst)ro_refuse_rec <= 'b0;else if(ro_refuse_rec == 'b1 && r_arbiter == 2'b11 && (w_fifo_empty_B || w_fifo_empty_A))ro_refuse_rec <= 'b0;else if(r_arbiter == 2'b01 && !w_fifo_empty_B)ro_refuse_rec <= 'b1;
end

至此,本模块的逻辑已经基本介绍完毕,接下来进行代码仿真测试。
仿真测试条件如下,给接收端口A总线以及接收端口B总线输入相同数据,而数据报文类型不同,观察输出是否正确,以及拒绝接收的指示信号是否正确。
接下来的代码仿真,都使用modelsim仿真
在这里插入图片描述
可以看出,由于同时输入了A、B数据包,refuse_rec信号进行了拉高,而由于判端逻辑中A包的数据读取是优先于B包数据读取的,所以先进行了A包数据的输出。
数据输出正确,测试通过。
在下一章节中,笔者将就之前的一个问题进行讨论,即巨型帧问题,之前的代码实现了接收IP分片,那么用户想要发送巨型帧时,应该如何处理呢,笔者将就这个问题进行讨论以及代码实现

http://www.dtcms.com/a/493385.html

相关文章:

  • 手机网站怎么做公司logo设计公司logo设计
  • 网站建设用那个软件五种常用的网站推广方法
  • 中山网站建设是什么小学生课程同步做网站软件
  • 网上商店也叫做seo两个域名一个网站有影响
  • 企业网站和展板建设重庆seo关键词优化服务
  • 如何判断网站是竞价站广东省建设安全管理协会网站
  • 怎么注册网站域名一般网站建设需求有哪些
  • 如何建立一个网站主页建设企业网站公司价格
  • 网站前期策划天元建设集团有限公司招聘2022
  • 专业网站设计模板常见的网站空间服务商
  • 集团公司做网站简历制作专业机构
  • 简述网站建设与维护泉州专业网站建设费用
  • 十堰微网站建设深圳安全教育平台
  • 怀柔高端网站建设wordpress 值班功能
  • 手机wap网站用什么语言开发网络营销的机遇和挑战
  • 网站备案收费wordpress cms 中文
  • 即墨网站建设哪里有乐清招聘网
  • 网站鼠标经过图片代码人脉推广app
  • 上海设计网站方法做营销的网站建设
  • 建设教育工程网站天津网站营销
  • 网站建站报价单wikidot怎么建设网站
  • 建设工程知识类网站深圳市羽堂品牌设计顾问有限公司
  • 网站建设课程设计内容佛山北京网站建设
  • 织梦网站怎么做新闻导航页赣州网站建设江西网站建设
  • 怎样做软件网站建设网络营销分析报告
  • 求一个自己做的网站链接网站mssql 导出数据
  • 人人网站建设方案书大淘客做网站
  • 上海移动端网站建设四网一体网站建设方案
  • 沈阳市建设工程安全监督站网站有域名如何建网站
  • 网站ipv6改造怎么做 网页代码刚刚地震最新消息今天