交换机/路由器实验:实验4交换计数器实现

最前面的话

在寝室隔离之后的每日生活就变成了睡觉、捅鼻子和等志愿者帮忙送饭了。不知道为什么,在寝室里就根本不想学习,然后就疯狂摆烂…希望疫情可以早点过去吧,有点想念在教室里自习的时光了。

说些什么

从上一次和老师见完面之后,我就发觉自己有时会陷入一种空落落的感觉,那种感觉不是空虚,而是失落。
然后这周因为疫情的原因只好把和老师的见面推到了下周,如果下周还不行的话就有点麻烦了hhh

实验详情

说明

由于是面向HNU的编程,所以我就讲一下本次代码怎么糊弄过验收,具体详细的知识点的话你们就自己查一下资料吧

第一部分代码

这部分代码是需要你加在module UM(XXXXXX);的XXXXXX里面的,就是增加了帧数量,报文数量和字节数量的定义,然后都是32位宽的

	//----------------LAB4 control------------------//
	
		output	reg	[31:0] zh_num, 	//帧数量
		output	reg	[31:0] bw_num, 	//报文数量
		output	reg	[31:0] zj_num, 	//字节数量

如果你是把这串代码加在最后面的话记得在之前最后定义的地方加上逗号,然后把定义字节数量后面的逗号删除了。就感觉和C++里面结构体的定义挺相似的。

第二部分代码

第二部分代码的话就是分成了两个部分,第一个部分是帧数计数器部分,第二个部分是报文和字节计数器
帧数计数器的核心就是在收到来自外部端口2的数据时判断是不是报文头,如果是的话那么帧数+1
有效字节和报文计数器的核心就是在收到来自外部端口2的数据时报文数+1,有效字节数加上对应的数目:有效字节保存在[135:132],而由于有效字节数是1-16,而二进制只能表示0-15,因此需要额外+1
这两个计数器代码的详细注释我直接加在代码里面了,应该挺容易理解的

//------------------LAB4计数器实验代码-----------//
//帧数的计数器,如果是来自端口2的报文头则计数+1
always@(posedge clk or negedge reset)	
	if(!reset)
		begin
			zh_num<=32'b0; //初始化32位二进制0
		end
	else
		begin
			if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b101)&&(cdp2um_data[131:128]==4'b0001))
			//p2um_data_valid是数据有效指示,来自CDP input_ctrl,高有效
			//138:136是头尾标识
			//131:128是输入端口号 //b0001表示外部端口2(逻辑端口1)
				zh_num<=zh_num+1'b1;
			else
				zh_num<=zh_num;
		end

//有效字节数和报文数的计数器		
always@(posedge clk or negedge reset)
	if(!reset)
		begin
			bw_num<=32'b0;
			zj_num<=32'b0;
		end
	else
		begin
			if((cdp2um_data_valid==1'b1)&&(input_port_reg==4'b0001))
			//p2um_data_valid是数据有效指示,来自CDP input_ctrl,高有效
			//b0001表示外部端口2(逻辑端口1)
				begin
					zj_num<=zj_num+1'b1+cdp2um_data[135:132];//135:132是有效字节数 //+1是因为有效字节应为1-16
					bw_num<=bw_num+1'b1;
				end
			else
				begin
					zj_num<=zj_num;
					bw_num<=bw_num;
				end
		end

编译结果

在这里插入图片描述

观察波形

添加节点zh_num,bw_num,zj_num,具体操作参考
交换机/路由器实验:实验3信号的提取,这里就不赘述了
然后进行ping操作后就可以看到这三个的结果了,ping操作的过程参考交换机/路由器实验:实验2简单交换实验(2进3出),这里也不进行赘述了
在这里插入图片描述

验收

把这个波的数据展示给老师,然后解释一下代码原理就可以了。

实验思考

在真实的交换机设备中这类信息都可以称为管理信息。一般会有管理信息库(MIB,ManagementInformationBase)来综合管理。作为交换设备,还有那些性能数据是关键的数据。硬件中如何获取、保存、刷新?

关键性能数据:
硬件之间通信的速度,信息交换的分组格式,对于信息的存储能力等。
•背板带宽:是交换机接口处理器或接口卡和数据总线间所能吞吐的最大数据量,标志了交换机总的数据
交换能力,单位为Gbps。背板带宽决定了各板卡(包括可扩展插槽中尚未安装的板卡)与交换引擎间连接带宽的最高上限。
•包转发率:标志了交换机转发数据包能力的大小。是指交换机每秒可以转发多少个数据包(Mpps)。
•交换机端口数量及类型。
•支持网络管理的协议和方法。
•路由表大小、访问控制列表大小、对路由协议的支持情况、对组播协议的支持情况等。

硬件中如何获取、保存和刷新:
通过类似“抓包”的流程截取信息,使一些指令在硬件层面执行从而使硬件中的信息可视化。将硬件中信息进行可视化(如电信号转化为波形图),就可以输出保存了。在代码中添加合适的控制时序程序,利用系统时钟来对信息进行周期性的获取然后将旧的信息覆盖,实现信息的刷新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值