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

一、前言

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.mzph.cn/bicheng/6464.shtml

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

相关文章

Linux内核深入学习 - 中断与异常(上)

中断与异常 中断通常被定义为一个事件&#xff1a;让事件改变处理器执行的指令顺序这样的事件&#xff0c;与CPU芯片内外部硬件电路产生的电信号相对应&#xff01; 中断通常分为同步中断与异步中断&#xff1a; 同步中断指的是当指令执行时&#xff0c;由CPU控制单元产生的…

力扣hot100:543. 二叉树的直径/108. 将有序数组转换为二叉搜索树

一、543. 二叉树的直径 LeetCode&#xff1a;543. 二叉树的直径 二叉树的直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。 遇到二叉树的问题很容易去直接用求解的目标去定义递归函数。但是仔细考虑&#xff0c;返回树的直径并不能向上传播。因此我们可以拆…

2024抖音直播带货-直播间拆解:抖店运营从入门到精通(56节课)

起号原理方式以及节点处理 类目的选择选品思路 付费流量投放原理 直播间进阶玩法 课程内容 直播间搭建标准自然起号(0-1)原理 方式 以及节点处理 老号重启(0-1)原理 方式 以及节点处理 账号在线人数稳定 原理 方式 以及节点处理 账号销售额放大 原理 方式 以及节点处理…

IoTDB 入门教程 基础篇⑨——TsFile导入导出工具

文章目录 一、前文二、准备2.1 准备导出服务器2.2 准备导入服务器 三、导出3.1 导出命令3.2 执行命令3.3 tsfile文件 四、导入4.1 上传tsfile文件4.2 导入命令4.3 执行命令 五、查询六、参考 一、前文 IoTDB入门教程——导读 数据库备份与迁移是数据库运维中的核心任务&#xf…

内核workqueue框架

workqueue驱动的底半部实现方式之一就是工作队列&#xff0c;作为内核的标准模块&#xff0c;它的使用接口也非常简单&#xff0c;schedule_work或者指定派生到哪个cpu的schedule_work_on。 还有部分场景会使用自定义的workqueue&#xff0c;这种情况会直接调用queue_work和qu…

探索C++模板类的奥秘:从基础到实践的深度之旅

目录 引言 一、模板类基础 A. 何为模板类&#xff1f; B. 模板类与普通类的区别 二、模板类实例化及特化 C. 实例化模板类 D. 模板类特化 三、模板类的应用与实战 E. 示例分析&#xff1a;栈模板类实现 结论 引言 在C编程的世界里&#xff0c;模板这一特性如同魔法般…

wpf转换器

WPF&#xff08;Windows Presentation Foundation&#xff09;中的转换器主要是指IValueConverter接口的实现&#xff0c;它用于在数据绑定过程中转换源数据和目标数据的类型或表示形式。这种机制使得开发者能够灵活地处理数据&#xff0c;特别是在用户界面&#xff08;UI&…

基于SkyEye运行Android——应用最为广泛的移动设备操作系统

01.Android简介 Android&#xff08;安卓&#xff09;是一种基于Linux内核&#xff08;不包含GNU组件&#xff09;的开源操作系统&#xff0c;最初由安迪鲁宾开发&#xff0c;主要支持手机。2005年8月由Google收购注资&#xff1b;2007年11月&#xff0c;Google与84家硬件制造…

【C语言】/*函数栈帧的创建和销毁*/

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

vue3--element-plus-抽屉文件上传和富文本编辑器

一、封装组件 article/components/ArticleEdit.vue <script setup> import { ref } from vue const visibleDrawer ref(false)const open (row) > {visibleDrawer.value trueconsole.log(row) }defineExpose({open }) </script><template><!-- 抽…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知&#xff0c;考试等管理需要&#xff0c;开发学校事务管理系统&#xff0c;maven管理依赖&#xff0c;mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

OpenCV(一) —— OpenCV 基础

1、OpenCV 简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个基于 BSD 许可开源发行的跨平台的计算机视觉库。可用于开发实时的图像处理、计算机视觉以及模式识别程序。由英特尔公司发起并参与开发&#xff0c;以 BSD 许可证授权发行&#xff0c…

网络知识点之—QoS

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c; 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

C++11:右值引用和左值引用

1.decltype decltype可以推导出一个表达式的类型&#xff0c;可以用这个类型定义变量。 测试代码 template<class T1,class T2> void test1(T1 &a,T2 & b) {decltype(a* b) ret;cout << typeid(ret).name() << endl; } 2.范围for void test2()…

上位机图像处理和嵌入式模块部署(树莓派4b部署java环境)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 通常我们都会认为java是部署在pc服务器上面的&#xff0c;或者是用java开发android应用程序。其实不然&#xff0c;java也可以部署在嵌入式开发板子…

前端工程化03-贝壳找房项目案例JavaScript常用的js库

4、项目实战&#xff08;贝壳找房&#xff09; 这个项目包含&#xff0c;基本的ajax请求调用,内容的渲染&#xff0c;防抖节流的基本使用&#xff0c;ajax请求工具类的封装 4.1、项目的接口文档 下述接口文档&#xff1a; 简述内容baseURL&#xff1a;http://123.207.32.32…

ESP32 烧录固件

第一步&#xff1a;下载固件 git clone --recursive https://github.com/espressif/esp-at.git 第二步&#xff1a;执行编译 在该目录执行 python build.py install 如图&#xff1a; 第三步&#xff1a;选择芯片 输入2 第四步&#xff1a;选择固件 输入1 第五步&#…

error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ......

运行程序时&#xff0c;报如上图所示错误&#xff0c;其中一条是&#xff1a; ReflectionProbe.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl osg::Object::Object(bool)" (__imp_??0ObjectosgQEAA_NZ) 报这个错误一般是因为…

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

揭秘Fabric交易流程:一文带你深入了解

随着区块链技术的日益普及&#xff0c;Hyperledger Fabric作为一种联盟链解决方案&#xff0c;受到了广泛关注。那么&#xff0c;Fabric的交易流程究竟是怎样的呢&#xff1f;本文将为您一一揭晓。 1. Fabric交易的参与方 客户端&#xff1a;交易流程的发起方&#xff0c;发起…