10G MAC层设计系列-(4)MAC TX模块

news/2024/5/19 7:14:48

一、前言

MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验,并与CRC值一块组成以太网帧。

二、模块设计

首先对输入的数据进行缓存,原因是在之后要进行封装MAC帧头,所以需要控制数据流的流动

FIFO_DATA_64X256 U_FIFO_DATA_64X256 (.clk      (i_clk              ), .srst     (i_rst              ), .din      (rs_axis_data       ), .wr_en    (rs_axis_valid      ), .rd_en    (r_fifo_data_rden   ), .dout     (w_fifo_data_out    ), .full     (w_fifo_data_full   ), .empty    (w_fifo_data_empty  )  
);FIFO_LEN_16X32 u_FIFO_LEN_16X32 (.clk      (i_clk                  ),.srst     (i_rst                  ),.din      (rs_axis_user[79:64]    ),.wr_en    (rs_axis_last           ),.rd_en    (r_fifo_len_rden        ), .dout     (w_fifo_len_out         ), .full     (w_fifo_len_full        ), .empty    (w_fifo_len_empty       )  
);FIFO_LEN_16X32 u_FIFO_TYPE_16X32 (.clk      (i_clk                  ),.srst     (i_rst                  ),.din      (rs_axis_user[15:0]     ),.wr_en    (rs_axis_last           ),.rd_en    (r_fifo_type_rden       ), .dout     (w_fifo_type_out        ), .full     (w_fifo_type_full       ), .empty    (w_fifo_type_empty      )  
);FIFO_KEEP_8X32 u_FIFO_KEEP_8X32 (.clk      (i_clk                  ), .srst     (i_rst                  ), .din      (rs_axis_keep           ), .wr_en    (rs_axis_last           ), .rd_en    (r_fifo_keep_rden       ),  .dout     (w_fifo_keep_out        ),  .full     (w_fifo_keep_full       ),  .empty    (w_fifo_keep_empty      )  
);

检测到帧长FIFO不为空之后,读取帧长、KEEP信息、TYPE信息,并根据帧长读取数据,在此过程中需要将数据转换成xgmii接口形式,并封装前导码、MAC地址、帧类型、尾部CRC。同时需要在帧起始加入起始符FB、帧结束需要加入结束符FD,在空闲时发送07.同时需要是用控制信号指示控制符。

always@(posedge i_clk,posedge i_rst)beginif(i_rst)ro_xgmii_txd <= {{8{8'h07}}};elseif(r_cnt == 0|| r_cnt == 1 || r_cnt == 2)ro_xgmii_txd <= {{8{8'h07}}};else if(r_cnt == 3)ro_xgmii_txd <= 64'hFB_55_55_55_55_55_55_55;else if(r_cnt == 4)ro_xgmii_txd <= {8'hd5,ri_set_target_mac,ri_set_source_mac[47:40]};else if(r_cnt == 5)ro_xgmii_txd <= {ri_set_source_mac[39:0],w_fifo_type_out,r_fifo_data_out_ff1[63:56]};// else if(r_cnt == 2)//     ro_xgmii_txd <= {w_fifo_type_out[7:0],w_fifo_data_out[63:8]};else if(r_cnt == w_fifo_len_out + 5)case(w_fifo_keep_out)8'b1111_1111:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:0],r_crc_result[31:24]};8'b1111_1110:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:8],r_crc_result[31:16]};8'b1111_1100:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:16],r_crc_result[31:8]};8'b1111_1000:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:24],r_crc_result[31:0]};8'b1111_0000:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:32],r_crc_result[31:0],8'hFD};8'b1110_0000:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:40],r_crc_result[31:0],8'hFD,{{8'h07}}};8'b1100_0000:ro_xgmii_txd <= {r_fifo_data_out_ff4[55:48],r_crc_result[31:0],8'hFD,{2{8'h07}}};8'b1000_0000:ro_xgmii_txd <= {r_crc_result[31:0],8'hFD,{3{8'h07}}};default     :ro_xgmii_txd <= 'd0;endcaseelse if(r_cnt == w_fifo_len_out + 6)case(w_fifo_keep_out)8'b1111_1111:ro_xgmii_txd <= {r_crc_result[23:0],8'hFD,{4{8'h07}}};8'b1111_1110:ro_xgmii_txd <= {r_crc_result[15:0],8'hFD,{5{8'h07}}};8'b1111_1100:ro_xgmii_txd <= {r_crc_result[7:0],8'hFD,{6{8'h07}}};8'b1111_1000:ro_xgmii_txd <= {8'hFD,{7{8'h07}}};// 8'b1111_0000:ro_xgmii_txd <= {8'hFD,{7{8'h07}}};// 8'b1110_0000:ro_xgmii_txd <= {8'hFD,{7{8'h07}}};// 8'b1100_0000:ro_xgmii_txd <= {r_fifo_data_out_ff3[55:48],r_crc_result,8'hFD,{2{8'h07}}};// 8'b1000_0000:ro_xgmii_txd <= {r_crc_result,8'hFD,{3{8'h07}}};default     :ro_xgmii_txd <= {{8{8'h07}}};endcase// else if(r_cnt == w_fifo_len_out + 5)//     case(w_fifo_keep_out)//         8'b1111_1111:ro_xgmii_txd <= {r_crc_result[7:0],8'hFD,{6{8'h07}}};//         8'b1111_1110:ro_xgmii_txd <= {r_crc_result[15:0],8'hFD,{5{8'h07}}};//         8'b1111_1100:ro_xgmii_txd <= {r_crc_result[7:0],8'hFD,{6{8'h07}}};//         8'b1111_1000:ro_xgmii_txd <= {8'hFD,{7{8'h07}}};//         default     :ro_xgmii_txd <= {8{8'h07}};//     endcase        elsero_xgmii_txd <= {r_fifo_data_out_ff4[55:0],r_fifo_data_out_ff3[63:56]};
end
//
always@(posedge i_clk,posedge i_rst)beginif(i_rst)ro_xgmii_txc <= 8'hff;elseif( r_cnt == 0 || r_cnt == 1 || r_cnt == 2)ro_xgmii_txc <= 8'b1111_1111;else if(r_cnt == 3)ro_xgmii_txc <= 8'b1000_0000;// else if(r_cnt == 2)//     ro_xgmii_txd <= {w_fifo_type_out[7:0],w_fifo_data_out[63:8]};// else if(r_cnt == w_fifo_len_out + 2)//     case(w_fifo_keep_out)//         8'b1111_1111:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1111_1110:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1111_1100:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1111_1000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1111_0000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1110_0000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1100_0000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         8'b1000_0000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//         default     :ro_xgmii_txd <= {r_fifo_data_out_ff2[55:0],r_fifo_data_out_ff1[63:56]};//     endcaseelse if(r_cnt == w_fifo_len_out + 5)case(w_fifo_keep_out)// 8'b1111_1111:ro_xgmii_txc <= {r_fifo_data_out_ff2[55:0],r_crc_result[31:24]};// 8'b1111_1110:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:8],r_crc_result[31:16]};// 8'b1111_1100:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:16],r_crc_result[31:8]};// 8'b1111_1000:ro_xgmii_txd <= {r_fifo_data_out_ff2[55:24],r_crc_result[31:0]};8'b1111_0000:ro_xgmii_txc <= 8'b0000_0001;8'b1110_0000:ro_xgmii_txc <= 8'b0000_0011;8'b1100_0000:ro_xgmii_txc <= 8'b0000_0111;8'b1000_0000:ro_xgmii_txc <= 8'b0000_1111;default     :ro_xgmii_txc <= 'd0;endcaseelse if(r_cnt == w_fifo_len_out + 6)case(w_fifo_keep_out)8'b1111_1111:ro_xgmii_txc <= 8'b0001_1111;8'b1111_1110:ro_xgmii_txc <= 8'b0011_1111;8'b1111_1100:ro_xgmii_txc <= 8'b0111_1111;8'b1111_1000:ro_xgmii_txc <= 8'b1111_1111;default     :ro_xgmii_txc <= 8'b1111_1111;endcase        elsero_xgmii_txc <= 8'b0000_0000;
end

三、仿真图


http://www.mrgr.cn/p/51216536

相关文章

论文辅助笔记:TimeLLM

1 __init__ 2 forward 3 FlattenHead 4 ReprogrammingLayer

Spring Cloud学习笔记(Hystrix):基本知识和代码示例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、Hystrix简介2、Hystrix架构2.1、Hytrix的入口2.2、toObservable()流程 3、Hsytrix的简单样例3.1、dependency3.2、代码样例 1、Hystrix简介 Hytrix是用于处理处理延迟和容错的开源库&#xff0c;包含服务隔离…

W801学习笔记十九:古诗学习应用——下

经过前两章的内容&#xff0c;背唐诗的功能基本可以使用了。然而&#xff0c;仅有一种模式未免显得过于单一。因此&#xff0c;在本章中对其进行扩展&#xff0c;增加几种不同的玩法&#xff0c;并且这几种玩法将采用完全不同的判断方式。 玩法一&#xff1a;三分钟限时挑战—…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础&#xff0c;引入了一系列突破性的功能&#xff0c;有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑&#xff0c;为质量…

[1678]旅游景点信息Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅游景点信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

芯片与扫地机器人

芯片与扫地机器人石头科技在V20扫地机器人上采用了石头系列产品中首创的“PreciSense创新石头星阵领航系统”避障方案,即3D ToF+RGB的动态避障模式,这也是石头首款搭载“双光源固态激光雷达导航避障”的扫地机器人产品。石头V20的避障系统由两颗可以实现38400Hz的超精准建图采…

[软件工具]批量根据文件名查找PDF文件复制到指定的地方,如何批量查找文件复制,多个文件一起查找复制

多个文件目录下有多个PDF, 如何根据文件名一个清单&#xff0c;一次性查找多个PDF复制保存 如图所示下面有7个文件夹&#xff0c;每个文件夹里面有几百上千PDF文件 如何从上千个PDF文件中一次性快速找到我们要的文件呢 &#xff1f; 我们需要找到文件名是这样的PDF&#xff0…

阿里面试:事务ACID,底层是如何实现的?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

1. 深度学习笔记--神经网络中常见的激活函数

1. 介绍 每个激活函数的输入都是一个数字&#xff0c;然后对其进行某种固定的数学操作。激活函数给神经元引入了非线性因素&#xff0c;如果不用激活函数的话&#xff0c;无论神经网络有多少层&#xff0c;输出都是输入的线性组合。激活函数的意义在于它能够引入非线性特性&am…

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

docker学习笔记3:VmWare CentOS7安装与静态ip配置

文章目录 一、安装CentOS71、下载centos镜像2、安装二、设置静态ip三、xshell连接centos本专栏的docker环境是在centos7里安装,因此首先需要会安装centos虚拟机。 本篇博客介绍如何在vm虚拟机里安装centos7。 一、安装CentOS7 1、下载centos镜像 推荐清华源,下载如下版本 …

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术&#xff0c;它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间&#xff0c;而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处&#xff1a; 内…

多器官和多模态图像的通用异常检测模型-不受特定模型约束

文章目录 A Model-Agnostic Framework for Universal Anomaly Detection of Multi-organ and Multi-modal Images摘要方法实验结果 A Model-Agnostic Framework for Universal Anomaly Detection of Multi-organ and Multi-modal Images 摘要 背景与挑战&#xff1a;深度学习在…

anaconda下载keras包

——anaconda prompt中下载 打开anaconda prompt,切换到/激活对应的环境 通过 conda install -c conda-forge keras 安装 keras 通过 pip list 查看现有列表确认是否安装成功——pycharm中下载 点击python软件包,输入需要下载的软件包,选择版本后安装即可

仿知乎网站问答源码,开源版

仿知乎网站问答源码&#xff0c;开源版 需要一定动手能力 发文章&#xff0c;发视频&#xff0c;发想法&#xff0c;提问回答&#xff0c;注册登录 开发环境 使用技术&#xff1a;springbootthymeleafRedis&#xff1b; 开发环境&#xff1a;tomcat8.0&#xff0c;jdk8.0, ID…

DevOps,CI,CD,自动化简单介绍

原创 追逐时光者前言随着企业应用的不断迭代和发展,应用的版本发布可能涉及了多个技术团队(如PC端,移动端,小程序端等)。随之而来的问题是应用发布也成为了一项高风险,高压力的操作过程。并且应用的开发迭代的沟通,测试成本也大大的变得不可控。这时候就出现了DevOps管…

java中http调用组件深入详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…

数据结构===二叉树

文章目录 概要二叉树的概念分类存储遍历前序中序后序 小结 概要 简单写下二叉树都有哪些内容&#xff0c;这篇文章要写什么 二叉树的概念分类&#xff0c;都有哪些二叉树遍历 对一个数据结构&#xff0c;最先入手的都是定义&#xff0c;然后才会有哪些分类&#xff0c;对二叉…

File contains parsing errors: file:///etc/yum.repos.d/nginx.repo报错解决,文件配置出现问题

执行yum指令出现以下错误&#xff1a; 解决方案&#xff1a;yum的配置文件出现问题&#xff0c; 先删除yum.repos.d目录下所有文件 rm -f /etc/yum.repos.d/* 然后重新下载阿里的资源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.…